dharana
dharana at dharana.net
Thu Apr 7 11:01:34 EDT 2005
Graham Dumpleton wrote: > > On 07/04/2005, at 8:08 PM, dharana wrote: > >> If you want I can send my modified Session.py with the new FileSession >> class for review. > > > There probably shouldn't have been a need for you to copy/modify the actual > Session.py file which came with mod_python as your derived version could > live quite happily in its own module and simply used the installed Session > module. > I presumptuously thought that it could fit into the official mod_python package due to it's high performance when compared to DbmSession. > > Anyway, by all means post your code as sure it will be of interest to > someone, if not now then maybe in the future. If there are any problems > in what you have done, someone is also bound to point it out. > Here it goes. Please point out any obvious problem. Apart from being new to mod_python I'm also new to Python in general. For example, I don't think the exception handling I've put is completely correct. In anticipation for any possible attachment problems i pasted it directly. (I have read PEP 0008 and the 4 spaces indentation level recommendation but I'm in a hurry right now, sorry.) --- FileSession.py ----------------------------------------------------- import cPickle import tempfile from mod_python import Session tempdir = tempfile.gettempdir() class FileSession(Session.BaseSession): def __init__(self, req, sid=0, secret=None, timeout=0, lock=1): Session.BaseSession.__init__(self, req, sid=sid, secret=secret, timeout=timeout, lock=lock) def do_cleanup(self): import os # is there any faster way of doing this? for f in os.listdir(tempdir): if f.find('mp_sess_', 0, 11) == -1: continue fp = file('%s%s' % (tempdir, f)) dict = cPickle.load(fp) fp.close() if (time() - dict['_accessed']) > dict['_timeout']: os.unlink('%s%s' % (tempdir, f)) def do_load(self): try: # again, is there a more pythonic way of doing this check? fp = file('%s/mp_sess_%s' % (tempdir, self._sid)) except Exception: return None else: try: data = cPickle.load(fp) fp.close() return data except Exception: fp.close() pass def do_save(self, dict): fp = file('%s/mp_sess_%s' % (tempdir, self._sid), 'w+') cPickle.dump(dict, fp) fp.close() def do_delete(self): try: unlink('%s/mp_sess_%s' % (tempdir, self._sid)) except Exception: pass ------------------------------------------------------------------------ -- Juan Alonso http://gamersmafia.com | http://laflecha.net -------------- next part -------------- import cPickle import tempfile from mod_python import Session tempdir = tempfile.gettempdir() class FileSession(Session.BaseSession): def __init__(self, req, sid=0, secret=None, timeout=0, lock=1): Session.BaseSession.__init__(self, req, sid=sid, secret=secret, timeout=timeout, lock=lock) def do_cleanup(self): import os # is there any faster way of doing this? for f in os.listdir(tempdir): if f.find('mp_sess_', 0, 11) == -1: continue fp = file('%s%s' % (tempdir, f)) dict = cPickle.load(fp) fp.close() if (time() - dict['_accessed']) > dict['_timeout']: os.unlink('%s%s' % (tempdir, f)) def do_load(self): try: # again, is there a more pythonic way of doing this check? fp = file('%s/mp_sess_%s' % (tempdir, self._sid)) except Exception: return None else: try: data = cPickle.load(fp) fp.close() return data except Exception: fp.close() pass def do_save(self, dict): fp = file('%s/mp_sess_%s' % (tempdir, self._sid), 'w+') cPickle.dump(dict, fp) fp.close() def do_delete(self): try: unlink('%s/mp_sess_%s' % (tempdir, self._sid)) except Exception: pass
|