110 lines
3.6 KiB
Python
110 lines
3.6 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2022 Google LLC. 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.
|
|
"""Utilities for Recommender Config."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
from apitools.base.py import encoding
|
|
from googlecloudsdk.api_lib.recommender import base
|
|
from googlecloudsdk.api_lib.recommender import flag_utils
|
|
|
|
|
|
def CreateClient(release_track):
|
|
"""Creates Client."""
|
|
api_version = flag_utils.GetApiVersion(release_track)
|
|
return RecommenderConfig(api_version)
|
|
|
|
|
|
class RecommenderConfig(base.ClientBase):
|
|
"""Base RecommenderConfig client for all versions."""
|
|
|
|
def __init__(self, api_version):
|
|
super(RecommenderConfig, self).__init__(api_version)
|
|
self._project_service = self._client.projects_locations_recommenders
|
|
|
|
def Get(self, config_name):
|
|
"""Gets a RecommenderConfig.
|
|
|
|
Args:
|
|
config_name: str, the name of the config being retrieved.
|
|
|
|
Returns:
|
|
The RecommenderConfig message.
|
|
"""
|
|
# Using Project message is ok for all entities if the name is correct.
|
|
request = self._messages.RecommenderProjectsLocationsRecommendersGetConfigRequest(
|
|
name=config_name)
|
|
return self._project_service.GetConfig(request)
|
|
|
|
def Update(self, config_name, args):
|
|
"""Updates a RecommenderConfig.
|
|
|
|
Args:
|
|
config_name: str, the name of the config being retrieved.
|
|
args: argparse.Namespace, The arguments that the command was invoked with.
|
|
|
|
Returns:
|
|
The updated RecommenderConfig message.
|
|
Raises:
|
|
Exception: If nothing is updated.
|
|
"""
|
|
|
|
update_mask = []
|
|
config = self._GetVersionedMessage('RecommenderConfig')()
|
|
config.name = config_name
|
|
config.etag = args.etag
|
|
|
|
if args.config_file:
|
|
gen_config = flag_utils.ReadConfig(
|
|
args.config_file,
|
|
self._GetVersionedMessage('RecommenderGenerationConfig'))
|
|
config.recommenderGenerationConfig = gen_config
|
|
update_mask.append('recommender_generation_config')
|
|
|
|
if args.display_name:
|
|
config.displayName = args.display_name
|
|
update_mask.append('display_name')
|
|
|
|
if args.annotations:
|
|
config.annotations = encoding.DictToAdditionalPropertyMessage(
|
|
args.annotations,
|
|
self._GetVersionedMessage('RecommenderConfig').AnnotationsValue,
|
|
sort_items=True)
|
|
update_mask.append('annotations')
|
|
|
|
if not update_mask:
|
|
raise Exception(
|
|
'Nothing is being updated. Please specify one of config-file or display-name.'
|
|
)
|
|
|
|
# Need to do it this way to dynamically set the versioned RecommenderConfig
|
|
kwargs = {
|
|
'name':
|
|
config_name,
|
|
flag_utils.ToCamelCase(self._message_prefix + 'RecommenderConfig'):
|
|
config,
|
|
'updateMask':
|
|
','.join(update_mask),
|
|
'validateOnly':
|
|
args.validate_only
|
|
}
|
|
|
|
# Using Project message is ok for all entities if the name is correct.
|
|
request = self._messages.RecommenderProjectsLocationsRecommendersUpdateConfigRequest(
|
|
**kwargs)
|
|
return self._project_service.UpdateConfig(request)
|