def set(self, key, value, timeout=None): if timeout is None: timeout = self.default_timeout cursor = db.cursor() cursor.execute("SELECT COUNT(*) FROM %s" % self._table) num = cursor.fetchone()[0] now = datetime.now().replace(microsecond=0) exp = datetime.fromtimestamp(time.time() + timeout).replace(microsecond=0) if num > self._max_entries: self._cull(cursor, now) encoded = base64.encodestring(pickle.dumps(value, 2)).strip() cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s" % self._table, [key]) try: if cursor.fetchone(): cursor.execute( "UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s" % self._table, [encoded, str(exp), key], ) else: cursor.execute( "INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)" % self._table, [key, encoded, str(exp)], ) except DatabaseError: # To be threadsafe, updates/inserts are allowed to fail silently pass else: db.commit()
def clean_up(): # Clean up old database records cursor = db.cursor() cursor.execute("DELETE FROM %s WHERE %s < NOW()" % \ (db.quote_name('core_sessions'), db.quote_name('expire_date'))) cursor.execute("DELETE FROM %s WHERE %s < NOW() - INTERVAL '1 week'" % \ (db.quote_name('registration_challenges'), db.quote_name('request_date'))) db.commit()
def get(self, key, default=None): cursor = db.cursor() cursor.execute("SELECT cache_key, value, expires FROM %s WHERE cache_key = %%s" % self._table, [key]) row = cursor.fetchone() if row is None: return default now = datetime.now() if row[2] < now: cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % self._table, [key]) db.commit() return default return pickle.loads(base64.decodestring(row[1]))
def delete(self, key): cursor = db.cursor() cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % self._table, [key]) db.commit()