[Nym3-commit] r79 - trunk

nym3-devel@lists.noreply.org nym3-devel@lists.noreply.org
Wed, 04 Aug 2004 18:55:21 +0200


Author: laurent
Date: 2004-08-04 18:55:20 +0200 (Wed, 04 Aug 2004)
New Revision: 79

Modified:
   trunk/Main.py
   trunk/User.py
Log:
- Flush user data on object destruction.
- Use one lock per process
- Use None default values, it's less ugly.


Modified: trunk/Main.py
===================================================================
--- trunk/Main.py	2004-08-04 15:47:06 UTC (rev 78)
+++ trunk/Main.py	2004-08-04 16:55:20 UTC (rev 79)
@@ -19,6 +19,7 @@
     # TODO : we should honor the "Quota" sending policy.
     if nymuser.usage() + len(msg) > nymuser.quota():
 	print "Quota exceeded."
+	print repr(nymuser.usage()) + " > " + repr(nymuser.quota())
 	sys.exit(75)
     # Valid user, not over quota. Filtering policy can wait.
     nymuser.store(msg)
@@ -200,13 +201,13 @@
                     nymUser.load_index()
                     nymUser.load_synbox()
 
-                    for mid in com.l:
+                    for mid in com.l: pass
                         
 
-                    nymUser.save_mbox()
-                    nymUser.save_index()
-                    nymUser.save_synbox()
-                    nymUser.release()
+                    #nymUser.save_mbox()
+                    #nymUser.save_index()
+                    #nymUser.save_synbox()
+                    #nymUser.release()
 		elif (com.ct() == 8):
 		    if(com.opt in Common.userPolicy):
 			nymUser.data[com.opt] = com.val

Modified: trunk/User.py
===================================================================
--- trunk/User.py	2004-08-04 15:47:06 UTC (rev 78)
+++ trunk/User.py	2004-08-04 16:55:20 UTC (rev 79)
@@ -20,21 +20,32 @@
 
 class User:
     """Hold user data"""
-    def __init__(self, username):
+    def __init__(self, username, create = 0):
 	self.datafile = Config.path + os.sep + username + '.dat'
 	self.username = username
-	self.lock()
+	self.index = None
+	self.mbox = None
+	self.syn = None
+	self.data = None
+	self._lock()
 	try:
 	    f = open(self.datafile, 'r')
 	    self.data = pickle.load(f)
 	    f.close()
 	except IOError:
+	    if create == 0: raise NoSuchUser()
 	    f = open(self.datafile, 'w')
 	    self.data = Config.default_settings
 	    self.data['username'] = username
 	    pickle.dump(self.data, f)
 	    f.close()
-	self.release()
+    
+    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]
@@ -42,24 +53,33 @@
     def __setitem__(self, key, value):
 	self.data[key] = value
 
-    def lock(self):
+    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):
+    def _release(self):
 	self.lock.release()
 
     def quota(self):
 	return self.data['quota']
 
     def usage(self):
-	sum = os.stat(self.surbfile())[6]
-	sum = sum + os.stat(self.indexfile[6])
-	sum = sum + os.stat(self.synboxfile[6])
-	sum = sum + os.stat(self.mboxfile[6])
-	self.data['quota'] = sum
+	sum = 0
+	try:
+	    sum = os.stat(self.surbfile())[6]
+	except: pass
+	try:
+	    sum = sum + os.stat(self.indexfile())[6]
+	except: pass
+	try:
+	    sum = sum + os.stat(self.synboxfile())[6]
+	except: pass
+	try:
+	    sum = sum + os.stat(self.mboxfile())[6]
+	except: pass
+	self.data['usage'] = sum
 	return sum
 
     def idKey(self):
@@ -103,12 +123,11 @@
 	ret.sort(timecmp)
 	return ret
     
-    def save_data(self):
-	self.lock()
+    def _save_data(self):
+	if self.data == None: return
 	f = open(self.datafile, 'w')
 	pickle.dump(self.data, f)
 	f.close()
