[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