changeset 16:2776755a3a7e

beginning separation of cmd2
author devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
date Wed, 19 Dec 2007 10:28:01 -0500
parents 9c7df9f825a1
children 25e908abf199
files cmd2.py sqlpyPlus.py sqlpython.py
diffstat 3 files changed, 101 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmd2.py	Wed Dec 19 10:28:01 2007 -0500
@@ -0,0 +1,97 @@
+import cmd, re
+
+class HistoryItem(str):
+    def __init__(self, instr):
+        str.__init__(self, instr)
+        self.lowercase = self.lower()
+        self.idx = None
+    def pr(self):
+        print '-------------------------[%d]' % (self.idx)
+        print self
+        
+class History(list):
+    rangeFrom = re.compile(r'^([\d])+\s*\-$')
+    def append(self, new):
+        new = HistoryItem(new)
+        list.append(self, new)
+        new.idx = len(self)
+    def extend(self, new):
+        for n in new:
+            self.append(n)
+    def get(self, getme):
+        try:
+            getme = int(getme)
+            if getme < 0:
+                return self[:(-1 * getme)]
+            else:
+                return [self[getme-1]]
+        except IndexError:
+            return []
+        except (ValueError, TypeError):
+            getme = getme.strip()
+            mtch = self.rangeFrom.search(getme)
+            if mtch:
+                return self[(int(mtch.group(1))-1):]
+            if getme.startswith(r'/') and getme.endswith(r'/'):
+                finder = re.compile(getme[1:-1], re.DOTALL | re.MULTILINE | re.IGNORECASE)
+                def isin(hi):
+                    return finder.search(hi)
+            else:
+                def isin(hi):
+                    return (getme.lower() in hi.lowercase)
+            return [itm for itm in self if isin(itm)]
+
+class Cmd(cmd.Cmd):
+    def __init__(self, *args, **kwargs):
+        cmd.Cmd.__init__(self, *args, **kwargs)
+        self.history = History()
+        self.excludeFromHistory = '''run r list l history hi ed li'''.split()
+
+    def postcmd(self, stop, line):
+        """Hook method executed just after a command dispatch is finished."""
+	try:
+	    command = line.split(None,1)[0].lower()
+	    if command not in self.excludeFromHistory:
+		self.history.append(line)
+	finally:
+	    return stop
+	
+    def do_history(self, arg):
+        """history [arg]: lists past commands issued
+        
+        no arg -> list all
+        arg is integer -> list one history item, by index
+        arg is string -> string search
+        arg is /enclosed in forward-slashes/ -> regular expression search
+        """
+        if arg:
+            history = self.history.get(arg)
+        else:
+            history = self.history
+        for hi in history:
+            hi.pr()
+    def last_matching(self, arg):
+        try:
+            if arg:
+                return self.history.get(arg)[-1]
+            else:
+                return self.history[-1]
+        except:
+            return None        
+    def do_list(self, arg):
+        """list [arg]: lists last command issued
+        
+        no arg -> list absolute last
+        arg is integer -> list one history item, by index
+        - arg, arg - (integer) -> list up to or after #arg
+        arg is string -> list last command matching string search
+        arg is /enclosed in forward-slashes/ -> regular expression search
+        """
+        try:
+            self.last_matching(arg).pr()
+        except:
+            pass
+    do_hi = do_history
+    do_l = do_list
+    do_li = do_list
+	
--- a/sqlpyPlus.py	Tue Dec 18 19:18:22 2007 -0500
+++ b/sqlpyPlus.py	Wed Dec 19 10:28:01 2007 -0500
@@ -340,54 +340,12 @@
             if not givenBindVars.has_key(varname):
                 print 'Bind variable %s not defined.' % (varname)                
     return result
