File: //snap/google-cloud-cli/394/platform/bq/clients/client_routine.py
#!/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()