Last active
July 13, 2017 06:32
-
-
Save arujit/9afcf5db7d9e4e9980985c88652db9de to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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