summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornix@nixweb.com <nix@nixweb.com@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2009-08-14 07:40:01 +0000
committernix@nixweb.com <nix@nixweb.com@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2009-08-14 07:40:01 +0000
commit1f74cc1f646f1224912e9b6f31cb726ace9e71a4 (patch)
tree9fbc38e44c8576296e9091a9595f0944b0b78028
parent3576154a66a680002aed301d652e488022d8b9b3 (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
-rwxr-xr-xfreebase/fcl/fbutil.py7
-rwxr-xr-xfreebase/fcl/fcl.py65
-rwxr-xr-xfreebase/fcl/mktype.py3
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