diff options
author | Marko Kreen | 2008-04-30 14:24:01 +0000 |
---|---|---|
committer | Marko Kreen | 2008-04-30 14:24:01 +0000 |
commit | a789dcd8894d1337ce336e1b12aa44d1312bddda (patch) | |
tree | e31a43e191f93ad2873668476790f9f61986370c /python/skytools/adminscript.py | |
parent | 76167def709658f016bf626acbfefefbef9b2e10 (diff) |
cascading work:
- let AdminScript detect number of args by introspection
- track event_id_seq downstream
- on rename update subscribers too
- slightly more fleshed out switchover
Diffstat (limited to 'python/skytools/adminscript.py')
-rw-r--r-- | python/skytools/adminscript.py | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/python/skytools/adminscript.py b/python/skytools/adminscript.py index 838b990f..399e5cd3 100644 --- a/python/skytools/adminscript.py +++ b/python/skytools/adminscript.py @@ -3,7 +3,7 @@ """Admin scripting. """ -import sys, os +import sys, os, inspect from skytools.scripting import DBScript from skytools.quoting import quote_statement @@ -21,13 +21,30 @@ class AdminScript(DBScript): def work(self): self.set_single_loop(1) + cmd = self.args[1] + cmdargs = self.args[2:] + + # find function fname = "cmd_" + cmd.replace('-', '_') - if hasattr(self, fname): - getattr(self, fname)(self.args[2:]) - else: + if not hasattr(self, fname): self.log.error('bad subcommand, see --help for usage') sys.exit(1) + fn = getattr(self, fname) + + # check if correct number of arguments + (args, varargs, varkw, defaults) = inspect.getargspec(fn) + n_args = len(args) - 1 # drop 'self' + if varargs is None and n_args != len(cmdargs): + helpstr = "" + if n_args: + helpstr = ": " + " ".join(args[1:]) + self.log.error("command '%s' got %d args, but expects %d%s" + % (cmd, len(cmdargs), n_args, helpstr)) + sys.exit(1) + + # run command + fn(*cmdargs) def fetch_list(self, db, sql, args, keycol = None): curs = db.cursor() @@ -53,7 +70,7 @@ class AdminScript(DBScript): if not fields: fields = [f[0] for f in curs.description] - + widths = [15] * len(fields) for row in rows: for i, k in enumerate(fields): @@ -67,7 +84,7 @@ class AdminScript(DBScript): print desc print fmt % tuple(fields) print fmt % tuple(['-'*15] * len(fields)) - + for row in rows: print fmt % tuple([row[k] for k in fields]) print '\n' |