[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()
+