from __future__ import print_function ### utility to match command-line args to names class Candidates: def __init__ (self, names): self.names=names # is an input string acceptable for one of the known names? @staticmethod def fits (input, name): return name.find(input)==0 # returns one of the names if the input name has a unique match # or None otherwise def only_match (self, input): if input in self.names: return input matches=[ name for name in self.names if Candidates.fits(input,name) ] if len(matches)==1: return matches[0] else: return None #################### minimal test candidates_specs=[ ('create delete reset resources slices start status stop version create_gid', [ ('ver','version'), ('r',None), ('re',None), ('res',None), ('rese','reset'), ('reset','reset'), ('reso','resources'), ('sli','slices'), ('st',None), ('sta',None), ('stop','stop'), ('a',None), ('cre',None), ('create','create'), ('create_','create_gid'), ('create_g','create_gid'), ('create_gi','create_gid'), ('create_gid','create_gid'), ]) ] def test_candidates (): for (names, tuples) in candidates_specs: names=names.split() for (input,expected) in tuples: got=Candidates(names).only_match(input) if got==expected: print('.', end=' ') else: print('X FAIL','names[',names,'] input',input,'expected',expected,'got',got) if __name__ == '__main__': test_candidates()