2007-05-21 12:03:53 +08:00
r """
2007-12-05 04:29:43 +08:00
>> > from django . conf import settings
2007-09-16 05:29:14 +08:00
>> > 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
2007-10-20 18:12:59 +08:00
>> > from django . contrib . sessions . backends . base import SessionBase
2007-05-21 12:03:53 +08:00
2007-09-16 05:29:14 +08:00
>> > db_session = DatabaseSession ( )
>> > db_session . modified
2007-07-03 23:02:40 +08:00
False
2007-09-16 05:29:14 +08:00
>> > db_session [ ' cat ' ] = " dog "
>> > db_session . modified
True
>> > db_session . pop ( ' cat ' )
' dog '
>> > db_session . pop ( ' some key ' , ' does not exist ' )
2007-07-03 23:02:40 +08:00
' does not exist '
2007-09-16 05:29:14 +08:00
>> > db_session . save ( )
>> > db_session . exists ( db_session . session_key )
2007-07-03 23:02:40 +08:00
True
2007-09-16 05:29:14 +08:00
>> > db_session . delete ( db_session . session_key )
>> > db_session . exists ( db_session . session_key )
2007-07-03 23:02:40 +08:00
False
2007-09-16 05:29:14 +08:00
>> > file_session = FileSession ( )
>> > file_session . modified
False
>> > file_session [ ' cat ' ] = " dog "
>> > file_session . modified
2007-07-03 23:02:40 +08:00
True
2007-09-16 05:29:14 +08:00
>> > 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 )
2007-07-03 23:02:40 +08:00
True
2007-09-16 05:29:14 +08:00
>> > file_session . delete ( file_session . session_key )
>> > file_session . exists ( file_session . session_key )
False
2007-05-21 12:03:53 +08:00
2007-12-05 04:29:43 +08:00
# 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.
2007-09-16 05:29:14 +08:00
>> > 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 ' )
2007-05-21 12:03:53 +08:00
' does not exist '
2007-09-16 05:29:14 +08:00
>> > cache_session . save ( )
>> > cache_session . delete ( cache_session . session_key )
>> > cache_session . exists ( cache_session . session_key )
False
2007-10-20 18:12:59 +08:00
>> > 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 )
2007-12-02 23:27:29 +08:00
>> > s . setdefault ( ' foo ' , ' bar ' )
' bar '
>> > s . setdefault ( ' foo ' , ' baz ' )
' bar '
2007-10-20 18:12:59 +08:00
>> > 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 '
2008-06-08 04:28:06 +08:00
#########################
# 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
2007-05-21 12:03:53 +08:00
"""
if __name__ == ' __main__ ' :
import doctest
doctest . testmod ( )