Skip to main content

Dependency injection.

Project description

https://img.shields.io/pypi/v/antidote.svg https://img.shields.io/pypi/l/antidote.svg https://img.shields.io/pypi/pyversions/antidote.svg https://travis-ci.org/Finistere/antidote.svg?branch=master https://codecov.io/gh/Finistere/antidote/branch/master/graph/badge.svg https://readthedocs.org/projects/antidote/badge/?version=latest

Antidotes is a dependency injection micro-framework for Python 3.6+. It is built on the idea of ensuring best maintainability of your code while being as easy to use as possible. It also provides the fastest injection with @inject allowing you to use it virtually anywhere.

Antidote provides the following features:

  • Ease of use
    • Injection anywhere you need through a decorator @inject, be it static methods, functions, etc.. By default, it will only rely on annotated type hints, but it supports a lot more!

    • No **kwargs arguments hiding actual arguments and fully mypy typed, helping you and your IDE.

    • Documented, everything has tested examples.

    • No need for any custom setup, just use your injected function as usual. You just don’t have to specify injected arguments anymore.

  • Flexibility
    • Most common dependencies out of the box: services, configuration, factories, interface/implementation.

    • All of those are implemented on top of the core implementation. If Antidote doesn’t provide what you need, there’s a good chance you can implement it yourself.

    • scope support

    • async injection

  • Maintainability
    • All dependencies can be tracked back to their declaration/implementation easily.

    • Mypy compatibility and usage of type hints as much as possible.

    • Overriding dependencies will raise an error outside of tests.

    • Dependencies can be frozen, which blocks any new declarations.

    • No double injection.

    • Everything is as explicit as possible, @inject does not inject anything implicitly.

    • type checks when a type is explicitly defined with world.get, world.lazy and constants.

    • thread-safe, cycle detection.

  • Testability
    • fully isolate all the dependencies of each test.

    • @inject lets you override any injections by passing explicitly the arguments.

    • Override locally in a test any dependency.

    • When encountering issues you can retrieve the full dependency tree, nicely formatted, with world.debug.

  • Performance*
    • fastest @inject with heavily tuned Cython.

    • testing utilities are tuned to ensure that even with full isolation it stays fast.

    • benchmarks: comparison, injection, test utilities

*with the compiled version, in Cython. Pre-built wheels for Linux. See further down for more details.

Comparison benchmark image

Installation

To install Antidote, simply run this command:

pip install antidote

Documentation

Beginner friendly tutorial, recipes, the reference and a FAQ can be found in the documentation.

Here are some links:

Issues / Feature Requests / Questions

Feel free to open an issue on Github for questions, requests or issues !

Hands-on quick start

Showcase of the most important features of Antidote with short and concise examples. Checkout the Getting started for a full beginner friendly tutorial.

A simple service

How does injection looks like ? Here is a simple example:

from antidote import inject, Service, Constants, const, world

class Conf(Constants):
    DB_HOST = const('localhost:5432')

class Database(Service):
    @inject([Conf.DB_HOST])  # based on argument position
    def __init__(self, host: str):
        self._host = host

@inject({'db': Database})
def f(db: Database):
    pass

f()  # yeah !
f(Database('localhost:5432'))  # override injection

# Retrieve dependencies by hand, in tests typically
world.get(Conf.DB_HOST)
world.get[str](Conf.DB_HOST)  # with type hint
world.get[Database]()  # omit dependency if it's the type hint itself

Or with annotated type hints (PEP-593):

from typing import Annotated
# from typing_extensions import Annotated # Python < 3.9
from antidote import Get, Provide

class Database(Service):
    # All methods are decorated with @inject by default
    def __init__(self, host: Annotated[str, Get(Conf.DB_HOST)]):
        self._host = host

@inject
def f(db: Provide[Database]):
    pass

Or with auto_provide:

# auto_provide => Class type hints are treated as dependencies.
@inject(auto_provide=True)
def f(db: Database):
    pass

