Skip to content

Instantly share code, notes, and snippets.

@adeel
Created April 15, 2011 13:53
Show Gist options
  • Save adeel/921734 to your computer and use it in GitHub Desktop.
Save adeel/921734 to your computer and use it in GitHub Desktop.
pack/middleware/session.py
from pack.middleware.cookies import *
def wrap_session(app, options={}):
store = options.get("store", "memory_store")
cookie_name = options.get("cookie_name", "pack-session")
session_root = options.get("root", "/")
cookie_attrs = dict(options.get("cookie_attrs", {}),
**{"path": session_root})
def wrapped_app(req):
sess_key = request.get("cookies", {}).get(cookie_name)
req["session"] = read_session(store, sess_key)
response = app(req)
sess_key_ = None
if response.has_key("session"):
session = response.get("session")
if session:
sess_key_ = write_session(store, sess_key, session)
else:
if sess_key:
sess_key_ = delete_session(store, sess_key)
del response["session"]
new_attrs = response.get("session_cookie_attrs")
new_attrs["value"] = sess_key_
cookie = {cookie_name: dict(cookie_attrs, **new_attrs)}
if sess_key_ and (sess_key != sess_key_):
response["cookies"] = dict(response.get("cookies", {}), cookie)
return response
return wrap_cookies(wrapped_app)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment