{ "info": { "author": "Research Innovations Ltd", "author_email": "richard@researchspace.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries" ], "description": "# rspace-client-python\n\nThis project contains a client which helps calling RSpace APIs. There are some example Python scripts.\n\nTo begin with you'll need an account on an RSpace server and an API key which you can get from your profile page.\n\nIn these examples we'll be using the rspace_client package (code is in rspace_client folder) which provides an abstraction over lower-level libraries. It's compatible with both Python 2 and Python 3.\n\nAll the code listed here is in the project.\n\nFor full details of our API spec please see https://your.rspace.com/public/apiDocs\n\nTo install rspace-client and its dependencies, run\n```bash\npip3 install rspace-client\n```\n\nTo run the example scripts in the examples folder, cd to that folder, then run\n\n```bash\npython3 ExampleScript.py https://your.rspace.com MyAPIKey\n```\n\nreplacing MyAPIKey with your key, and ExampleScript.py with the name of the script you want to run.\n\n### A basic query to list documents\n\nFirst of all we'll get our URL and key from a command-line parameters.\n\n```python\nparser = argparse.ArgumentParser()\nparser.add_argument(\"server\", help=\"RSpace server URL (for example, https://community.researchspace.com)\", type=str)\nparser.add_argument(\"apiKey\", help=\"RSpace API key can be found on 'My Profile'\", type=str)\nargs = parser.parse_args()\n\nclient = rspace_client.Client(args.server, args.apiKey)\ndocuments = client.get_documents()\n```\n\nIn the above example, the 'documents' variable is a dictionary that can easily be accessed for data:\n\n```python\nprint(document['name'], document['id'], document['lastModified'])\n```\n\n#### Iterating over pages of results\n\nThe JSON response also contains a `_links` field that uses HATEOAS conventions to provide links to related content. For document listings and searches, links to `previous`, `next`, `first` and `last` pages are provided when needed.\n\nUsing this approach we can iterate through pages of results, getting summary information for each document.\n\n```python\nwhile client.link_exists(response, 'next'):\n print('Retrieving next page...')\n response = client.get_link_contents(response, 'next')\n```\n\nA complete example of this is `examples/paging_through_results.py`.\n\n### Searching\n\nRSpace API provides two sorts of search - a basic search that searches all searchable fields, and an advanced search where more fine-grained queries can be made and combined with boolean operators.\n\nA simple search can be run by calling get_documents with a query parameter:\n\n```python\n response = client.get_documents(query='query_text')\n\n```\n\nHere are some examples of advanced search constructs:\n\n```python \n // search by tag:\n search = json.dumps([terms:[[query:\"ATag\", queryType:\"tag\"]]])\n\n // by name\n search = json.dumps([terms:[[query:\"AName\", queryType:\"name\"]]])\n\n // for items created on a given date using IS0-8601 or yyyy-MM-dd format\n search = json.dumps([terms:[[query:\"2016-07-23\", queryType:\"created\"]]])\n\n // for items modified between 2 dates using IS0-8601 or yyyy-MM-dd format\n search = json.dumps([terms:[[query:\"2016-07-23;2016-08-23 \", queryType:\"lastModified\"]]])\n\n // for items last modified on either of 2 dates:\n search = json.dumps([operator:\"or\",terms:[[query:\"2015-07-06\", queryType:\"lastModified\"],\n [query:\"2015-07-07\", queryType:\"lastModified\"] ])\n\n // search for documents created from a given form:\n search = json.dumps([terms:[[query:\"Basic Document\", queryType:\"form\"]]])\n\n // search for documents created from a given form and a specific tag:\n search = json.dumps([operator:\"and\", terms:[[query:\"Basic Document\", queryType:\"form\"], [query:\"ATag\", queryType:\"tag\"]]]) \n```\n\nor by using AdvancedQueryBuilder\n\n```python\n# Creation date (documents created between 2017-01-01 and 2017-12-01\nadvanced_query = rspace_client.AdvancedQueryBuilder().\\\n add_term('2017-01-01;2017-12-01', rspace_client.AdvancedQueryBuilder.QueryType.CREATED).\\\n get_advanced_query()\n```\n\nTo submit these queries pass them as a parameter to `get_get_documents_advanced_query`:\n\n```python\n response = client.get_documents_advanced_query(advanced_query)\n for document in response['documents']:\n print(document['name'], document['id'], document['lastModified'])\n\n```\n\n### Retrieving document content\n\nContent can be retrieved from the endpoint `/documents/{id}` where {id} is a documentID.\n\nHere is an example retrieving a document in CSV format taken from `forms.py` script:\n\n```python\nadvanced_query = rspace_client.AdvancedQueryBuilder(operator='and').\\\n add_term(form_id, rspace_client.AdvancedQueryBuilder.QueryType.FORM).\\\n get_advanced_query()\n\nresponse = client.get_documents_advanced_query(advanced_query)\n\nprint('Found answers:')\nfor document in response['documents']:\n print('Answer name:', document['name'])\n document_response = client.get_document_csv(document['id'])\n print(document_response)\n\n```\n\n### Getting attached files\n\nHere's an example where we download file attachments associated with some documents. The code is in `download_attachments.py`. \n\n```python\ntry:\n response = client.get_document(doc_id=document_id)\n for field in response['fields']:\n for file in field['files']:\n download_metadata_link = client.get_link_contents(file, 'self')\n filename = '/tmp/' + download_metadata_link['name']\n print('Downloading to file', filename)\n client.download_link_to_file(client.get_link(download_metadata_link, 'enclosure'), filename)\nexcept ValueError:\n print('Document with id %s not found' % str(document_id))\n```\n\n### Creating / editing a new document\n\nA document can be created by sending a POST request to `/documents`. Document name, form from which the document is created, tags and field values can be specified. The example code is in `create_document.py`.\n\n```python\n# Creating a new Basic document in Api Inbox folder\nnew_document = client.create_document(name='Python API Example Basic Document', tags=['Python', 'API', 'example'],\n fields=[{'content': 'Some example text'}])\n```\n\nIt is possible to edit a document by sending a PUT request to `/documents/{id}`, where {id} is a documentID. Document name, tags and field values can be edited.\n\n```python\n# Editing the document to link to the uploaded file\nclient.update_document(document['id'], fields=[{'content': 'Edited example text.'}])\n```\n\n### Uploading a file to gallery\n\nAny file that can be uploaded by using the UI can be uploaded by sending a POST request to `/files`. Also, it is possible to link to the file from any document as shown in `create_document.py` example.\n\n```python\n# Uploading a file to the gallery\nwith open('resources/2017-05-10_1670091041_CNVts.csv', 'rb') as f:\n new_file = client.upload_file(f, caption='some caption')\n\n# Editing the document to link to the uploaded file\nclient.update_document(new_document['id'], fields=[{\n 'content': 'Some example text. Link to the uploaded file: '.format(new_file['id'])\n}])\n```\n\n### Activity\n\nAccess to the information that is available from the RSpace audit trail. This provides logged information on 'who did what, when\u2019.\n\nFor example, to get all activity for a particular document:\n\n```python\nresponse = client.get_activity(global_id=document_id)\n\nprint('Activities for document {}:'.format(document_id))\nfor activity in response['activities']:\n print(activity)\n```\n\nTo get all activity related to documents being created or modified last week:\n\n```python\ndate_from = date.today() - timedelta(days=7)\nresponse = client.get_activity(date_from=date_from, domains=['RECORD'], actions=['CREATE', 'WRITE'])\n\nprint('All activity related to documents being created or modified from {} to now:'.format(date_from.isoformat()))\nfor activity in response['activities']:\n print(activity)\n```\n\n### Creating a Folder / Notebook\n\nA folder can be created by sending a POST request to `/folders`. All arguments are optional. Name, parent folder id and whether to create a notebook can be specified. For example, to create a folder named 'Testing Folder', `create_folder` method can be used:\n\n```python\n# Creating a folder named 'Testing Folder'\nnew_folder = client.create_folder('Testing Folder')\n```\n\nNotebooks can be created by setting `notebook=True`. To create a new notebook inside the previously created folder:\n\n```python\n# Creating a notebook named 'Testing Notebook' inside the previously created folder:\nnew_notebook = client.create_folder('Testing Notebook', parent_folder_id=new_folder['globalId'], notebook=True)\n```\n\nThere are some restrictions on where you can create folders and notebooks, which are required to maintain consistent behaviour with the web application.\n\n* You can't create folders or notebooks inside notebooks\n* You can't create notebooks inside the Shared Folder; create them in a User folder first, then share. (Sharing is not yet supported in the API, but you can do this in the web application).\n\n\n### Getting Information About a Folder / Notebook\n\nFolder or notebook information can be retrieved by sending a GET request to `/folders/{folderId}` where folder id is a numerical ID of a folder or a notebook. Python client accepts both numerical IDs and global IDs. Method `get_folder` can be used to get information about a folder:\n\n```python\n# Get information about a folder\nfolder_info = client.get_folder('FL123') # or client.get_folder(123)\nprint(folder_info['globalId'], folder_info['name'])\n```\n\n### Forms\n\nPublished forms can be listed by sending a GET request to `/forms`. The results might be paginated if there are too many forms (see `create_form.py` example for a more in depth usage example).\n\n```python\n# Listing all published forms\nresponse = client.get_forms()\nfor form in response['forms']:\n print(form['globalId'], form['name'])\n```\n\nA new form can be created by sending a POST request to `/forms`. Name, tags (optionally) and fields can be specified. Currently, supported types of form fields are: 'String', 'Text', 'Number', 'Radio', 'Date'. More information about the available parameters can be found in [API documentation](https://community.researchspace.com/public/apiDocs) or by looking at `create_form.py` source code.\n\n```python\n# Creating a new form\nfields = [\n {\n \"name\": \"A String Field\",\n \"type\": \"String\",\n \"defaultValue\": \"An optional default value\"\n }\n]\nclient.create_form('Test Form', tags=['testing', 'example'], fields=fields)\n```\n\nForm information can be retrieved by sending a GET request to `/forms/{formId}` where formId is a numerical ID of a form. Python client accepts both numerical IDs and global IDs. \n```python\n# Getting information about a form\nresponse = client.get_form('FM3') # or client.get_form(3)\nprint('Retrieved information about a form:', response['globalId'], response['name'])\nprint('Fields:')\nfor field in response['fields']:\n print(field['type'], field['name'])\n```\n\nA newly created form is not available to create documents from until it has been published. Sending a POST request to `/forms/{formId}/publish` publishes a form.\n```python\n# Publishing form FM123\nclient.publish_form('FM123') # or client.publish_form(123)\n\n# Unpublish the form\nclient.unpublish_form('FM123') # or client.unpublish_form(123)\n```\n\nIt is possible to share a form with your groups. Once it is shared the `accessControl.groupPermissionType` property is `READ`.\n```python\n# Sharing form FM123\nclient.share_form('FM123')\n\n# Unsharing the form\nclient.unshare_form('FM123')\n```\n\n### Export\n\nFrom RSpace 1.47 (API version 1.3) you can programmatically export your work in HTML or XML format. This might be useful if you want to make scheduled backups, for example. If you're an admin or PI you can export a particular user's work if you have permission.\n\nBecause export can be quite time-consuming, this is an asynchronous operation. On initial export you will receive a link to a job that you can query for progress updates. When the export has completed there will be a link to access the exported file - which may be very large.\n\nThis Python API client provides an easy to use method that handles starting an export, polling the job's status and downloading the exported archive once it's ready. For example, to export current user's work in XML format: \n```python\nexport_archive_file_path = client.download_export('xml', 'user', file_path='/tmp')\n```\n\nThere are ```start_export(self, format, scope, id=None)``` and ```get_job_status(self, job_id)``` functions to start the export and check its status as well.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rspace-os/rspace-client-python", "keywords": "rspace api client researchspace eln", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "rspace-client", "package_url": "https://pypi.org/project/rspace-client/", "platform": "", "project_url": "https://pypi.org/project/rspace-client/", "project_urls": { "Homepage": "https://github.com/rspace-os/rspace-client-python" }, "release_url": "https://pypi.org/project/rspace-client/1.5.0/", "requires_dist": [ "requests", "six" ], "requires_python": "", "summary": "A client which helps calling RSpace APIs", "version": "1.5.0" }, "last_serial": 4740988, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "f3d283fec81c21093d8b19943c25da48", "sha256": "383a18e7078dae4d872002d76386459f47e3661e1204a431bff8aba6b1f0fb68" }, "downloads": -1, "filename": "rspace_client-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f3d283fec81c21093d8b19943c25da48", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18527, "upload_time": "2017-02-10T04:47:31", "url": "https://files.pythonhosted.org/packages/a1/3b/1b0d4f72e460fb32934800ebf917f340623b71485c3f1926850e532573ff/rspace_client-0.0.1-py2.py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "432f2a8981b149c1375b8f9c111a335b", "sha256": "619cd359466dbee7d08bf66158b7595c4fda5049d779f8406c1e8b5e59e073fa" }, "downloads": -1, "filename": "rspace_client-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "432f2a8981b149c1375b8f9c111a335b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28297, "upload_time": "2017-02-10T05:20:23", "url": "https://files.pythonhosted.org/packages/3b/21/f7b8df006fafacd4d001af9240a12298ce48396e02713a39f8f8cf0d2c9b/rspace_client-0.0.2-py2.py3-none-any.whl" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d6757a87e42a62441c1b14b1d1fdd1d7", "sha256": "13fc300a5f8983cd1661de4af78a828a1ba521a1be700ffc9cf27d7f6adbbdec" }, "downloads": -1, "filename": "rspace_client-1.2.0-py2.7.egg", "has_sig": false, "md5_digest": "d6757a87e42a62441c1b14b1d1fdd1d7", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 15703, "upload_time": "2017-09-26T22:12:37", "url": "https://files.pythonhosted.org/packages/12/88/a6159a4d09bd67c4e7f6f71050fd1e75dd78f41bf22b8dc9f102a9f2666a/rspace_client-1.2.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "3ce564f2210fa2f3eac602bd495b4143", "sha256": "e1419605c8c4c571ab65e7c1b55a5f97b3b08cbac4b826c9b0ba343be96f2a1b" }, "downloads": -1, "filename": "rspace_client-1.2.0-py3.5.egg", "has_sig": false, "md5_digest": "3ce564f2210fa2f3eac602bd495b4143", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 16048, "upload_time": "2017-09-26T22:12:45", "url": "https://files.pythonhosted.org/packages/fe/5b/1ba699586c80217edcad8a6f9321a11bfc1c988e936b30c3d90958da6df0/rspace_client-1.2.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "aac7861c703a82280ce75a759d7587eb", "sha256": "c4d3f764307079813b9b6e48b24120e029a95c49cc980c824b81ba6a64523bf1" }, "downloads": -1, "filename": "rspace-client-1.2.0.tar.gz", "has_sig": false, "md5_digest": "aac7861c703a82280ce75a759d7587eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7952, "upload_time": "2017-09-26T22:12:52", "url": "https://files.pythonhosted.org/packages/a6/39/72115224743e1b77ec0d996090714b2ab1dc9cb8990425c41900331bd256/rspace-client-1.2.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "bbab5038a9e4b8bcaa6f28991ebea302", "sha256": "13dfb8b33a488bdc07b435af578dfd3add9ea5ba46ba86959b9777d3ed24b5cb" }, "downloads": -1, "filename": "rspace_client-1.3.1-py2.7.egg", "has_sig": false, "md5_digest": "bbab5038a9e4b8bcaa6f28991ebea302", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 12375, "upload_time": "2017-10-17T13:42:51", "url": "https://files.pythonhosted.org/packages/03/5f/b4d6c9f893218581260fd6b0a19aa47e060313f4e2fca4922718f2f78e31/rspace_client-1.3.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "da67f4dc24dcbfe6176dcfb4f5980866", "sha256": "9d17c586bbf13fc3dc41b0ce1e9fd55babcca2548b7d6031bc1353a3876b7e96" }, "downloads": -1, "filename": "rspace_client-1.3.1-py3.5.egg", "has_sig": false, "md5_digest": "da67f4dc24dcbfe6176dcfb4f5980866", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 20097, "upload_time": "2017-10-17T13:42:58", "url": "https://files.pythonhosted.org/packages/33/dc/76db514b7b4c13ace39b17cc6fa6254ee4419dfb0bafb2ad5fd5bc52df3f/rspace_client-1.3.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "6a2a8018f042d141199d905094287501", "sha256": "e5f0c72035717cb9d73cc04d14137d0a9570d25b5acaf925785f67f79420dd4b" }, "downloads": -1, "filename": "rspace-client-1.3.1.tar.gz", "has_sig": false, "md5_digest": "6a2a8018f042d141199d905094287501", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10317, "upload_time": "2017-10-17T13:42:33", "url": "https://files.pythonhosted.org/packages/94/2b/cdca7a8e0485d0b9a898fa59a344885c3e788c4bfdeddaba556d67562fe5/rspace-client-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "8842c6e26b599422c69a42c0edc52b56", "sha256": "5c1a1acedacfe04e08b46de509e69c9c9256c2d075b324bf8f92b9303badbdde" }, "downloads": -1, "filename": "rspace_client-1.3.2-py2.7.egg", "has_sig": false, "md5_digest": "8842c6e26b599422c69a42c0edc52b56", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 19674, "upload_time": "2017-11-02T20:58:11", "url": "https://files.pythonhosted.org/packages/64/01/74a2a1c52b5fca90e9114ddf4907587ad4e7eee57c101aed3883cf391aeb/rspace_client-1.3.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "f9e59042c83647aaedb46de01d09ef3c", "sha256": "83dc2f1590f0c6c396ce11230a9ab5c1d0d59bf3807ad776608970e26141ab0c" }, "downloads": -1, "filename": "rspace_client-1.3.2-py3.5.egg", "has_sig": false, "md5_digest": "f9e59042c83647aaedb46de01d09ef3c", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 20025, "upload_time": "2017-11-02T20:58:03", "url": "https://files.pythonhosted.org/packages/c5/66/f6f1247491a56ae6cfff6b33eb9d889c92c22edfb0a3c5e23c3722ec3886/rspace_client-1.3.2-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "752cdddc6a38ee012bbf4f03f22504f0", "sha256": "345d92dd8cbb58314c823192be1e0978966c8c7090e0b74185d94e4d1db8e51b" }, "downloads": -1, "filename": "rspace-client-1.3.2.tar.gz", "has_sig": false, "md5_digest": "752cdddc6a38ee012bbf4f03f22504f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10295, "upload_time": "2017-11-02T20:58:19", "url": "https://files.pythonhosted.org/packages/4c/ce/f83272f18683a3d1cbeeb3a8226c64fc52aa3db478709a0242f8b86bbbf4/rspace-client-1.3.2.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "c0c8c25a232494c1b7a85393cf9d352e", "sha256": "90c9118bcc00e54b07d97e842e8b3632afcab1996a83b0226e5dbb689a748001" }, "downloads": -1, "filename": "rspace_client-1.4.0-py2.7.egg", "has_sig": false, "md5_digest": "c0c8c25a232494c1b7a85393cf9d352e", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 22781, "upload_time": "2018-04-16T21:22:35", "url": "https://files.pythonhosted.org/packages/62/6a/4845bb785c993f3133a93851a74bc03ccd7a861f5e18a0efcd313f4be05c/rspace_client-1.4.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "66d68e3e58ee209c0df549f53a401e74", "sha256": "082c4c72903cd680b618806ba52d9787b2d5645840f8f4add06648551ff20340" }, "downloads": -1, "filename": "rspace_client-1.4.0-py3.5.egg", "has_sig": false, "md5_digest": "66d68e3e58ee209c0df549f53a401e74", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 23168, "upload_time": "2018-04-16T21:22:10", "url": "https://files.pythonhosted.org/packages/2f/9a/debefffb6ba144add08cf0377b208a3028ce662c494664d504800a703727/rspace_client-1.4.0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "d4f6be4df382f3c6f8dbf73039ebdcb2", "sha256": "ee9b628db02ad460fb4d201e297a4c35f9f4912d561795bd9410c17596355178" }, "downloads": -1, "filename": "rspace-client-1.4.0.tar.gz", "has_sig": false, "md5_digest": "d4f6be4df382f3c6f8dbf73039ebdcb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13308, "upload_time": "2018-04-16T21:22:45", "url": "https://files.pythonhosted.org/packages/f3/08/4ccaf5483ba43adc6f553513f1b222496aa52420dbf3097f555005b9a86b/rspace-client-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "f6b2cd0789a30d961c142052c2c60113", "sha256": "f6bd2f3729eb42268e3652a5b85b7ec13c99712a24476a5545f8e1b5df4d7bec" }, "downloads": -1, "filename": "rspace_client-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f6b2cd0789a30d961c142052c2c60113", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18128, "upload_time": "2019-01-25T17:15:43", "url": "https://files.pythonhosted.org/packages/ce/b1/9010bb37478d01f7a06d4a86a3b7ced4ac1bfbf7c8b3f66609e1b76a29c5/rspace_client-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29f7fcafa1e7dcf757fad166605a2c41", "sha256": "2c3e612d72ae040897a836c8c1f66d8d5b48cae4fa0a6843ff54259ec1c70646" }, "downloads": -1, "filename": "rspace-client-1.5.0.tar.gz", "has_sig": false, "md5_digest": "29f7fcafa1e7dcf757fad166605a2c41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17587, "upload_time": "2019-01-25T17:15:44", "url": "https://files.pythonhosted.org/packages/f4/97/1bc2a3897c53b7c383d6cf0c8efc7a21741b16343adba4b3befa800bcc2f/rspace-client-1.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f6b2cd0789a30d961c142052c2c60113", "sha256": "f6bd2f3729eb42268e3652a5b85b7ec13c99712a24476a5545f8e1b5df4d7bec" }, "downloads": -1, "filename": "rspace_client-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f6b2cd0789a30d961c142052c2c60113", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18128, "upload_time": "2019-01-25T17:15:43", "url": "https://files.pythonhosted.org/packages/ce/b1/9010bb37478d01f7a06d4a86a3b7ced4ac1bfbf7c8b3f66609e1b76a29c5/rspace_client-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29f7fcafa1e7dcf757fad166605a2c41", "sha256": "2c3e612d72ae040897a836c8c1f66d8d5b48cae4fa0a6843ff54259ec1c70646" }, "downloads": -1, "filename": "rspace-client-1.5.0.tar.gz", "has_sig": false, "md5_digest": "29f7fcafa1e7dcf757fad166605a2c41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17587, "upload_time": "2019-01-25T17:15:44", "url": "https://files.pythonhosted.org/packages/f4/97/1bc2a3897c53b7c383d6cf0c8efc7a21741b16343adba4b3befa800bcc2f/rspace-client-1.5.0.tar.gz" } ] }