If you want to be compatible with Mypy type checking, you just need to do the following:

@inject
def f(db: Provide[Database] = None):
    # Used to tell Mypy that `db` is optional but must be either injected or given.
    assert db is not None
    pass

This might look a bit cumbersome, but in reality you’ll only need to do it in functions you are actually calling yourself in your code. Typically Database.__init__() won’t need it because it’ll always be Antidote injecting the arguments.

A more complex case

Want more ? Here is an over-engineered example to showcase a lot more features. First we have an ImdbAPI coming from a external library:

# from a library
class ImdbAPI:
    def __init__(self, host: str, port: int, api_key: str):
        pass

You have your own interface to manipulate the movies:

# movie.py
class MovieDB:
    """ Interface """

    def get_best_movies(self):
        pass

Now that’s the entry point of your application:

# main.py
from movie import MovieDB
from current_movie import current_movie_db


@inject([MovieDB @ current_movie_db])
def main(movie_db: MovieDB = None):
    assert movie_db is not None  # for Mypy, to understand that movie_db is optional
    pass

# Or with annotated type hints
@inject
def main(movie_db: Annotated[MovieDB, From(current_movie_db)]):
    pass

if __name__ == '__main__':
    main()

Note that you can search for the definition of current_movie_db. So you can simply use “Go to definition” of your IDE which would open:

# current_movie.py
# Code implementing/managing MovieDB
from antidote import factory, inject, Service, implementation
from config import Config

# Provides ImdbAPI, as defined by the return type annotation.
@factory
@inject([Config.IMDB_HOST, Config.IMDB_PORT, Config.IMDB_API_KEY])
def imdb_factory(host: str, port: int, api_key: str) -> ImdbAPI:
    # Here host = Config().provide_const('IMDB_HOST', 'imdb.host')
    return ImdbAPI(host=host, port=port, api_key=api_key)

class IMDBMovieDB(MovieDB, Service):
    __antidote__ = Service.Conf(singleton=False)  # New instance each time

    @inject({'imdb_api': ImdbAPI @ imdb_factory})
    def __init__(self, imdb_api: ImdbAPI):
        self._imdb_api = imdb_api

    def get_best_movies(self):
        pass

@implementation(MovieDB)
def current_movie_db() -> object:
    return IMDBMovieDB  # dependency to be provided for MovieDB

Or with annotated type hints:

# current_movie.py
# Code implementing/managing MovieDB
from antidote import factory, Service, Get, From
from typing import Annotated
# from typing_extensions import Annotated # Python < 3.9
from config import Config

@factory
def imdb_factory(host: Annotated[str, Get(Config.IMDB_HOST)],
                 port: Annotated[int, Get(Config.IMDB_PORT)],
                 api_key: Annotated[str, Get(Config.IMDB_API_KEY)]
                 ) -> ImdbAPI:
    return ImdbAPI(host, port, api_key)

class IMDBMovieDB(MovieDB, Service):
    __antidote__ = Service.Conf(singleton=False)

    def __init__(self, imdb_api: Annotated[ImdbAPI, From(imdb_factory)]):
        self._imdb_api = imdb_api

    def get_best_movies(self):
        pass

The configuration can also be easily tracked down:

# config.py
from antidote import Constants, const

class Config(Constants):
    # with str/int/float, the type hint is enforced. Can be removed or extend to
    # support Enums.
    IMDB_HOST = const[str]('imdb.host')
    IMDB_PORT = const[int]('imdb.port')
    IMDB_API_KEY = const('imdb.api_key')

    def __init__(self):
        self._raw_conf = {
            'imdb': {
                'host': 'dummy_host',
                'api_key': 'dummy_api_key',
                'port': '80'
            }
        }

    def provide_const(self, name: str, arg: str):
        root, key = arg.split('.')
        return self._raw_conf[root][key]

Now you can override any of the arguments, typically in tests:

