{ "info": { "author": "The Dolmen team", "author_email": "dolmen@list.dolmen-project.org", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python" ], "description": "cromlech.beaker\n***************\n\ncromlech.beaker is an integration of beaker to cromlech for session management.\n\nContext manager\n------------------\n\nLet's import some helpers::\n\n >>> import pytest\n >>> from webtest import TestApp\n >>> SK = 'session.key'\n\nAnd our session controller::\n\n >>> from cromlech.wsgistate import WsgistateSession\n >>> from cromlech.wsgistate.controlled import WsgistateSession\n\n >>> def simple_app(environ, start_response):\n ... \"\"\"retained visited path, raise exception if path contain 'fail'\n ... \"\"\"\n ... with WsgistateSession(environ, SK) as session:\n ... path = environ['PATH_INFO']\n ... history = session.setdefault('path', [])\n ... history.append(path)\n ... if path == '/fail':\n ... raise ValueError\n ... start_response('200 OK', [('Content-type', 'text/plain')])\n ... return [', '.join(history)]\n\n\nThen run it with wsgistate middelware:\n\n >>> from cromlech.wsgistate import session_wrapper \n >>> wsgi_app = TestApp(session_wrapper(simple_app, session_key=SK))\n >>> result = wsgi_app.get('/foo')\n >>> result.status\n '200 OK'\n >>> result.body\n '/foo'\n\n >>> result = wsgi_app.get('/bar')\n >>> result.status\n '200 OK'\n >>> result.body\n '/foo, /bar'\n \nIf application raise an exception, the context manager wont save the session::\n\n >>> result = wsgi_app.get('/fail')\n Traceback (most recent call last):\n ...\n ValueError\n >>> result.status\n '200 OK'\n >>> result.body\n '/foo, /bar'\n\n\nTesting the transaction awareness\n---------------------------------\n\n >>> import transaction\n >>> from cromlech.wsgistate import SessionStateException\n\n >>> def transactional_app(environ, start_response):\n ...\n ... with transaction.manager as tm:\n ... with WsgistateSession(environ, SK, tm) as session:\n ... session['crom'] = 'Pyramid'\n ... tm.abort()\n ...\n ... assert not session\n ...\n ... with transaction.manager as tm:\n ... with WsgistateSession(environ, SK, tm) as session:\n ... session['crom'] = 'Crom'\n ...\n ... with transaction.manager as tm:\n ... with WsgistateSession(environ, SK, tm) as session:\n ... session['lech'] = 'Lech'\n ... sp1 = tm.savepoint()\n ...\n ... session['crom'] = 'Zope'\n ... session['lech'] = 'Quack'\n ... sp2 = tm.savepoint()\n ...\n ... session['crom'] = 'PHP'\n ... sp3 = tm.savepoint()\n ...\n ... sp2.rollback()\n ... assert session['crom'] == 'Zope'\n ... assert session['lech'] == 'Quack'\n ...\n ... session['crom'] = 'Zorglub'\n ... session['lech'] = 'Zimbabwe'\n ...\n ... sp1.rollback()\n ...\n ... # outside of a transaction, the writing is prohibited\n ... with pytest.raises(SessionStateException) as e:\n ... session['fail'] = True\n ...\n ... assert e.value.message == (\n ... \"Session's current state disallows writing\")\n ...\n ... start_response('200 OK', [('Content-type', 'text/plain')])\n ... return [session.get('crom', ''), session.get('lech', '')]\n\n >>> wsgi_app = TestApp(session_wrapper(transactional_app, session_key=SK))\n >>> result = wsgi_app.get('/bar')\n >>> result.body\n 'CromLech'\n\nChangelog\n=========\n\n0.3b2 (2017-03-18)\n------------------\n\n- Added python3 compatibility\n\n\n0.3b1 (2016-11-29)\n------------------\n\n- Added Timeout exception and bubbling up through the environ, to know when\n a session expired.\n\n\n0.2 (2014-08-06)\n----------------\n\n- Forwarding the local_conf options to the decorator, for further\n configuration\n\n\n0.1 (2013-03-13)\n----------------\n\n- Initial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://gitweb.dolmen-project.org/", "keywords": "Cromlech Wsgistate Session", "license": "ZPL", "maintainer": null, "maintainer_email": null, "name": "cromlech.wsgistate", "package_url": "https://pypi.org/project/cromlech.wsgistate/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cromlech.wsgistate/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://gitweb.dolmen-project.org/" }, "release_url": "https://pypi.org/project/cromlech.wsgistate/0.3b2/", "requires_dist": null, "requires_python": null, "summary": "Session handling for cromlech using wsgistate", "version": "0.3b2" }, "last_serial": 2811221, "releases": { "0.3b2": [ { "comment_text": "", "digests": { "md5": "47d38f4364748abbccff5f916d1630de", "sha256": "6819119ca58b8f0ff8a81bc1cda21aa9d7a39787c27b57ba008c2a4a06bdbd7d" }, "downloads": -1, "filename": "cromlech.wsgistate-0.3b2.tar.gz", "has_sig": false, "md5_digest": "47d38f4364748abbccff5f916d1630de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6242, "upload_time": "2017-04-18T13:52:47", "url": "https://files.pythonhosted.org/packages/13/cb/b5081ecc696dba826265ef9dfcba5a7eb9fb3714dbb4092acefee79383ae/cromlech.wsgistate-0.3b2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "47d38f4364748abbccff5f916d1630de", "sha256": "6819119ca58b8f0ff8a81bc1cda21aa9d7a39787c27b57ba008c2a4a06bdbd7d" }, "downloads": -1, "filename": "cromlech.wsgistate-0.3b2.tar.gz", "has_sig": false, "md5_digest": "47d38f4364748abbccff5f916d1630de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6242, "upload_time": "2017-04-18T13:52:47", "url": "https://files.pythonhosted.org/packages/13/cb/b5081ecc696dba826265ef9dfcba5a7eb9fb3714dbb4092acefee79383ae/cromlech.wsgistate-0.3b2.tar.gz" } ] }