Skip to content

Commit 4741984

Browse files
author
Bill Prin
committed
Add Parent Field to Resource Manager
1 parent 7f64d75 commit 4741984

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

resource_manager/google/cloud/resource_manager/project.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def __init__(self, project_id, client, name=None, labels=None):
5858
self.number = None
5959
self.labels = labels or {}
6060
self.status = None
61+
self.parent = None
6162

6263
def __repr__(self):
6364
return '<Project: %r (%r)>' % (self.name, self.project_id)
@@ -85,6 +86,8 @@ def set_properties_from_api_repr(self, resource):
8586
self.number = resource['projectNumber']
8687
self.labels = resource.get('labels', {})
8788
self.status = resource['lifecycleState']
89+
if 'parent' in resource:
90+
self.parent = resource['parent']
8891

8992
@property
9093
def full_name(self):
@@ -202,7 +205,16 @@ def update(self, client=None):
202205
"""
203206
client = self._require_client(client)
204207

205-
data = {'name': self.name, 'labels': self.labels}
208+
data = {}
209+
if self.name:
210+
data['name'] = self.name
211+
212+
if self.labels:
213+
data['labels'] = self.labels
214+
215+
if self.parent:
216+
data['parent'] = self.parent
217+
206218
resp = client._connection.api_request(
207219
method='PUT', path=self.path, data=data)
208220
self.set_properties_from_api_repr(resp)

resource_manager/unit_tests/test_project.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def test_constructor_defaults(self):
3535
self.assertIsNone(project.number)
3636
self.assertEqual(project.labels, {})
3737
self.assertIsNone(project.status)
38+
self.assertIsNone(project.parent)
3839

3940
def test_constructor_explicit(self):
4041
client = object()
@@ -49,6 +50,7 @@ def test_constructor_explicit(self):
4950
self.assertIsNone(project.number)
5051
self.assertEqual(project.labels, LABELS)
5152
self.assertIsNone(project.status)
53+
self.assertIsNone(project.parent)
5254

5355
def test_from_api_repr(self):
5456
client = object()
@@ -57,18 +59,22 @@ def test_from_api_repr(self):
5759
PROJECT_NUMBER = 12345678
5860
PROJECT_LABELS = {'env': 'prod'}
5961
PROJECT_LIFECYCLE_STATE = 'ACTIVE'
62+
PARENT = {'type': 'organization', 'id': 433637338579}
63+
6064
resource = {'projectId': PROJECT_ID,
6165
'name': PROJECT_NAME,
6266
'projectNumber': PROJECT_NUMBER,
6367
'labels': PROJECT_LABELS,
64-
'lifecycleState': PROJECT_LIFECYCLE_STATE}
68+
'lifecycleState': PROJECT_LIFECYCLE_STATE,
69+
'parent': PARENT}
6570
project = self._get_target_class().from_api_repr(resource, client)
6671
self.assertEqual(project.project_id, PROJECT_ID)
6772
self.assertEqual(project._client, client)
6873
self.assertEqual(project.name, PROJECT_NAME)
6974
self.assertEqual(project.number, PROJECT_NUMBER)
7075
self.assertEqual(project.labels, PROJECT_LABELS)
7176
self.assertEqual(project.status, PROJECT_LIFECYCLE_STATE)
77+
self.assertEqual(project.parent, PARENT)
7278

7379
def test_full_name(self):
7480
PROJECT_ID = 'project-id'
@@ -94,6 +100,10 @@ def test_create(self):
94100
'name': 'Project Name',
95101
'labels': {},
96102
'lifecycleState': 'ACTIVE',
103+
'parent': {
104+
'type': 'organization',
105+
'id': 433637338589
106+
}
97107
}
98108
connection = _Connection(PROJECT_RESOURCE)
99109
client = _Client(connection=connection)
@@ -123,6 +133,10 @@ def test_reload(self):
123133
'name': 'Project Name',
124134
'labels': {'env': 'prod'},
125135
'lifecycleState': 'ACTIVE',
136+
'parent': {
137+
'type': 'organization',
138+
'id': 433637338579
139+
}
126140
}
127141
connection = _Connection(PROJECT_RESOURCE)
128142
client = _Client(connection=connection)
@@ -183,6 +197,10 @@ def test_update(self):
183197
'name': PROJECT_NAME,
184198
'labels': LABELS,
185199
'lifecycleState': 'ACTIVE',
200+
'parent': {
201+
'type': 'organization',
202+
'id': 433637338589
203+
}
186204
}
187205
connection = _Connection(PROJECT_RESOURCE)
188206
client = _Client(connection=connection)
@@ -211,6 +229,10 @@ def test_delete_without_reload_data(self):
211229
'name': 'Project Name',
212230
'labels': {'env': 'prod'},
213231
'lifecycleState': 'ACTIVE',
232+
'parent': {
233+
'type': 'organization',
234+
'id': 433637338579
235+
}
214236
}
215237
connection = _Connection(PROJECT_RESOURCE)
216238
client = _Client(connection=connection)
@@ -234,6 +256,10 @@ def test_delete_with_reload_data(self):
234256
'name': 'Project Name',
235257
'labels': {'env': 'prod'},
236258
'lifecycleState': 'ACTIVE',
259+
'parent': {
260+
'type': 'organization',
261+
'id': 433637338579
262+
}
237263
}
238264
DELETING_PROJECT = PROJECT_RESOURCE.copy()
239265
DELETING_PROJECT['lifecycleState'] = NEW_STATE = 'DELETE_REQUESTED'
@@ -268,6 +294,10 @@ def test_undelete_without_reload_data(self):
268294
'name': 'Project Name',
269295
'labels': {'env': 'prod'},
270296
'lifecycleState': 'DELETE_REQUESTED',
297+
'parent': {
298+
'type': 'organization',
299+
'id': 433637338579
300+
}
271301
}
272302
connection = _Connection(PROJECT_RESOURCE)
273303
client = _Client(connection=connection)
@@ -291,6 +321,10 @@ def test_undelete_with_reload_data(self):
291321
'name': 'Project Name',
292322
'labels': {'env': 'prod'},
293323
'lifecycleState': 'DELETE_REQUESTED',
324+
'parent': {
325+
'type': 'organization',
326+
'id': 433637338579
327+
}
294328
}
295329
UNDELETED_PROJECT = PROJECT_RESOURCE.copy()
296330
UNDELETED_PROJECT['lifecycleState'] = NEW_STATE = 'ACTIVE'

0 commit comments

Comments
 (0)