[Supervisor-checkins] r775 - supervisor/branches/tabcomplete/src/supervisor
Siddhant Goel
siddhantgoel at gmail.com
Sun Jun 15 15:33:31 EDT 2008
Author: Siddhant Goel <siddhantgoel at gmail.com>
Date: Sun Jun 15 15:33:31 2008
New Revision: 775
Log:
tab complete work
Modified:
supervisor/branches/tabcomplete/src/supervisor/supervisorctl.py
Modified: supervisor/branches/tabcomplete/src/supervisor/supervisorctl.py
==============================================================================
--- supervisor/branches/tabcomplete/src/supervisor/supervisorctl.py (original)
+++ supervisor/branches/tabcomplete/src/supervisor/supervisorctl.py Sun Jun 15 15:33:31 2008
@@ -54,6 +54,9 @@
self.options = options
self.prompt = self.options.prompt + '> '
self.options.plugins = []
+ self.vocab = ['clear','maintail','pid','reload','shutdown','status',\
+ 'tail','exit','open','quit','restart','start','stop','version',\
+ 'EOF','help']
cmd.Cmd.__init__(self, completekey, stdin, stdout)
for name, factory, kwargs in self.options.plugin_factories:
plugin = factory(self, **kwargs)
@@ -174,6 +177,63 @@
def help_EOF(self):
self.output("To quit, type ^D or use the quit command")
+
+ def completionmatches(self,text,line):
+ s=getattr(self.options.getServerProxy(),'supervisor')
+ li=s.getAllProcessInfo()
+ groups=[]
+ programs=[]
+ groupwiseprograms={}
+ for i in li:
+ programs.append(i['name'])
+ if i['group'] not in groups:
+ groups.append(i['group'])
+ groupwiseprograms[i['group']]=[]
+ groupwiseprograms[i['group']].append(i['name'])
+ total=programs+groups
+ text=text.lstrip()
+ text_alt=line.split()[-1]
+ if ':' in text_alt:
+ results=groupwiseprograms[text_alt.split(':')[0]]
+ i=0
+ while i < len(results):
+ if results[i] in programs:
+ results[i]=results[i]+' '
+ i=i+1
+ return [i for i in results if i.startswith(text_alt.split(':')[-1])]
+ elif ':' not in text_alt or text_alt=='':
+ results=[i for i in total if i.startswith(text)]
+ i=0
+ while i < len(results):
+ if (results[i] in groups) and (results[i] in programs):
+ # process could be started just by its name
+ # and no group:program nomenclature is needed
+ i+=1
+ continue
+ if results[i] in groups:
+ results[i]=results[i]+':'
+ if results[i] in programs:
+ results[i]=results[i]+' '
+ i=i+1
+ return results
+
+ def complete(self,text,state):
+ import readline
+ current=readline.get_line_buffer()
+ if current.lstrip()=='':
+ results=[i+' ' for i in self.vocab if i.startswith(text)]+[None]
+ return results[state]
+ else:
+ exp=current.strip().split()[0]
+ if exp in ['start','stop','restart','clear','status','tail']:
+ results=self.completionmatches(text,current)+[None]
+ return results[state]
+ elif exp in ['maintail','pid','reload','shutdown','exit','open','quit','version','EOF']:
+ return None
+ else:
+ results=[i+' ' for i in self.vocab if i.startswith(text)]+[None]
+ return results[state]
+
def get_names(inst):
names = []
More information about the Supervisor-checkins
mailing list