Various other little bits.
authormdw <mdw>
Tue, 21 Jun 2005 07:15:39 +0000 (07:15 +0000)
committermdw <mdw>
Tue, 21 Jun 2005 07:15:39 +0000 (07:15 +0000)
catacomb/pwsafe.py
pwsafe

index 5503491..823b47f 100644 (file)
@@ -114,11 +114,17 @@ class PW (object):
     value = buf.getstring()
     return key, value
   def __getitem__(me, key):
     value = buf.getstring()
     return key, value
   def __getitem__(me, key):
-    return me.unpack(me.db[me.keyxform(key)])[1]
+    try:
+      return me.unpack(me.db[me.keyxform(key)])[1]
+    except KeyError:
+      raise KeyError, key
   def __setitem__(me, key, value):
     me.db[me.keyxform(key)] = me.pack(key, value)
   def __delitem__(me, key):
   def __setitem__(me, key, value):
     me.db[me.keyxform(key)] = me.pack(key, value)
   def __delitem__(me, key):
-    del me.db[me.keyxform(key)]
+    try:
+      del me.db[me.keyxform(key)]
+    except KeyError:
+      raise KeyError, key
   def __iter__(me):
     return PWIter(me)
 
   def __iter__(me):
     return PWIter(me)
 
diff --git a/pwsafe b/pwsafe
index e285380..3485b08 100755 (executable)
--- a/pwsafe
+++ b/pwsafe
@@ -8,6 +8,14 @@ from os import environ
 from sys import argv, exit, stdin, stdout, stderr
 from getopt import getopt, GetoptError
 from fnmatch import fnmatch
 from sys import argv, exit, stdin, stdout, stderr
 from getopt import getopt, GetoptError
 from fnmatch import fnmatch
+import sre as re
+
+prog = re.sub(r'^.*[/\\]', '', argv[0])
+def moan(msg):
+  print >>stderr, '%s: %s' % (prog, msg)
+def die(msg):
+  moan(msg)
+  exit(1)
 
 if 'PWSAFE' in environ:
   file = environ['PWSAFE']
 
 if 'PWSAFE' in environ:
   file = environ['PWSAFE']
@@ -70,7 +78,10 @@ def cmd_find(av):
   if len(av) != 1:
     return 1
   pw = PW(file)
   if len(av) != 1:
     return 1
   pw = PW(file)
-  print pw[av[0]]
+  try:
+    print pw[av[0]]
+  except KeyError, exc:
+    die('Password `%s\' not found.' % exc.args[0])
 
 def cmd_store(av):
   if len(av) < 1 or len(av) > 2:
 
 def cmd_store(av):
   if len(av) < 1 or len(av) > 2:
@@ -134,7 +145,10 @@ def cmd_del(av):
     return 1
   pw = PW(file, 'w')
   tag = av[0]
     return 1
   pw = PW(file, 'w')
   tag = av[0]
-  del pw[tag]
+  try:
+    del pw[tag]
+  except KeyError, exc:
+    die('Password `%s\' not found.' % exc.args[0])
 
 def asciip(s):
   for ch in s:
 
 def asciip(s):
   for ch in s:
@@ -163,9 +177,9 @@ commands = { 'create': [cmd_create,
              'dump' : [cmd_dump, '']}
 
 def version():
              'dump' : [cmd_dump, '']}
 
 def version():
-  print 'pwsafe 1.0.0'
+  print '%s 1.0.0' % prog
 def usage(fp):
 def usage(fp):
-  print >>fp, 'Usage: pwsafe COMMAND [ARGS...]'
+  print >>fp, 'Usage: %s COMMAND [ARGS...]' % prog
 def help():
   version()
   print
 def help():
   version()
   print
@@ -179,6 +193,8 @@ Options:
 -v, --version          Show program version number.
 -u, --usage            Show short usage message.
 
 -v, --version          Show program version number.
 -u, --usage            Show short usage message.
 
+-f, --file=FILE                Where to find the password-safe file.
+
 Commands provided:
 '''
   for c in commands:
 Commands provided:
 '''
   for c in commands:
@@ -215,5 +231,5 @@ if argv[0] in commands:
 else:
   c = 'find'
 if commands[c][0](argv):
 else:
   c = 'find'
 if commands[c][0](argv):
-  print >>stderr, 'Usage: pwsafe %s %s' % (c, commands[c][1])
+  print >>stderr, 'Usage: %s %s %s' % (prog, c, commands[c][1])
   exit(1)
   exit(1)