138 lines
4.4 KiB
Python
138 lines
4.4 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2020 Google Inc. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""API Keys API helper functions."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
from apitools.base.py import exceptions as apitools_exceptions
|
|
from apitools.base.py import list_pager
|
|
from googlecloudsdk.api_lib.services import exceptions
|
|
from googlecloudsdk.api_lib.util import apis as core_apis
|
|
from googlecloudsdk.calliope import base as calliope_base
|
|
|
|
_PROJECT_RESOURCE = 'projects/%s'
|
|
_PARENT_RESOURCE = 'projects/%s/locations/global'
|
|
_API_NAME = 'apikeys'
|
|
|
|
_RELEASE_TRACK_TO_API_VERSION = {
|
|
calliope_base.ReleaseTrack.ALPHA: 'v2',
|
|
calliope_base.ReleaseTrack.BETA: 'v2',
|
|
calliope_base.ReleaseTrack.GA: 'v2'
|
|
}
|
|
|
|
|
|
def ListKeys(project, show_deleted=None, page_size=None, limit=None):
|
|
"""List API Keys for a given project.
|
|
|
|
Args:
|
|
project: The project for which to list keys.
|
|
show_deleted: Includes deleted keys in the list.
|
|
page_size: The page size to list.
|
|
limit: The max number of metrics to return.
|
|
|
|
Raises:
|
|
exceptions.PermissionDeniedException: when listing keys fails.
|
|
|
|
Returns:
|
|
The list of keys
|
|
"""
|
|
client = GetClientInstance(calliope_base.ReleaseTrack.GA)
|
|
messages = client.MESSAGES_MODULE
|
|
|
|
request = messages.ApikeysProjectsLocationsKeysListRequest(
|
|
parent=GetParentResourceName(project), showDeleted=show_deleted)
|
|
return list_pager.YieldFromList(
|
|
client.projects_locations_keys,
|
|
request,
|
|
limit=limit,
|
|
batch_size_attribute='pageSize',
|
|
batch_size=page_size,
|
|
field='keys')
|
|
|
|
|
|
def GetClientInstance(release_track=calliope_base.ReleaseTrack.ALPHA):
|
|
"""Returns an API client for ApiKeys."""
|
|
api_version = _RELEASE_TRACK_TO_API_VERSION.get(release_track)
|
|
return core_apis.GetClientInstance(_API_NAME, api_version)
|
|
|
|
|
|
def GetOperation(name):
|
|
"""Make API call to get an operation.
|
|
|
|
Args:
|
|
name: The name of the operation.
|
|
|
|
Raises:
|
|
exceptions.OperationErrorException: when the getting operation API fails.
|
|
apitools_exceptions.HttpError: Another miscellaneous error with the service.
|
|
|
|
Returns:
|
|
The result of the operation
|
|
"""
|
|
client = GetClientInstance()
|
|
messages = client.MESSAGES_MODULE
|
|
request = messages.ApikeysOperationsGetRequest(name=name)
|
|
try:
|
|
return client.operations.Get(request)
|
|
except (apitools_exceptions.HttpForbiddenError,
|
|
apitools_exceptions.HttpNotFoundError) as e:
|
|
exceptions.ReraiseError(e, exceptions.OperationErrorException)
|
|
|
|
|
|
def GetAllowedAndroidApplications(args, messages):
|
|
"""Create list of allowed android applications."""
|
|
allowed_applications = []
|
|
for application in getattr(args, 'allowed_application', []) or []:
|
|
android_application = messages.V2AndroidApplication(
|
|
sha1Fingerprint=application['sha1_fingerprint'],
|
|
packageName=application['package_name'])
|
|
allowed_applications.append(android_application)
|
|
return allowed_applications
|
|
|
|
|
|
def GetApiTargets(args, messages):
|
|
"""Create list of target apis."""
|
|
api_targets = []
|
|
for api_target in getattr(args, 'api_target', []) or []:
|
|
api_targets.append(
|
|
messages.V2ApiTarget(
|
|
service=api_target.get('service'),
|
|
methods=api_target.get('methods', [])))
|
|
return api_targets
|
|
|
|
|
|
def GetAnnotations(args, messages):
|
|
"""Create list of annotations."""
|
|
annotations = getattr(args, 'annotations', {})
|
|
additional_property_messages = []
|
|
if not annotations:
|
|
return None
|
|
|
|
for key, value in annotations.items():
|
|
additional_property_messages.append(
|
|
messages.V2Key.AnnotationsValue.AdditionalProperty(
|
|
key=key, value=value))
|
|
|
|
annotation_value_message = messages.V2Key.AnnotationsValue(
|
|
additionalProperties=additional_property_messages)
|
|
|
|
return annotation_value_message
|
|
|
|
|
|
def GetParentResourceName(project):
|
|
return _PARENT_RESOURCE % (project)
|