{ "info": { "author": "nteract contributors", "author_email": "nteract@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3" ], "description": "# bookstore :books:\n\n[![Documentation Status](https://readthedocs.org/projects/bookstore/badge/?version=latest)](https://bookstore.readthedocs.io/en/latest/?badge=latest)\n[![Build Status](https://travis-ci.org/nteract/bookstore.svg?branch=master)](https://travis-ci.org/nteract/bookstore)\n[![CircleCI](https://circleci.com/gh/nteract/bookstore.svg?style=shield)](https://circleci.com/gh/nteract/bookstore)\n[![Codecov](https://codecov.io/gh/nteract/bookstore/branch/master/graph/badge.svg)](https://codecov.io/gh/nteract/bookstore)\n\n**bookstore** :books: provides tooling and workflow recommendations for storing :cd:, scheduling :calendar:, and publishing :book: notebooks.\n\nThe full documentation is hosted on [ReadTheDocs](https://bookstore.readthedocs.io).\n\n## How does bookstore work\n\n### Automatic Notebook Versioning\n\nEvery *save* of a notebook creates an *immutable copy* of the notebook on object storage.\n\nTo simplify implementation, we currently rely on S3 as the object store, using [versioned buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html).\n\n\n\n### Storage Paths\n\nAll notebooks are archived to a single versioned S3 bucket with specific prefixes denoting the lifecycle of the notebook:\n\n- `/workspace` - where users edit\n- `/published` - public notebooks (to an organization)\n\nEach notebook path is a namespace that an external service ties into the schedule. We archive off versions, keeping the path intact (until a user changes them).\n\n| Prefix | Intent |\n|-----------------------------------------|------------------------|\n| `/workspace/kylek/notebooks/mine.ipynb` | Notebook in \u201cdraft\u201d |\n| `/published/kylek/notebooks/mine.ipynb` | Current published copy |\n\nScheduled notebooks will also be referred to by the notebook key. In addition, we'll need to be able to surface version IDs as well.\n\n### Transitioning to this Storage Plan\n\nSince most people are on a regular filesystem, we'll start with writing to the\n`/workspace` prefix as Archival Storage (writing on save using a `post_save_hook`\nfor a Jupyter contents manager).\n\n### Publishing\n\nThe bookstore publishing endpoint is a `serverextension` to the classic Jupyter\nserver. This means you will need to explicitly enable the `serverextension`\nto use the endpoint.\n\nTo do so, run:\n\n jupyter serverextension enable --py bookstore\n\nTo enable it only for the current environment, run:\n\n jupyter serverextension enable --py bookstore --sys-prefix\n\n## Installation\n\n**bookstore** requires Python 3.6 or higher.\n\nNote: Supports installation on Jupyter servers running Python 3.6 and above.\nYour notebooks can still be run in Python 2 or Python 3.\n\n1. Clone this repo.\n2. At the repo's root, enter in the Terminal: `python3 -m pip install .` (Tip: don't forget the dot at the end of the command)\n\n## Configuration\n\n```python\n# jupyter config\n# At ~/.jupyter/jupyter_notebook_config.py for user installs on macOS\n# See https://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html for other places to plop this\n\nfrom bookstore import BookstoreContentsArchiver\n\nc.NotebookApp.contents_manager_class = BookstoreContentsArchiver\n\n# All Bookstore settings are centralized on one config object so you don't have to configure it for each class\nc.BookstoreSettings.workspace_prefix = \"/workspace/kylek/notebooks\"\nc.BookstoreSettings.published_prefix = \"/published/kylek/notebooks\"\n\nc.BookstoreSettings.s3_bucket = \"\"\n\n# Note: if bookstore is used from an EC2 instance with the right IAM role, you don't\n# have to specify these\nc.BookstoreSettings.s3_access_key_id = \nc.BookstoreSettings.s3_secret_access_key = \n```\n\n## Developing\n\nIf you are developing on bookstore you will want to run the ci tests locally and to make releases.\n\nUse [CONTRIBUTING.md](./CONTRIBUTING.md) to learn more about contributing.\nUse [running_ci_locally.md](./running_ci_locally.md) to learn more about running ci tests locally.\nUse [running_python_tests.md](./running_python_tests.md) to learn about running tests locally.\nUse [RELEASING.md](./RELEASING.md) to learn more about releasing bookstore.\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/nteract/bookstore", "keywords": "jupyter storage nteract notebook", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "bookstore", "package_url": "https://pypi.org/project/bookstore/", "platform": "", "project_url": "https://pypi.org/project/bookstore/", "project_urls": { "Documentation": "https://bookstore.readthedocs.io", "Funding": "https://nteract.io", "Homepage": "https://github.com/nteract/bookstore", "Source": "https://github.com/nteract/bookstore/", "Tracker": "https://github.com/nteract/bookstore/issues" }, "release_url": "https://pypi.org/project/bookstore/2.4.1/", "requires_dist": [ "future", "ipython (>=5.0)", "notebook", "tornado (>=5.1.1)", "aiobotocore", "aioboto3", "futures; python_version < \"3.0\"", "sphinx; extra == 'docs'", "m2r; extra == 'docs'", "sphinxcontrib-napoleon; extra == 'docs'", "sphinxcontrib-openapi; extra == 'docs'", "codecov; extra == 'test'", "coverage; extra == 'test'", "mock; extra == 'test'", "mypy (==0.660); extra == 'test'", "pytest (>=3.3); extra == 'test'", "pytest-asyncio; extra == 'test'", "pytest-cov; extra == 'test'", "pytest-mock; extra == 'test'", "black; extra == 'test'", "tox; extra == 'test'" ], "requires_python": "", "summary": "Storage Workflows for Notebooks", "version": "2.4.1" }, "last_serial": 5642220, "releases": { "0.0.0": [], "0.0.1a": [ { "comment_text": "", "digests": { "md5": "e9a438526c749b2d08c1fad7c3fedda2", "sha256": "f5c098fabc0775da6c90a4c838e086dd94bd62506829f4c7396879451027c6b2" }, "downloads": -1, "filename": "bookstore-0.0.1a.tar.gz", "has_sig": false, "md5_digest": "e9a438526c749b2d08c1fad7c3fedda2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9871, "upload_time": "2013-08-01T21:15:06", "url": "https://files.pythonhosted.org/packages/ef/08/f5b42aa411b0196e8359c8f090cf24d7706bb1c2c7e83a1282fd72068d30/bookstore-0.0.1a.tar.gz" } ], "0.0.2a": [ { "comment_text": "", "digests": { "md5": "684517a196a4720d55e8d05c38fc36cd", "sha256": "08b53032db6fad552cecaaef2f384b6e181a4fd8d34c242f7b4f96fd1ab7f231" }, "downloads": -1, "filename": "bookstore-0.0.2a.tar.gz", "has_sig": false, "md5_digest": "684517a196a4720d55e8d05c38fc36cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12267, "upload_time": "2013-08-02T01:47:37", "url": "https://files.pythonhosted.org/packages/4f/46/315f823d8672d4477076c5bc9f3932ee7fe4690b1fe5585c939546fcd4ed/bookstore-0.0.2a.tar.gz" } ], "0.0.3a": [ { "comment_text": "", "digests": { "md5": "d469eb54e36ba88078de5f5a9154a64f", "sha256": "a2cab65b46f163b6f157fc4f0589c2c1f311f2facead7dfc2be337085340e229" }, "downloads": -1, "filename": "bookstore-0.0.3a.tar.gz", "has_sig": false, "md5_digest": "d469eb54e36ba88078de5f5a9154a64f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12725, "upload_time": "2013-08-02T20:09:00", "url": "https://files.pythonhosted.org/packages/f1/ee/d3ebf3638f28a3ffd96547bd8e0c9b10e68f9af6ae59080bbd311418b634/bookstore-0.0.3a.tar.gz" } ], "0.0.4a": [ { "comment_text": "", "digests": { "md5": "d600dad289debfdda61fc08b14d59f58", "sha256": "ecfb18e29a86d407d4078dcadd255045c43372a83748e015492239d8769d307c" }, "downloads": -1, "filename": "bookstore-0.0.4a.tar.gz", "has_sig": false, "md5_digest": "d600dad289debfdda61fc08b14d59f58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12772, "upload_time": "2013-08-02T22:47:59", "url": "https://files.pythonhosted.org/packages/11/ca/b388a7216b993216953e42d811f712c019bfca97c8181fb6d96aef4cad8f/bookstore-0.0.4a.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "e3c4d1d35118d89ca7d64526d216d6ea", "sha256": "a31a500f1b10598a170bcf3a4adcd381cdd655783df1156941db8a37a2865be2" }, "downloads": -1, "filename": "bookstore-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e3c4d1d35118d89ca7d64526d216d6ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13240, "upload_time": "2013-08-10T22:56:02", "url": "https://files.pythonhosted.org/packages/9b/34/cbb318e632cd9f98b4f6acb08daff07734c1e659b489ec7a25a10d4dc4dc/bookstore-0.1.0.tar.gz" } ], "0.1.0rc1": [ { "comment_text": "", "digests": { "md5": "8a1ffce1f134e089cbde24a1f5d49ba8", "sha256": "1ba059b586f6244df3aa30133ee5bf16f389f802a051ad4db4e5123a882cd483" }, "downloads": -1, "filename": "bookstore-0.1.0rc1.tar.gz", "has_sig": false, "md5_digest": "8a1ffce1f134e089cbde24a1f5d49ba8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13366, "upload_time": "2013-08-10T19:09:46", "url": "https://files.pythonhosted.org/packages/03/9b/ece5e3e60f3689318f58974204c3ee8940b668a86eda4ff9ef7569b70d32/bookstore-0.1.0rc1.tar.gz" } ], "0.1.0rc2": [ { "comment_text": "", "digests": { "md5": "6078a9e4403f04355eb5ee34caeb987d", "sha256": "58e81857001c6cd00a9272206e26cb05f80e0b9d9b52a71948eed8bf2ce32d2a" }, "downloads": -1, "filename": "bookstore-0.1.0rc2.tar.gz", "has_sig": false, "md5_digest": "6078a9e4403f04355eb5ee34caeb987d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13370, "upload_time": "2013-08-10T22:39:37", "url": "https://files.pythonhosted.org/packages/7f/ce/f98791bae2330595611f5c8e788d2acbe7ebe2fa290f06eb4cc4aed57cd9/bookstore-0.1.0rc2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "3dbf9cd97262a57a6aad722a917185a0", "sha256": "ac18c338daa468d56537de7eb8cae264a1fcc0ea6ce7ab0eedd60271fb45a82c" }, "downloads": -1, "filename": "bookstore-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3dbf9cd97262a57a6aad722a917185a0", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 18146, "upload_time": "2013-09-26T04:24:45", "url": "https://files.pythonhosted.org/packages/20/1f/c6f69a86a0182a059a2916a3338206dfdfd34d573a0621dafc60d81a7f8c/bookstore-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3c86d6b427376896d7d0fb29eae828f", "sha256": "115449e24edf52ddea0df28e59e600088f1687ccd88a83ec270d779674b373cd" }, "downloads": -1, "filename": "bookstore-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a3c86d6b427376896d7d0fb29eae828f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13083, "upload_time": "2013-09-26T04:24:08", "url": "https://files.pythonhosted.org/packages/d7/95/f86696e9fe2411d4150bc66e7889ce71e069c94fcf09d3decaf3859bd387/bookstore-1.0.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "ed27cc2345a2f53457c26fb90b732913", "sha256": "ca458f9134454714862f3faa415bb79dda10a37b5851476420f43b723d0649f5" }, "downloads": -1, "filename": "bookstore-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed27cc2345a2f53457c26fb90b732913", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6918, "upload_time": "2018-11-14T03:24:29", "url": "https://files.pythonhosted.org/packages/3b/92/ef36d404b65f2eb4dda84ecbeefed7f7fcc0c1712628164d4ac99ba54372/bookstore-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f68259a36c7fdca78dd81e49b181a740", "sha256": "4770f107dc6c480391741ccac627d26937e815796ce95b55d86a77365f5b743d" }, "downloads": -1, "filename": "bookstore-2.0.0.tar.gz", "has_sig": false, "md5_digest": "f68259a36c7fdca78dd81e49b181a740", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 94782, "upload_time": "2018-11-14T03:24:32", "url": "https://files.pythonhosted.org/packages/cf/a5/2265d169be1cc3d547db7f853f66d3cd240bdd05a024b1de87a5159ee823/bookstore-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "1b25cc876595663e084e62d37509b805", "sha256": "c5e55c50b1d4fb5446ecf59810cf07751fc472754c30a44946d474a82205b2f0" }, "downloads": -1, "filename": "bookstore-2.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1b25cc876595663e084e62d37509b805", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7459, "upload_time": "2018-11-20T23:21:57", "url": "https://files.pythonhosted.org/packages/af/fc/f744adb947123c8fc0923de3e566baaf7e99dfdd1e8f02476e4a20fea951/bookstore-2.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6eb9b4e76c7827b7c6b87a4b81b4b471", "sha256": "dcb1cbeff2329a476b6bc5c48721e0657cf28ce55971bddd07d01d951ac45789" }, "downloads": -1, "filename": "bookstore-2.1.0.tar.gz", "has_sig": false, "md5_digest": "6eb9b4e76c7827b7c6b87a4b81b4b471", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95347, "upload_time": "2018-11-20T23:21:59", "url": "https://files.pythonhosted.org/packages/e2/5e/84c7f8bc95830b539c95e31cd72d4fdce979aeb16bbd9d6a2fed2bcb7993/bookstore-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "f23d7472d5fa68434230494c6c676aaa", "sha256": "e3f37f126564bfb4e8d650a4b4b0132c39d9a34a712e7b7a4f13c1b0f67247fb" }, "downloads": -1, "filename": "bookstore-2.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f23d7472d5fa68434230494c6c676aaa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9251, "upload_time": "2019-01-29T19:30:04", "url": "https://files.pythonhosted.org/packages/fb/57/ccfb77341aa4d5361bda6e4afa830ce10ed9c6a5aa9e17cb0e385a517985/bookstore-2.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a8d236243fb47316719fc9752a4cc21", "sha256": "d0cd5dde66ff183570fe07a3d20aff2c6e14b99c321a52b304e6c300269f93a9" }, "downloads": -1, "filename": "bookstore-2.2.0.tar.gz", "has_sig": false, "md5_digest": "4a8d236243fb47316719fc9752a4cc21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81729, "upload_time": "2019-01-29T19:30:06", "url": "https://files.pythonhosted.org/packages/1e/0d/b201c4255853058e9e9f8e34c28ec2abf19f52aef025b812c19336412a78/bookstore-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "d18dc46f6e49fc7a3b439165409d880d", "sha256": "171d0d22624c11601e2ea4ed8cb7aca50100d5d5e750a5a42c64695fbda52b2c" }, "downloads": -1, "filename": "bookstore-2.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d18dc46f6e49fc7a3b439165409d880d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10551, "upload_time": "2019-02-04T00:17:47", "url": "https://files.pythonhosted.org/packages/62/be/02f656fb64c6735a53d0ec841daa4649b237ca6770068db0efcc0badc460/bookstore-2.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2b9c36d35d97c854d4cdf3f70511193", "sha256": "2df4cd113de05f5e60e1f4e2bb0dc80f984b48d4682414f4f454cc4dd17cfd5b" }, "downloads": -1, "filename": "bookstore-2.2.1.tar.gz", "has_sig": false, "md5_digest": "f2b9c36d35d97c854d4cdf3f70511193", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86447, "upload_time": "2019-02-04T00:17:50", "url": "https://files.pythonhosted.org/packages/8c/68/2b3dc384ac556cd5d9ee0be8ad4895e9cee7d995ab14c649b7917e67bb2d/bookstore-2.2.1.tar.gz" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "d155c9263c367ad165e40d696a9944ed", "sha256": "caad65b940f750e4627ce94a8da7c3cabe32e138966dd95046470aa9c76d2599" }, "downloads": -1, "filename": "bookstore-2.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d155c9263c367ad165e40d696a9944ed", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30120, "upload_time": "2019-07-02T20:51:45", "url": "https://files.pythonhosted.org/packages/56/1e/77406e5d732c1798ce1a7974e65b62d134a187d6c8d6caf5c23be512531d/bookstore-2.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eacfb6fbc2cf54e4523c960f81f4a008", "sha256": "a7be00f01792098b407e5efaff33cede24d8ded68acb5d2a6c41769589455890" }, "downloads": -1, "filename": "bookstore-2.3.0.tar.gz", "has_sig": false, "md5_digest": "eacfb6fbc2cf54e4523c960f81f4a008", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111616, "upload_time": "2019-07-02T20:51:47", "url": "https://files.pythonhosted.org/packages/9a/e6/9e41b859b38f827686c2052c4a3af74e50088a20c4a7dbf043c46fd28cda/bookstore-2.3.0.tar.gz" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "5dcba6449eab14192d0aefef206cd5f3", "sha256": "2b06cd5f83b3d3471183be88165507549e5ad909963914844c1f4609de5d27db" }, "downloads": -1, "filename": "bookstore-2.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5dcba6449eab14192d0aefef206cd5f3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30075, "upload_time": "2019-07-17T00:25:14", "url": "https://files.pythonhosted.org/packages/d1/d7/e2569cfbb9b237370bf1b9b8f9d2765cb9866988586aa217f0271f60881f/bookstore-2.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b85c35c4c1f3d948018878cf472fb0a0", "sha256": "ac8d72754a283ccccc6483d518d952bfdc5ba072a1fff2fbe736fa7e02c69d9c" }, "downloads": -1, "filename": "bookstore-2.3.1.tar.gz", "has_sig": false, "md5_digest": "b85c35c4c1f3d948018878cf472fb0a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111630, "upload_time": "2019-07-17T00:25:15", "url": "https://files.pythonhosted.org/packages/e5/4c/53e3276871e1e38aaeeb26147c243e34c53ab4b2fc9368c8106e9d3533db/bookstore-2.3.1.tar.gz" } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "1d8f4d43b32861230ac339df5aabfd10", "sha256": "8b74d13cae909ccee73cccc0863486141a7d4d9c643ecefdf5f832a705f5a736" }, "downloads": -1, "filename": "bookstore-2.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1d8f4d43b32861230ac339df5aabfd10", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33112, "upload_time": "2019-08-05T22:59:29", "url": "https://files.pythonhosted.org/packages/1c/1e/0b86d7c2a17e99c8c1fc6845d34aab01ad72da35c9a0b1f3cc6423ef9285/bookstore-2.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "21a4b85774772b48278ac112eff97411", "sha256": "0e62fc8f41eb46540b670ba0a3344cb6fd0318a9d92af57cb3a6e4d14393a75a" }, "downloads": -1, "filename": "bookstore-2.4.0.tar.gz", "has_sig": false, "md5_digest": "21a4b85774772b48278ac112eff97411", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115127, "upload_time": "2019-08-05T22:59:31", "url": "https://files.pythonhosted.org/packages/56/f6/ddac5eaeeb52024477e56f689379908b4eb15c8b3a29d3c8b53db36900e0/bookstore-2.4.0.tar.gz" } ], "2.4.1": [ { "comment_text": "", "digests": { "md5": "75d858887e42250fb6abb59b4ebce4a6", "sha256": "601d5a41bec21c7af354c24d95b0523f875930e4d6775b3b59e3316102af0ff5" }, "downloads": -1, "filename": "bookstore-2.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "75d858887e42250fb6abb59b4ebce4a6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33689, "upload_time": "2019-08-06T23:25:04", "url": "https://files.pythonhosted.org/packages/bf/71/ecb60831eef8cbdaeec2281e09454baa045601dc80f554cba71d80a15e96/bookstore-2.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cca53347e970ab1bea25db1869adbba2", "sha256": "3fb11277849727d24818bda1c52f541279e409deda5162b882f449ddc5686bc9" }, "downloads": -1, "filename": "bookstore-2.4.1.tar.gz", "has_sig": false, "md5_digest": "cca53347e970ab1bea25db1869adbba2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115678, "upload_time": "2019-08-06T23:25:06", "url": "https://files.pythonhosted.org/packages/e8/0b/84293c4d3754b4650c65bc9787fa0bc7309220ace1579584d137b3879914/bookstore-2.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "75d858887e42250fb6abb59b4ebce4a6", "sha256": "601d5a41bec21c7af354c24d95b0523f875930e4d6775b3b59e3316102af0ff5" }, "downloads": -1, "filename": "bookstore-2.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "75d858887e42250fb6abb59b4ebce4a6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33689, "upload_time": "2019-08-06T23:25:04", "url": "https://files.pythonhosted.org/packages/bf/71/ecb60831eef8cbdaeec2281e09454baa045601dc80f554cba71d80a15e96/bookstore-2.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cca53347e970ab1bea25db1869adbba2", "sha256": "3fb11277849727d24818bda1c52f541279e409deda5162b882f449ddc5686bc9" }, "downloads": -1, "filename": "bookstore-2.4.1.tar.gz", "has_sig": false, "md5_digest": "cca53347e970ab1bea25db1869adbba2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115678, "upload_time": "2019-08-06T23:25:06", "url": "https://files.pythonhosted.org/packages/e8/0b/84293c4d3754b4650c65bc9787fa0bc7309220ace1579584d137b3879914/bookstore-2.4.1.tar.gz" } ] }