summaryrefslogtreecommitdiff
path: root/freebase/fcl
diff options
context:
space:
mode:
authoralex.boterolowry <alex.boterolowry@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2009-11-14 01:08:49 +0000
committeralex.boterolowry <alex.boterolowry@5914aa95-5b3a-0410-a3b5-7b719e7fe9b2>2009-11-14 01:08:49 +0000
commit0b3f2d30ca9acafb8eaf578bc78242cb35619693 (patch)
tree61a1f75367d2bc53cf6f47d67d5e681deb15b615 /freebase/fcl
parent366902ef854b68a1ba4ad13efd6f92d0327a96aa (diff)
check-in some basic and not quite useful yet completion support
git-svn-id: http://freebase-python.googlecode.com/svn/trunk@231 5914aa95-5b3a-0410-a3b5-7b719e7fe9b2
Diffstat (limited to 'freebase/fcl')
-rw-r--r--freebase/fcl/cmdutil.py5
-rwxr-xr-xfreebase/fcl/commands.py49
2 files changed, 51 insertions, 3 deletions
diff --git a/freebase/fcl/cmdutil.py b/freebase/fcl/cmdutil.py
index f2db878..17ee992 100644
--- a/freebase/fcl/cmdutil.py
+++ b/freebase/fcl/cmdutil.py
@@ -55,6 +55,11 @@ def option(argname, *args, **kws):
return decorate
+def complete(*types):
+ def decorate(f):
+ f.types = types
+ return f
+ return decorate
class TableOut(object):
def __init__(self):
diff --git a/freebase/fcl/commands.py b/freebase/fcl/commands.py
index fa0b5ea..d695709 100755
--- a/freebase/fcl/commands.py
+++ b/freebase/fcl/commands.py
@@ -188,7 +188,7 @@ def cmd_ls(fb, path=None, long=False, timesort=False, revsort=False):
print mk.value, mk.namespace.id+suffix
-
+@complete('path')
def cmd_mkdir(fb, path):
"""create a new freebase namespace
%prog mkdir id
@@ -213,6 +213,7 @@ def cmd_mkdir(fb, path):
r = fb.mss.mqlwrite(wq)
+@complete('path', 'path')
def cmd_ln(fb, src, dst):
"""create a namespace key
%prog ln srcid dstid
@@ -277,9 +278,51 @@ def cmd_cat(fb, id, include_headers=False):
def cmd_shell(fb):
import readline
import shlex
+ cache = {}
def complete_cmd(text, state):
- m = [ c for c in fb.commands if c.startswith(text) ]
- return m[state]
+ def complete_path(t, i):
+ if t == '':
+ pwd = fb.pwd
+ k = 'value'
+ v = None
+ elif t.startswith('/'):
+ p = t.split('/')
+ k = 'value~='
+ v = '^'+p.pop()+'.*'
+ pwd = '/'.join(p)
+ else:
+ pwd = fb.pwd
+ k = 'value~='
+ v = '^'+t+'.*'
+
+ ckey = '%s:%s' % (k,v)
+ if ckey in cache:
+ r = cache[ckey]
+ else:
+ q = {'id': pwd,
+ '/type/namespace/keys': [{k:v, 'value':None}]
+ }
+ r = fb.mss.mqlread(q)
+ cache[ckey] = r
+
+ return r['/type/namespace/keys'][i]['value']
+
+ completes = {'path':complete_path}
+ lb = readline.get_line_buffer()
+ if lb == text:
+ m = [ c for c in fb.commands if c.startswith(text) ]
+ return m[state]
+ else:
+ args = lb.split()
+ cmd = args.pop(0)
+ la = len(args)-1
+ if la == -1:
+ la = 0
+
+ types = fb.commands[cmd].func.types
+ t = types[la]
+ return completes.get(t, lambda x,y: None)(text, state)
+
readline.set_completer(complete_cmd)
readline.parse_and_bind('tab: complete')