Skip to content

Instantly share code, notes, and snippets.

@rgs1
Created April 27, 2014 17:34
Show Gist options
  • Save rgs1/11351110 to your computer and use it in GitHub Desktop.
Save rgs1/11351110 to your computer and use it in GitHub Desktop.
#!/usr/bin/python 2.7
from __future__ import print_function
from cmd import Cmd
from functools import partial
import readline
class CompleteParam(object):
def __init__(self, name, values=None):
self._name = name
self._named_param = "%s:" % (name)
self._values = []
if values:
for value in values:
self._values.append("%s:%s" % (name, value))
@property
def name(self):
return self._name
@property
def named_param(self):
return self._named_param
@property
def values(self):
return self._values
def values_for(self, looking):
return [val for val in self.values if val.startswith(looking)]
class BoolCompleteParam(CompleteParam):
def __init__(self, name):
super(BoolCompleteParam, self).__init__(name, ["t", "f"])
def complete(params, text, line, begidx, endidx):
for p in params:
if line.endswith(p.named_param) or text.startswith(p.named_param):
return p.values_for(text)
rv = []
for param in params:
if param.name.startswith(text):
rv.append(param.named_param)
if len(rv) == 0:
rv = [p.named_param for p in params]
return rv
def complete_for(*params):
return partial(complete, params)
class Shell(Cmd):
def do_create(self, args):
print(args)
complete_create = complete_for(
CompleteParam("path", ["foo", "bar"]),
CompleteParam("value", []),
BoolCompleteParam("ephemeral"),
BoolCompleteParam("sequence")
)
def do_delete(self, args):
print(args)
complete_delete = complete_for(
CompleteParam("path", ["foo", "bar"]),
BoolCompleteParam("recursive")
)
if __name__ == "__main__":
readline.set_completer_delims(" ")
s = Shell()
s.cmdloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment