Sessions for the Google App Engine Python runtime
Project description
Sessions for python WSGI applications.
Features
Cookie based session for python WSGI applications
- Configurable for the following cookie settings
Domain
Path
Secure
HttpOnly
Expires (timeout)
- Support for multiple backends
HMAC signature to verify cookie has not been tampered with
Autosave option which saves anytime a session value is modified
Optional Encryption of cookie data using AES
Custom timeout per session
Installation
Vishnu is available on PyPi and we recommend installation via pip.
pip install vishnu
The following extra installations also exist which include the desired backend library as a requirement.
pip install vishnu[pymemcache]
pip install vishnu[python-memcached]
pip install vishnu[redis]
If you are working with Google App Engine we recommend installation via pip as a vendored package.
pip install -t lib vishnu
Edit the appengine_config.py file and provide your library directory to the vendor.add() method.
from google.appengine.ext import vendor
vendor.add('lib')
Alternatively download your preferred tagged release and all you should have to include is the vishnu folder.
Configuration
Session Config
The following parameters are available for session configuration.
parameter |
required |
default |
type |
description |
---|---|---|---|---|
secret |
yes |
None |
string |
Secret used for HMAC signature, must be at least 32 characters. |
cookie_name |
no |
vishnu |
string |
Name to use for cookie. |
encrypt_key |
no |
None |
string |
Key used to encrypt cookie data, if omitted then data will not be encrypted. |
secure |
no |
True |
bool |
Only send this cookie over SSL |
domain |
no |
N/A |
string |
The domain to set the cookie for, it omitted will use domain cookie was served from. |
path |
no |
/ |
string |
The path to set the cookie for, if omitted it will default to / |
http_only |
no |
True |
string |
A http-only cookie cannot be accessed by client-side APIs, such as JavaScript |
auto_save |
no |
False |
bool |
Automatically save the session when a value is set. |
timeout |
no |
N/A |
integer |
How long until session/cookie expires, it omitted it will last for the length of the browser session. |
backend |
yes |
N/A |
backend |
See backends configuration |
Example of a session configuration.
from vishnu.session import Config
from vishnu.backend import Redis
config = Config(
secret="your_secret",
backend=Redis()
)
WSGI Middleware
To use vishnu you must add it as a middleware to your WSGI application.
from vishnu.backend import Redis
from vishnu.middleware import SessionMiddleware
from vishnu.session import Config
my_config = Config(
secret="your_secret",
backend=Redis()
)
app = SessionMiddleware(app=wsgi_app, config=my_config)
Backends
Google App Engine (memcache)
from vishnu.backend import GoogleAppEngineMemcache
config = Config(
secret="your_secret",
backend=GoogleAppEngineMemcache()
)
Google App Engine (NDB)
from vishnu.backend import GoogleAppEngineNDB
config = Config(
secret="your_secret",
backend=GoogleAppEngineNDB()
)
PyMemcache
parameter |
required |
default |
type |
---|---|---|---|
host |
no |
localhost |
string |
port |
no |
11211 |
integer |
from vishnu.backend import PyMemcache
config = Config(
secret="your_secret",
backend=PyMemcache(host="memcache.host", port=11222)
)
PythonMemcached
parameter |
required |
default |
type |
---|---|---|---|
host |
no |
localhost |
string |
port |
no |
11211 |
integer |
from vishnu.backend import PythonMemcached
config = Config(
secret="your_secret",
backend=PythonMemcached()
)
Redis
parameter |
required |
default |
type |
---|---|---|---|
host |
no |
localhost |
string |
port |
no |
6379 |
integer |
db |
no |
0 |
integer |
from vishnu.backend import Redis
config = Config(
secret="your_secret",
backend=Redis(host="redis.host", port=6421, db=0)
)
Setting a Custom Timeout
Each session uses the default timeout specified in your server config but if you want to have particular sessions differ to this you can do the following.
session = vishnu.get_session()
session.timeout = 3600
session.save()
The timeout is in seconds. To set the timeout to expire at the end of this session you can use the vishnu.session.TIMEOUT_SESSION constant.
session = vishnu.get_session()
session.timeout = vishnu.session.TIMEOUT_SESSION
session.save()
Cleaning up Expired Sessions (Google App Engine NDB backend only)
Add the following to a cron handler.
from vishnu.util import gae_ndb_delete_expired_sessions
while not gae_ndb_delete_expired_sessions():
pass
You can alter the period after expired sessions are deleted by passing a value in seconds as dormant_for. You can also alter the amount of sessions to delete per call using the limit argument.
from vishnu.util import gae_ndb_delete_expired_sessions
while not gae_ndb_delete_expired_sessions(dormant_for=3600, limit=100):
pass
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file vishnu-3.1.1.tar.gz
.
File metadata
- Download URL: vishnu-3.1.1.tar.gz
- Upload date:
- Size: 21.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/2.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 787f3d415e246f1c3eef7d65f51066ea730944f1bc31c158405d40ec4bb4a751 |
|
MD5 | b42a9c29e90169f9362cd13281a501d6 |
|
BLAKE2b-256 | 38f5d683412982d02655d4c7d6207cb1d0a691a340c3473e8ec195d803db897b |
File details
Details for the file vishnu-3.1.1-py2.py3-none-any.whl
.
File metadata
- Download URL: vishnu-3.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 42.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/2.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9f32dc959da900c0381cae327be9253f2ff396fa918cb6d86d3e6a96999b893 |
|
MD5 | e8e1340c6db5061d7fe54b2276b0cbad |
|
BLAKE2b-256 | 2fc824ad499f201ca075d5017e27e9921eaa16306e4d95cbde6f7f686edba9d3 |