-	self.release()
 
     def surbfile(self):
 	return Config.path + os.sep + self.data['username'] + '.surbs'
@@ -127,7 +146,6 @@
     def clean_surbs(self):
 	"Inspect the surbs and delete the used/outdated"
 	fname = self.surbfile()
-	self.lock()
 	f = open(fname, "r")
 	buffer = f.read()
 	f.close()
@@ -153,46 +171,38 @@
 	    f.write(surb)
 	    self.data['nSurbs'] = self.data['nSurbs'] + 1
 	f.close()
-	self.release()
 
     def addSurbs(self,surbs):
 	fname = self.surbfile()
-	self.lock()
 	f = open(fname, "a")
 	f.write(surbs)
 	f.close()
 	self.data['nSurbs'] = self.data['nSurbs'] + ( len(surbs) / surb_len)
-	self.release()
 
     def delSurbs(self):
-        fname = self.surbfile()
-	self.lock()
+	fname = self.surbfile()
         os.unlink(fname)
-	self.release()
-        self.data['nSurbs'] = 0
+	self.data['nSurbs'] = 0
 
     def load_mbox(self):
-	if self.__dict__.has_key('mbox'): return
+	if not self.mbox == None: return
 	mbox = self.mboxfile()
-	self.lock()
 	try:
 	    f = open(mbox, 'r')
 	    self.mbox = pickle.load(f)
 	    f.close()
 	except IOError:
 	    self.mbox = {}
-	self.release()
 
     def mboxfile(self):
 	return Config.path + os.sep + self.data['username'] + '.mbox'
 
-    def save_mbox(self):
+    def _save_mbox(self):
+	if self.mbox == None: return
 	mbox = self.mboxfile()
-	self.lock()
 	f = open(mbox, 'w')
 	pickle.dump(self.mbox, f)
 	f.close()
-	self.release()
 
     def synboxfile(self):
 	return Config.path + os.sep + self.data['username'] + '.syn'
@@ -201,44 +211,38 @@
 	return Config.path + os.sep + self.data['username'] + '.idx'
 	
     def load_synbox(self):
-	if self.__dict__.has_key('syn'): return
+	if not self.syn == None: return
 	synbox = self.synboxfile()
-	self.lock()
 	try:
 	    f = open(synbox, 'r')
 	    self.syn = pickle.load(f)
 	    f.close()
 	except IOError:
 	    self.syn = []
-	self.release()
 
-    def save_synbox(self):
+    def _save_synbox(self):
+	if self.syn == None: return
 	synbox = self.synboxfile()
-	self.lock()
 	f = open(synbox, 'w')
 	pickle.dump(self.syn, f)
 	f.close()
-	self.release()
     
     def load_index(self):
-	if self.__dict__.has_key('index'): return
+	if not self.index == None: return
 	index = self.indexfile()
-	self.lock()
 	try:
 	    f = open(index, 'r')
 	    self.index = pickle.load(f)
 	    f.close()
 	except IOError:
 	    self.index = {}
-	self.release()
     
-    def save_index(self):
+    def _save_index(self):
+	if self.index == None: return
 	index = self.indexfile()
-	self.lock()
 	f = open(index, 'w')
 	pickle.dump(self.index, f)
 	f.close()
-	self.release()
         
     def store(self, msg):
 	"Store an incoming message"
@@ -248,17 +252,14 @@
 	mid = Mail.genMid()
 	while self.mbox.has_key(mid): mid = Mail.genMid()
 	self.mbox[mid] = msg # TODO : this is where we're supposed to crypt.
-	self.save_mbox()
 
 	# store the synopsis
 	self.load_synbox()
 	self.syn.append(([mid], 'clear', syn))
-	self.save_synbox()
 
 	# create an index entry for the synopsis
 	self.load_index()
 	self.index[mid] = {'time' : int(time.time()), 'sent' : 'nothing' }
-	self.save_index()
 
     def setKeys(self,kid,kenc):
 	self.data['idKey'] = kid