{ "info": { "author": "Raymond Wanyoike", "author_email": "raymond.wanyoike@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "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.6", "Programming Language :: Python :: 3.7" ], "description": "# time2relax: Python CouchDB Driver\n\n[![Travis (.org)](https://img.shields.io/travis/rwanyoike/time2relax.svg)](https://travis-ci.org/rwanyoike/time2relax)\n[![Codecov](https://img.shields.io/codecov/c/gh/rwanyoike/time2relax.svg)](https://codecov.io/gh/rwanyoike/time2relax)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/time2relax.svg)](https://pypi.python.org/pypi/time2relax)\n[![PyPI - License](https://img.shields.io/pypi/l/time2relax.svg)](https://pypi.python.org/pypi/time2relax)\n\n> A CouchDB driver for Python.\n\ntime2relax is a Python [CouchDB](https://couchdb.apache.org/) driver that tries to offer a minimal level of abstraction between you and CouchDB.\n\nBasic insert usage:\n\n```python\n>>> from time2relax import CouchDB\n>>> db = CouchDB('http://localhost:5984/dbname')\n>>> db.insert({'title': 'Ziggy Stardust'})\n\n```\n\n
\nTable of Contents\n\n- [Feature Support](#feature-support)\n- [Installation](#installation)\n- [Documentation](#documentation)\n - [Create a Database](#create-a-database)\n - [Delete a Database](#delete-a-database)\n - [Create/Update a Document](#createupdate-a-document)\n - [Fetch a Document](#fetch-a-document)\n - [Delete a Document](#delete-a-document)\n - [Create/Update a Batch of Documents](#createupdate-a-batch-of-documents)\n - [Fetch a Batch of Documents](#fetch-a-batch-of-documents)\n - [Replicate a Database](#replicate-a-database)\n - [Save an Attachment](#save-an-attachment)\n - [Get an Attachment](#get-an-attachment)\n - [Delete an Attachment](#delete-an-attachment)\n - [Get Database Information](#get-database-information)\n - [Compact a Database](#compact-a-database)\n - [Run a List Function](#run-a-list-function)\n - [Run a Show Function](#run-a-show-function)\n - [Run a View Function](#run-a-view-function)\n- [How to Contribute](#how-to-contribute)\n\nTable of contents generated with markdown-toc\n
\n\n## Feature Support\n\nInspired by [pouchdb](https://github.com/pouchdb/pouchdb) and [couchdb-nano](https://github.com/apache/couchdb-nano) APIs, it features:\n\n* [Requests](https://requests.readthedocs.io/en/latest) (HTTP for Humans) under the hood.\n* Transparent URL and parameter encoding.\n* HTTP exceptions modeled from CouchDB [error codes](http://docs.couchdb.org/en/1.6.1/api/basics.html#http-status-codes).\n* Support for CouchDB 1.7.x.\n\ntime2relax officially supports **Python 2.7 and 3.6+**.\n\n## Installation\n\nTo install time2relax, simply run:\n\n```\n$ pip install -U time2relax\n\u2728\ud83d\udecb\u2728\n```\n\n## Documentation\n\n[![Read the Docs](https://img.shields.io/readthedocs/time2relax.svg)](https://time2relax.readthedocs.org)\n\nDetailed documentation is available at [https://time2relax.readthedocs.org](https://time2relax.readthedocs.org).\n\n---\n\nTo use time2relax in a project:\n\n```python\n>>> from time2relax import CouchDB\n>>> db = CouchDB('http://localhost:5984/dbname')\n```\n\nMost of the API is exposed as `db.FUNCTION(*args, **kwargs)`, where `**kwargs` are optional arguments that `requests.Session.request` can take.\n\n### Create a Database\n\nInitially the `CouchDB` object will check if the database exists, and try to create it if it does not. You can use `create_db=False` to skip this step:\n\n```python\n>>> db = CouchDB('http://localhost:5984/dbname', create_db=False)\n```\n\n### Delete a Database\n\nDelete a database:\n\n```python\n>>> db.destroy()\n\n```\n\nFurther requests with the `CouchDB` object should raise a `time2relax.ResourceNotFound`:\n\n```python\n>>> db.info()\nResourceNotFound: ({'error': 'not_found', 'reason': 'missing'}, )\n```\n\n### Create/Update a Document\n\nNote: There are some CouchDB restrictions on valid property names of the documents.\n\nCreate a new document:\n\n```python\n>>> db.insert({'_id': 'docid', 'title': 'Heros'})\n\n```\n\nTo create a new document and let CouchDB auto-generate an `_id` for it:\n\n```python\n>>> db.insert({'title': 'Ziggy Stardust'})\n\n```\n\nIf the document already exists, you must specify its revision `_rev`, otherwise a conflict will occur. You can update an existing document using `_rev`:\n\n```python\n>>> result = db.get('docid').json()\n>>> db.insert({'_id': result['_id'], '_rev': result['_rev'], 'title': 'Dance'})\n\n```\n\n### Fetch a Document\n\nRetrieve a document:\n\n```python\n>>> db.get('docid')\n\n```\n\n### Delete a Document\n\nYou must supply the `_rev` of the existing document.\n\nDelete a document:\n\n```python\n>>> result = db.get('docid').json()\n>>> db.remove(result['_id'], result['_rev'])\n\n```\n\nYou can also delete a document by using `time2relax.CouchDB.insert` with `{'_deleted': True}`:\n\n```python\n>>> result = db.get('docid').json()\n>>> result['_deleted'] = True\n>>> db.insert(result)\n\n```\n\n### Create/Update a Batch of Documents\n\nCreate multiple documents:\n\n```python\n>>> db.bulk_docs([\n... {'_id': 'doc1', 'title': 'Lisa Says'},\n... {'_id': 'doc2', 'title': 'Space Oddity'},\n... ])\n\n```\n\nIf you omit the `_id` parameter on a given document, the database will create a new document and assign the ID for you:\n\n```python\n>>> db.bulk_docs([\n... {'title': 'Lisa Says'},\n... {'title': 'Space Oddity'},\n... ])\n\n```\n\nTo update a document, you must include both an `_id` parameter and a `_rev` parameter, which should match the ID and revision of the document on which to base your updates:\n\n```python\n>>> db.bulk_docs([\n... {\n... '_id': 'doc1',\n... '_rev': '1-84abc2a942007bee7cf55007cba56198',\n... 'title': 'Lisa Says',\n... 'artist': 'Velvet Underground',\n... },\n... {\n... '_id': 'doc2',\n... '_rev': '1-7b80fc50b6af7a905f368670429a757e',\n... 'title': 'Space Oddity',\n... 'artist': 'David Bowie',\n... },\n... ])\n\n```\n\nFinally, to delete a document, include a `_deleted` parameter with the value `True`:\n\n```python\n>>> db.bulk_docs([\n... {\n... '_id': 'doc1',\n... '_rev': '1-84abc2a942007bee7cf55007cba56198',\n... 'title': 'Lisa Says',\n... '_deleted': True,\n... },\n... {\n... '_id': 'doc2',\n... '_rev': '1-7b80fc50b6af7a905f368670429a757e',\n... 'title': 'Space Oddity',\n... '_deleted': True,\n... },\n... ])\n\n```\n\n### Fetch a Batch of Documents\n\nFetch multiple documents:\n\n```python\n>>> params = {'include_docs': True, 'attachments': True}\n>>> db.all_docs(params)\n\n```\n\nYou can use `startkey`/`endkey` to find all docs in a range:\n\n```python\n>>> params = {'startkey': 'bar', 'endkey': 'quux'}\n>>> db.all_docs(params)\n\n```\n\nYou can also do a prefix search \u2013 i.e. \"give me all the documents whose `_id` start with `'foo'`\" \u2013 by using the special high Unicode character `'\\uffff'`:\n\n```python\n>>> params = {'startkey': 'foo', 'endkey': 'foo\\uffff'}\n>>> db.all_docs(params)\n\n```\n\n### Replicate a Database\n\nNote: The target has to exist, you can use `json={'create_target': True}` to create it prior to replication.\n\nReplicate a database to a target:\n\n```python\n>>> db.replicate_to('http://localhost:5984/otherdb')\n\n```\n\n### Save an Attachment\n\nThis method will update an existing document to add an attachment, so it requires a `_rev` if the document already exists. If the document doesn't already exist, then this method will create an empty document containing the attachment.\n\nAttach a text/plain file:\n\n```python\n>>> with open('/tmp/att.txt') as fp:\n... db.insert_att('docid', None, 'att.txt', fp, 'text/plain')\n...\n\n```\n\n### Get an Attachment\n\nGet attachment data:\n\n```python\n>>> db.get_att('docid', 'att.txt')\n\n```\n\n### Delete an Attachment\n\nYou must supply the `_rev` of the existing document.\n\nDelete an attachment:\n\n```python\n>>> result = db.get('docid').json()\n>>> db.remove_att(result['_id'], result['_rev'], 'att.txt')\n\n```\n\n### Get Database Information\n\nGet information about a database:\n\n```python\n>>> db.info()\n\n```\n\n### Compact a Database\n\nThis reduces a database's size by removing unused and old data, namely non-leaf revisions and attachments that are no longer referenced by those revisions.\n\nTrigger a compaction operation:\n\n```python\n>>> db.compact()\n\n```\n\n### Run a List Function\n\nMake sure you understand how list functions work in CouchDB. A good start is [the CouchDB guide entry on lists](http://guide.couchdb.org/draft/transforming.html):\n\n```python\n>>> db.insert({\n... '_id': '_design/testid',\n... 'views': {\n... 'viewid': {\n... 'map': \"function (doc) {\"\n... \" emit(doc._id, 'value');\"\n... \"}\",\n... },\n... },\n... 'lists': {\n... 'listid': \"function (head, req) {\"\n... \" return 'Hello World!';\"\n... \"}\",\n... },\n... })\n\n>>> db.ddoc_list('testid', 'listid', 'viewid')\n\n```\n\n### Run a Show Function\n\nMake sure you understand how show functions work in CouchDB. A good start is [the CouchDB guide entry on shows](http://guide.couchdb.org/draft/show.html):\n\n```python\n>>> db.insert({\n... '_id': '_design/testid',\n... 'shows': {\n... 'showid': \"function (doc, req) {\"\n... \" return {body: 'relax!'}\"\n... \"}\",\n... },\n... })\n\n>>> db.ddoc_show('testid', 'showid')\n\n```\n\n### Run a View Function\n\nMake sure you understand how view functions work in CouchDB. A good start is [the CouchDB guide entry on views](http://guide.couchdb.org/draft/views.html):\n\n```python\n>>> db.insert({\n... '_id': '_design/testid',\n... 'views': {\n... 'viewid': {\n... 'map': \"function (doc) {\"\n... \" emit(doc.key);\"\n... \"}\",\n... },\n... },\n... })\n\n>>> params = {'reduce': False, 'key': 'key2'}\n>>> db.ddoc_view('testid', 'viewid', params)\n\n```\n\n## How to Contribute\n\n1. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug.\n1. Fork [the repository](https://github.com/rwanyoike/time2relax) to start making your changes to the master branch (or branch off of it).\n1. Write a test which shows that the bug was fixed or that the feature works as expected.\n1. Send a pull request and bug the maintainer until it gets merged and published. Make sure to add yourself to [AUTHORS](https://github.com/rwanyoike/time2relax/blob/master/AUTHORS.md).\n\n---\n# Version History\n\n## 0.5.0 (2018-08-04)\n\n- Move the time2relax API to `time2relax.time2relax`.\n- Add Python 3.7 support.\n\n## 0.4.1 (2017-11-22)\n\n- Fix Travis build errors - invalid config\n\n## 0.4.0 (2017-11-21)\n\n- `CouchDBError` is now `HTTPError` (*Backwards Incompatible*)\n- `CouchDB(skip_setup=False)` is now `CouchDB(create_db=True)` (*Backwards Incompatible*)\n- Add Python 3.6 support.\n- Drop Python 2.6 support - Python 2.6 is no longer supported by the Python core team. (*Backwards Incompatible*)\n\n## 0.3.0 (2017-03-03)\n\n- New time2relax API. (*Backwards Incompatible*)\n- time2relax is now a thin `requests` wrapper.\n- New design document functions; `list`, `show`, `view`.\n\n## 0.2.0 (2016-12-10)\n\n- Add Python 3.3, 3.4, 3.5 support.\n\n## 0.1.0 (2016-12-10)\n\n- First release on PyPI.\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/rwanyoike/time2relax", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "time2relax", "package_url": "https://pypi.org/project/time2relax/", "platform": "", "project_url": "https://pypi.org/project/time2relax/", "project_urls": { "Homepage": "https://github.com/rwanyoike/time2relax" }, "release_url": "https://pypi.org/project/time2relax/0.5.2/", "requires_dist": [ "requests (<3,>=2)", "six" ], "requires_python": "", "summary": "A CouchDB driver for Python.", "version": "0.5.2" }, "last_serial": 4136058, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9fa41240f0522279045917d721f3c4c9", "sha256": "f6c2cabec4daad7a9fd8b3ae58ea1aa339bf02918617df91b3a23e8b3b649bee" }, "downloads": -1, "filename": "time2relax-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9fa41240f0522279045917d721f3c4c9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6166, "upload_time": "2016-12-10T09:10:27", "url": "https://files.pythonhosted.org/packages/0d/97/6b3ae329e2e90d0376beaa81b15ba9e915d7f8fcb8b78122285c78e5d921/time2relax-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27652a575e0522b78dd170e58ffe40d1", "sha256": "447f5dbfd8099344dc5fcc7c7b115bd86d964ae438e4366d81a608839760a5ed" }, "downloads": -1, "filename": "time2relax-0.1.0.tar.gz", "has_sig": false, "md5_digest": "27652a575e0522b78dd170e58ffe40d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29226, "upload_time": "2016-12-10T09:10:28", "url": "https://files.pythonhosted.org/packages/e5/d7/7c5b7ad9a9bf7de5f825142b57698c08d7fb342f6030d5a117b0c90be4c6/time2relax-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8f6328d94bb528ff943081e1879cb7e6", "sha256": "f38376864d2ea259cf821cfc7593429558fbf08bf919702151e11275b4658db7" }, "downloads": -1, "filename": "time2relax-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8f6328d94bb528ff943081e1879cb7e6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5933, "upload_time": "2016-12-12T22:57:33", "url": "https://files.pythonhosted.org/packages/7b/02/725782fd2b8c5d1dbf0e127c19d862e68bb0638bebfe65f224bd82866a19/time2relax-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52a6a617fd7e15acb2509e44eff65ce4", "sha256": "07cb11e35a14e112534552d2e3f08ac8d2490b66fcb03290a1b9b471e6207f93" }, "downloads": -1, "filename": "time2relax-0.2.0.tar.gz", "has_sig": false, "md5_digest": "52a6a617fd7e15acb2509e44eff65ce4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20674, "upload_time": "2016-12-12T22:57:34", "url": "https://files.pythonhosted.org/packages/55/ce/ff794016b01f2c4694936daf3b39cbf8108115e2b0f3affe3c61f364c19e/time2relax-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "1bbf5d30948f322370fd8598e0caccb8", "sha256": "79e82c25841772422ccc2b58bf1fcaf395d6b8b6680810dc9e580860bd0dbdfe" }, "downloads": -1, "filename": "time2relax-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1bbf5d30948f322370fd8598e0caccb8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7540, "upload_time": "2017-03-03T16:41:40", "url": "https://files.pythonhosted.org/packages/0a/57/0bffb1878fe70fc9346c7acf1d3ec284214517bab953329dcb75bc6cb1cb/time2relax-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "696f3e4f841cf687f08e39f4823b08bf", "sha256": "aa51c9d04717a8c20cb9da56fd584767e4934595397a724500f45e4ef660f2cd" }, "downloads": -1, "filename": "time2relax-0.3.0.tar.gz", "has_sig": false, "md5_digest": "696f3e4f841cf687f08e39f4823b08bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28300, "upload_time": "2017-03-03T16:41:46", "url": "https://files.pythonhosted.org/packages/de/2b/98015a7e560e5b16169a487f8efbc44202c185a5d08f072c774e4ebbd9da/time2relax-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "5ce83dcde6b92cda1cf8edf9984aeffd", "sha256": "01507f415b6389fb31c2e3dd0457f1641ef451361917a20ca01b8ea5a860687c" }, "downloads": -1, "filename": "time2relax-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ce83dcde6b92cda1cf8edf9984aeffd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11067, "upload_time": "2017-11-21T00:18:50", "url": "https://files.pythonhosted.org/packages/b9/36/cbe0c4548eafd09e242e15d825400c55d6fcba2085f8ddeb53d76b51ba8c/time2relax-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89ead1f44e8442e1f785bdc87bfc026e", "sha256": "c5f179b124416a8c671c424a0b3eee331fd0be53c29ef641842047bd1f37126d" }, "downloads": -1, "filename": "time2relax-0.4.0.tar.gz", "has_sig": false, "md5_digest": "89ead1f44e8442e1f785bdc87bfc026e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21779, "upload_time": "2017-11-21T00:15:12", "url": "https://files.pythonhosted.org/packages/c9/01/1ca6ab98670593917e264ebe53a2ef10e7136db97c729d8822808131d627/time2relax-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "9665658dc26f5bad28f7f2a1e5c1a927", "sha256": "a7647486b30d523cc1241c5f4d1a248e9cc2590dc2e8b193914b78034d6919cd" }, "downloads": -1, "filename": "time2relax-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9665658dc26f5bad28f7f2a1e5c1a927", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11133, "upload_time": "2017-11-21T07:12:54", "url": "https://files.pythonhosted.org/packages/fc/7c/f1fae53633e87b54505757e9536ea014e3b370bfcc91062ebdf116e53dce/time2relax-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "381982b01e069afe434b158a7f726bc5", "sha256": "ab3f204ab9bc1a23da874c4965984d0bf2efb76734688978c492e6d9b08afd42" }, "downloads": -1, "filename": "time2relax-0.4.1.tar.gz", "has_sig": false, "md5_digest": "381982b01e069afe434b158a7f726bc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27637, "upload_time": "2017-11-21T07:12:56", "url": "https://files.pythonhosted.org/packages/e6/0f/5bd83288c0d1dada86244eb6f8de4b3cc77fde0d083ea2a7f53926ecb62e/time2relax-0.4.1.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "6d6bd63328198f5f1485e799237e30ec", "sha256": "0cb923e2dee78028392a2fc7dec96f5240ff4f32ea717c710d9bbeafb1973e8a" }, "downloads": -1, "filename": "time2relax-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6d6bd63328198f5f1485e799237e30ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11818, "upload_time": "2018-08-04T19:35:50", "url": "https://files.pythonhosted.org/packages/7b/29/5c3cfa38fbfc6395b0fc98bfec91e625de9763191fa16d3fe4a4c1a15a04/time2relax-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d5ffd74b2499109a173e2e655b46ec4", "sha256": "82e146384bfef5c1c5a5c145d665e6d7b43010295af9aafa7b9cc07bb0b659af" }, "downloads": -1, "filename": "time2relax-0.5.1.tar.gz", "has_sig": false, "md5_digest": "2d5ffd74b2499109a173e2e655b46ec4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20493, "upload_time": "2018-08-04T19:35:52", "url": "https://files.pythonhosted.org/packages/31/d7/7948ca2b8d06f1c6c59c3ce7c57df4b806b966cad2ce06cd0f85fe6ba889/time2relax-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "d7e6ddfa6428bd9399b4c2848d0e3514", "sha256": "43383f2454cc7e613ed2960d30715acf3c20d3d2e51ce2bab784330f7737ff54" }, "downloads": -1, "filename": "time2relax-0.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d7e6ddfa6428bd9399b4c2848d0e3514", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11829, "upload_time": "2018-08-04T19:41:27", "url": "https://files.pythonhosted.org/packages/ed/6b/186b54f6d1bab6159d57f01680fcddf729e42efde141d3d3a5462524c6fa/time2relax-0.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07d052c886d0b6b6a906d6bf0391803c", "sha256": "277d2a66f87673f657ce2f5a60ae99cd1f8db3a086bdab9957a9f46874b5f22c" }, "downloads": -1, "filename": "time2relax-0.5.2.tar.gz", "has_sig": false, "md5_digest": "07d052c886d0b6b6a906d6bf0391803c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20530, "upload_time": "2018-08-04T19:41:29", "url": "https://files.pythonhosted.org/packages/bd/16/f516d8932e4db804f33bb7402d2bf006db3122b66996ac56d3a9868f4bc5/time2relax-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d7e6ddfa6428bd9399b4c2848d0e3514", "sha256": "43383f2454cc7e613ed2960d30715acf3c20d3d2e51ce2bab784330f7737ff54" }, "downloads": -1, "filename": "time2relax-0.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d7e6ddfa6428bd9399b4c2848d0e3514", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11829, "upload_time": "2018-08-04T19:41:27", "url": "https://files.pythonhosted.org/packages/ed/6b/186b54f6d1bab6159d57f01680fcddf729e42efde141d3d3a5462524c6fa/time2relax-0.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07d052c886d0b6b6a906d6bf0391803c", "sha256": "277d2a66f87673f657ce2f5a60ae99cd1f8db3a086bdab9957a9f46874b5f22c" }, "downloads": -1, "filename": "time2relax-0.5.2.tar.gz", "has_sig": false, "md5_digest": "07d052c886d0b6b6a906d6bf0391803c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20530, "upload_time": "2018-08-04T19:41:29", "url": "https://files.pythonhosted.org/packages/bd/16/f516d8932e4db804f33bb7402d2bf006db3122b66996ac56d3a9868f4bc5/time2relax-0.5.2.tar.gz" } ] }