Skip to content

Commit cc63321

Browse files
committed
Renaming project -> new_project and implementing fetch_project.
This is to make the distinction clear between a Resource Manager API request and object creation.
1 parent 39bc4a8 commit cc63321

File tree

4 files changed

+56
-11
lines changed

4 files changed

+56
-11
lines changed

docs/resource-manager-api.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ Here's a quick example of the full life-cycle:
2828
... print(project)
2929
3030
>>> # Create a new project
31-
>>> new_project = client.project('your-project-id-here',
32-
... name='My new project)
31+
>>> new_project = client.new_project('your-project-id-here',
32+
... name='My new project)
3333
>>> new_project.create()
3434
3535
>>> # Update an existing project

gcloud/resource_manager/client.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def from_service_account_p12(cls, *args, **kwargs):
7878
'Resource Manager API. Only user '
7979
'credentials can be used.')
8080

81-
def project(self, project_id, name=None, labels=None):
81+
def new_project(self, project_id, name=None, labels=None):
8282
"""Creates a :class:`.Project` bound to the current client.
8383
8484
Use :meth:`Project.reload() \
@@ -105,6 +105,24 @@ def project(self, project_id, name=None, labels=None):
105105
return Project(project_id=project_id,
106106
client=self, name=name, labels=labels)
107107

108+
def fetch_project(self, project_id):
109+
"""Get an existing project by ID.
110+
111+
.. note::
112+
113+
If the project does not exist, this will raise a
114+
:class:`NotFound <gcloud.exceptions.NotFound>` error.
115+
116+
:type project_id: str
117+
:param project_id: The ID for this project.
118+
119+
:rtype: :class:`.Project`
120+
:returns: A :class:`.Project` with metadata fetched from the API.
121+
"""
122+
project = self.new_project(project_id)
123+
project.reload()
124+
return project
125+
108126
def list_projects(self, filter_params=None, page_size=None):
109127
"""List the projects visible to this client.
110128

gcloud/resource_manager/project.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ class Project(object):
2424
.. note::
2525
2626
A :class:`Project` can also be created via
27-
:meth:`Client.project() \
28-
<gcloud.resource_manager.client.Client.project>`
27+
:meth:`Client.new_project() \
28+
<gcloud.resource_manager.client.Client.new_project>`
2929
3030
To manage labels on a :class:`Project`::
3131
3232
>>> from gcloud import resource_manager
3333
>>> client = resource_manager.Client()
34-
>>> project = client.project('purple-spaceship-123')
34+
>>> project = client.new_project('purple-spaceship-123')
3535
>>> project.labels = {'color': 'purple'}
3636
>>> project.labels['environment'] = 'production'
3737
>>> project.update()
@@ -139,9 +139,9 @@ def reload(self, client=None):
139139
140140
This method will reload the newest metadata for the project. If you've
141141
created a new :class:`Project` instance via
142-
:meth:`Client.project() \
143-
<gcloud.resource_manager.client.Client.project>`, this method will
144-
retrieve project metadata.
142+
:meth:`Client.new_project() \
143+
<gcloud.resource_manager.client.Client.new_project>`,
144+
this method will retrieve project metadata.
145145
146146
.. warning::
147147

gcloud/resource_manager/test_client.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,22 +98,49 @@ def test_from_service_account_p12_factory(self):
9898
with self.assertRaises(NotImplementedError):
9999
klass.from_service_account_p12()
100100

101-
def test_project_factory(self):
101+
def test_new_project_factory(self):
102102
from gcloud.resource_manager.project import Project
103103

104104
credentials = _Credentials()
105105
client = self._makeOne(credentials=credentials)
106106
project_id = 'project_id'
107107
name = object()
108108
labels = object()
109-
project = client.project(project_id, name=name, labels=labels)
109+
project = client.new_project(project_id, name=name, labels=labels)
110110

111111
self.assertTrue(isinstance(project, Project))
112112
self.assertEqual(project._client, client)
113113
self.assertEqual(project.project_id, project_id)
114114
self.assertEqual(project.name, name)
115115
self.assertEqual(project.labels, labels)
116116

117+
def test_fetch_project(self):
118+
from gcloud.resource_manager.project import Project
119+
120+
project_id = 'project-id'
121+
project_number = 123
122+
project_name = 'Project Name'
123+
labels = {'env': 'prod'}
124+
project_resource = {
125+
'projectId': project_id,
126+
'projectNumber': project_number,
127+
'name': project_name,
128+
'labels': labels,
129+
'lifecycleState': 'ACTIVE',
130+
}
131+
132+
credentials = _Credentials()
133+
client = self._makeOne(credentials=credentials)
134+
# Patch the connection with one we can easily control.
135+
client.connection = _Connection(project_resource)
136+
137+
project = client.fetch_project(project_id)
138+
self.assertTrue(isinstance(project, Project))
139+
self.assertEqual(project._client, client)
140+
self.assertEqual(project.project_id, project_id)
141+
self.assertEqual(project.name, project_name)
142+
self.assertEqual(project.labels, labels)
143+
117144
def test_list_projects_return_type(self):
118145
from gcloud.resource_manager.client import _ProjectIterator
119146

0 commit comments

Comments
 (0)