Jelajahi Sumber

properly set and get attributes

oz123 11 tahun lalu
induk
melakukan
6c84912171
1 mengubah file dengan 53 tambahan dan 27 penghapusan
  1. 53 27
      pwman/data/nodes.py

+ 53 - 27
pwman/data/nodes.py

@@ -25,39 +25,31 @@ from pwman.util.crypto import CryptoEngine
 
 class NewNode(object):
 
-    def __init__(self, username="", password="", url="", notes="", tags=None):
+    def __init__(self, username="", password="", url="", notes="", tags=""):
         """Initialise everything to null."""
+
         self._id = 0
         self._username = username
         self._password = password
         self._url = url
         self._notes = notes
         self._tags = tags
-        self.set_tags(tags)
 
-    def __getattr__(self, name):
-
-        if name in ['username', 'password', 'url']:  # 'notes']:
-            enc = CryptoEngine.get()
-            return enc.decrypt(eval('self._'+name).strip())
-        elif name == 'tags':
-            return [tag for tag in self._tags]
-        else:
-            raise AttributeError("'NewNode' has no such attribute: %s" % name)
+    def __setattribute__(self, name, value):
 
-    def __setattr__(self, name, value):
-        if name in ['username', 'password', 'url', 'notes']:
+        if name in ['username']:
             enc = CryptoEngine.get()
             object.__setattr__(self, name, value)
             name = '_'+name
             object.__setattr__(self, name, enc.encrypt(value).strip())
-        if name == 'tags':
-            try:
-                object.__setattr__(self, name, [t for t in value])
-            except TypeError:
-                object.__setattr__(self, name, value)
+
+    def __getattribute__(self, name):
+
+        if name in ['username']:
+            enc = CryptoEngine.get()
+            return enc.decrypt(eval('self._'+name).strip())
         else:
-            object.__setattr__(self, name, value)
+            return object.__getattribute__(self, name)
 
     def dump_edit_to_db(self):
         dump = ""
@@ -96,6 +88,7 @@ class NewNode(object):
 
     def set_tags(self, tags):
         """
+        TODO: remove all references
         this method expects a list of tag instances.
         hence feed it with them.
 
@@ -107,26 +100,59 @@ class NewNode(object):
             self._tags = [t for t in tags]
 
     def set_id(self, id):
+
         self._id = id
 
-    def set_password(self, password):
-        """Set the password."""
+    #@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()
-        self._password = enc.encrypt(password).strip()
+        return enc.decrypt(self._password).strip()
 
-    def set_url(self, url):
-        """Set the URL."""
+    #@username.setter
+    #def username(self, value):
+    #    """Set the Notes."""
+    #    enc = CryptoEngine.get()
+    #    self._username = enc.encrypt(value).strip()
+
+    @password.setter
+    def password(self, value):
+        """Set the Notes."""
         enc = CryptoEngine.get()
-        self._url = enc.encrypt(url)
+        self._password = enc.encrypt(value).strip()
+
+    @property
+    def tags(self):
+        return [tag for tag in self._tags]
+
+    @tags.setter
+    def tags(self, value):
+        self._tags = [tag for tag in value]
+
+    @property
+    def url(self):
+        """Get the current url."""
+        enc = CryptoEngine.get()
+        return enc.decrypt(self._url).strip()
+
+    @url.setter
+    def url(self, value):
+        """Set the Notes."""
+        enc = CryptoEngine.get()
+        self._url = enc.encrypt(value).strip()
 
     @property
     def notes(self):
         """Get the current notes."""
-        print "ass"
         enc = CryptoEngine.get()
         return enc.decrypt(self._notes).strip()
 
-
     @notes.setter
     def notes(self, value):
         """Set the Notes."""