Metadata-Version: 1.1
Name: cromlech.wsgistate
Version: 0.3b2
Summary: Session handling for cromlech using wsgistate
Home-page: http://gitweb.dolmen-project.org/
Author: The Dolmen team
Author-email: dolmen@list.dolmen-project.org
License: ZPL
Description: cromlech.beaker
        ***************
        
        cromlech.beaker is an integration of beaker to cromlech for session management.
        
        Context manager
        ------------------
        
        Let's import some helpers::
        
            >>> import pytest
            >>> from webtest import TestApp
            >>> SK = 'session.key'
        
        And our session controller::
        
            >>> from cromlech.wsgistate import WsgistateSession
            >>> from cromlech.wsgistate.controlled import WsgistateSession
        
            >>> def simple_app(environ, start_response):
            ...     """retained visited path, raise exception if path contain 'fail'
            ...     """
            ...     with WsgistateSession(environ, SK) as session:
            ...         path = environ['PATH_INFO']
            ...         history = session.setdefault('path', [])
            ...         history.append(path)
            ...         if path == '/fail':
            ...             raise ValueError
            ...     start_response('200 OK', [('Content-type', 'text/plain')])
            ...     return [', '.join(history)]
        
        
        Then run it with wsgistate middelware:
        
            >>> from cromlech.wsgistate import session_wrapper 
            >>> wsgi_app = TestApp(session_wrapper(simple_app, session_key=SK))
            >>> result = wsgi_app.get('/foo')
            >>> result.status
            '200 OK'
            >>> result.body
            '/foo'
        
            >>> result = wsgi_app.get('/bar')
            >>> result.status
            '200 OK'
            >>> result.body
            '/foo, /bar'
            
        If application raise an exception, the context manager wont save the session::
        
            >>> result = wsgi_app.get('/fail')
            Traceback (most recent call last):
            ...
            ValueError
            >>> result.status
            '200 OK'
            >>> result.body
            '/foo, /bar'
        
        
        Testing the transaction awareness
        ---------------------------------
        
            >>> import transaction
            >>> from cromlech.wsgistate import SessionStateException
        
            >>> def transactional_app(environ, start_response):
            ...
            ...     with transaction.manager as tm:
            ...         with WsgistateSession(environ, SK, tm) as session:
            ...             session['crom'] = 'Pyramid'
            ...             tm.abort()
            ...
            ...     assert not session
            ...
            ...     with transaction.manager as tm:
            ...         with WsgistateSession(environ, SK, tm) as session:
            ...             session['crom'] = 'Crom'
            ...
            ...     with transaction.manager as tm:
            ...         with WsgistateSession(environ, SK, tm) as session:
            ...             session['lech'] = 'Lech'
            ...             sp1 = tm.savepoint()
            ...
            ...             session['crom'] = 'Zope'
            ...             session['lech'] = 'Quack'
            ...             sp2 = tm.savepoint()
            ...
            ...             session['crom'] = 'PHP'
            ...             sp3 = tm.savepoint()
            ...
            ...             sp2.rollback()
            ...             assert session['crom'] == 'Zope'
            ...             assert session['lech'] == 'Quack'
            ...
            ...             session['crom'] = 'Zorglub'
            ...             session['lech'] = 'Zimbabwe'
            ...
            ...             sp1.rollback()
            ...
            ...     # outside of a transaction, the writing is prohibited
            ...     with pytest.raises(SessionStateException) as e:
            ...         session['fail'] = True
            ...
            ...     assert e.value.message == (
            ...         "Session's current state disallows writing")
            ...
            ...     start_response('200 OK', [('Content-type', 'text/plain')])
            ...     return [session.get('crom', ''), session.get('lech', '')]
        
            >>> wsgi_app = TestApp(session_wrapper(transactional_app, session_key=SK))
            >>> result = wsgi_app.get('/bar')
            >>> result.body
            'CromLech'
        
        Changelog
        =========
        
        0.3b2 (2017-03-18)
        ------------------
        
        - Added python3 compatibility
        
        
        0.3b1 (2016-11-29)
        ------------------
        
        - Added Timeout exception and bubbling up through the environ, to know when
          a session expired.
        
        
        0.2 (2014-08-06)
        ----------------
        
        - Forwarding the local_conf options to the decorator, for further
          configuration
        
        
        0.1 (2013-03-13)
        ----------------
        
        - Initial release
        
Keywords: Cromlech Wsgistate Session
Platform: UNKNOWN
Classifier: Programming Language :: Python
