diff cmd2.py @ 30:2739250177ed

load fixed?
author devlinjs@FA7CZA6N1254998.wrightpatterson.afmc.ds.af.mil
date Fri, 21 Dec 2007 14:00:11 -0500
parents a6f68b25ae16
children 5e2f6ec2e383
line wrap: on
line diff
--- a/cmd2.py	Fri Dec 21 10:04:26 2007 -0500
+++ b/cmd2.py	Fri Dec 21 14:00:11 2007 -0500
@@ -9,6 +9,7 @@
 
 still to do:
 edit
+run
 >
 """
 import cmd, re, os
@@ -22,7 +23,7 @@
     defaultExtension = 'txt'
     defaultFileName = 'command.txt'
     editor = os.environ.get('EDITOR') or ''
-    settable = ['prompt', 'continuationPrompt', 'defaultFileName', 'editor']
+    settable = ['prompt', 'continuationPrompt', 'defaultFileName', 'editor', 'caseInsensitive']
     terminators = ';\n'
     def do_cmdenvironment(self, args):
 	self.stdout.write("""
@@ -68,7 +69,8 @@
     def finishStatement(self, firstline):
 	statement = firstline
 	while not self.statementHasEnded(statement):
-	    statement = '%s\n%s' % (statement, self.pseudo_raw_input(self.continuationPrompt))
+	    inp = self.pseudo_raw_input(self.continuationPrompt)
+	    statement = '%s\n%s' % (statement, inp)
 	return statement
 	# assembling a list of lines and joining them at the end would be faster, 
 	# but statementHasEnded needs a string arg; anyway, we're getting
@@ -96,7 +98,7 @@
 	return True
     do_eof = do_EOF
     
-    statementEndPattern = re.compile(r'[%s]\s*$' % terminators)	
+    statementEndPattern = re.compile(r'([%s]\s*)|(EOF)$' % terminators)	
     def statementHasEnded(self, lines):
 	return bool(self.statementEndPattern.search(lines))
 	       
@@ -147,7 +149,7 @@
 	    val = cast(currentVal, val.strip(self.terminators))
 	    setattr(self, paramName, val)
 	    self.stdout.write('%s - was: %s\nnow: %s\n' % (paramName, currentVal, val))
-        except (ValueError, AttributeError, NotSettableError):
+        except (ValueError, AttributeError, NotSettableError), e:
             self.do_show(arg)
 		
     def do_shell(self, arg):
@@ -196,7 +198,7 @@
     def do_ed(self, arg):
         'ed [N]: brings up SQL from N commands ago in text editor, and puts result in SQL buffer.'
 	if not self.editor:
-	    self.do_show('editor')
+	    print "please use 'set editor' to specify your text editing program of choice."
 	    return
         buffer = self.last_matching(arg)
         if not buffer:
@@ -206,7 +208,7 @@
         f.write(buffer)
         f.close()
 	os.system('%s %s' % (self.editor, self.defaultFileName))
-        self.load(self.defaultFileName)
+        self.do_load(self.defaultFileName)
     do_edit = do_ed
     
     def do_save(self, fname=None):
@@ -283,31 +285,31 @@
             return [itm for itm in self if isin(itm)]
 
 class NotSettableError(Exception):
-    None    
+    pass
 	
 def cast(current, new):
     """Tries to force a new value into the same type as the current."""
     typ = type(current)
-    print type(new)
     if typ == bool:
-	new = new.lower()    
-	print new
+	try:
+	    return bool(int(new))
+	except ValueError, TypeError:
+	    pass
 	try:
-	    print new == 'on'
-	    if (new=='on') or (new[0] in ('y','t')):
-		return True
-	    try:
-		return bool(int(new))
-	    except ValueError:
-		pass
+	    new = new.lower()    
+	except:
+	    pass
+	if (new=='on') or (new[0] in ('y','t')):
+	    return True
+	if (new=='off') or (new[0] in ('n','f')):
 	    return False
-	except TypeError:
+    else:
+	try:
+	    return typ(new)
+	except:
 	    pass
-    try:
-	return typ(new)
-    except:
-	print "Problem setting parameter (now %s) to %s; incorrect type?" % (current, new)
-	return current
+    print "Problem setting parameter (now %s) to %s; incorrect type?" % (current, new)
+    return current
 	
 class Statekeeper(object):
     def __init__(self, obj, attribs):