conf = Config()
main(IMDBMovieDB(imdb_factory(
    # constants can be retrieved directly on an instance
    host=conf.IMDB_HOST,
    port=conf.IMDB_PORT,
    api_key=conf.IMDB_API_KEY,
)))

You can also fully isolate your tests from each other while relying on Antidote and override any dependencies within that context:

from antidote import world

# Clone current world to isolate it from the rest
with world.test.clone():
    # Override the configuration
    world.test.override.singleton(Config.IMDB_HOST, 'other host')
    main()

If you ever need to debug your dependency injections, Antidote also provides a tool to have a quick summary of what is actually going on:

world.debug(main)
# will output:
"""
main
└── Permanent implementation: MovieDB @ current_movie_db
    └──<∅> IMDBMovieDB
        └── ImdbAPI @ imdb_factory
            └── imdb_factory
                ├── Const: Config.IMDB_API_KEY
                │   └── Config
                ├── Const: Config.IMDB_PORT
                │   └── Config
                └── Const: Config.IMDB_HOST
                    └── Config

Singletons have no scope markers.
<∅> = no scope (new instance each time)
<name> = custom scope
"""

Hooked ? Check out the documentation ! There are still features not presented here !

Compiled

The compiled implementation is roughly 10x faster than the Python one and strictly follows the same API than the pure Python implementation. Pre-compiled wheels are available only for Linux currently. You can check whether you’re using the compiled version or not with:

from antidote import is_compiled

print(f"Is Antidote compiled ? {is_compiled()}")

You can force the compilation of antidote yourself when installing:

ANTIDOTE_COMPILED=true pip install antidote

On the contrary, you can force the pure Python version with:

pip install --no-binary antidote

How to Contribute

  1. Check for open issues or open a fresh issue to start a discussion around a feature or a bug.

  2. Fork the repo on GitHub. Run the tests to confirm they all pass on your machine. If you cannot find why it fails, open an issue.

  3. Start making your changes to the master branch.

  4. Writes tests which shows that your code is working as intended. (This also means 100% coverage.)

  5. Send a pull request.

Be sure to merge the latest from “upstream” before making a pull request!

If you have any issue during development or just want some feedback, don’t hesitate to open a pull request and ask for help !

Pull requests will not be accepted if:

  • classes and non trivial functions have not docstrings documenting their behavior.

  • tests do not cover all of code changes (100% coverage) in the pure python.

If you face issues with the Cython part of Antidote just send the pull request, I can adapt the Cython part myself.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

antidote-0.12.1.tar.gz (171.6 kB view details)

Uploaded Source

Built Distributions

antidote-0.12.1-cp39-cp39-manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9

antidote-0.12.1-cp39-cp39-manylinux2014_i686.whl (2.1 MB view details)

Uploaded CPython 3.9

antidote-0.12.1-cp39-cp39-manylinux2010_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

antidote-0.12.1-cp39-cp39-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9

antidote-0.12.1-cp39-cp39-manylinux1_i686.whl (2.1 MB view details)

Uploaded CPython 3.9

antidote-0.12.1-cp38-cp38-manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.8

antidote-0.12.1-cp38-cp38-manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.8

antidote-0.12.1-cp38-cp38-manylinux2010_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

antidote-0.12.1-cp38-cp38-manylinux1_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8

antidote-0.12.1-cp38-cp38-manylinux1_i686.whl (2.2 MB view details)

Uploaded CPython 3.8

antidote-0.12.1-cp37-cp37m-manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.7m

antidote-0.12.1-cp37-cp37m-manylinux2014_i686.whl (1.9 MB view details)

Uploaded CPython 3.7m

antidote-0.12.1-cp37-cp37m-manylinux2010_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

antidote-0.12.1-cp37-cp37m-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.7m

antidote-0.12.1-cp37-cp37m-manylinux1_i686.whl (1.9 MB view details)

Uploaded CPython 3.7m

antidote-0.12.1-cp36-cp36m-manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.6m

antidote-0.12.1-cp36-cp36m-manylinux2014_i686.whl (1.9 MB view details)

