def execute(self): products = _get_products(self.wild_spec) if len(products) == 0: print '\nFound 0 products matching: "{s}"\n'.\ format(s=self.wild_spec) return name = "Name" category = "Category" description = "Description" official = "Official" spec = "Spec" output = Output() output.vertical_separator = None output.table_cell_separator = ' ' output.table_header_separator = '-' output.header_names = [ name, category, description, official, spec, ] output.set_header_alignment({ official: "right" }) if len(products) == 1: output.title = "{s}: 1 match".format(s=self.wild_spec) else: output.title = "{s}: {n} matches".format( s=self.wild_spec, n=len(products)) for product in sorted(products, key=lambda p: p.name + p.category + p.ptask_spec): if self._official_only and not product.official_version_number: continue output.add_item( { name: product.name, category: product.category, description: product.description, official: _official(product), spec: product.spec, }, colors={ spec: Style.bright, } ) output.dump(output_format='table')
def execute(self): products = _get_products(self.wild_spec) if len(products) == 0: print '\nFound 0 products matching: "{s}"\n'.\ format(s=self.wild_spec) return name = "Name" category = "Category" description = "Description" official = "Official" spec = "Spec" output = Output() output.vertical_separator = None output.table_cell_separator = ' ' output.table_header_separator = '-' output.header_names = [ name, category, description, official, spec, ] output.set_header_alignment({official: "right"}) if len(products) == 1: output.title = "{s}: 1 match".format(s=self.wild_spec) else: output.title = "{s}: {n} matches".format(s=self.wild_spec, n=len(products)) for product in sorted( products, key=lambda p: p.name + p.category + p.ptask_spec): if self._official_only and not product.official_version_number: continue output.add_item( { name: product.name, category: product.category, description: product.description, official: _official(product), spec: product.spec, }, colors={ spec: Style.bright, }) output.dump(output_format='table')
def execute(self): ptasks = [] # search the ptasks for specs matching the supplied string if PTaskSpec.WILDCARD in self.wild_spec: search_str = ",".join( filter(None, self.wild_spec.strip().split(PTaskSpec.WILDCARD))) if not search_str: raise ActionError( "Search is too broad. " + \ "Please supply a string to search against." ) try: # XXX this is inefficient. need better filtering on the backend ptasks = PTask.list(search=search_str) except PTaskError: pass else: try: ptasks.append(PTask.get(self.wild_spec)) except PTaskError: pass matching_ptasks = [] # the rest api's search filter isn't that great. it doesn't maintain any # knowledge of order for the supplied filters. So, it will return ptasks # that match all of the search terms, but not necessarily in the order # supplied. Do one more match against the returned ptasks specs keeping # the order of the supplied wildcard spec. regex_spec = "^" + \ self.wild_spec.replace(PTaskSpec.WILDCARD, "([\w=]+)?") + "$" regex_spec = re.compile(regex_spec) for ptask in ptasks: if regex_spec.match(ptask.spec): matching_ptasks.append(ptask) match_count = len(matching_ptasks) if match_count == 0: print '\nFound 0 ptasks matching: "{s}"\n'.format(s=self.wild_spec) return # define the fields names spec = "Spec" ptask_type = "Type" status = "Status" # define the look of the output output = Output() output.vertical_separator = None output.table_cell_separator = ' ' output.table_header_separator = '-' if match_count == 1: output.title = "{s}: 1 match".format(s=self.wild_spec) else: output.title = "{s}: {n} matches".format(s=self.wild_spec, n=match_count) # display order of the information output.header_names = [ spec, ptask_type, status, ] for ptask in sorted(matching_ptasks, key=lambda p: p.spec): # add all the information output.add_item( { spec: ptask.spec, ptask_type: ptask.ptask_type, status: ptask.status, }, colors={ spec: Style.bright, }) # dump the output as a list of key/value pairs output.dump(output_format='table')
def execute(self): ptasks = [] # search the ptasks for specs matching the supplied string if PTaskSpec.WILDCARD in self.wild_spec: search_str = ",".join( filter(None, self.wild_spec.strip().split(PTaskSpec.WILDCARD) ) ) if not search_str: raise ActionError( "Search is too broad. " + \ "Please supply a string to search against." ) try: # XXX this is inefficient. need better filtering on the backend ptasks = PTask.list(search=search_str) except PTaskError: pass else: try: ptasks.append(PTask.get(self.wild_spec)) except PTaskError: pass matching_ptasks = [] # the rest api's search filter isn't that great. it doesn't maintain any # knowledge of order for the supplied filters. So, it will return ptasks # that match all of the search terms, but not necessarily in the order # supplied. Do one more match against the returned ptasks specs keeping # the order of the supplied wildcard spec. regex_spec = "^" + \ self.wild_spec.replace(PTaskSpec.WILDCARD, "([\w=]+)?") + "$" regex_spec = re.compile(regex_spec) for ptask in ptasks: if regex_spec.match(ptask.spec): matching_ptasks.append(ptask) match_count = len(matching_ptasks) if match_count == 0: print '\nFound 0 ptasks matching: "{s}"\n'.format(s=self.wild_spec) return # define the fields names spec = "Spec" ptask_type = "Type" status = "Status" # define the look of the output output = Output() output.vertical_separator = None output.table_cell_separator = ' ' output.table_header_separator = '-' if match_count == 1: output.title = "{s}: 1 match".format(s=self.wild_spec) else: output.title = "{s}: {n} matches".format( s=self.wild_spec, n=match_count) # display order of the information output.header_names = [ spec, ptask_type, status, ] for ptask in sorted(matching_ptasks, key=lambda p: p.spec): # add all the information output.add_item( { spec: ptask.spec, ptask_type: ptask.ptask_type, status: ptask.status, }, colors={ spec: Style.bright, } ) # dump the output as a list of key/value pairs output.dump(output_format='table')