HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/google-cloud-cli/394/lib/googlecloudsdk/command_lib/util/concepts/resource_parameter_info.py
# -*- coding: utf-8 -*- #
# Copyright 2018 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.
"""Parameter info lib for resource completers."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from googlecloudsdk.calliope.concepts import deps
from googlecloudsdk.calliope.concepts import util
from googlecloudsdk.command_lib.util import parameter_info_lib
from googlecloudsdk.core import properties


class ResourceParameterInfo(parameter_info_lib.ParameterInfoByConvention):
  """Gets parameter info for resource arguments."""

  def __init__(self, resource_info, parsed_args, argument, **kwargs):
    """Initializes."""
    self.resource_info = resource_info
    super(ResourceParameterInfo, self).__init__(
        parsed_args,
        argument,
        **kwargs)

  def GetValue(self, parameter_name, check_properties=True):
    """Returns the program state value for parameter_name.

    Args:
      parameter_name: The parameter name.
      check_properties: bool, whether to check the properties (unused).

    Returns:
      The program state value for parameter_name.
    """
    del check_properties  # Unused.
    attribute_name = (
        self.resource_info.resource_spec.AttributeName(parameter_name))
    current = properties.VALUES.core.disable_prompts.GetBool()
    # TODO(b/73073941): Come up with a better way to temporarily disable
    # prompts. This prevents arbitrary fallthroughs with prompting from
    # being run during completion.
    properties.VALUES.core.disable_prompts.Set(True)
    try:
      return deps.Get(
          attribute_name,
          self.resource_info.BuildFullFallthroughsMap(),
          parsed_args=self.parsed_args) if attribute_name else None
    except deps.AttributeNotFoundError:
      return None
    finally:
      properties.VALUES.core.disable_prompts.Set(current)

  def _AttributeName(self, parameter_name):
    """Helper function to get the corresponding attribute for a parameter."""
    return self.resource_info.resource_spec.AttributeName(parameter_name)

  def GetDest(self, parameter_name, prefix=None):
    """Returns the argument parser dest name for parameter_name with prefix.

    Args:
      parameter_name: The resource parameter name.
      prefix: The prefix name for parameter_name if not None.

    Returns:
      The argument parser dest name for parameter_name.
    """
    del prefix  # Unused.
    attribute_name = self._AttributeName(parameter_name)
    flag_name = self.resource_info.attribute_to_args_map.get(attribute_name,
                                                             None)
    if not flag_name:
      return None
    return util.NamespaceFormat(flag_name)

  def GetFlag(self, parameter_name, parameter_value=None,
              check_properties=True, for_update=False):
    """Returns the command line flag for parameter.

    If the flag is already present in program values, returns None.
    If the user needs to specify it, returns a string in the form
    '--flag-name=value'. If the flag is boolean and True, returns '--flag-name'.

    Args:
      parameter_name: The parameter name.
      parameter_value: The parameter value if not None. Otherwise
        GetValue() is used to get the value.
      check_properties: Check property values if parsed_args don't help.
      for_update: Return flag for a cache update command.

    Returns:
      The command line flag  for the parameter, or None.
    """
    del for_update
    attribute_name = self._AttributeName(parameter_name)
    flag_name = self.resource_info.attribute_to_args_map.get(
        attribute_name, None)
    if not flag_name:
      # Project attributes are typically elided in favor of the global --project
      # flag. If the project flag is brought under the concept argument umbrella
      # this can be removed.
      if attribute_name == 'project':
        flag_name = '--project'
      else:
        return None
    program_value = self.GetValue(parameter_name)
    if parameter_value != program_value:
      if parameter_value is None:
        parameter_value = program_value
      if parameter_value:
        if parameter_value is True:
          return flag_name
        return '{name}={value}'.format(name=flag_name, value=parameter_value)
    return None