index 7ee3bc131603860472ed62a7cfce1b8c4b96eff5..d607f477ce3c3585450cff0bc5f9b1a07f4a6400 100644 (file)
-#$Id: sessions_rdbms.py,v 1.1 2004-03-18 01:58:45 richard Exp $
+#$Id: sessions_rdbms.py,v 1.8 2008-08-18 05:04:01 richard Exp $
"""This module defines a very basic store that's used by the CGI interface
to store session and one-time-key information.
def clear(self):
self.cursor.execute('delete from %ss'%self.name)
+ def exists(self, infoid):
+ n = self.name
+ self.cursor.execute('select count(*) from %ss where %s_key=%s'%(n,
+ n, self.db.arg), (infoid,))
+ return int(self.cursor.fetchone()[0])
+
_marker = []
def get(self, infoid, value, default=_marker):
n = self.name
if not res:
if default != self._marker:
return default
- raise KeyError, 'No such %s "%s"'%(self.name, infoid)
+ raise KeyError('No such %s "%s"'%(self.name, infoid))
values = eval(res[0])
return values.get(value, None)
n, n, self.db.arg), (infoid,))
res = self.cursor.fetchone()
if not res:
- raise KeyError, 'No such %s "%s"'%(self.name, infoid)
+ raise KeyError('No such %s "%s"'%(self.name, infoid))
return eval(res[0])
def set(self, infoid, **newvalues):
args = (infoid, time.time(), repr(values))
c.execute(sql, args)
+ def list(self):
+ c = self.cursor
+ n = self.name
+ c.execute('select %s_key from %ss'%(n, n))
+ return [res[0] for res in c.fetchall()]
+
def destroy(self, infoid):
self.cursor.execute('delete from %ss where %s_key=%s'%(self.name,
self.name, self.db.arg), (infoid,))
def updateTimestamp(self, infoid):
- self.cursor.execute('update %ss set %s_time=%s where %s_key=%s'%(
- self.name, self.name, self.db.arg, self.name, self.db.arg),
- (time.time(), infoid))
-
- def clean(self, now):
- """Age sessions, remove when they haven't been used for a week.
- """
- old = now - 60*60*24*7
+ """ don't update every hit - once a minute should be OK """
+ now = time.time()
+ self.cursor.execute('''update %ss set %s_time=%s where %s_key=%s
+ and %s_time < %s'''%(self.name, self.name, self.db.arg,
+ self.name, self.db.arg, self.name, self.db.arg),
+ (now, infoid, now-60))
+
+ def clean(self):
+ ''' Remove session records that haven't been used for a week. '''
+ now = time.time()
+ week = 60*60*24*7
+ old = now - week
self.cursor.execute('delete from %ss where %s_time < %s'%(self.name,
self.name, self.db.arg), (old, ))
class OneTimeKeys(BasicDatabase):
name = 'otk'
+# vim: set et sts=4 sw=4 :