{ "info": { "author": "Christopher Woods", "author_email": "chryswoods@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Acquire\n\n[![Build Status](https://dev.azure.com/bristolrse/Acquire/_apis/build/status/chryswoods.acquire?branchName=devel)](https://dev.azure.com/bristolrse/Acquire/_build/latest?definitionId=1&branchName=devel)\n\n(C) Christopher Woods 2018 - Released under the [Apache 2 License](LICENSE)\n\n## Installation\n\n```\npip install acquire\n```\n\n## An Access, Accounting, Authorisation (Identity), Storage and Compute Infrastructure for the Cloud\n\nAcquire is a AAAI infrastructure for the cloud. It provides a cloud-neutral\nplatform to cover the following five functions:\n\n1. Authorisation (Identity) management : Enables users to securely identify themselves\nand generate secure identity tokens that can be given to other services to authorise\nactions.\n\n2. Access management : Enables users to request access to resources. Users\nidentify themselves via the Identity service and pass authorisation tokens to the\naccess service to request access.\n\n3. Accounting : Enables users to control and track their usage. Users identify\nthemselves to the identity service, request access to resources via the access\nservice, which then checks the accounting service to see if sufficient funds\nexist to pay for access, and submits an invoice for payment. Once the access\nhas been provided it is receipted and funds transferred. In this way, users\nhave control over their spending, with a full audit trail providing\nfinancial and usage accounting for their use of a system.\n\n4. Storage : Enables users to store and share data. Users create Drives which\nare located on storage services and can pay up-front for short- and long-term\nstorage of data in those Drives. Access Control Lists allow individual files\nor Drives to be shared with any user or group identifiable via the Identity\nservice, or via permanent publicly-visible URLs. Files are versioned, and can\nbe moved between \"hot\" (quick) and \"cold\" (slow but cheap) storage. This\nprovides a thin-wrapper over the object store capabilities of each cloud.\n\n5. Compute : Enables users to request access to compute on-demand, e.g.\nvia single instances or elastic clusters such as\n[cluster in the cloud](http://cluster-in-the-cloud.readthedocs.io).\nCompute is paid for up front and is provided via any cloud that runs\na Compute Service that accepts payment via the Accounting Service, and\nruns jobs securely authorised by users identified via the Identity Service.\nThe service is completely elastic, meaning that users only pay up-front\nfor compute they actually use.\n\n## Cloud Native and Highly Scalable\n\nAcquire is built as a cloud-native application. It is written as a set of\nserverless functions which manages state via a central object store.\n\n* Serverless: Acquire uses the open source [Fn project](http://fnproject.io).\nThis is a container-native serverless platform that can run anywhere -- any\ncloud or on-premise. It works by packaging up function code into docker\ncontainers that are executed on demand based on triggers from http/https\nend-points.\n\n* Object store: Acquire uses a thin abstraction around common object\nstores to read and write all data. This provides global access to data\nwith high security (all object store data is encrypted in transport,\nand encrypted at rest with rotating keys).\n\nThe combination of these two technologies allows Acquire to be highly\nscalable. There are no \"idle servers\", as compute is consumed only\nwhen Acquire functions are called. As demand increases, more resources\nare provisioned to automatically scale with the load.\n\n## Distributed\n\nThe three services in Acquire build on top of each other, yet are\ncompletely separated. Each service is designed to run on its own\nobject store / Fn server, thereby allowing them to be distributed\nbetween multiple services in multiple regions (and even between\nmultiple cloud providers). Separation of services increases security,\nas compromising the accounting service would not have any impact\non the identity service (not that compromising any service should\nbe easy!).\n\n## Secure\n\nAcquire builds on top of standard cryptography libraries and uses\nthe production APIs of the underlying cloud provider where possible.\nThe security mechanism of the underlying object store is fully\nutilised (all movement of object data is encrypted, and data is\nencrypted at rest with rotating keys). In addition, input\nand output data from the underlying serverless functions is\nencrypted and signed using industry standard libraries and\nalgorithms (SSL, [Python cryptography](https://cryptography.io/en/latest/)\nand [Javascript Web Cryptography API](https://www.w3.org/TR/WebCryptoAPI/)).\nIn detail, 2048-bit RSA keys with SHA256 hashing and MGF1 padding\nare used to encrypt and share [Fernet](https://medium.com/coinmonks/if-youre-struggling-picking-a-crypto-suite-fernet-may-be-the-answer-95196c0fec4b)\ngenerated secrets with symmetric Fernet encryption. Fernet\ngenerates URL safe encoded keys, uses 128-bit AES in CBC mode\nand PKCS7 padding, with HMAC using SHA256. Signing and verification\nuses 2048-bit RSA keys with MGF1 padding using a SHA256 hash\nand a random salt.\n\nTo simplify use of cryptography in the Python parts of Acquire, it is fully wrapped\ninto a simple [Acquire.Crypto](Acquire/Crypto) library,\nwith all encryption, decryption, signing and verification handled\nvia [Acquire.Crypto.Keys](Acquire/Crypto/_keys.py)\n(with corresponding Javascript code in [acquire_crypto.js](services/identity/s/html/acquire_crypto.js)).\nIn addition, users authenticate both with passwords and with\none-time-codes that are generated using the [PyOTP](https://github.com/pyauth/pyotp)\nlibrary, which follows [RFC 6238](https://tools.ietf.org/html/rfc6238)\nto produce google-authenticator-compatible time-based one-time\npassword codes. These are rigorously checked by Acquire, with\nrecord keeping used to ensure that each code is used only once.\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/chryswoods/acquire", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "acquire", "package_url": "https://pypi.org/project/acquire/", "platform": "", "project_url": "https://pypi.org/project/acquire/", "project_urls": { "Homepage": "https://github.com/chryswoods/acquire" }, "release_url": "https://pypi.org/project/acquire/0.1.2/", "requires_dist": [ "pyotp (>=2)", "cachetools (>=3)", "tblib (>=1.2)", "cryptography (>=2)", "pyyaml (>=3.0)", "requests (>=2.10)", "qrcode[pil] (>=5.0)" ], "requires_python": ">=3.6.0", "summary": "A serverless identity, access, accounting, storage and compute management system", "version": "0.1.2" }, "last_serial": 5563679, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "08282147055e946ab5fb2bfb7ec05fcc", "sha256": "81a6c3b471271e1fd5c65b0639f6d86deb582076c6d8b40a9369d184b816cfe0" }, "downloads": -1, "filename": "acquire-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "08282147055e946ab5fb2bfb7ec05fcc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 141088, "upload_time": "2019-02-24T14:06:44", "url": "https://files.pythonhosted.org/packages/f1/0e/f74bf5cb85a013b443ba151d538a6f64f7f8a3cc55511b4f91c3bf5a3262/acquire-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de073c7e07f1f76d89a70eb429c0fb7c", "sha256": "2ce9a4a0e32c68807434f3be2a7cb69d65b4c0c227ca7d9c167e73bc524268db" }, "downloads": -1, "filename": "acquire-0.0.1.tar.gz", "has_sig": false, "md5_digest": "de073c7e07f1f76d89a70eb429c0fb7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 104574, "upload_time": "2019-02-24T14:06:46", "url": "https://files.pythonhosted.org/packages/e6/53/c142fab18689ed863f20ff5058cb5424f4fe77409e1bb0b8084226353dfb/acquire-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "789f9b3da70cb644993309db0f2b292f", "sha256": "8ee0eb7a73a166279cc9c3aaa876a83fe582cbf34103563afb95fcb36971168f" }, "downloads": -1, "filename": "acquire-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "789f9b3da70cb644993309db0f2b292f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 141919, "upload_time": "2019-02-24T14:44:34", "url": "https://files.pythonhosted.org/packages/f0/09/f98dd6f24de095f4c1ae5e18ca46332ad2fbb88e844c090db6f58b5fc482/acquire-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf752759f84c889fd8bcc81c2d443168", "sha256": "6da484d5ccbbeb9a83e3a8f3875b0c973cfc6e3c7ba171f5b997003f592579b2" }, "downloads": -1, "filename": "acquire-0.0.2.tar.gz", "has_sig": false, "md5_digest": "bf752759f84c889fd8bcc81c2d443168", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105017, "upload_time": "2019-02-24T14:44:36", "url": "https://files.pythonhosted.org/packages/13/d1/60907933659ac7f85610b632af92673b9349e9ee14ec8685e95a0c66367a/acquire-0.0.2.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a04c579a1c0647ef09aa2a61a870538c", "sha256": "054201e7fe7f7c816635a9dd9c5a21910f2a894e192b39c4dcdee1c342b87a88" }, "downloads": -1, "filename": "acquire-0.0.4-py3.7.egg", "has_sig": false, "md5_digest": "a04c579a1c0647ef09aa2a61a870538c", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": ">=3.6.0", "size": 329695, "upload_time": "2019-02-25T20:25:19", "url": "https://files.pythonhosted.org/packages/53/b2/549308b3a4e04c07f3cb3c0867088362eea6fd18a4bd55a9ce20dfb0fe37/acquire-0.0.4-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "df0bd18b44d8a3dee377a01949222d0d", "sha256": "d509b0c17e5c88d6d51a431c1c5acf0fcf429468279aa58e4c125605a8c04d50" }, "downloads": -1, "filename": "acquire-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "df0bd18b44d8a3dee377a01949222d0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 142134, "upload_time": "2019-02-24T20:37:11", "url": "https://files.pythonhosted.org/packages/68/b3/b6a0def61bb7e55de131428363ebe122edd4c35d3b5c637ca434b1fe98ff/acquire-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6ba39847f363b7d8d757fbf1346e707", "sha256": "0513feebe5cc78149bb6623ea6ad2e0ca97dddd097f394f462d53210d30c94ad" }, "downloads": -1, "filename": "acquire-0.0.4.tar.gz", "has_sig": false, "md5_digest": "c6ba39847f363b7d8d757fbf1346e707", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 105271, "upload_time": "2019-02-24T20:37:13", "url": "https://files.pythonhosted.org/packages/95/85/d31141661a5a0e9cb60301e17d91c1e5ed12cd720f4eacd26232cb058e0f/acquire-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "345a114bef83ed43b07d552716cc759c", "sha256": "a91fb58991f3dadc7308b5cd9d503af5ff8abbea39bfdb4d2a38889c58d202b0" }, "downloads": -1, "filename": "acquire-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "345a114bef83ed43b07d552716cc759c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 143998, "upload_time": "2019-02-25T20:25:17", "url": "https://files.pythonhosted.org/packages/94/6c/fba81c40bd22230ebba853e36aee0c256dcd64ddd1ffff9adf83b186fe92/acquire-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "120439e091d1c0c82353fb0c51f0343f", "sha256": "93df1b712a91004f16d4fbf9b4be718405be4a86e54c826a59fb4e36067d048b" }, "downloads": -1, "filename": "acquire-0.0.5.tar.gz", "has_sig": false, "md5_digest": "120439e091d1c0c82353fb0c51f0343f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 105781, "upload_time": "2019-02-25T20:25:22", "url": "https://files.pythonhosted.org/packages/32/1e/8b51fa1e3330b5258f9cec8745a7ce15ac5803828a208ef3b5f55b12f151/acquire-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "0f0c3faa7bca766ad446f46af693667e", "sha256": "7e50f2a486cbce72b570160a78e1ed2536e61b9bb0ea86dbf75cfbcba3ce3596" }, "downloads": -1, "filename": "acquire-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "0f0c3faa7bca766ad446f46af693667e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 144102, "upload_time": "2019-02-26T16:38:08", "url": "https://files.pythonhosted.org/packages/3a/dc/a32d42b2d3416c16ef7113d307779cb4f48104ade87b69e14196f0a83ea3/acquire-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c5a9a32e3cb705e7b3105d590fa8e0a", "sha256": "87eea0597c379b1caf9081d5c98fb1d51fbf637be7e7aace7a9d3dc6601e31c1" }, "downloads": -1, "filename": "acquire-0.0.6.tar.gz", "has_sig": false, "md5_digest": "8c5a9a32e3cb705e7b3105d590fa8e0a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 105857, "upload_time": "2019-02-26T16:38:10", "url": "https://files.pythonhosted.org/packages/72/16/36001b1796db02305d6c9f74cbbcd299d77bff7c1e57dddf7095fc26876a/acquire-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "d0f4e6636434e20085a8f23679e8ac90", "sha256": "a363ab3be8caf7f854dac199903f98c56e05ee302e688612056c8bd5496982be" }, "downloads": -1, "filename": "acquire-0.0.7-py3.7.egg", "has_sig": false, "md5_digest": "d0f4e6636434e20085a8f23679e8ac90", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": ">=3.6.0", "size": 329970, "upload_time": "2019-04-01T08:44:01", "url": "https://files.pythonhosted.org/packages/bf/bf/44d1b6114da6953877b37bb0f44c8e5c656e210f3178aa7959338f7e7530/acquire-0.0.7-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "8efc6252fbfd98390bcf697d6956a2d8", "sha256": "5c6b55b019d62a826d88b173905edfbfca77a0240b65316d3b5ed6a15214c0e3" }, "downloads": -1, "filename": "acquire-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "8efc6252fbfd98390bcf697d6956a2d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 182569, "upload_time": "2019-04-01T08:43:58", "url": "https://files.pythonhosted.org/packages/d6/a4/bfb92109663b7f9f4926ae3dec3386c7cac3c8c85f7165a848e193b652f9/acquire-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27630f3e2b361f5fc43ac3c497a7a2a9", "sha256": "dc27d114b5e1ca2309ae9dac6c0c8529abfbceefc92734555de6eb52a16146c1" }, "downloads": -1, "filename": "acquire-0.0.7.tar.gz", "has_sig": false, "md5_digest": "27630f3e2b361f5fc43ac3c497a7a2a9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 131667, "upload_time": "2019-04-01T08:44:03", "url": "https://files.pythonhosted.org/packages/92/ef/3e3cb40376540de0aca5d0371c3cc6ed6ab33b8aedd46eaa2260276d3345/acquire-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "b128923993908645d65c39086de80434", "sha256": "6420818e8bdb75ab42630aa26cb26ce961c93b135ec8f9d77b6e8f7943fdf0e9" }, "downloads": -1, "filename": "acquire-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "b128923993908645d65c39086de80434", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 221689, "upload_time": "2019-04-25T00:28:30", "url": "https://files.pythonhosted.org/packages/64/a6/8361ae7d23adf9ff65d00c2832c3fdb779e41537613d0debdd1597a15284/acquire-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e9be0d6d60d2b57c58522cae5ebea9d4", "sha256": "c1e64966d85348a677fbc6ad1648cdceef7da3c1186d15e22b9d46ac9cc5b523" }, "downloads": -1, "filename": "acquire-0.0.8.tar.gz", "has_sig": false, "md5_digest": "e9be0d6d60d2b57c58522cae5ebea9d4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 156650, "upload_time": "2019-04-25T00:28:39", "url": "https://files.pythonhosted.org/packages/47/47/2ef4e6078c2b29c4ed8c32b42ff9373689c4f8a9728b5f08d8bdc740ced2/acquire-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "1f60dd0b02bc6b456ea7ccff7b9fd378", "sha256": "acbf45ffeb271ef91fcca4d1d9a0df1d8b879c0021cad7cb7026a1d4ce312b35" }, "downloads": -1, "filename": "acquire-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "1f60dd0b02bc6b456ea7ccff7b9fd378", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 233556, "upload_time": "2019-06-07T18:00:24", "url": "https://files.pythonhosted.org/packages/f4/31/e70105dd6904a1b491b3a4dad01ae6a080815ddbef93cc90ece82ce8d33b/acquire-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d118bbf9cebf6299221ef78450d8f166", "sha256": "c84b45bd10075a1162ebf798a236e255ad53c3a9fff39b1cc6da1eca15103b27" }, "downloads": -1, "filename": "acquire-0.0.9.tar.gz", "has_sig": false, "md5_digest": "d118bbf9cebf6299221ef78450d8f166", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 167644, "upload_time": "2019-06-07T18:00:27", "url": "https://files.pythonhosted.org/packages/ff/6b/4fe3767ae826c8944a8e3ff640ca62e0179d90ab96a52287cc99a23027c6/acquire-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "e1341e81dc674a9b0ad962b14dfa7448", "sha256": "c6a50f48ffce10ffecff6258e728107fc49c47c452f735aad777fa3f402d05a7" }, "downloads": -1, "filename": "acquire-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e1341e81dc674a9b0ad962b14dfa7448", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 233530, "upload_time": "2019-06-07T18:06:09", "url": "https://files.pythonhosted.org/packages/34/62/8db44c1c32bf94540a873b02e2500a06db970f6cd9e44a3cfa237f2b5cfe/acquire-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f7449bd3d2b74e872947bac8291e48c", "sha256": "ccabc279102c5a2b419a18fbc219f52944890943337286398e26e880661792f4" }, "downloads": -1, "filename": "acquire-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5f7449bd3d2b74e872947bac8291e48c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 167646, "upload_time": "2019-06-07T18:06:12", "url": "https://files.pythonhosted.org/packages/f0/e2/ae20f2b58e567bd482ba93f630aa82630eb29270b57708a3fc256cde7a09/acquire-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5400ea3c161256d41ffd999ed91f3b74", "sha256": "5021b8311d2e6a33164eec76835b93f19001fcf774b47dd668874c0896561e0e" }, "downloads": -1, "filename": "acquire-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5400ea3c161256d41ffd999ed91f3b74", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 244700, "upload_time": "2019-07-11T16:14:47", "url": "https://files.pythonhosted.org/packages/0b/b9/3cc474cbe94391c98e9f1fd6ef95a2dad5ffe40b75c623414cf6481b7aaf/acquire-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "64ec6fefde22e51e1ecced2bfbb66cbf", "sha256": "34787dc7a36081b2aec0765e5f42502d9c1908b4d6a5652091164fbd06c7488f" }, "downloads": -1, "filename": "acquire-0.1.1.tar.gz", "has_sig": false, "md5_digest": "64ec6fefde22e51e1ecced2bfbb66cbf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 185207, "upload_time": "2019-07-11T16:14:49", "url": "https://files.pythonhosted.org/packages/fd/08/cb3199cea07fdbbfbc88d2d4a5793a08a04fdd13163234c866975ebb6529/acquire-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "1eb7e3ad102837374740b8a652fb716c", "sha256": "315194fcf2121855b8dc97f22b772bf1dc02622d8295cb3a53a4da51426c8ae6" }, "downloads": -1, "filename": "acquire-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1eb7e3ad102837374740b8a652fb716c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 255091, "upload_time": "2019-07-21T15:05:11", "url": "https://files.pythonhosted.org/packages/ad/65/db8777738de4a458db72cee898910cfc0f6f831ce2f19cad0e5cb8c881fb/acquire-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05b7c7385e79e60562ade84c566db230", "sha256": "162bf6099e2751c610b02558232d1eb9a9c400bc5d06504b3da75cc0c7a335b4" }, "downloads": -1, "filename": "acquire-0.1.2.tar.gz", "has_sig": false, "md5_digest": "05b7c7385e79e60562ade84c566db230", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 191991, "upload_time": "2019-07-21T15:05:12", "url": "https://files.pythonhosted.org/packages/71/11/f0c52c73992dcbb21cf976d9be8d887afd89a25465910cfa9e4146d17350/acquire-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1eb7e3ad102837374740b8a652fb716c", "sha256": "315194fcf2121855b8dc97f22b772bf1dc02622d8295cb3a53a4da51426c8ae6" }, "downloads": -1, "filename": "acquire-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1eb7e3ad102837374740b8a652fb716c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 255091, "upload_time": "2019-07-21T15:05:11", "url": "https://files.pythonhosted.org/packages/ad/65/db8777738de4a458db72cee898910cfc0f6f831ce2f19cad0e5cb8c881fb/acquire-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05b7c7385e79e60562ade84c566db230", "sha256": "162bf6099e2751c610b02558232d1eb9a9c400bc5d06504b3da75cc0c7a335b4" }, "downloads": -1, "filename": "acquire-0.1.2.tar.gz", "has_sig": false, "md5_digest": "05b7c7385e79e60562ade84c566db230", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 191991, "upload_time": "2019-07-21T15:05:12", "url": "https://files.pythonhosted.org/packages/71/11/f0c52c73992dcbb21cf976d9be8d887afd89a25465910cfa9e4146d17350/acquire-0.1.2.tar.gz" } ] }