コード例 #1
0
def _GetListCommandFrontendPrototype(args, message=None):
    """Make Frontend suitable for ListCommand argument namespace.

  Generated filter is a pair (client-side filter, server-side filter).

  Args:
    args: The argument namespace of ListCommand.
    message: The response resource proto message for the request.

  Returns:
    Frontend initialized with information from ListCommand argument namespace.
    Both client-side and server-side filter is returned.
  """
    filter_expr = flags.RewriteFilter(args, message=message)
    max_results = int(args.page_size) if args.page_size else None
    if args.limit and (max_results is None or max_results > args.limit):
        max_results = args.limit
    return _Frontend(filter_expr=filter_expr, maxResults=max_results)
コード例 #2
0
def _TranslateRegionsFlag(args, resources, message=None):
    """Translates --regions flag into filter expression and scope set."""
    default = args.filter  # must preserve '' and None for default processing
    scope_set = RegionSet([
        resources.Parse(
            region,
            params={'project': properties.VALUES.core.project.GetOrFail},
            collection='compute.regions') for region in args.regions
    ])
    # Refine args.filter specification to reuse gcloud filtering logic
    # for filtering based on regions
    filter_arg = '({}) AND '.format(args.filter) if args.filter else ''
    # How to escape '*' in region and what are special characters for
    # simple pattern?
    region_regexp = ' '.join([region for region in args.regions])
    region_arg = '(region :({}))'.format(region_regexp)
    args.filter = (filter_arg + region_arg) or default
    args.filter, filter_expr = flags.RewriteFilter(args, message=message)
    return filter_expr, scope_set
コード例 #3
0
def _TranslateZonesFlag(args, resources, message=None):
    """Translates --zones flag into filter expression and scope set."""
    default = args.filter  # must preserve '' and None for default processing
    scope_set = ZoneSet([
        resources.Parse(  # pylint: disable=g-complex-comprehension
            z,
            params={'project': properties.VALUES.core.project.GetOrFail},
            collection='compute.zones') for z in args.zones
    ])
    # Refine args.filter specification to reuse gcloud filtering logic
    # for filtering based on zones
    filter_arg = '({}) AND '.format(args.filter) if args.filter else ''
    # How to escape '*' in zone and what are special characters for
    # simple pattern?
    zone_regexp = ' '.join([zone for zone in args.zones])
    zone_arg = '(zone :({}))'.format(zone_regexp)
    args.filter = (filter_arg + zone_arg) or default
    args.filter, filter_expr = flags.RewriteFilter(args, message=message)
    return filter_expr, scope_set
コード例 #4
0
def ParseMultiScopeFlags(args, resources, message=None):
    """Make Frontend suitable for MultiScopeLister argument namespace.

  Generated client-side filter is stored to args.filter.

  Args:
    args: The argument namespace of MultiScopeLister.
    resources: resources.Registry, The resource registry
    message: The response resource proto message for the request.

  Returns:
    Frontend initialized with information from MultiScopeLister argument
    namespace.
  """
    frontend = _GetBaseListerFrontendPrototype(args, message=message)
    filter_expr = frontend.filter
    if getattr(args, 'zones', None):
        filter_expr, scope_set = _TranslateZonesFlag(args,
                                                     resources,
                                                     message=message)
    elif args.filter and 'zone' in args.filter:
        scope_set = _TranslateZonesFilters(args, resources)
    elif getattr(args, 'regions', None):
        filter_expr, scope_set = _TranslateRegionsFlag(args,
                                                       resources,
                                                       message=message)
    elif args.filter and 'region' in args.filter:
        scope_set = _TranslateRegionsFilters(args, resources)
    elif getattr(args, 'global', None):
        scope_set = GlobalScope([
            resources.Parse(properties.VALUES.core.project.GetOrFail(),
                            collection='compute.projects')
        ])
        args.filter, filter_expr = flags.RewriteFilter(args, message=message)
    else:
        scope_set = AllScopes([
            resources.Parse(properties.VALUES.core.project.GetOrFail(),
                            collection='compute.projects')
        ],
                              zonal='zones' in args,
                              regional='regions' in args)
    return _Frontend(filter_expr, frontend.max_results, scope_set)
コード例 #5
0
def ParseNamesAndRegexpFlags(args, resources, message=None):
    """Makes Frontend suitable for GlobalLister argument namespace.

  Stores generated client-side filter in args.filter.

  Args:
    args: The argument namespace of BaseLister.
    resources: resources.Registry, The resource registry
    message: The resource proto message.

  Returns:
    Frontend initialized with information from BaseLister argument namespace.
  """
    frontend = _GetBaseListerFrontendPrototype(args, message=message)
    scope_set = GlobalScope([
        resources.Parse(properties.VALUES.core.project.GetOrFail(),
                        collection='compute.projects')
    ])
    args.filter, filter_expr = flags.RewriteFilter(args, message=message)
    return _Frontend(filter_expr, frontend.max_results, scope_set)
コード例 #6
0
 def RunSubTest(self, expression, message, frontend_fields):
   args = MockArgs({'filter': expression})
   return flags.RewriteFilter(
       args, message=message, frontend_fields=frontend_fields)
コード例 #7
0
 def RunSubTest(self, expression):
   args = MockArgs({'filter': expression})
   return flags.RewriteFilter(args)