You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
8.3 KiB
341 lines
8.3 KiB
r""" |
|
|
|
>>> from django.conf import settings |
|
>>> from django.contrib.sessions.backends.db import SessionStore as DatabaseSession |
|
>>> from django.contrib.sessions.backends.cache import SessionStore as CacheSession |
|
>>> from django.contrib.sessions.backends.file import SessionStore as FileSession |
|
>>> from django.contrib.sessions.backends.base import SessionBase |
|
>>> from django.contrib.sessions.models import Session |
|
|
|
>>> db_session = DatabaseSession() |
|
>>> db_session.modified |
|
False |
|
>>> db_session.get('cat') |
|
>>> db_session['cat'] = "dog" |
|
>>> db_session.modified |
|
True |
|
>>> db_session.pop('cat') |
|
'dog' |
|
>>> db_session.pop('some key', 'does not exist') |
|
'does not exist' |
|
>>> db_session.save() |
|
>>> db_session.exists(db_session.session_key) |
|
True |
|
>>> db_session.delete(db_session.session_key) |
|
>>> db_session.exists(db_session.session_key) |
|
False |
|
|
|
>>> db_session['foo'] = 'bar' |
|
>>> db_session.save() |
|
>>> db_session.exists(db_session.session_key) |
|
True |
|
>>> prev_key = db_session.session_key |
|
>>> db_session.flush() |
|
>>> db_session.exists(prev_key) |
|
False |
|
>>> db_session.session_key == prev_key |
|
False |
|
>>> db_session.modified, db_session.accessed |
|
(True, True) |
|
>>> db_session['a'], db_session['b'] = 'c', 'd' |
|
>>> db_session.save() |
|
>>> prev_key = db_session.session_key |
|
>>> prev_data = db_session.items() |
|
>>> db_session.cycle_key() |
|
>>> db_session.session_key == prev_key |
|
False |
|
>>> db_session.items() == prev_data |
|
True |
|
|
|
# Submitting an invalid session key (either by guessing, or if the db has |
|
# removed the key) results in a new key being generated. |
|
>>> Session.objects.filter(pk=db_session.session_key).delete() |
|
>>> db_session = DatabaseSession(db_session.session_key) |
|
>>> db_session.save() |
|
>>> DatabaseSession('1').get('cat') |
|
|
|
>>> file_session = FileSession() |
|
>>> file_session.modified |
|
False |
|
>>> file_session['cat'] = "dog" |
|
>>> file_session.modified |
|
True |
|
>>> file_session.pop('cat') |
|
'dog' |
|
>>> file_session.pop('some key', 'does not exist') |
|
'does not exist' |
|
>>> file_session.save() |
|
>>> file_session.exists(file_session.session_key) |
|
True |
|
>>> file_session.delete(file_session.session_key) |
|
>>> file_session.exists(file_session.session_key) |
|
False |
|
>>> FileSession('1').get('cat') |
|
|
|
>>> file_session['foo'] = 'bar' |
|
>>> file_session.save() |
|
>>> file_session.exists(file_session.session_key) |
|
True |
|
>>> prev_key = file_session.session_key |
|
>>> file_session.flush() |
|
>>> file_session.exists(prev_key) |
|
False |
|
>>> file_session.session_key == prev_key |
|
False |
|
>>> file_session.modified, file_session.accessed |
|
(True, True) |
|
>>> file_session['a'], file_session['b'] = 'c', 'd' |
|
>>> file_session.save() |
|
>>> prev_key = file_session.session_key |
|
>>> prev_data = file_session.items() |
|
>>> file_session.cycle_key() |
|
>>> file_session.session_key == prev_key |
|
False |
|
>>> file_session.items() == prev_data |
|
True |
|
|
|
>>> Session.objects.filter(pk=file_session.session_key).delete() |
|
>>> file_session = FileSession(file_session.session_key) |
|
>>> file_session.save() |
|
|
|
# Make sure the file backend checks for a good storage dir |
|
>>> settings.SESSION_FILE_PATH = "/if/this/directory/exists/you/have/a/weird/computer" |
|
>>> FileSession() |
|
Traceback (innermost last): |
|
... |
|
ImproperlyConfigured: The session storage path '/if/this/directory/exists/you/have/a/weird/computer' doesn't exist. Please set your SESSION_FILE_PATH setting to an existing directory in which Django can store session data. |
|
|
|
>>> cache_session = CacheSession() |
|
>>> cache_session.modified |
|
False |
|
>>> cache_session['cat'] = "dog" |
|
>>> cache_session.modified |
|
True |
|
>>> cache_session.pop('cat') |
|
'dog' |
|
>>> cache_session.pop('some key', 'does not exist') |
|
'does not exist' |
|
>>> cache_session.save() |
|
>>> cache_session.delete(cache_session.session_key) |
|
>>> cache_session.exists(cache_session.session_key) |
|
False |
|
>>> cache_session['foo'] = 'bar' |
|
>>> cache_session.save() |
|
>>> cache_session.exists(cache_session.session_key) |
|
True |
|
>>> prev_key = cache_session.session_key |
|
>>> cache_session.flush() |
|
>>> cache_session.exists(prev_key) |
|
False |
|
>>> cache_session.session_key == prev_key |
|
False |
|
>>> cache_session.modified, cache_session.accessed |
|
(True, True) |
|
>>> cache_session['a'], cache_session['b'] = 'c', 'd' |
|
>>> cache_session.save() |
|
>>> prev_key = cache_session.session_key |
|
>>> prev_data = cache_session.items() |
|
>>> cache_session.cycle_key() |
|
>>> cache_session.session_key == prev_key |
|
False |
|
>>> cache_session.items() == prev_data |
|
True |
|
|
|
>>> Session.objects.filter(pk=cache_session.session_key).delete() |
|
>>> cache_session = CacheSession(cache_session.session_key) |
|
>>> cache_session.save() |
|
>>> CacheSession('1').get('cat') |
|
|
|
>>> s = SessionBase() |
|
>>> s._session['some key'] = 'exists' # Pre-populate the session with some data |
|
>>> s.accessed = False # Reset to pretend this wasn't accessed previously |
|
|
|
>>> s.accessed, s.modified |
|
(False, False) |
|
|
|
>>> s.pop('non existant key', 'does not exist') |
|
'does not exist' |
|
>>> s.accessed, s.modified |
|
(True, False) |
|
|
|
>>> s.setdefault('foo', 'bar') |
|
'bar' |
|
>>> s.setdefault('foo', 'baz') |
|
'bar' |
|
|
|
>>> s.accessed = False # Reset the accessed flag |
|
|
|
>>> s.pop('some key') |
|
'exists' |
|
>>> s.accessed, s.modified |
|
(True, True) |
|
|
|
>>> s.pop('some key', 'does not exist') |
|
'does not exist' |
|
|
|
|
|
>>> s.get('update key', None) |
|
|
|
# test .update() |
|
>>> s.modified = s.accessed = False # Reset to pretend this wasn't accessed previously |
|
>>> s.update({'update key':1}) |
|
>>> s.accessed, s.modified |
|
(True, True) |
|
>>> s.get('update key', None) |
|
1 |
|
|
|
# test .has_key() |
|
>>> s.modified = s.accessed = False # Reset to pretend this wasn't accessed previously |
|
>>> s.has_key('update key') |
|
True |
|
>>> s.accessed, s.modified |
|
(True, False) |
|
|
|
# test .values() |
|
>>> s = SessionBase() |
|
>>> s.values() |
|
[] |
|
>>> s.accessed |
|
True |
|
>>> s['x'] = 1 |
|
>>> s.values() |
|
[1] |
|
|
|
# test .iterkeys() |
|
>>> s.accessed = False |
|
>>> i = s.iterkeys() |
|
>>> hasattr(i,'__iter__') |
|
True |
|
>>> s.accessed |
|
True |
|
>>> list(i) |
|
['x'] |
|
|
|
# test .itervalues() |
|
>>> s.accessed = False |
|
>>> i = s.itervalues() |
|
>>> hasattr(i,'__iter__') |
|
True |
|
>>> s.accessed |
|
True |
|
>>> list(i) |
|
[1] |
|
|
|
# test .iteritems() |
|
>>> s.accessed = False |
|
>>> i = s.iteritems() |
|
>>> hasattr(i,'__iter__') |
|
True |
|
>>> s.accessed |
|
True |
|
>>> list(i) |
|
[('x', 1)] |
|
|
|
# test .clear() |
|
>>> s.modified = s.accessed = False |
|
>>> s.items() |
|
[('x', 1)] |
|
>>> s.clear() |
|
>>> s.items() |
|
[] |
|
>>> s.accessed, s.modified |
|
(True, True) |
|
|
|
######################### |
|
# Custom session expiry # |
|
######################### |
|
|
|
>>> from django.conf import settings |
|
>>> from datetime import datetime, timedelta |
|
|
|
>>> td10 = timedelta(seconds=10) |
|
|
|
# A normal session has a max age equal to settings |
|
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE |
|
True |
|
|
|
# So does a custom session with an idle expiration time of 0 (but it'll expire |
|
# at browser close) |
|
>>> s.set_expiry(0) |
|
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE |
|
True |
|
|
|
# Custom session idle expiration time |
|
>>> s.set_expiry(10) |
|
>>> delta = s.get_expiry_date() - datetime.now() |
|
>>> delta.seconds in (9, 10) |
|
True |
|
>>> age = s.get_expiry_age() |
|
>>> age in (9, 10) |
|
True |
|
|
|
# Custom session fixed expiry date (timedelta) |
|
>>> s.set_expiry(td10) |
|
>>> delta = s.get_expiry_date() - datetime.now() |
|
>>> delta.seconds in (9, 10) |
|
True |
|
>>> age = s.get_expiry_age() |
|
>>> age in (9, 10) |
|
True |
|
|
|
# Custom session fixed expiry date (fixed datetime) |
|
>>> s.set_expiry(datetime.now() + td10) |
|
>>> delta = s.get_expiry_date() - datetime.now() |
|
>>> delta.seconds in (9, 10) |
|
True |
|
>>> age = s.get_expiry_age() |
|
>>> age in (9, 10) |
|
True |
|
|
|
# Set back to default session age |
|
>>> s.set_expiry(None) |
|
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE |
|
True |
|
|
|
# Allow to set back to default session age even if no alternate has been set |
|
>>> s.set_expiry(None) |
|
|
|
|
|
# We're changing the setting then reverting back to the original setting at the |
|
# end of these tests. |
|
>>> original_expire_at_browser_close = settings.SESSION_EXPIRE_AT_BROWSER_CLOSE |
|
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False |
|
|
|
# Custom session age |
|
>>> s.set_expiry(10) |
|
>>> s.get_expire_at_browser_close() |
|
False |
|
|
|
# Custom expire-at-browser-close |
|
>>> s.set_expiry(0) |
|
>>> s.get_expire_at_browser_close() |
|
True |
|
|
|
# Default session age |
|
>>> s.set_expiry(None) |
|
>>> s.get_expire_at_browser_close() |
|
False |
|
|
|
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True |
|
|
|
# Custom session age |
|
>>> s.set_expiry(10) |
|
>>> s.get_expire_at_browser_close() |
|
False |
|
|
|
# Custom expire-at-browser-close |
|
>>> s.set_expiry(0) |
|
>>> s.get_expire_at_browser_close() |
|
True |
|
|
|
# Default session age |
|
>>> s.set_expiry(None) |
|
>>> s.get_expire_at_browser_close() |
|
True |
|
|
|
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = original_expire_at_browser_close |
|
""" |
|
|
|
if __name__ == '__main__': |
|
import doctest |
|
doctest.testmod()
|
|
|