Kaynağa Gözat

multiple bug fixes

oz123 11 yıl önce
ebeveyn
işleme
1f94a44046
4 değiştirilmiş dosya ile 46 ekleme ve 28 silme
  1. 2 0
      pwman/data/drivers/sqlite.py
  2. 30 26
      pwman/data/nodes.py
  3. 13 0
      pwman/ui/cli.py
  4. 1 2
      pwman/ui/tools.py

+ 2 - 0
pwman/data/drivers/sqlite.py

@@ -128,6 +128,8 @@ class SQLiteDatabaseNewForm(Database):
             return tags
         except sqlite.DatabaseError, e:
             raise DatabaseException("SQLite: %s" % (e))
+        except sqlite.InterfaceError:
+            import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
 
     def parse_node_string(self, string):
         nodestring = string.split("##")

+ 30 - 26
pwman/data/nodes.py

@@ -35,21 +35,25 @@ class NewNode(object):
         self._notes = notes
         self._tags = tags
 
-    def __setattribute__(self, name, value):
-
-        if name in ['username']:
-            enc = CryptoEngine.get()
-            object.__setattr__(self, name, value)
-            name = '_'+name
-            object.__setattr__(self, name, enc.encrypt(value).strip())
-
-    def __getattribute__(self, name):
-
-        if name in ['username']:
-            enc = CryptoEngine.get()
-            return enc.decrypt(eval('self._'+name).strip())
-        else:
-            return object.__getattribute__(self, name)
+    #def __setattr__(self, name, value):
+    #    if name in ['username', 'password', 'url', 'notes']:
+    #        enc = CryptoEngine.get()
+    #        object.__setattr__(self, name, enc.decrypt(value).strip())
+    #    if name in ['_username', '_password', '_url', '_notes']:
+    #        enc = CryptoEngine.get()
+    #        object.__setattr__(self, name, enc.encrypt(value).strip())
+    #    if name == '_tags':
+    #        object.__setattr__(self, name, [t for t in value])
+    #    elif name == '_id':
+    #        object.__setattr__(self, name, value)
+
+    #def __getattribute__(self, name):
+
+    #    if name in ['username', 'password', 'url', 'notes']:
+    #        enc = CryptoEngine.get()
+    #        return enc.decrypt(eval('self._'+name).strip())
+    #    else:
+    #        return object.__getattribute__(self, name)
 
     def dump_edit_to_db(self):
         dump = ""
@@ -103,23 +107,23 @@ class NewNode(object):
 
         self._id = id
 
-    #@property
-    #def username(self):
-    #    """Get the current username."""
-    #    enc = CryptoEngine.get()
-    #    return enc.decrypt(self._username).strip()
-
     @property
     def password(self):
         """Get the current password."""
         enc = CryptoEngine.get()
         return enc.decrypt(self._password).strip()
 
-    #@username.setter
-    #def username(self, value):
-    #    """Set the Notes."""
-    #    enc = CryptoEngine.get()
-    #    self._username = enc.encrypt(value).strip()
+    @property
+    def username(self):
+        """Get the current username."""
+        enc = CryptoEngine.get()
+        return enc.decrypt(self._username).strip()
+
+    @username.setter
+    def username(self, value):
+        """Set the Notes."""
+        enc = CryptoEngine.get()
+        self._username = enc.encrypt(value).strip()
 
     @password.setter
     def password(self, value):

+ 13 - 0
pwman/ui/cli.py

@@ -1009,3 +1009,16 @@ class PwmanCliNew(PwmanCli):
                 zerome(node[0]._password)
             except Exception, e:
                 self.error(e)
+
+    def do_delete(self, arg):
+        ids = self.get_ids(arg)
+        try:
+            nodes = self._db.getnodes(ids)
+            for n in nodes:
+                b = tools.getyesno("Are you sure you want to delete '%s@%s'?"
+                                   % (n.username, n.url), False)
+                if b is True:
+                    self._db.removenodes([n])
+                    print "%s@%s deleted" % (n.username, n.url)
+        except Exception, e:
+            self.error(e)

+ 1 - 2
pwman/ui/tools.py

@@ -256,7 +256,6 @@ class CliMenu(object):
                     break
                 print "Invalid selection"
 
-
     def runner(self, new_node):
         while True:
             i = 0
@@ -302,10 +301,10 @@ class CliMenu(object):
                 elif selection == 3:  # for notes
                     new_node.notes = getinput("Notes:")
                     self.items[3].getter = new_node.notes
+                    self.items[3].setter = new_node.notes
                 elif selection == 4:
                     value = self.items[selection].editor(0)
                     new_node.tags = value
-                    import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
                     self.items[4].setter = value
                     self.items[4].getter = value