Skip to main content

Sessions for python WSGI applications.

Downloads Latest Version build status

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

Release files for vishnu 3.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vishnu 3.1.1
File Size Uploaded
vishnu-3.1.1.tar.gz 21.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vishnu 3.1.1
File Interpreter ABI Platform
vishnu-3.1.1-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size:64.1 kB

Release files / vishnu-3.1.1.tar.gz

Download URL vishnu-3.1.1.tar.gz
Size 21.2 kB
Tags Source
SHA-256 checksum
How to use checksums
787f3d415e246f1c3eef7d65f51066ea730944f1bc31c158405d40ec4bb4a751
BLAKE2b-256 checksum
How to use checksums
38f5d683412982d02655d4c7d6207cb1d0a691a340c3473e8ec195d803db897b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via Python-urllib/2.7

Release files / vishnu-3.1.1-py2.py3-none-any.whl

Download URL vishnu-3.1.1-py2.py3-none-any.whl
Size 42.9 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
f9f32dc959da900c0381cae327be9253f2ff396fa918cb6d86d3e6a96999b893
BLAKE2b-256 checksum
How to use checksums
2fc824ad499f201ca075d5017e27e9921eaa16306e4d95cbde6f7f686edba9d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via Python-urllib/2.7

Release history Release notifications | RSS feed

This release

3.1.1 This release

2 release files

3.1.0

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page