Skip to content

Instantly share code, notes, and snippets.

@arujit
Last active July 13, 2017 06:32
Show Gist options
  • Save arujit/9afcf5db7d9e4e9980985c88652db9de to your computer and use it in GitHub Desktop.
Save arujit/9afcf5db7d9e4e9980985c88652db9de to your computer and use it in GitHub Desktop.
import cherrypy
import datetime
import time
from cherrys import RedisSession
import json
class RedisJsonSession(RedisSession):
def __init__(self, *arg, **kwargs):
RedisSession.__init__(self, *arg, **kwargs)
self.dirty = False
def __setitem__(self, key, value):
if not self.loaded:
self.load()
self._data[key] = value
self.dirty = True
def __delitem__(self, key):
if not self.loaded:
self.load()
self.dirty = True
del self._data[key]
def _load(self):
cache_data = self.cache.get(self._id)
if not cache_data:
return cache_data
try:
data = json.loads(cache_data)
except ValueError:
return None
return data['sdata'], datetime.datetime.fromtimestamp(data['setime'])
def _save(self, expiration_time):
if self.dirty is True:
etime = time.mktime(expiration_time.timetuple())
json_data = json.dumps({'sdata': self._data, 'setime': etime})
result = self.cache.setex(self.id, json_data, self.timeout * 60)
if not result:
raise AssertionError(
"Session data for id %r not set." %
self.id)
else:
pass
def _delete(self):
self.cache.delete(self.id)
def expire_session(self):
self.cache.delete(self.id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment