コード例 #1
0
def GetReferencedKeyNames(filter_string=None,
                          format_string=None,
                          printer=None,
                          defaults=None):
    """Returns the set of key names referenced by filter / format expressions.

  NOTICE: OnePlatform is forgiving on filter and format key reference name
  spelling.  Use resource_property.GetMatchingIndex() when verifying against
  resource dictionaries to handle camel and snake case spellings.

  Args:
    filter_string: The resource filter expression string.
    format_string: The resource format expression string.
    printer: The parsed format_string.
    defaults: The resource format and filter default projection.

  Raises:
    ValueError: If both format_string and printer are specified.

  Returns:
    The set of key names referenced by filter / format expressions.
  """
    keys = set()

    # Add the format key references.
    if printer:
        if format_string:
            raise ValueError('Cannot specify both format_string and printer.')
    elif format_string:
        printer = resource_printer.Printer(format_string, defaults=defaults)
        defaults = printer.column_attributes
    if printer:
        for col in printer.column_attributes.Columns():
            keys.add(resource_lex.GetKeyName(col.key, omit_indices=True))

    # Add the filter key references.
    if filter_string:
        expr = resource_filter.Compile(filter_string,
                                       defaults=defaults,
                                       backend=resource_keys_expr.Backend())
        for key in expr.Evaluate(None):
            keys.add(resource_lex.GetKeyName(key, omit_indices=True))

    return keys
コード例 #2
0
  def GetReferencedKeyNames(self):
    """Returns the list of key names referenced by the command."""

    keys = set()

    # Add the format key references.
    self._InitPrinter()
    if self._printer:
      for col in self._printer.column_attributes.Columns():
        keys.add(resource_lex.GetKeyName(col.key))

    # Add the filter key references.
    filter_expression = self._GetFlag('filter')
    if filter_expression:
      expr = resource_filter.Compile(filter_expression,
                                     defaults=self._defaults,
                                     backend=resource_keys_expr.Backend())
      for key in expr.Evaluate(None):
        keys.add(resource_lex.GetKeyName(key))

    return keys