Jim Gallacher
jg.lists at sympatico.ca
Thu Apr 7 15:39:56 EDT 2005
Nicolas Lehuen wrote: > Hi, > > Your code seems perfect to me. We could indeed add an extra hash to > the directory name so that all sessions do not end in the same > directory ; but I guess this is not needed on modern FS like ReiserFS > or WinFS. > > Also, the unlink call in do_delete needs an "os." to be correct... > > If everybody is OK I could integrate your class into the Session.py > module, so that it becomes a standard session implementation in the > next release. Shouldn't a lock be aquired and released before reading and writing the session to a file? Regards, Jim > Grisha, Graham, what do you think ? > > Just as a note, the DbmSession relies on the anydbm module ; maybe the > crappy performance were due to the fact that anydbm reverted to a > crappy implementation, not the fastest (?) Berkeley-DB based one. > > Regards, > > Nicolas > > On Apr 7, 2005 5:01 PM, dharana <dharana at dharana.net> wrote: > >> >>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 >> >> >>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 >> >> >>_______________________________________________ >>Mod_python mailing list >>Mod_python at modpython.org >>http://mailman.modpython.org/mailman/listinfo/mod_python >> >> >> > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python >
|