Skip to content

Commit af4902a

Browse files
authored
Merge pull request tylertreat#105 from ruxandraburtica/method-getting-project-ids
Add method getting projects
2 parents 329670d + 82eb0b8 commit af4902a

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

bigquery/client.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,20 @@ def get_client(project_id=None, credentials=None,
148148
return BigQueryClient(bq_service, project_id, swallow_results)
149149

150150

151+
def get_projects(bq_service):
152+
"""Given the BigQuery service, return data about all projects."""
153+
projects_request = bq_service.projects().list().execute()
154+
155+
projects = []
156+
for project in projects_request.get('projects', []):
157+
project_data = {
158+
'id': project['id'],
159+
'name': project['friendlyName']
160+
}
161+
projects.append(project_data)
162+
return projects
163+
164+
151165
def _get_bq_service(credentials=None, service_url=None):
152166
"""Construct an authorized BigQuery service object."""
153167

bigquery/tests/test_client.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,39 @@ def test_initialize_json_key_file_without_project_id(self, mock_open, mock_build
214214
self.assertEquals(json_key['project_id'], bq_client.project_id)
215215

216216

217+
class TestGetProjectIds(unittest.TestCase):
218+
219+
def test_get_project_ids(self):
220+
mock_bq_service = mock.Mock()
221+
mock_bq_service.projects().list().execute.return_value = {
222+
'kind': 'bigquery#projectList',
223+
'projects': [
224+
{
225+
'friendlyName': 'Big Query Test',
226+
'id': 'big-query-test',
227+
'kind': 'bigquery#project',
228+
'numericId': '1435372465',
229+
'projectReference': {'projectId': 'big-query-test'}
230+
},
231+
{
232+
'friendlyName': 'BQ Company project',
233+
'id': 'bq-project',
234+
'kind': 'bigquery#project',
235+
'numericId': '4263574685796',
236+
'projectReference': {'projectId': 'bq-project'}
237+
}
238+
],
239+
'totalItems': 2
240+
}
241+
242+
projects = client.get_projects(mock_bq_service)
243+
expected_projects_data = [
244+
{'id': 'big-query-test', 'name': 'Big Query Test'},
245+
{'id': 'bq-project', 'name': 'BQ Company project'}
246+
]
247+
self.assertEqual(projects, expected_projects_data)
248+
249+
217250
class TestQuery(unittest.TestCase):
218251

219252
def setUp(self):

0 commit comments

Comments
 (0)