42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
#!/usr/bin/env python
|
|
"""The BigQuery CLI project client library."""
|
|
|
|
from typing import Optional
|
|
|
|
from googleapiclient import discovery
|
|
|
|
from utils import bq_processor_utils
|
|
|
|
|
|
def list_project_refs(apiclient: discovery.Resource, **kwds):
|
|
"""List the project references this user has access to."""
|
|
return list(
|
|
map(
|
|
bq_processor_utils.ConstructObjectReference,
|
|
list_projects(apiclient, **kwds),
|
|
)
|
|
)
|
|
|
|
|
|
def list_projects(
|
|
apiclient: discovery.Resource,
|
|
max_results: Optional[int] = None,
|
|
page_token: Optional[str] = None,
|
|
):
|
|
"""List the projects this user has access to."""
|
|
request = bq_processor_utils.PrepareListRequest({}, max_results, page_token)
|
|
result = _execute_list_projects_request(apiclient, request)
|
|
results = result.get('projects', [])
|
|
while 'nextPageToken' in result and (
|
|
max_results is not None and len(results) < max_results
|
|
):
|
|
request['pageToken'] = result['nextPageToken']
|
|
result = _execute_list_projects_request(apiclient, request)
|
|
results.extend(result.get('projects', []))
|
|
results.sort(key=lambda x: x['id'])
|
|
return results
|
|
|
|
|
|
def _execute_list_projects_request(apiclient, request):
|
|
return apiclient.projects().list(**request).execute()
|