[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