-
-class HistoryItem(str):
-    def __init__(self, instr):
-        str.__init__(self, instr)
-        self.lowercase = self.lower()
-        self.idx = None
-    def pr(self):
-        print '-------------------------[%d]' % (self.idx)
-        print self
-        
-class History(list):
-    rangeFrom = re.compile(r'^([\d])+\s*\-$')
-    def append(self, new):
-        new = HistoryItem(new)
-        list.append(self, new)
-        new.idx = len(self)
-    def extend(self, new):
-        for n in new:
-            self.append(n)
-    def get(self, getme):
-        try:
-            getme = int(getme)
-            if getme < 0:
-                return self[:(-1 * getme)]
-            else:
-                return [self[getme-1]]
-        except IndexError:
-            return []
-        except (ValueError, TypeError):
-            getme = getme.strip()
-            mtch = self.rangeFrom.search(getme)
-            if mtch:
-                return self[(int(mtch.group(1))-1):]
-            if getme.startswith(r'/') and getme.endswith(r'/'):
-                finder = re.compile(getme[1:-1], re.DOTALL | re.MULTILINE | re.IGNORECASE)
-                def isin(hi):
-                    return finder.search(hi)
-            else:
-                def isin(hi):
-                    return (getme.lower() in hi.lowercase)
-            return [itm for itm in self if isin(itm)]
         
 class sqlpyPlus(sqlpython.sqlpython):
     def __init__(self):
         sqlpython.sqlpython.__init__(self)
         self.binds = CaselessDict()
         self.sqlBuffer = []
-        self.history = History()
         self.settable = ['maxtselctrows', 'maxfetch', 'autobind', 'failover', 'timeout'] # settables must be lowercase
         self.stdoutBeforeSpool = sys.stdout
         self.spoolFile = None
@@ -395,7 +353,6 @@
         self.failover = False
         self.multiline = '''select insert update delete tselect
         create drop alter'''.split()
-        self.excludeFromHistory = '''run r list l history hi ed li'''.split()
 
     def default(self, arg, do_everywhere=False):
         sqlpython.sqlpython.default(self, arg, do_everywhere)
@@ -458,15 +415,6 @@
         except Exception:
             return line
     
-    def postcmd(self, stop, line):
-        """Hook method executed just after a command dispatch is finished."""
-	try:
-	    command = line.split(None,1)[0].lower()
-	    if command not in self.excludeFromHistory:
-		self.history.append(line)
-	finally:
-	    return stop
-    
     def onecmd_plus_hooks(self, line):                          
         line = self.precmd(line)
         stop = self.onecmd(line)
@@ -813,44 +761,7 @@
         print runme
         self.onecmd_plus_hooks(runme)
     do_r = do_run
-    def do_history(self, arg):
-        """history [arg]: lists past commands issued
-        
-        no arg -> list all
-        arg is integer -> list one history item, by index
-        arg is string -> string search
-        arg is /enclosed in forward-slashes/ -> regular expression search
-        """
-        if arg:
-            history = self.history.get(arg)
-        else:
-            history = self.history
-        for hi in history:
-            hi.pr()
-    def last_matching(self, arg):
-        try:
-            if arg:
-                return self.history.get(arg)[-1]
-            else:
-                return self.history[-1]
-        except:
-            return None        
-    def do_list(self, arg):
-        """list [arg]: lists last command issued
-        
-        no arg -> list absolute last
-        arg is integer -> list one history item, by index
-        - arg, arg - (integer) -> list up to or after #arg
-        arg is string -> list last command matching string search
-        arg is /enclosed in forward-slashes/ -> regular expression search
-        """
-        try:
-            self.last_matching(arg).pr()
-        except:
-            pass
-    do_hi = do_history
-    do_l = do_list
-    do_li = do_list
+
     def load(self, fname):
         """Pulls command(s) into sql buffer.  Returns number of commands loaded."""
         try:
--- a/sqlpython.py	Tue Dec 18 19:18:22 2007 -0500
+++ b/sqlpython.py	Wed Dec 19 10:28:01 2007 -0500
@@ -8,18 +8,18 @@
 # Best used with the companion modules sqlpyPlus and mysqlpy 
 # See also http://twiki.cern.ch/twiki/bin/view/PSSGroup/SqlPython
 
-import cmd,getpass,binascii,cx_Oracle,re
+import cmd2,getpass,binascii,cx_Oracle,re
 import pexpecter
     
     # complication! separate sessions ->
     # separate transactions !!!!!
     # also: timeouts, other session failures
 	    
-class sqlpython(cmd.Cmd):
+class sqlpython(cmd2.Cmd):
     '''A python module to reproduce Oracle's command line with focus on customization and extention'''
 
     def __init__(self):
-        cmd.Cmd.__init__(self)
+        cmd2.Cmd.__init__(self)
         self.prompt = 'SQL.No_Connection> '
         self.maxfetch = 1000
         self.failoverSessions = []