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)
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
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
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)
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)
def RunSubTest(self, expression, message, frontend_fields): args = MockArgs({'filter': expression}) return flags.RewriteFilter( args, message=message, frontend_fields=frontend_fields)
def RunSubTest(self, expression): args = MockArgs({'filter': expression}) return flags.RewriteFilter(args)