Sanic Cookie and Session Management
Code here is mostly borrowed from sanic_session.
I wanted to make some changes that would break a big part of
sanic_session's API, so I decided to create this repo instead.
Some of the main deviations from sanic_session are:
Interfaces are only responsible for reading/writing the
session_dict. Session management logic is handled by the session object
No race conditions:
async with request['session']: request['session']['foo'] = 'bar'
request['session']['foo'] = 'bar'
It is still however possible to use the
session_dictwithout a context manager, but it will raise some warnings, unless it's explicitly turned off (warn_lock=False)
A more simple implementation of SessionDict that helps me sleep in peace at night. (Probably less performant)
In memory interface schedules cleanup to avoid running out of memory
from sanic_cookies import Session, InMemory interface = InMemory() app = Sanic() Session(app, master_interface=interface) # You can skip this part if you don't want scheduled interface cleanup def init_sanic_app(): @app.listener('before_server_start') def init_inmemory(app, loop): interface.init() @app.listener('after_server_stop') def kill_inmemory(app, loop): interface.kill() @app.route('/') async def handler(request): async with request['session'] as sess: # While not necessary with the in memory interface, it really is with standalone interfaces like Redis sess['foo'] = 'bar'
If enough people are interested, I can write some docs. Meanwhile, if you excuse me...
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.