{ "info": { "author": "John Hardy", "author_email": "john@johnchardy.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Flask DynamoDB Sessions\n\n[![](https://img.shields.io/pypi/v/flask-dynamodb-sessions.svg)](https://pypi.org/project/flask-dynamodb-sessions/) [![Updates](https://pyup.io/repos/github/ibejohn818/flask-dynamodb-sessions/shield.svg)](https://pyup.io/repos/github/ibejohn818/flask-dynamodb-sessions/)\n\nServer-side sessions in Flask using AWS DynamoDB as the backend data store.\n\nDynamoDB is AWS's SaaS NoSQL solution which makes it perfect for use as a session store. \nBeing a SaaS service we no longer have to manage servers/storage/etc and take advantage of some notable features such as:\n\n- Auto-scaling\n- Automatic Lifecycle ( Garbage collection )\n- Encryption at rest\n- etc...\n\nSessions are pickled and base64 encoded to be stored in DynamoDB as strings. As a result you may save\nobjects to your sessions as long as the object supports the pickle interface.\n\nDynamoDB supports a maximum object size of 400 KB. Minus the UUID4 session id, modified date/time string and ttl timestamp\nyou have approximately 398 KB available for your session.\n\n## Installation\n\n```shell\n# w/ pip\npip install flask-dynamodb-sessions\n# w/ easy_install\neasy_install flask-dynamodb-sessions\n```\n\n### Usage example\n```python\nfrom flask import (Flask, session)\nfrom flask_dynamodb_sessions import Session\n\napp = Flask(__name__)\n\n# Set flask to use the dynamo session interface\nSession(app)\n\n@app.route('/', methods=['GET'])\ndef index_get():\n\t# use sessions just as you normally would\n\tsession['user'] = {'username': 'jhardy'}\n\n\tuser = session.get('user')\n\n\tsession_id = session.sid\n```\n*View examples directory for more*\n\n### Configuration Options\nBelow are additional `SESSION_*` configuration options specific to DynamoDB sessions.\n\n SESSION_DYNAMODB_TABLE (string): The DynamoDB table to save to. Default: flask_sessions\n SESSION_DYNAMODB_ENDPOINT (string): Override the boto3 endpoint, good for local development and using dynamodb-local. Default: None\n SESSION_DYNAMODB_TTL_SECONDS (int): Number of seconds to add to the TTL column. Default: 86400 * 14 (14 Days)\n SESSION_DYNAMODB_CONSISTENT_READ (bool): Whether or not to perform a strongly consistent read from DynamoDB. Default: False\n\nThe existing `SESSION_*` config parameters still apply (IE: cookie settings). SESSION_REFRESH_EACH_REQUEST \nis the only setting that is negated and each request will refesh the cookie (Might be modified in a future release).\n\n### Transmission of ID via Header\nUsing cookies to store the session ID may not work in some environments, so a normal HTTP header may be used to pass the ID in requests and responses. \n\nThere are two settings to control this:\n\n SESSION_DYNAMODB_USE_HEADER (bool): Whether or not to use a header for the ID, instead of cookies. Default: False\n SESSION_DYNAMODB_HEADER_NAME (string): The name of the header to use for the ID. Default: X-SessionId\n\n### Table Structure\nThe table structure is fairly simple.\n```\n{\n id: string HASH,\n modified: string DATETIME UTC\n ttl: number UTC TIME + SESSION_DYANMODB_TTL_SECONDS\n data: string JSON ENCODED SESSION\n\n}\n```\n\nCreate the table VIA `aws` cli.\n\n```\naws dynamodb create-table --key-schema \"AttributeName=id,KeyType=HASH\" \\\n--attribute-definitions \"AttributeName=id,AttributeType=S\" \\\n--provisioned-throughput \"ReadCapacityUnits=5,WriteCapacityUnits=5\" \\\n--table-name flask_sessions\n```\n\nThe `ttl` column is present to take advantage of DynamoDB's `Lifecycle` feature where dynamo will delete all rows with a ttl in the past.\n\nEnable time-to-live (garbage collection)\n\n```\naws dynamodb update-time-to-live --time-to-live-specification 'Enabled=true,AttributeName=ttl' --table-name flask_sessions\n```\n\n\n\n## TODO\n- Test coverage\n- More laxed cookie refresh\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ibejohn818/flask-dynamodb-sessions", "keywords": "flask-dynamodb-sessions", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "flask-dynamodb-sessions", "package_url": "https://pypi.org/project/flask-dynamodb-sessions/", "platform": "", "project_url": "https://pypi.org/project/flask-dynamodb-sessions/", "project_urls": { "Homepage": "https://github.com/ibejohn818/flask-dynamodb-sessions" }, "release_url": "https://pypi.org/project/flask-dynamodb-sessions/0.1.7/", "requires_dist": [ "boto3" ], "requires_python": "", "summary": "Server side sessions in Flask using AWS DynamoDB table as a data store", "version": "0.1.7" }, "last_serial": 5435316, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "14ba0d78a1c84cf7579597f545123fc7", "sha256": "e8e4834bbe8e986169dd72ac2077ca3f17543c3d4b1d0956cb4ae56a49c2c5f9" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14ba0d78a1c84cf7579597f545123fc7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4543, "upload_time": "2019-01-05T22:38:17", "url": "https://files.pythonhosted.org/packages/4f/a0/dc28de93c27c591e0a7089a467916fdd8f66a1f5269d02e54406a580b263/flask_dynamodb_sessions-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed1ce4cd4cd9c705a964da8f73f12d76", "sha256": "7996dd2fe32e9eba6bb17980bab93ed66587a2d48a41b000cb858d56c1f23a96" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ed1ce4cd4cd9c705a964da8f73f12d76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9073, "upload_time": "2019-01-05T22:38:20", "url": "https://files.pythonhosted.org/packages/dc/1f/f2e67b71f8f40ecc331ba1cf77719adefdb69966db728adffc20b3e08dbb/flask-dynamodb-sessions-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "19e5a768c4295044c3be22c0ae368ac2", "sha256": "bd0bd902623c98beea6a2b2c9fd62053b3d5197a61884a8abbc27d8921afbd7b" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "19e5a768c4295044c3be22c0ae368ac2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4616, "upload_time": "2019-01-06T00:15:26", "url": "https://files.pythonhosted.org/packages/69/57/f42a8ebf3538396e502afeec01f4bb4adae5f9c06768b8fe408ed1cebe26/flask_dynamodb_sessions-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee6472573300b79a41ee4687c23efe98", "sha256": "be9d1676d9b6346888a50512f394a5757929490b7f1aaf02d941fee8dc22a4ac" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ee6472573300b79a41ee4687c23efe98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9144, "upload_time": "2019-01-06T00:15:27", "url": "https://files.pythonhosted.org/packages/ca/ac/3b620e6e84fa79b2f6250e0c2b77663badc86a8954bae09b4520a00f6ade/flask-dynamodb-sessions-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9faaabbdeda39a41b5ec6dc4d90ee082", "sha256": "b933dc59c6e08f0f6923585e4a871248a9e03e5369f9b6ed154cb1ba04211038" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9faaabbdeda39a41b5ec6dc4d90ee082", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5589, "upload_time": "2019-01-06T01:56:51", "url": "https://files.pythonhosted.org/packages/0f/9b/118f6d567dbd0bf46b3928e870825fa66150fcd0046318deb3cf0125e542/flask_dynamodb_sessions-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b604d91b91604419e32daf892edeb62a", "sha256": "7cb4242fc03457c0ccf7f574d6541a4809032d44c31dfb2a3c59e929e2f50291" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.2.tar.gz", "has_sig": false, "md5_digest": "b604d91b91604419e32daf892edeb62a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16793, "upload_time": "2019-01-06T01:56:53", "url": "https://files.pythonhosted.org/packages/3f/94/cf8256b526ba614242e274e73a9357fe01faf1bbc9920d92843b5239790a/flask-dynamodb-sessions-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "4a871a2a012905895de0235ec26287a3", "sha256": "d7b21d5ee95a78eb760c45be8a2ec19bc1d4fd2edb3186fd32d443bedce40903" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4a871a2a012905895de0235ec26287a3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5737, "upload_time": "2019-01-06T03:29:57", "url": "https://files.pythonhosted.org/packages/cb/4e/520b85d7882c76646bee5f9900e1696dd1485767b63c2e4fe13b68ec4d0e/flask_dynamodb_sessions-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69312d5134a4369b6841427e3793bd58", "sha256": "fb014efc4b1dd2e69bfa01c4a0f1ba213f59614445041aaf526c904c8e87b22b" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.3.tar.gz", "has_sig": false, "md5_digest": "69312d5134a4369b6841427e3793bd58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17073, "upload_time": "2019-01-06T03:29:58", "url": "https://files.pythonhosted.org/packages/47/4d/fa2e78485bd8e879b7a0e6dc7cd24eb65b6cba84322e9c52c344c3e63d71/flask-dynamodb-sessions-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "5a5af5a188e9f904a96f8f89ef35deca", "sha256": "9e9640d51f2d4ed1deaf079c72673f16029db42a7b8a89bd48d8501dc404479e" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5a5af5a188e9f904a96f8f89ef35deca", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6104, "upload_time": "2019-01-06T21:23:53", "url": "https://files.pythonhosted.org/packages/78/c1/d148841d20fac48cfd5eb788e5d6d0b4999af218de4350daa7c8a325ab36/flask_dynamodb_sessions-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d8fff55ab706567e3e11e7b71ba5bcde", "sha256": "f4c0569cad255af6283249e4b9179c2b3744c7a05aced514ab7a97be78817eb8" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.4.tar.gz", "has_sig": false, "md5_digest": "d8fff55ab706567e3e11e7b71ba5bcde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17743, "upload_time": "2019-01-06T21:23:54", "url": "https://files.pythonhosted.org/packages/a5/b0/2aa17a5c9af70e9ea74d8ebb0da384b001c8f13fec281d173961cdb47c6f/flask-dynamodb-sessions-0.1.4.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "08886f54ec6ae9699e78e7eaff551b48", "sha256": "a168f493cb84e36d820840d4d878253f0c95d2bedfa1bb7d6c5a1edd0734ddb4" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "08886f54ec6ae9699e78e7eaff551b48", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6505, "upload_time": "2019-06-22T17:59:55", "url": "https://files.pythonhosted.org/packages/98/90/499f928bb07535bdde00b3bdba99b7e27ee4f830bc4499be686e0f84ac3a/flask_dynamodb_sessions-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "71752ab54af3a2bf0dfd4f7ef84173c3", "sha256": "c2b787e329738567e87070dc8f52fb2b6103269a6cd11bcbc386f603af5e0c0e" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.7.tar.gz", "has_sig": false, "md5_digest": "71752ab54af3a2bf0dfd4f7ef84173c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13768, "upload_time": "2019-06-22T17:59:57", "url": "https://files.pythonhosted.org/packages/2f/4e/f5bc4bd472698e29e6818c7c6a50af912be86a7d1424cb1d5d032fa4f3c7/flask-dynamodb-sessions-0.1.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "08886f54ec6ae9699e78e7eaff551b48", "sha256": "a168f493cb84e36d820840d4d878253f0c95d2bedfa1bb7d6c5a1edd0734ddb4" }, "downloads": -1, "filename": "flask_dynamodb_sessions-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "08886f54ec6ae9699e78e7eaff551b48", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6505, "upload_time": "2019-06-22T17:59:55", "url": "https://files.pythonhosted.org/packages/98/90/499f928bb07535bdde00b3bdba99b7e27ee4f830bc4499be686e0f84ac3a/flask_dynamodb_sessions-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "71752ab54af3a2bf0dfd4f7ef84173c3", "sha256": "c2b787e329738567e87070dc8f52fb2b6103269a6cd11bcbc386f603af5e0c0e" }, "downloads": -1, "filename": "flask-dynamodb-sessions-0.1.7.tar.gz", "has_sig": false, "md5_digest": "71752ab54af3a2bf0dfd4f7ef84173c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13768, "upload_time": "2019-06-22T17:59:57", "url": "https://files.pythonhosted.org/packages/2f/4e/f5bc4bd472698e29e6818c7c6a50af912be86a7d1424cb1d5d032fa4f3c7/flask-dynamodb-sessions-0.1.7.tar.gz" } ] }