Skip to content

Instantly share code, notes, and snippets.

@vortec
Created October 30, 2015 16:53
Show Gist options
  • Save vortec/1c026c39bbede59a5ed4 to your computer and use it in GitHub Desktop.
Save vortec/1c026c39bbede59a5ed4 to your computer and use it in GitHub Desktop.
import uuid
class SessionNotFound(Exception):
pass
class InMemoryStore:
""" not thread-safe ;-) """
def __init__(self):
self.sessions = {}
def get(self, sid):
data = self.sessions.get(sid, None)
if data is None:
raise SessionNotFound
return data
def exists(self, sid):
return sid in self.sessions
def set(self, sid, data):
self.sessions[sid] = data
def delete(self, sid):
del self.sessions[sid]
class SessionMiddleware:
def __init__(self, store, cookie_name='sid'):
self.store = store
self.cookie_name = cookie_name
def generate_sid(self):
return str(uuid.uuid4())
def process_request(self, request, response):
sid = request.cookies.get(self.cookie_name, None)
if sid is not None:
try:
data = self.store.get(sid)
except SessionNotFound:
return
request.context.update(data)
def process_response(self, request, response, resource):
sid = request.cookies.get(self.cookie_name, None)
if sid is None:
sid = self.generate_sid()
response.set_cookie(self.cookie_name, sid, secure=False)
self.store.set(sid, request.context)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment