{ "info": { "author": "Benjamin Rabier", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "********\nAntidote\n********\n\n\n.. image:: https://img.shields.io/pypi/v/antidote.svg\n :target: https://pypi.python.org/pypi/antidote\n\n.. image:: https://img.shields.io/pypi/l/antidote.svg\n :target: https://pypi.python.org/pypi/antidote\n\n.. image:: https://img.shields.io/pypi/pyversions/antidote.svg\n :target: https://pypi.python.org/pypi/antidote\n\n.. image:: https://travis-ci.org/Finistere/antidote.svg?branch=master\n :target: https://travis-ci.org/Finistere/antidote\n\n.. image:: https://codecov.io/gh/Finistere/antidote/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/Finistere/antidote\n\n.. image:: https://readthedocs.org/projects/antidote/badge/?version=latest\n :target: http://antidote.readthedocs.io/en/stable/?badge=stable\n\nAntidotes is a declarative dependency injection micro-framework for Python 3.5+\nwhich tries to do the following:\n\n- Injection can applied on any existing code easily.\n- Finding the source and the usage of a dependency is straightforward (through\n an IDE's \"Go to definition\" / \"Find usage\").\n- Core functionality is flexible and extendable to support any custom dependencies.\n- Limit performance impact of injection.\n\nWhy ?\n=====\n\nIn short antidote avoids you the hassle of instantiating and managing your\nservices. You declare them at their definition, and inject them wherever\nneeded with simple decorators, which\n*do not change how you interact with your objects*. Unit testing is not\nimpacted as one can override any injection and control the available\ndependencies easily.\n\nFor the longer version: ``_\n\n\nFeatures Highlight\n==================\n\nCore functionalities:\n\n- Injection done through type hints and optionally from argument's name and/or\n with explicitly specified dependencies.\n- Dependency cycle detection\n- Thread-safety and limited performace impact (see\n `injection benchmark `_).\n- Easily extendable, through dependency providers. All aftermetioned dependencies are\n implemented with it.\n\nDependencies:\n\n- Services and factories: provides an instance of a class.\n- Tags: Dependencies can be tagged, and as such all of them matching a specific tag can be\n retrieved.\n- Configuration: Constants which are lazily evaluated.\n- Lazy function calls: Results of a function call is lazily provided.\n\n\nInstallation\n============\n\n\nTo install Antidote, simply run this command:\n\n.. code-block:: bash\n\n pip install antidote\n\n\nQuick Start\n===========\n\n\nHereafter is an example which tries to show most of Antidote's features:\n\n\n.. code-block:: python\n\n \"\"\"\n Simple example where a MovieDB interface is defined which can be used\n to retrieve the best movies. In our case the implementation uses IMDB\n to dot it.\n \"\"\"\n from functools import reduce\n\n import antidote\n\n\n class MovieDB:\n def get_best_movies(self):\n pass\n\n\n class ImdbAPI:\n \"\"\"\n Class from an external library.\n \"\"\"\n\n def __init__(self, *args, **kwargs):\n \"\"\" Initializes the IMDB API. \"\"\"\n\n\n # Usage of constants for configuration makes refactoring easier and is\n # less error-prone. Moreover Conf will only be instantiated if necessary.\n class Conf(metaclass=antidote.LazyConstantsMeta):\n IMDB_HOST = 'imdb.host'\n IMDB_API_KEY = 'imdb.api_key'\n\n def __init__(self):\n # Load configuration from somewhere\n self._raw_conf = {\n 'imdb': {\n 'host': 'dummy_host',\n 'api_key': 'dummy_api_key'\n }\n }\n\n def get(self, key):\n \"\"\" 'a.b' -> self._raw_conf['a']['b'] \"\"\"\n return reduce(dict.get, key.split('.'), self._raw_conf)\n\n\n # Declare a factory which should be called to instantiate Database.\n # The order of the arguments is here used to map the dependencies.\n # A dictionary mapping arguments name to their dependency could also\n # have been used.\n @antidote.factory(dependencies=(Conf.IMDB_HOST, Conf.IMDB_API_KEY))\n def imdb_factory(host: str, api_key: str) -> ImdbAPI:\n \"\"\"\n Configure your database.\n \"\"\"\n return ImdbAPI(host=host, api_key=api_key)\n\n\n # implements specifies that IMDBMovieDB should be used whenever MovieDB is requested.\n @antidote.implements(MovieDB)\n # Registering IMDBMovieDB makes it available in Antidote. (required for @implements)\n @antidote.register\n class IMDBMovieDB(MovieDB):\n # Dependencies of __init__() are injected by default when\n # registering a service.\n # Note that IMDBMovieDB does not build itself ImdbAPI, which makes testing\n # easier.\n def __init__(self, imdb_api: ImdbAPI):\n self._imdb_api = imdb_api\n\n def get_best_movies(self):\n pass\n\n\n # Inject dependencies in f(), by default only type annotations are used. But\n # arguments name, explicit mapping, etc.. can also be used.\n @antidote.inject\n def f(movie_db: MovieDB):\n \"\"\" Do something with your database. \"\"\"\n\n\n # Can be called without arguments now.\n f()\n\n assert antidote.world.get(MovieDB) is antidote.world.get(IMDBMovieDB)\n\n # You can still explicitly pass the arguments to override\n # injection.\n conf = Conf()\n f(IMDBMovieDB(imdb_factory(\n # equivalent to conf._raw_conf['db.host'], mainly to make your tests easier.\n host=conf.IMDB_HOST,\n api_key=conf._raw_conf['imdb']['api_key'],\n )))\n\n\n\nDocumentation\n=============\n\n\nThe documentation is available at\n``_.\n\nInjection benchmark is available at\n`injection benchmarks `_.\n\n\nBug Reports / Feature Requests\n==============================\n\n\nAny feedback is always welcome, feel free to submit issues and enhancement\nrequests ! :)\nFor any questions, open an issue on Github.\n\n\nHow to Contribute\n=================\n\n\n1. Check for open issues or open a fresh issue to start a discussion around a\n feature or a bug.\n2. Fork the repo on GitHub. Run the tests to confirm they all pass on your\n machine. If you cannot find why it fails, open an issue.\n3. Start making your changes to the master branch.\n4. Writes tests which shows that your code is working as intended. (This also\n means 100% coverage.)\n5. Send a pull request.\n\n*Be sure to merge the latest from \"upstream\" before making a pull request!*\n\n\nPull requests **should avoid** to:\n\n- make it harder to integrate Antidote into existing code.\n- break backwards compatibility.\n- create features difficult to understand for an IDE, such as converting a\n string *dependency id* to a non singleton object somehow. An user may do\n this, but antidote shouldn't.\n\nPull requests **will not** be accepted if:\n\n- classes and non trivial functions have not docstrings documenting their\n behavior.\n- tests do not cover all of code changes.\n\n\n*Do not hesitate to send a pull request, even if incomplete, to get early\nfeedback ! :)*\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/Finistere/antidote", "keywords": "dependency injection", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "antidote", "package_url": "https://pypi.org/project/antidote/", "platform": "", "project_url": "https://pypi.org/project/antidote/", "project_urls": { "Homepage": "https://github.com/Finistere/antidote" }, "release_url": "https://pypi.org/project/antidote/0.6.0/", "requires_dist": [ "fastrlock (<0.5,>=0.4)", "typing; python_version<'3.5'" ], "requires_python": "", "summary": "Transparent dependency injection.", "version": "0.6.0" }, "last_serial": 5234923, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a3025fba0d4edbe6e972deee588c4df8", "sha256": "cd615b52899624af0177782d7cf69f6029a0b0c9eba13c29d57a5956412a3f79" }, "downloads": -1, "filename": "antidote-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a3025fba0d4edbe6e972deee588c4df8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16026, "upload_time": "2017-11-26T17:07:42", "url": "https://files.pythonhosted.org/packages/ff/d2/5cbc27cd872191dda529b1846f54ec771b0795b4714c259ab84ed43e45e5/antidote-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "722e044841b57f2fdd9d8874017de996", "sha256": "68e14696aa9206912bddde51cc8ef9c72d8093e2efc42b457d074bc97e0c4a08" }, "downloads": -1, "filename": "antidote-0.1.0.tar.gz", "has_sig": false, "md5_digest": "722e044841b57f2fdd9d8874017de996", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10590, "upload_time": "2017-11-26T17:07:46", "url": "https://files.pythonhosted.org/packages/cf/ce/a8142e14213a9a005b2e3b85fe6f1d0758be652b2bae2d31445f72d186f4/antidote-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fece28a52f4b957ec04c2352e269511b", "sha256": "e243ef5c933ac49de9e1279c1b5a640446fc1d7219ca22efc04ec687cebb4692" }, "downloads": -1, "filename": "antidote-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fece28a52f4b957ec04c2352e269511b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16401, "upload_time": "2017-12-11T19:26:37", "url": "https://files.pythonhosted.org/packages/3d/9a/5ca863a1b7d2a01e4d1afc802d88e3e487011ed300457423730f7d8314f9/antidote-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69698f9dee0786d237da35b8ce42eaf0", "sha256": "5316ceabb0e99978e39aea919f635100ace7e4452e4987c0a5ca56f2afdded73" }, "downloads": -1, "filename": "antidote-0.2.0.tar.gz", "has_sig": false, "md5_digest": "69698f9dee0786d237da35b8ce42eaf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10788, "upload_time": "2017-12-11T19:26:38", "url": "https://files.pythonhosted.org/packages/63/45/3c4cd74767f6e9a1cdc8489e2bdc03292a0ca610b66a157c3b3b075b8a03/antidote-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d4ef0db7c271386ab547ca998e452dbf", "sha256": "f0c77695f4c1a540e076f2af2445ac432a0fc3a0c9bbb5f34236780001d4f0bd" }, "downloads": -1, "filename": "antidote-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d4ef0db7c271386ab547ca998e452dbf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19184, "upload_time": "2018-04-29T16:26:31", "url": "https://files.pythonhosted.org/packages/65/9c/9452d402c1903ae9391bcb140c9b064eac652a7564ca4324018fac51b5b9/antidote-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89f65608f35cc2513d31bd183c043a98", "sha256": "6f5db56b81b825540f7b497d490d2e890a002ac1452fa1b904131b08a4118ff9" }, "downloads": -1, "filename": "antidote-0.3.0.tar.gz", "has_sig": false, "md5_digest": "89f65608f35cc2513d31bd183c043a98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36127, "upload_time": "2018-04-29T16:26:34", "url": "https://files.pythonhosted.org/packages/86/9a/88a9280627c75b29f8a21750747c95d5235c18abb33943ba72b3fb8884b4/antidote-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f2cd55d608f6b0169e1c7eb130bc1d55", "sha256": "a905c15439f6e6c9bf16b8cc05714447cb89a1ab3901363c9314584c756fb47d" }, "downloads": -1, "filename": "antidote-0.4.0.tar.gz", "has_sig": false, "md5_digest": "f2cd55d608f6b0169e1c7eb130bc1d55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 366358, "upload_time": "2019-04-27T09:52:00", "url": "https://files.pythonhosted.org/packages/ea/bd/5ef2e2bd674cb6cc4a2c73333785904552723ef6a6f0d27dd908b308d3a9/antidote-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ea2cf9fc3af6b5c64411001e4f5ac39c", "sha256": "6d2ac6f88eb96826bae874c651635c0997864fe44be20856f9efeeaae043b217" }, "downloads": -1, "filename": "antidote-0.5.0-cp35-cp35m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "ea2cf9fc3af6b5c64411001e4f5ac39c", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 853484, "upload_time": "2019-04-27T19:53:04", "url": "https://files.pythonhosted.org/packages/b3/8b/47c1877e634135357f316dfc9798769abc47463616fb6f0a72e6a1e6989c/antidote-0.5.0-cp35-cp35m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "6f091aec2d4d293de4e2a45ba8954f9e", "sha256": "a2ed560c8967ce67565553ced0b557a3d1cd760e397b592a055de95c895599df" }, "downloads": -1, "filename": "antidote-0.5.0-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "6f091aec2d4d293de4e2a45ba8954f9e", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1099336, "upload_time": "2019-04-27T19:53:23", "url": "https://files.pythonhosted.org/packages/ed/a0/e4447801df46208f89b5b7007ae22809c0a118d04601dd613f7d987adc9b/antidote-0.5.0-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "13778db93c9b742d522c1113fce9a6fe", "sha256": "a239f6342b248409a20512bd0f69aeb48184fba2fbcea06d3de10625f8c4f96e" }, "downloads": -1, "filename": "antidote-0.5.0-cp35-cp35m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "13778db93c9b742d522c1113fce9a6fe", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1099339, "upload_time": "2019-04-27T19:53:40", "url": "https://files.pythonhosted.org/packages/68/0a/c5272fad4951db0bde7f2736abefbcbc5b6cca90c56c6c85f1fcd3ca3acc/antidote-0.5.0-cp35-cp35m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "c1041159d1f9591955696eaec1c0c158", "sha256": "0d0430989847986aba2176f3c992ab38a54793b1f4c8548b187f5123ff3dc9eb" }, "downloads": -1, "filename": "antidote-0.5.0-cp36-cp36m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "c1041159d1f9591955696eaec1c0c158", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 886001, "upload_time": "2019-04-27T19:53:52", "url": "https://files.pythonhosted.org/packages/40/46/5a901eae09c943d38c1acb3154a4d2ba4b2267c9f31472f7f8fe7da4826c/antidote-0.5.0-cp36-cp36m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "0ce5ef88575d93143387e588a1555736", "sha256": "24d3dd130515c5df1e6e781bdb23d11d802f5794f4c213b4a8dc4d70c4ad040c" }, "downloads": -1, "filename": "antidote-0.5.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "0ce5ef88575d93143387e588a1555736", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1128659, "upload_time": "2019-04-27T19:54:07", "url": "https://files.pythonhosted.org/packages/ab/a6/30c08ad246e82cb7bab920760bcb15ffe1b7cdaea7c72c9350d33a5f11e1/antidote-0.5.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "41f9f33be3b8a7fca3b974c12804ef30", "sha256": "c156416771449e21135cc25cc7ec5b116310379a985c5487d97435a4be2e1985" }, "downloads": -1, "filename": "antidote-0.5.0-cp36-cp36m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "41f9f33be3b8a7fca3b974c12804ef30", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1128664, "upload_time": "2019-04-27T19:54:22", "url": "https://files.pythonhosted.org/packages/0a/b4/a1bd4116497db13209f1d1ba37b1f7f87c0869fb39a571a74eb512d30032/antidote-0.5.0-cp36-cp36m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "b45bc2af6a65fc353330a65b80617ca3", "sha256": "1cd10bcdce924fb87b2d15a10581578ecd12f63ce000f295b1a257004c273235" }, "downloads": -1, "filename": "antidote-0.5.0-cp37-cp37m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "b45bc2af6a65fc353330a65b80617ca3", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 881324, "upload_time": "2019-04-27T19:54:35", "url": "https://files.pythonhosted.org/packages/d1/40/0db692656102fe2c141bd7a81491af806fb445ab96e89b908ed06727c874/antidote-0.5.0-cp37-cp37m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "fc19b10747cbb25b5e0f078e7c8d39e5", "sha256": "f9e39d71370a4f9b260a200b92d96dd56d01ed8d066a299e5f057c4c166e1a7f" }, "downloads": -1, "filename": "antidote-0.5.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "fc19b10747cbb25b5e0f078e7c8d39e5", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1132897, "upload_time": "2019-04-27T19:54:53", "url": "https://files.pythonhosted.org/packages/6e/e3/7a8f5ffae0d83e07aab0f98c1ec7b4866c5fbc10580c80bcfad4b6544a56/antidote-0.5.0-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "71af0c08d7da19a2a0ce83d938ef8e4a", "sha256": "18a2f5f5abb917271b8b9600a513602e6293ee6f8801866654c7a25402b0001f" }, "downloads": -1, "filename": "antidote-0.5.0-cp37-cp37m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "71af0c08d7da19a2a0ce83d938ef8e4a", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1132901, "upload_time": "2019-04-27T19:55:10", "url": "https://files.pythonhosted.org/packages/ef/da/4a31327a5bba57086cba4912c94e0790e1c7474f6610624daf3b15392e40/antidote-0.5.0-cp37-cp37m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "384807a3f43c04c8b1104b99ed950971", "sha256": "b661110e8fb14b2ba855e4f585f021f68d2466629b0394a9b26f80eb643c99c1" }, "downloads": -1, "filename": "antidote-0.5.0.tar.gz", "has_sig": false, "md5_digest": "384807a3f43c04c8b1104b99ed950971", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 373200, "upload_time": "2019-04-27T19:55:17", "url": "https://files.pythonhosted.org/packages/f9/38/a4cf1cbd9166ff441bc6fd73bfb3150066cddee4af09ccdd9ccfefb404b0/antidote-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "3160f46818acd7aae0341538d492e469", "sha256": "006170039af374fe3507cf4cc57ebd9598ad5d8333db2190a5c59c29c2e180a0" }, "downloads": -1, "filename": "antidote-0.5.1-cp35-cp35m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "3160f46818acd7aae0341538d492e469", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 842350, "upload_time": "2019-04-27T21:35:16", "url": "https://files.pythonhosted.org/packages/94/1b/a71ce07a1f42948fe3399032e3fa57ae43de29d9c523cf357a791e92712c/antidote-0.5.1-cp35-cp35m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "69e31552e27ce18405ed91108036f2df", "sha256": "df42f8a4857776463d50348bf93ab7b745d577b866398f50b00ad3527621ea74" }, "downloads": -1, "filename": "antidote-0.5.1-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "69e31552e27ce18405ed91108036f2df", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1086483, "upload_time": "2019-04-27T21:35:31", "url": "https://files.pythonhosted.org/packages/0e/6d/8cbeeb4109bd60dab0105c77ee26e34f898b2e5b67ce89a5d380a8f004cf/antidote-0.5.1-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "dba77c5520abecc642909c3afeb6d1cd", "sha256": "b6b32a9af644e79558cd5d986393ee2eb47e22e5e89b9f2a898f9b8d8b8d72c6" }, "downloads": -1, "filename": "antidote-0.5.1-cp35-cp35m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "dba77c5520abecc642909c3afeb6d1cd", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1086486, "upload_time": "2019-04-27T21:35:45", "url": "https://files.pythonhosted.org/packages/10/6e/9bbf57d2b93fd4e3ff407e430fc807c91c56c5f94fdef02ee6d648daaa7d/antidote-0.5.1-cp35-cp35m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "5ece04b550942314114409d507c23854", "sha256": "d096b269f31bdf70909cdc9fe81f258b042c84193bce95a8ff04edd9c1098378" }, "downloads": -1, "filename": "antidote-0.5.1-cp36-cp36m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "5ece04b550942314114409d507c23854", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 874979, "upload_time": "2019-04-27T21:35:57", "url": "https://files.pythonhosted.org/packages/e9/c2/7d6296e5db0c59fe10dab885353b604e08b57fe0fbe7db08116ab77d7f1d/antidote-0.5.1-cp36-cp36m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "fdea94cd204f616ff413459e14b54035", "sha256": "7cda10e37c83edeaa097c8eb9a92cf166bc12936291ec99a92aac35ff0484d05" }, "downloads": -1, "filename": "antidote-0.5.1-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "fdea94cd204f616ff413459e14b54035", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1114858, "upload_time": "2019-04-27T21:36:13", "url": "https://files.pythonhosted.org/packages/c1/59/b82316bbd95f1ea1bc2145bff3099663e33dceda46a299159470d8ee9b79/antidote-0.5.1-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "27c8773824b81fcbacca5d21a458db70", "sha256": "65ae5bc373cbed757aaf594d521457fd4342a13f3e321645789b7ab046713f0d" }, "downloads": -1, "filename": "antidote-0.5.1-cp36-cp36m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "27c8773824b81fcbacca5d21a458db70", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1114861, "upload_time": "2019-04-27T21:36:28", "url": "https://files.pythonhosted.org/packages/78/9d/b8582de01e90e03ecec770ab91c403878e60a6eeada466d22b13d7c737ff/antidote-0.5.1-cp36-cp36m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fa5289a7021e472f51e7efc696bd52ef", "sha256": "cd7fb88538185aacbd32c23d96fd85e563fc5810706c73591e33885e5c422a45" }, "downloads": -1, "filename": "antidote-0.5.1-cp37-cp37m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "fa5289a7021e472f51e7efc696bd52ef", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 869483, "upload_time": "2019-04-27T21:36:39", "url": "https://files.pythonhosted.org/packages/eb/76/84cf7ab2c6ce667805a899262653581c3cea660ec49a303ffecc016497f6/antidote-0.5.1-cp37-cp37m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "201561aae92ece40155c18b30ed64f61", "sha256": "60ca31b02292f9ea6cac537f01443173ac9f8dae27fe7c6827b5cf67c02d55cd" }, "downloads": -1, "filename": "antidote-0.5.1-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "201561aae92ece40155c18b30ed64f61", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1117706, "upload_time": "2019-04-27T21:36:56", "url": "https://files.pythonhosted.org/packages/8d/ed/01ef2c8a2edd65e07527ff1898604dbcb2e429020d37f8dd4c7b93f1d729/antidote-0.5.1-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "06d0248d198c8a19dfd451160ccd1cbf", "sha256": "3d772c9105e3afabd2747e93eb8775bad7b5cf4d252fa1a7afc9b0c4046762e7" }, "downloads": -1, "filename": "antidote-0.5.1-cp37-cp37m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "06d0248d198c8a19dfd451160ccd1cbf", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1117708, "upload_time": "2019-04-27T21:37:12", "url": "https://files.pythonhosted.org/packages/f0/77/0d7dcccf791df58eea3254fff229c64acd19f8b0321a7ce069fff5d29122/antidote-0.5.1-cp37-cp37m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "dad3466b699dd0880b3cf989e0f09aa1", "sha256": "04378b16d2cd5926243874a7b6701c7df6af8306eac649e3749a5fd8281ee729" }, "downloads": -1, "filename": "antidote-0.5.1.tar.gz", "has_sig": false, "md5_digest": "dad3466b699dd0880b3cf989e0f09aa1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 371768, "upload_time": "2019-04-27T21:37:18", "url": "https://files.pythonhosted.org/packages/5e/50/2077765b9f096311213d60134b71ddb3ce91afac49e82e35945523b9062f/antidote-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "32bd2f840324f20d44803fcac04bb492", "sha256": "5cbb9078a67890f66c5f912b2b312583639e7962458bde4f7a4a551166fd50f4" }, "downloads": -1, "filename": "antidote-0.6.0-cp35-cp35m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "32bd2f840324f20d44803fcac04bb492", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 956088, "upload_time": "2019-05-06T21:14:48", "url": "https://files.pythonhosted.org/packages/ac/96/8ad62817fd481feea1654c265d9cec660c91a1ab59fd1900b01e65348357/antidote-0.6.0-cp35-cp35m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "62a81f130438023e4b9322dd7b2d71ec", "sha256": "65b6130f5cbd3b19e910a7900da442037a30fd79c3257c8a94f78268f73ea4a4" }, "downloads": -1, "filename": "antidote-0.6.0-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "62a81f130438023e4b9322dd7b2d71ec", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1243323, "upload_time": "2019-05-06T21:15:02", "url": "https://files.pythonhosted.org/packages/ad/a5/b459417c6c6f9655c361f15055d287241783e3fbd8da48ced56a4126e087/antidote-0.6.0-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "344bb36d43360b15d38d43d8c89a2fde", "sha256": "bc49744ceab65ec79b37f351ded3b4da3889247163f9f4edeafc82cc398d1d31" }, "downloads": -1, "filename": "antidote-0.6.0-cp35-cp35m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "344bb36d43360b15d38d43d8c89a2fde", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1243323, "upload_time": "2019-05-06T21:15:19", "url": "https://files.pythonhosted.org/packages/ad/69/497e17e9d9156e5ff198671f918d46e24cd44e1ac77231c2b4db1dc3b5aa/antidote-0.6.0-cp35-cp35m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4d9f406ba09a330437e3fafe81eb127c", "sha256": "623223b936d7c3cf18e7c29a61e88ec790211e08dbe7d0838e8daee1f39f087d" }, "downloads": -1, "filename": "antidote-0.6.0-cp36-cp36m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "4d9f406ba09a330437e3fafe81eb127c", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 986878, "upload_time": "2019-05-06T21:15:30", "url": "https://files.pythonhosted.org/packages/51/93/94486398e7fc3b6d9d536754deecee9f5db65631b627bc3f98988d162dba/antidote-0.6.0-cp36-cp36m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "c851a1b8f362e68c7df37ca97ec3013d", "sha256": "5dfd92442562e47a206708e74c78c8d5c4b40e31ef887b4a25020b7dd523e71c" }, "downloads": -1, "filename": "antidote-0.6.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "c851a1b8f362e68c7df37ca97ec3013d", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1282981, "upload_time": "2019-05-06T21:15:46", "url": "https://files.pythonhosted.org/packages/21/52/32c1d277440d877db49a0e355bb53c1e923a3070f33da97b2eaa3e1f7c53/antidote-0.6.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "c9e1f3cf677f4441e91f3a1bdbba0cc4", "sha256": "11c8c9294cdfb1703c4e449460b99d0088a4e5697310ef6753c1ab321ba528cb" }, "downloads": -1, "filename": "antidote-0.6.0-cp36-cp36m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "c9e1f3cf677f4441e91f3a1bdbba0cc4", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1282985, "upload_time": "2019-05-06T21:16:02", "url": "https://files.pythonhosted.org/packages/c5/98/c10f9b7a240d21cfd54a4a44f02e3e465d4969c72140e9cfad0d532b9000/antidote-0.6.0-cp36-cp36m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "9328f09922f93d2b9c4e9530325c101c", "sha256": "0bda577eb8304602147f0fd8399202159e2cec49053ed46af511f5b5a3e3f674" }, "downloads": -1, "filename": "antidote-0.6.0-cp37-cp37m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "9328f09922f93d2b9c4e9530325c101c", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 986889, "upload_time": "2019-05-06T21:16:16", "url": "https://files.pythonhosted.org/packages/5c/44/64d891a9a5fc90fac2e980510431ecc785dec4ccb800d9e42069e7168a96/antidote-0.6.0-cp37-cp37m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "872e28be13a8d474fa895802fe957cf0", "sha256": "c6757062c9e2b6a31666d05f8c2fa60c3209841674f227b1b333442c8ead452d" }, "downloads": -1, "filename": "antidote-0.6.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "872e28be13a8d474fa895802fe957cf0", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1284839, "upload_time": "2019-05-06T21:16:32", "url": "https://files.pythonhosted.org/packages/2f/63/145f070ae30f2314d76227d3c04a52d81c06b3e97e2597899b263f9d9383/antidote-0.6.0-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "da6830e8bbbf8adaaf43f5ce1eb49047", "sha256": "976b7dffa6733511a3363dae19b13aab9d5284bfc07ebfc5260b0fb1b8d25b3f" }, "downloads": -1, "filename": "antidote-0.6.0-cp37-cp37m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "da6830e8bbbf8adaaf43f5ce1eb49047", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1284841, "upload_time": "2019-05-06T21:16:54", "url": "https://files.pythonhosted.org/packages/e8/ab/ff96da19d1bc46bc43ed2cf9e38c985646f015bd51eac09c5bc84298cad5/antidote-0.6.0-cp37-cp37m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fd426a315f0fc7acd6765cd431d56fa5", "sha256": "15390cf0dc581699e297dadca5d4236a3c7acf67921e5f061eca0e5025178e63" }, "downloads": -1, "filename": "antidote-0.6.0.tar.gz", "has_sig": false, "md5_digest": "fd426a315f0fc7acd6765cd431d56fa5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 420771, "upload_time": "2019-05-06T21:17:09", "url": "https://files.pythonhosted.org/packages/56/81/c83dfd33a4e76e1cb92755f80eab2e811315113abd1ad49a22057bf54397/antidote-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "32bd2f840324f20d44803fcac04bb492", "sha256": "5cbb9078a67890f66c5f912b2b312583639e7962458bde4f7a4a551166fd50f4" }, "downloads": -1, "filename": "antidote-0.6.0-cp35-cp35m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "32bd2f840324f20d44803fcac04bb492", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 956088, "upload_time": "2019-05-06T21:14:48", "url": "https://files.pythonhosted.org/packages/ac/96/8ad62817fd481feea1654c265d9cec660c91a1ab59fd1900b01e65348357/antidote-0.6.0-cp35-cp35m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "62a81f130438023e4b9322dd7b2d71ec", "sha256": "65b6130f5cbd3b19e910a7900da442037a30fd79c3257c8a94f78268f73ea4a4" }, "downloads": -1, "filename": "antidote-0.6.0-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "62a81f130438023e4b9322dd7b2d71ec", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1243323, "upload_time": "2019-05-06T21:15:02", "url": "https://files.pythonhosted.org/packages/ad/a5/b459417c6c6f9655c361f15055d287241783e3fbd8da48ced56a4126e087/antidote-0.6.0-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "344bb36d43360b15d38d43d8c89a2fde", "sha256": "bc49744ceab65ec79b37f351ded3b4da3889247163f9f4edeafc82cc398d1d31" }, "downloads": -1, "filename": "antidote-0.6.0-cp35-cp35m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "344bb36d43360b15d38d43d8c89a2fde", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1243323, "upload_time": "2019-05-06T21:15:19", "url": "https://files.pythonhosted.org/packages/ad/69/497e17e9d9156e5ff198671f918d46e24cd44e1ac77231c2b4db1dc3b5aa/antidote-0.6.0-cp35-cp35m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4d9f406ba09a330437e3fafe81eb127c", "sha256": "623223b936d7c3cf18e7c29a61e88ec790211e08dbe7d0838e8daee1f39f087d" }, "downloads": -1, "filename": "antidote-0.6.0-cp36-cp36m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "4d9f406ba09a330437e3fafe81eb127c", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 986878, "upload_time": "2019-05-06T21:15:30", "url": "https://files.pythonhosted.org/packages/51/93/94486398e7fc3b6d9d536754deecee9f5db65631b627bc3f98988d162dba/antidote-0.6.0-cp36-cp36m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "c851a1b8f362e68c7df37ca97ec3013d", "sha256": "5dfd92442562e47a206708e74c78c8d5c4b40e31ef887b4a25020b7dd523e71c" }, "downloads": -1, "filename": "antidote-0.6.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "c851a1b8f362e68c7df37ca97ec3013d", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1282981, "upload_time": "2019-05-06T21:15:46", "url": "https://files.pythonhosted.org/packages/21/52/32c1d277440d877db49a0e355bb53c1e923a3070f33da97b2eaa3e1f7c53/antidote-0.6.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "c9e1f3cf677f4441e91f3a1bdbba0cc4", "sha256": "11c8c9294cdfb1703c4e449460b99d0088a4e5697310ef6753c1ab321ba528cb" }, "downloads": -1, "filename": "antidote-0.6.0-cp36-cp36m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "c9e1f3cf677f4441e91f3a1bdbba0cc4", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1282985, "upload_time": "2019-05-06T21:16:02", "url": "https://files.pythonhosted.org/packages/c5/98/c10f9b7a240d21cfd54a4a44f02e3e465d4969c72140e9cfad0d532b9000/antidote-0.6.0-cp36-cp36m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "9328f09922f93d2b9c4e9530325c101c", "sha256": "0bda577eb8304602147f0fd8399202159e2cec49053ed46af511f5b5a3e3f674" }, "downloads": -1, "filename": "antidote-0.6.0-cp37-cp37m-manylinux1_i686.whl", "has_sig": false, "md5_digest": "9328f09922f93d2b9c4e9530325c101c", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 986889, "upload_time": "2019-05-06T21:16:16", "url": "https://files.pythonhosted.org/packages/5c/44/64d891a9a5fc90fac2e980510431ecc785dec4ccb800d9e42069e7168a96/antidote-0.6.0-cp37-cp37m-manylinux1_i686.whl" }, { "comment_text": "", "digests": { "md5": "872e28be13a8d474fa895802fe957cf0", "sha256": "c6757062c9e2b6a31666d05f8c2fa60c3209841674f227b1b333442c8ead452d" }, "downloads": -1, "filename": "antidote-0.6.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "872e28be13a8d474fa895802fe957cf0", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1284839, "upload_time": "2019-05-06T21:16:32", "url": "https://files.pythonhosted.org/packages/2f/63/145f070ae30f2314d76227d3c04a52d81c06b3e97e2597899b263f9d9383/antidote-0.6.0-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "da6830e8bbbf8adaaf43f5ce1eb49047", "sha256": "976b7dffa6733511a3363dae19b13aab9d5284bfc07ebfc5260b0fb1b8d25b3f" }, "downloads": -1, "filename": "antidote-0.6.0-cp37-cp37m-manylinux2010_x86_64.whl", "has_sig": false, "md5_digest": "da6830e8bbbf8adaaf43f5ce1eb49047", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1284841, "upload_time": "2019-05-06T21:16:54", "url": "https://files.pythonhosted.org/packages/e8/ab/ff96da19d1bc46bc43ed2cf9e38c985646f015bd51eac09c5bc84298cad5/antidote-0.6.0-cp37-cp37m-manylinux2010_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fd426a315f0fc7acd6765cd431d56fa5", "sha256": "15390cf0dc581699e297dadca5d4236a3c7acf67921e5f061eca0e5025178e63" }, "downloads": -1, "filename": "antidote-0.6.0.tar.gz", "has_sig": false, "md5_digest": "fd426a315f0fc7acd6765cd431d56fa5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 420771, "upload_time": "2019-05-06T21:17:09", "url": "https://files.pythonhosted.org/packages/56/81/c83dfd33a4e76e1cb92755f80eab2e811315113abd1ad49a22057bf54397/antidote-0.6.0.tar.gz" } ] }