[Supervisor-checkins] r783 - supervisor/branches/tabcomplete/src/supervisor

Siddhant Goel siddhantgoel at gmail.com
Fri Jul 25 06:28:56 EDT 2008


Author: Siddhant Goel <siddhantgoel at gmail.com>
Date: Fri Jul 25 06:28:55 2008
New Revision: 783

Log:
fixed third level completions

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	Fri Jul 25 06:28:55 2008
@@ -162,6 +162,64 @@
                 return False
             raise
         return True
+        
+    def completionmatches(self,text,line):
+        supervisor=self.get_supervisor()
+        li=supervisor.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=[]
+        for i in groups:
+            if i in programs:
+                total.append(i+' ')
+            else:
+                for n in groupwiseprograms[i]:
+                    total.append(i+':'+n+' ')
+        if len(line.split()) == 1:
+            return total
+        else:
+            current=line.split()[-1]
+            if line.endswith(' ') and len(line.split()) > 1:
+                results=[i for i in total if i.startswith(text)]
+                return results
+            if ':' in current:
+                g=current.split(':')[0]
+                results = [i+' ' for i in groupwiseprograms[g] if i.startswith(text)]
+                return results
+            results = [i for i in total if i.startswith(text)]
+            return results
+
+    def complete(self,text,state):
+        try:
+            import readline
+        except ImportError:
+            return None
+        line=readline.get_line_buffer()
+        if line == '':
+            results = [i+' ' for i in self.vocab if i.startswith(text)]+[None]
+            return results[state]
+        else:
+            exp=line.split()[0]
+            if exp in ['start','stop','restart','clear','status','tail']:
+                results=self.completionmatches(text,line)+[None]
+                return results[state]
+            elif exp in ['maintail','pid','reload','shutdown','exit','open','quit','version','EOF']:
+                return None
+            elif exp == 'help':
+                if line.endswith(' ') and len(line.split()) > 1:
+                    return None
+                results=[i+' ' for i in self.vocab if i.startswith(text)]+[None]
+                return results[state]
+            else:
+                results=[i+' ' for i in self.vocab if i.startswith(text)]+[None]
+                return results[state]
 
     def do_help(self, arg):
         for plugin in self.options.plugins:
@@ -177,63 +235,6 @@
 
     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