156 lines
4.2 KiB
Python
156 lines
4.2 KiB
Python
#!/usr/bin/env python
|
|
"""The BigQuery CLI routine client library."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
|
|
from typing import Optional
|
|
|
|
from googleapiclient import discovery
|
|
|
|
from utils import bq_error
|
|
from utils import bq_id_utils
|
|
|
|
|
|
def ListRoutines(
|
|
routines_api_client: discovery.Resource,
|
|
reference: 'bq_id_utils.ApiClientHelper.DatasetReference',
|
|
max_results: int,
|
|
page_token: str,
|
|
filter_expression: str,
|
|
):
|
|
"""Lists routines for the given dataset reference.
|
|
|
|
Arguments:
|
|
routines_api_client: the api client used to make the request.
|
|
reference: Reference to the dataset.
|
|
max_results: Number of results to return.
|
|
page_token: Token to retrieve the next page of results.
|
|
filter_expression: An expression for filtering routines.
|
|
|
|
Returns:
|
|
A dict that contains entries:
|
|
'routines': a list of routines.
|
|
'token': nextPageToken for the last page, if present.
|
|
"""
|
|
return (
|
|
routines_api_client.routines()
|
|
.list(
|
|
projectId=reference.projectId,
|
|
datasetId=reference.datasetId,
|
|
maxResults=max_results,
|
|
pageToken=page_token,
|
|
filter=filter_expression,
|
|
)
|
|
.execute()
|
|
)
|
|
|
|
|
|
def RoutineExists(
|
|
routines_api_client: discovery.Resource,
|
|
reference: 'bq_id_utils.ApiClientHelper.RoutineReference',
|
|
):
|
|
"""Returns true if the routine exists."""
|
|
bq_id_utils.typecheck(
|
|
reference,
|
|
bq_id_utils.ApiClientHelper.RoutineReference,
|
|
method='RoutineExists',
|
|
)
|
|
try:
|
|
return (
|
|
routines_api_client.routines()
|
|
.get(
|
|
projectId=reference.projectId,
|
|
datasetId=reference.datasetId,
|
|
routineId=reference.routineId,
|
|
)
|
|
.execute()
|
|
)
|
|
except bq_error.BigqueryNotFoundError:
|
|
return False
|
|
|
|
|
|
def DeleteRoutine(
|
|
routines_api_client: discovery.Resource,
|
|
reference: 'bq_id_utils.ApiClientHelper.RoutineReference',
|
|
ignore_not_found: Optional[bool] = False,
|
|
) -> None:
|
|
"""Deletes RoutineReference reference.
|
|
|
|
Args:
|
|
routines_api_client: the api client used to make the request.
|
|
reference: the RoutineReference to delete.
|
|
ignore_not_found: Whether to ignore "not found" errors.
|
|
|
|
Raises:
|
|
BigqueryTypeError: if reference is not a RoutineReference.
|
|
bq_error.BigqueryNotFoundError: if reference does not exist and
|
|
ignore_not_found is False.
|
|
"""
|
|
bq_id_utils.typecheck(
|
|
reference,
|
|
bq_id_utils.ApiClientHelper.RoutineReference,
|
|
method='DeleteRoutine',
|
|
)
|
|
try:
|
|
routines_api_client.routines().delete(**dict(reference)).execute()
|
|
except bq_error.BigqueryNotFoundError:
|
|
if not ignore_not_found:
|
|
raise
|
|
|
|
|
|
def SetRoutineIAMPolicy(
|
|
apiclient: discovery.Resource,
|
|
reference: bq_id_utils.ApiClientHelper.RoutineReference,
|
|
policy: str,
|
|
) -> ...:
|
|
"""Sets IAM policy for the given routine resource.
|
|
|
|
Arguments:
|
|
apiclient: the apiclient used to make the request.
|
|
reference: the RoutineReference for the routine resource.
|
|
policy: The policy string in JSON format.
|
|
|
|
Returns:
|
|
The updated IAM policy attached to the given routine resource.
|
|
|
|
Raises:
|
|
BigqueryTypeError: if reference is not a RoutineReference.
|
|
"""
|
|
bq_id_utils.typecheck(
|
|
reference,
|
|
bq_id_utils.ApiClientHelper.RoutineReference,
|
|
method='SetRoutineIAMPolicy',
|
|
)
|
|
request = {'policy': policy}
|
|
return (
|
|
apiclient.routines()
|
|
.setIamPolicy(body=request, resource=reference.path())
|
|
.execute()
|
|
)
|
|
|
|
|
|
def GetRoutineIAMPolicy(
|
|
apiclient: discovery.Resource,
|
|
reference: bq_id_utils.ApiClientHelper.RoutineReference,
|
|
) -> ...:
|
|
"""Gets IAM policy for the given routine resource.
|
|
|
|
Arguments:
|
|
apiclient: the apiclient used to make the request.
|
|
reference: the RoutineReference for the routine resource.
|
|
|
|
Returns:
|
|
The IAM policy attached to the given routine resource.
|
|
|
|
Raises:
|
|
BigqueryTypeError: if reference is not a RoutineReference.
|
|
"""
|
|
bq_id_utils.typecheck(
|
|
reference,
|
|
bq_id_utils.ApiClientHelper.RoutineReference,
|
|
method='GetRoutineIAMPolicy',
|
|
)
|
|
return apiclient.routines().getIamPolicy(resource=reference.path()).execute()
|