Uploaded CPython 3.6m

antidote-0.12.1-cp36-cp36m-manylinux2010_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

antidote-0.12.1-cp36-cp36m-manylinux1_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.6m

antidote-0.12.1-cp36-cp36m-manylinux1_i686.whl (1.9 MB view details)

Uploaded CPython 3.6m

File details

Details for the file antidote-0.12.1.tar.gz.

File metadata

  • Download URL: antidote-0.12.1.tar.gz
  • Upload date:
  • Size: 171.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1.tar.gz
Algorithm Hash digest
SHA256 3602b224f2ef731847f9d765a9e79b307ee8f66d853c58aeed76062108e24978
MD5 6e257559dc40ea6587ecf9e17a886436
BLAKE2b-256 c6fd078c1a90eaf8ff7ec144ad3a229c5c78e95ee80fae3d6cbd58e8783c38d1

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 29d5f80888d359ce4fd94c8ae43e6c05031f8b9788c367e4e9d751d96bee46ee
MD5 3c372633f054cd6cacd5e071b054e2e6
BLAKE2b-256 7e49d8a5fd7fa535b4713eeac925f86af02391a46bb709fd560da3f9218d957e

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp39-cp39-manylinux2014_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp39-cp39-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp39-cp39-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fca2e039e6dc12600c7ec4a43429e91cfaab41d2b6687ea861f11406846aac84
MD5 efe7a282b0f1e7b576fdd59e41328d51
BLAKE2b-256 5fe5a69e2127730bfb529840dd3a9d331be8194b36fa30c338940cbe85b10f4c

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 55249e270e043330de3a0efb1d0665dc7338bc67712020fa811c493e2f294af8
MD5 678dac4bdeb0397ed77c00bab7131aef
BLAKE2b-256 31baeb34ab1b9f9bd1efe4c2bed20e8805fa001dcf499533b0e94cfca1dddb71

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp39-cp39-manylinux1_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp39-cp39-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3ec1b7024bf2033f15a79f2a6e116cc40a229575fd5210facfb14377d9e3b337
MD5 25bc1c2012db18bc32586ceb4d0a974f
BLAKE2b-256 975c1043f7d6d4be6ea39a59d68f687a7a69628366af85b31fb9ee58ee2196e0

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp39-cp39-manylinux1_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp39-cp39-manylinux1_i686.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp39-cp39-manylinux1_i686.whl
Algorithm Hash digest
SHA256 ff7e8ac823efcf695e1948b67cb33bebfffd2afc9317c770beb9961f12488ab5
MD5 8a8c0dd80380a9d7a437be55c978696f
BLAKE2b-256 e3142ea0dfd188cc464928e5ad30525a7b31d6648746670c6f56d67b660f34b8

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c1b18b11a52d10502fd50cebdda08955353c5d4fd680fb2b4b78ddc5ca2e894
MD5 6679919e71ab8a793ac13dde45116e22
BLAKE2b-256 63aa0a9f6a91ba4434ac23064f3fff776385a0603d69d0e9bd52bc270887adf0

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp38-cp38-manylinux2014_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp38-cp38-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp38-cp38-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b9fb3a597fd1a0121341372f7d119461968806987b73500be4cb76da79680d1e
MD5 38595c276c65d9c78ec751d08c4d5e96
BLAKE2b-256 975032b6bd811e18f67ec393fb75dda147f4a1ef9eea367183428fff431fa51d

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f56dc051024b393acf26efaff259a018d86605ea1e0dd392bd419d9bcc92fda2
MD5 54ce0cd60179b750292c4c5bfbfadea2
BLAKE2b-256 a0348c92271573dcda2e0874abd2333c58501fd2b2bed9468bc74a2cc27a7ee0

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d77fed44983aa1eb8267a08a3023c7a6f4d1e5e4bc96602eb837cfd12d4a15bb
MD5 ebf6e2c80af1552c613a1cf2ca16cfc7
BLAKE2b-256 3118e336df440eb2a4df790bd24ec62c28c9e4f5787fb5de01f602a5c9f30bdd

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp38-cp38-manylinux1_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 070a538915202839ecee78b2a9e27b8a4ee6bf7f047c0167a496b04dff9b6a50
MD5 78c41886277b230a60dd4d058a731444
BLAKE2b-256 1218f8e04a5cb8e04451baf62d7309673234511f15265369524a6d7d42bb8012

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 008b28789db23303bde8d4c5ac8a2f93e2454c4e3c0192d85cbe31d1028dce14
MD5 57ad9ea53e2ee0f22ef741c22e281dc8
BLAKE2b-256 ab764f5d5fe3d6665d8458fd43ec4558a98d18abd1fa51e4ebff838397563eda

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp37-cp37m-manylinux2014_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp37-cp37m-manylinux2014_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp37-cp37m-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 84b192e3fb6d5162f12be5470b7849f05cbb7591a1434555f4605d28f5594e24
MD5 870bdcbb6b1fd554fd8e57d437a1fc5f
BLAKE2b-256 719d481b89fb135bc5ea3e3e55c68f778331e6778ddd240d019feefcd5949e44

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 8e7dacdea4cd2229841a8b2c02e66220ed28e67a3fcde15d53901406f4adc0f6
MD5 468b9e39f54b49e59bbf3e9a6d02903b
BLAKE2b-256 200fa2d0a609b1d724f10b9d797bd5d7834ccac4c465da37006416aa78260211

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9fea6d3697fbdff8c54be0b79d2c6b87d13a56a6cb3281a99360ba8f9ee4f908
MD5 ff00d5dc20ead9ab0a6064ed4a578de3
BLAKE2b-256 c65aed58680d3ff66820736e26857352e53dc23a21d6b52fe691c3acb0bdbdd3

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 908612f06c6edc4938aea1371aeaacd6121598060a4c65fe66f32a71000bdd1a
MD5 06f437f6cdf5798a21e203461ad6995e
BLAKE2b-256 d74d197f43ae1241d6f302699a2645ec71f381a839b0b1e62bdd31e49ea76ba1

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95b07a25eb694a4da161ee5cd36ecfaac302813b3f2a1e4c95021044e25a1de7
MD5 17a9cf8c4a342786b3a1ca344938618d
BLAKE2b-256 0cc75c89559e76f24426279dbe5a128f56d8638e2570e0f65c83589bf7ccdd9d

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp36-cp36m-manylinux2014_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp36-cp36m-manylinux2014_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp36-cp36m-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 27f5c90285935f73d90eac5983b5dbdf039b66b4c10956a489399d8420650a90
MD5 59f9692c368dfb213be567bff1a19a10
BLAKE2b-256 ccceac59f202759322a5ea9a12cf8e3869e0d5a349708da4016f11932d332499

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 58f54b893322fd066cf6d2db6f6f1dbd9efaf62a37badaf0eafb014307e18a15
MD5 6cfcd137996cbcfe6935b1e28fdda3aa
BLAKE2b-256 e2f74dd69d61dc0d613fbb50f2ef722ab26692e33e640c434d3634dd54e45258

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: antidote-0.12.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2d355456733ffbd17b90d476297926256a4b2ebae4bf16e8025ac085e20863df
MD5 ec19c3a51ad827dc109e816c9e419aee
BLAKE2b-256 0a70494820d0870a05833be0567b4f95199f881bfe74e8631905f68721e14b2b

See more details on using hashes here.

Provenance

File details

Details for the file antidote-0.12.1-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: antidote-0.12.1-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for antidote-0.12.1-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 5f6ea74dd4749ca7490cfba4c551c2c488b756aef0e35a0ac75f472753b42ae7
MD5 bccb9deb196b01464ec4e855ed427f95
BLAKE2b-256 78dbbc449f549bb5df7f776c308a63f0957b453d6d68f70669b393350934d125

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page