[Nym3-commit] r116 - trunk/nym3/Client

nym3-devel@lists.noreply.org nym3-devel@lists.noreply.org
Thu, 19 Aug 2004 11:41:44 +0200


Author: jr
Date: 2004-08-19 11:41:43 +0200 (Thu, 19 Aug 2004)
New Revision: 116

Added:
   trunk/nym3/Client/User.py
Log:
- add the class that will contain account related infos in the client
- take the data structure from Server/User.py and adpat it slightly


Added: trunk/nym3/Client/User.py
===================================================================
--- trunk/nym3/Client/User.py	2004-08-19 09:17:05 UTC (rev 115)
+++ trunk/nym3/Client/User.py	2004-08-19 09:41:43 UTC (rev 116)
@@ -0,0 +1,113 @@
+import os
+import nym3.Client.Config as Config
+import mixminion.Common
+
+class NoSuchUser(Exception): pass
+
+class AlreadySuchUser(Exception): pass
+
+
+class User:
+    """Hold user data"""
+    def __init__(self, create = 0):
+        #TODO what is the criteria determining which account we must load? For the time being we only have a user account
+        """0 : load user data throw an error if the account doesn't exist
+        _ : create a new account
+        """
+        self.home = Config.path + os.sep
+        self.datafile = self.home + 'data'
+	self.index = None
+	self.mbox = None
+	self.syn = None
+	self.data = None
+        self._lock()
+	try:
+	    f = open(self.datafile, 'r')
+        except IOError:
+            if create == 0:
+                raise NoSuchUser()
+            else:
+                self.data = Config.default_settings
+
+    def __del__(self):
+        self._save_index()
+        self._save_synbox()
+        self._save_mbox()
+        self._save_data()
+        self._release()
+    
+    def __getitem__(self, key):
+	return self.data[key]
+
+    def __setitem__(self, key, value):
+	self.data[key] = value
+
+    def _lock(self):
+	"""Lock the user. For well behaved functions."""
+	self.lock = mixminion.Common.Lockfile(Config.path + os.sep + 
+					      self.username + '.lck')
+	self.lock.acquire()
+
+    def _release(self):
+	self.lock.release()
+
+    def load_mbox(self):
+	if not self.mbox == None: return
+	mbox = self.mboxfile()
+	try:
+	    f = open(mbox, 'r')
+	    self.mbox = pickle.load(f)
+	    f.close()
+	except IOError:
+	    self.mbox = {}
+
+    def mboxfile(self):
+	return self.home + 'mbox'
+
+    def _save_mbox(self):
+	if self.mbox == None: return
+	mbox = self.mboxfile()
+	f = open(mbox, 'w')
+	pickle.dump(self.mbox, f)
+	f.close()
+
+    def synboxfile(self):
+	return self.home + 'syn'
+
+    def indexfile(self):
+	return self.home + 'idx'
+	
+    def load_synbox(self):
+	if not self.syn == None: return
+	synbox = self.synboxfile()
+	try:
+	    f = open(synbox, 'r')
+	    self.syn = pickle.load(f)
+	    f.close()
+	except IOError:
+	    self.syn = []
+
+    def _save_synbox(self):
+	if self.syn == None: return
+	synbox = self.synboxfile()
+	f = open(synbox, 'w')
+	pickle.dump(self.syn, f)
+	f.close()
+    
+    def load_index(self):
+	if not self.index == None: return
+	index = self.indexfile()
+	try:
+	    f = open(index, 'r')
+	    self.index = pickle.load(f)
+	    f.close()
+	except IOError:
+	    self.index = {}
+    
+    def _save_index(self):
+	if self.index == None: return
+	index = self.indexfile()
+	f = open(index, 'w')
+	pickle.dump(self.index, f)
+	f.close()
+