X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfaadmin.py;h=7640e930cac44fa0444021871ec331b2d2a2a994;hb=3d9943d1e5f993408b618cde29ff31b3585e5cef;hp=6cb393683df7ecfe3e4d3dd47d5d2fbfbc52225a;hpb=979283042329c940a19a26b4e29e608fc4c590df;p=sfa.git diff --git a/sfa/client/sfaadmin.py b/sfa/client/sfaadmin.py index 6cb39368..7640e930 100755 --- a/sfa/client/sfaadmin.py +++ b/sfa/client/sfaadmin.py @@ -12,6 +12,8 @@ from sfa.client.sfi import save_records_to_file from sfa.trust.hierarchy import Hierarchy from sfa.trust.gid import GID +from sfa.client.candidates import Candidates + pprinter = PrettyPrinter(indent=4) try: @@ -30,11 +32,11 @@ def args(*args, **kwargs): class Commands(object): def _get_commands(self): - available_methods = [] + command_names = [] for attrib in dir(self): if callable(getattr(self, attrib)) and not attrib.startswith('_'): - available_methods.append(attrib) - return available_methods + command_names.append(attrib) + return command_names class RegistryCommands(Commands): @@ -175,6 +177,12 @@ class RegistryCommands(Commands): from sfa.importer import Importer importer = Importer() importer.run() + + def sync_db(self): + """Initiailize or upgrade the db""" + from sfa.storage.dbschema import DBSchema + dbschema=DBSchema() + dbschema.init_or_upgrade @args('-a', '--all', dest='all', metavar='', action='store_true', default=False, help='Remove all registry records and all files in %s area' % help_basedir) @@ -353,15 +361,14 @@ class SfaAdmin: 'aggregate': AggregateCommands, 'slicemgr': SliceManagerCommands} - def find_category (self, string): - for (k,v) in SfaAdmin.CATEGORIES.items(): - if k.startswith(string): return k - for (k,v) in SfaAdmin.CATEGORIES.items(): - if k.find(string) >=1: return k - return None + # returns (name,class) or (None,None) + def find_category (self, input): + full_name=Candidates (SfaAdmin.CATEGORIES.keys()).only_match(input) + if not full_name: return (None,None) + return (full_name,SfaAdmin.CATEGORIES[full_name]) def summary_usage (self, category=None): - print "Usage:", self.script_name + " category action []" + print "Usage:", self.script_name + " category command []" if category and category in SfaAdmin.CATEGORIES: categories=[category] else: @@ -395,33 +402,32 @@ class SfaAdmin: self.summary_usage() # ensure category is valid - category_str = argv.pop(0) - category=self.find_category (category_str) - if not category: - self.summary_usage() + category_input = argv.pop(0) + (category_name, category_class) = self.find_category (category_input) + if not category_name or not category_class: + self.summary_usage(category_name) - usage = "%%prog %s action [options]" % (category) + usage = "%%prog %s command [options]" % (category_name) parser = OptionParser(usage=usage) - command_class = SfaAdmin.CATEGORIES.get(category, None) - if not command_class: - self.summary_usage(category) # ensure command is valid - command_instance = command_class() - actions = command_instance._get_commands() + category_instance = category_class() + commands = category_instance._get_commands() if len(argv) < 1: - action = '__call__' + # xxx what is this about ? + command_name = '__call__' else: - action = argv.pop(0) + command_input = argv.pop(0) + command_name = Candidates (commands).only_match (command_input) - if hasattr(command_instance, action): - command = getattr(command_instance, action) + if command_name and hasattr(category_instance, command_name): + command = getattr(category_instance, command_name) else: - self.summary_usage(category) + self.summary_usage(category_name) # ensure options are valid options = getattr(command, 'options', []) - usage = "%%prog %s %s [options]" % (category, action) + usage = "%%prog %s %s [options]" % (category_name, command_name) parser = OptionParser(usage=usage) for arg, kwd in options: parser.add_option(*arg, **kwd) @@ -448,3 +454,4 @@ class SfaAdmin: except Exception: print "Command failed, please check log for more info" raise +