diff options
| author | nix@nixweb.com <nix@nixweb.com@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2> | 2009-08-14 07:40:01 +0000 |
|---|---|---|
| committer | nix@nixweb.com <nix@nixweb.com@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2> | 2009-08-14 07:40:01 +0000 |
| commit | 1f74cc1f646f1224912e9b6f31cb726ace9e71a4 (patch) | |
| tree | 9fbc38e44c8576296e9091a9595f0944b0b78028 /freebase | |
| parent | 3576154a66a680002aed301d652e488022d8b9b3 (diff) | |
subcommand option parsing, and account for some things moved to
cmdutil.py
git-svn-id: http://freebase-python.googlecode.com/svn/trunk@206 5914aa95-5b3a-0410-a3b5-7b719e7fe9b2
Diffstat (limited to 'freebase')
| -rwxr-xr-x | freebase/fcl/fbutil.py | 7 | ||||
| -rwxr-xr-x | freebase/fcl/fcl.py | 65 | ||||
| -rwxr-xr-x | freebase/fcl/mktype.py | 3 |
3 files changed, 45 insertions, 30 deletions
diff --git a/freebase/fcl/fbutil.py b/freebase/fcl/fbutil.py index ed1e511..1aaea5f 100755 --- a/freebase/fcl/fbutil.py +++ b/freebase/fcl/fbutil.py @@ -28,16 +28,11 @@ import re - -import logging -log = logging.getLogger() - +import optparse class FbException(Exception): pass -class CmdException(Exception): - pass media_types = { 'html': ['text/html'], diff --git a/freebase/fcl/fcl.py b/freebase/fcl/fcl.py index ad59aad..2b30b56 100755 --- a/freebase/fcl/fcl.py +++ b/freebase/fcl/fcl.py @@ -36,7 +36,9 @@ import logging import simplejson -from fbutil import FbException, CmdException, log, default_propkeys +from cmdutil import CmdException, log, out +from fbutil import FbException, default_propkeys + console = logging.StreamHandler() log.addHandler(console) @@ -47,6 +49,7 @@ if os.environ.has_key('HOME'): _cookiedir = os.path.join(os.environ['HOME'], '.pyfreebase') + class Command(object): def __init__(self, module, name, func): self.module = module @@ -64,9 +67,10 @@ class Command(object): self.shortdoc = '(missing documentation)' self.doc = '(missing documentation)' + self.oparser = getattr(func, 'oparser', None) -class FbCommandHandler(object): +class FclCommandHandler(object): def __init__(self): self.service_host = 'www.freebase.com' @@ -98,6 +102,7 @@ class FbCommandHandler(object): def absid(self, path): if path is None: path = '' + if path.startswith('/'): return path @@ -154,7 +159,7 @@ class FbCommandHandler(object): def import_commands(self, modname): """ - import new fb commands from a file + import new fcl commands from a file """ namespace = {} @@ -175,23 +180,21 @@ class FbCommandHandler(object): log.info('imported %r from %r' % (modname, mod.__file__)) - def dispatch(self, cmd, args): - if cmd in self.commands: - try: - self.commands[cmd].func(self, *args) - except KeyboardInterrupt, e: - sys.stderr.write('%s\n' % (str(e),)) - except FbException, e: - sys.stderr.write('%s\n' % (str(e),)) - except CmdException, e: - sys.stderr.write('%s\n' % (str(e),)) - except MetawebError, e: - sys.stderr.write('%s\n' % (str(e),)) - else: - self.oparser.error('unknown subcommand %r, try "%s help"' % (cmd, self.progpath)) + def dispatch(self, cmd, args, kws): + try: + cmd.func(self, *args, **kws) - self.save() - + # flush the output + out.flush() + except KeyboardInterrupt, e: + sys.stderr.write('%s\n' % (str(e),)) + except FbException, e: + sys.stderr.write('%s\n' % (str(e),)) + except CmdException, e: + sys.stderr.write('%s\n' % (str(e),)) + except MetawebError, e: + sys.stderr.write('%s\n' % (str(e),)) + def cmdline_main(self): op = OptionParser(usage='%prog [options] command [args...] ') @@ -256,8 +259,24 @@ class FbCommandHandler(object): self.import_commands('freebase.fcl.mktype') self.import_commands('freebase.fcl.schema') - cmd = args.pop(0) - self.dispatch(cmd, args) + subcmd = args.pop(0) + + if subcmd in self.commands: + cmd = self.commands[subcmd] + + if cmd.oparser is not None: + options,args = cmd.oparser.parse_args(args) + kws = options.__dict__ + else: + kws = {} + + self.dispatch(cmd, args, kws) + else: + self.oparser.error('unknown subcommand %r, try "%s help"' % (subcmd, self.progpath)) + + self.save() + + # entry point for script def main(): @@ -270,8 +289,8 @@ def main(): except ImportError: pass - fb = FbCommandHandler() - fb.cmdline_main() + fcl = FclCommandHandler() + fcl.cmdline_main() if __name__ == '__main__': main() diff --git a/freebase/fcl/mktype.py b/freebase/fcl/mktype.py index f84d017..6e3d867 100755 --- a/freebase/fcl/mktype.py +++ b/freebase/fcl/mktype.py @@ -27,6 +27,7 @@ # ==================================================================== import os, sys, re, time +from cmdutil import * from fbutil import * from freebase.schema import create_object, create_type @@ -61,7 +62,7 @@ def cmd_mktype(fb, id, name=''): """ id = fb.absid(id) ns, key = dirsplit(id) - return create_type(s, name, key, ns, cvt=False, tip=None, included=None, extra=None): + return create_type(s, name, key, ns, cvt=False, tip=None, included=None, extra=None) def mkprop(fb, typeid, key, name='', vtype=None, master_property=None): """helper to create a new property |
