{ "info": { "author": "David Halls", "author_email": "dave@davedoesdev.com", "bugtrack_url": null, "classifiers": [], "description": "\\ |Build Status| |Coverage Status| |PyPI version|\n\nDocker registry bindings for `The Update\nFramework `__ in Python. Uses\n`dxf `__ to store TUF metadata and\ntarget files in a Docker registry.\n\n- Easy-to-use Python module and command-line tool.\n- Distribute your data with the security and trust features of `The\n Update Framework `__.\n- Backed by the scalability and flexbility of a `Docker\n registry `__.\n- No extra moving parts: just Python client-side and Docker registry\n server-side.\n\n - Docker client and daemon not required.\n - `Notary `__ not required. See\n `this issue `__ for\n discussion.\n\n- Supports Docker registry schema v1 and v2.\n- Works on Python 2.7 and 3.4.\n\nExamples\n--------\n\nCommand-line example\n~~~~~~~~~~~~~~~~~~~~\n\nThis assumes at least ``DTUF_HOST`` has been set to the hostname of a\nDocker registry (see `Usage <#usage>`__ below). You may need to set\n``DTUF_USERNAME`` and ``DTUF_PASSWORD`` too depending on the registry\nyou're using.\n\nYou can run your own registry or use a hosted one such as Docker Hub\n(``registry-1.docker.io``).\n\nIf you want to run your own, see this `example\nscript `__ or the `unit\ntests `__. There are also full instructions available\n`here `__.\n\n.. code:: shell\n\n # On the master machine\n $ echo 'Hello World!' > demo.txt\n $ dtuf create-root-key fred/demo\n $ dtuf create-metadata-keys fred/demo\n $ dtuf create-metadata fred/demo\n $ dtuf push-target fred/demo demo.txt demo.txt\n $ dtuf push-metadata fred/demo\n # pub key is in dtuf_repos/fred/demo/master/keys/root_key.pub\n # distribute it out-of-band\n\n # On some other machine\n $ dtuf pull-metadata fred/demo root_key.pub\n demo.txt\n $ dtuf pull-target fred/demo demo.txt\n Hello World!\n\n # Update on the master machine\n $ echo 'Update World!' > demo.txt\n $ echo 'Another World!' > demo2.txt\n $ dtuf push-target fred/demo demo.txt demo.txt\n $ dtuf push-target fred/demo demo2.txt demo2.txt\n $ dtuf push-metadata fred/demo\n\n # On the other machine\n $ dtuf pull-metadata fred/demo\n demo.txt\n demo2.txt\n $ dtuf pull-target fred/demo demo.txt\n Update World!\n $ dtuf pull-target fred/demo demo2.txt\n Another World!\n\nModule example\n~~~~~~~~~~~~~~\n\nThis example uses the Docker Hub. Change the username, password and\nrepository name to suit.\n\nPublish on the master machine:\n\n.. code:: python\n\n from dtuf import DTufMaster\n\n def auth(dtuf, response):\n dtuf.authenticate('fred', 'somepassword', response=response)\n\n dtuf = DTufMaster('registry-1.docker.io', 'fred/demo', auth=auth)\n\n with open('demo.txt', 'w') as f:\n f.write('Hello World!\\n')\n\n dtuf.create_root_key()\n dtuf.create_metadata_keys()\n dtuf.create_metadata()\n dtuf.push_target('demo.txt', 'demo.txt')\n dtuf.push_metadata()\n # pub key is in dtuf_repos/fred/demo/master/keys/root_key.pub\n # distribute it out-of-band\n\nRetrieve on some other machine:\n\n.. code:: python\n\n from dtuf import DTufCopy\n\n def auth(dtuf, response):\n dtuf.authenticate('barney', 'otherpassword', response=response)\n\n dtuf = DTufCopy('registry-1.docker.io', 'fred/demo', auth=auth)\n\n with open('root_key.pub', 'r') as f:\n assert dtuf.pull_metadata(f.read()) == ['demo.txt']\n\n s = ''\n for download in dtuf.pull_target('demo.txt'):\n for chunk in download:\n s += chunk\n assert s == 'Hello World!\\n'\n\nUsage\n-----\n\nThe module API is described\n`here `__.\n\nEnvironment variables\n~~~~~~~~~~~~~~~~~~~~~\n\nThe ``dtuf`` command-line tool uses the following environment variables.\nOnly ``DTUF_HOST`` is strictly required but you may need to set others\ndepending on your set up.\n\n- ``DTUF_HOST`` - Host where Docker registry is running\n- ``DTUF_INSECURE`` - Set this to ``1`` if you want to connect to the\n registry using ``http`` rather than ``https`` (which is the default).\n- ``DTUF_USERNAME`` - Name of user to authenticate as.\n- ``DTUF_PASSWORD`` - User's password.\n- ``DTUF_REPOSITORIES_ROOT`` - Directory under which TUF metadata\n should be stored. Note that the repository name is appended to this\n before storing the metadata. Defaults to ``dtuf_repos`` in the\n current working directory.\n- ``DTUF_AUTH_HOST`` - If set, always perform token authentication to\n this host, overriding the value returned by the registry.\n- ``DTUF_PROGRESS`` - If this is set to ``1``, a progress bar is\n displayed (on standard error) during ``dtuf push-target``,\n ``dtuf push-metadata``, ``dtuf pull-metadata`` and\n ``dtuf pull-target``. If this is set to ``0``, a progress bar is not\n displayed. If this is set to any other value, a progress bar is only\n displayed if standard error is a terminal.\n- ``DTUF_BLOB_INFO`` - Set this to ``1`` if you want\n ``dtuf pull-target`` to prepend each blob with its digest and size\n (printed in plain text, separated by a space and followed by a\n newline).\n- ``DTUF_ROOT_KEY_PASSWORD`` - Password to use for encrypting the TUF\n root private key. Used by ``dtuf create-root-key``,\n ``dtuf create-metadata`` and ``dtuf reset-keys``. If unset then\n you'll be prompted for the password.\n- ``DTUF_TARGETS_KEY_PASSWORD`` - Password to use for encrypting the\n TUF targets private key. Used by ``dtuf create-metadata-keys``,\n ``dtuf create-metadata``, ``dtuf reset-keys`` and\n ``dtuf push-metadata``. If unset then you'll be prompted for the\n password.\n- ``DTUF_SNAPSHOT_KEY_PASSWORD`` - Password to use for encrypting the\n TUF snapshot private key. Used by ``dtuf create-metadata-keys``,\n ``dtuf create-metadata``, ``dtuf reset-keys`` and\n ``dtuf push-metadata``. If unset then you'll be prompted for the\n password.\n- ``DTUF_TIMESTAMP_KEY_PASSWORD`` - Password to use for enrypting the\n TUF timestamp private key. Used by ``dtuf create-metadata-keys``,\n ``dtuf create-metadata``, ``dtuf reset-keys`` and\n ``dtuf push-metadata``. If unset then you'll be prompted for the\n password.\n- ``DTUF_ROOT_LIFETIME`` - Lifetime of the TUF `root\n metadata `__.\n After this time expires, you'll need to use ``dtuf reset-keys`` and\n ``dtuf push-metadata`` to re-sign the metadata. Defaults to 1 year.\n- ``DTUF_TARGETS_LIFETIME`` - Lifetime of the TUF `targets\n metadata `__.\n After this time expires, you'll need to use ``dtuf push-metadata`` to\n re-sign the metadata. Defaults to 3 months.\n- ``DTUF_SNAPSHOT_LIFETIME`` - Lifetime of the TUF `snapshot\n metadata `__.\n After this time expires, you'll need to use ``dtuf push-metadata`` to\n re-sign the metadata. Defaults to 1 week.\n- ``DTUF_TIMESTAMP_LIFETIME`` - Lifetime of the TUF `timestamp\n metadata `__.\n After this time expires, you'll need to use ``dtuf push-metadata`` to\n re-sign the metadata. Defaults to 1 day.\n- ``DTUF_LOG_FILE`` - Name of file to write log messages into. Defaults\n to ``dtuf.log`` in the current working directory. Set it to an empty\n string to disable logging to a file.\n- ``DTUF_FILE_LOG_LEVEL`` - Name of the Python `logging\n level `__\n to use when deciding which messages to write to the log file.\n Defaults to ``WARNING``.\n- ``DTUF_CONSOLE_LOG_LEVEL`` - Name of the Python logging level to use\n when deciding which messages to write to the console. Defaults to\n ``WARNING``.\n\nCommand line options\n~~~~~~~~~~~~~~~~~~~~\n\nYou can use the following options with ``dtuf``. In each case, supply\nthe name of the repository on the registry you wish to work with as the\nsecond argument.\n\nCreating, updating and uploading data\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n- ``dtuf create-root-key ``\n\n Create TUF root keypair for the repository.\n\n The private key is written to\n ``$DTUF_REPOSITORIES_ROOT//master/keys/root_key`` and can\n be moved offline once you've used ``dtuf create-metadata``.\n You'll need it again if you use ``dtuf reset-keys`` when the root\n metadata expires.\n\n The public key is written to\n ``$DTUF_REPOSITORIES_ROOT//master/keys/root_key.pub`` and\n can be given to others for use when retrieving a copy of the\n repository metadata with ``dtuf pull-metadata``.\n\n- ``dtuf create-metadata-keys ``\n\n Create TUF metadata keypairs for the repository.\n\n The keys are written to the\n ``$DTUF_REPOSITORIES_ROOT//master/keys`` directory. The\n public keys have a ``.pub`` extension.\n\n You can move the private keys offline once you've used\n ``dtuf push-metadata`` to publish the repository.\n\n You don't need to give out the metadata public keys since they're\n published on the repository.\n\n- ``dtuf create-metadata ``\n\n Create and sign the TUF metadata for the repository.\n\n You only need to do this once for each repository, and the\n repository's root and metadata private keys must be available.\n\n- ``dtuf reset-keys ``\n\n Re-sign the TUF metadata for the repository.\n\n Call this if you've generated new root or metadata keys (because\n one of the keys has been compromised, for example) but you don't\n want to delete the repository and start again.\n\n- ``dtuf push-target ...``\n\n Upload data to the repository and update the local TUF metadata\n\n The metadata isn't uploaded until you use ``dtuf push-metadata``.\n\n The data is given a name (known as the ``target``) and can come\n from a list of files or existing target names. Existing target\n names should be prepended with ``@`` in order to distinguish them\n from filenames.\n\n- ``dtuf del-target ...``\n\n Delete targets (data) from the repository and update the local\n TUF metadata.\n\n The metadata isn't updated on the registry until you use\n ``dtuf push-metadata``.\n\n Note that the registry doesn't support deletes yet so expect an\n error.\n\n- ``dtuf push-metadata ``\n\n Upload local TUF metadata to the repository.\n\n The TUF metadata consists of a list of targets (which were\n uploaded by ``dtuf push-target``), a snapshot of the state of the\n metadata (list of hashes), a timestamp and a list of public keys.\n\n The metadata except for the list of public keys will be signed\n here. The list of public keys was signed (along with the rest of\n the metadata) when you used ``dtuf create-metadata`` (or\n ``dtuf reset-keys``).\n\n- ``dtuf list-master-targets ``\n\n Print the names of all the targets defined in the local TUF\n metadata.\n\n- ``dtuf get-master-expirations ``\n\n Print the expiration dates of the TUF metadata.\n\nDownloading data\n^^^^^^^^^^^^^^^^\n\n- ``dtuf pull-metadata [|-]``\n\n Download TUF metadata from the repository.\n\n The metadata is checked for expiry and verified against the root\n public key for the repository.\n\n You only need to supply the root public key once, and you should\n obtain it from the person who uploaded the metadata. If you\n specify ``-`` then the key is read from standard input instead of\n a file.\n\n Target data is not downloaded - use ``dtuf pull-target`` for\n that.\n\n A list of targets which have been updated since you last\n downloaded them will be printed to standard output, one per line.\n\n- ``dtuf pull-target ...``\n\n Download targets (data) from the repository to standard output.\n\n Each target's data consists of one of more separate blobs\n (depending on how many > were uploaded). All of them will be\n downloaded.\n\n- ``dtuf blob-sizes ...``\n\n Print the sizes of all the blobs which make up a list of targets.\n\n- ``dtuf check-target ...``\n\n Check whether the hashes of a target's blobs match the hashes of\n list of files. An error message will be displayed if not and the\n exit code won't be 0.\n\n- ``dtuf list-copy-targets ``\n\n Print the names of all the targets defined in the local copy of\n the TUF metadata.\n\n- ``dtuf get-copy-expirations ``\n\n Print the expiration dates of the local copy of the TUF metadata.\n\n- ``dtuf list-repos``\n\n Print the names of all the repositories in the registry.\n\nAuthentication tokens\n---------------------\n\n``dtuf`` automatically obtains Docker registry authentication tokens\nusing your ``DTUF_USERNAME`` and ``DTUF_PASSWORD`` environment variables\nas necessary.\n\nHowever, if you wish to override this then you can use the following\ncommand:\n\n- ``dtuf auth ...``\n\n Authenticate to the registry using ``DTUF_USERNAME`` and\n ``DTUF_PASSWORD``, and print the resulting token.\n\n ``action`` can be ``pull``, ``push`` or ``*``.\n\nIf you assign the token to the ``DTUF_TOKEN`` environment variable, for\nexample:\n\n``DTUF_TOKEN=$(dtuf auth fred/demo pull)``\n\nthen subsequent ``dtuf`` commands will use the token without needing\n``DTUF_USERNAME`` and ``DTUF_PASSWORD`` to be set.\n\nNote however that the token expires after a few minutes, after which\n``dtuf`` will exit with ``EACCES``.\n\nInstallation\n------------\n\n.. code:: shell\n\n pip install python-dtuf\n\nLicence\n-------\n\n`MIT `__\n\nTests\n-----\n\n.. code:: shell\n\n make test\n\nLint\n----\n\n.. code:: shell\n\n make lint\n\nCode Coverage\n-------------\n\n.. code:: shell\n\n make coverage\n\n`coverage.py `__ results are\navailable\n`here `__.\n\nCoveralls page is `here `__.\n\n.. |Build Status| image:: https://travis-ci.org/davedoesdev/dtuf.png\n :target: https://travis-ci.org/davedoesdev/dtuf\n.. |Coverage Status| image:: https://coveralls.io/repos/davedoesdev/dtuf/badge.png?branch=master\n :target: https://coveralls.io/r/davedoesdev/dtuf?branch=master\n.. |PyPI version| image:: https://badge.fury.io/py/python-dtuf.png\n :target: http://badge.fury.io/py/python-dtuf", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/davedoesdev/dtuf", "keywords": "docker registry tuf update framework", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "python-dtuf", "package_url": "https://pypi.org/project/python-dtuf/", "platform": "", "project_url": "https://pypi.org/project/python-dtuf/", "project_urls": { "Homepage": "https://github.com/davedoesdev/dtuf" }, "release_url": "https://pypi.org/project/python-dtuf/3.2.0/", "requires_dist": null, "requires_python": "", "summary": "Docker registry bindings for The Update Framework", "version": "3.2.0" }, "last_serial": 3999806, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "f4da1bca4ee73b05f2d0d9a3a22c3f71", "sha256": "1ace37c906cea771048130404742b0a14c326ce745d48a023505bdca1cf2fcb4" }, "downloads": -1, "filename": "python_dtuf-0.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "f4da1bca4ee73b05f2d0d9a3a22c3f71", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 88147, "upload_time": "2016-01-23T22:16:51", "url": "https://files.pythonhosted.org/packages/86/b2/5ec4d6069bd2c74aa94c5b6844d38ffc25ed43ab465d50f559cfde5e8b62/python_dtuf-0.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2797d5433b1b4dcee19ab728836ed428", "sha256": "ecae7a38ce59607f52ef7a72baf92515ed1ca1dfe60ac9f280a4c39e5f4e1888" }, "downloads": -1, "filename": "python_dtuf-0.0.1.tar.gz", "has_sig": false, "md5_digest": "2797d5433b1b4dcee19ab728836ed428", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25149, "upload_time": "2016-01-23T22:16:57", "url": "https://files.pythonhosted.org/packages/ae/ba/61eead0d50a12d17740db522ec3f41d79ad021f3ba66f94908791169d11b/python_dtuf-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2fae646504fc9ad039c3e1842cf55fb7", "sha256": "18eb8699130458d9935385b9129a2e7b91ee2addee323018a6b10df86b348024" }, "downloads": -1, "filename": "python_dtuf-0.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "2fae646504fc9ad039c3e1842cf55fb7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 88013, "upload_time": "2016-01-23T22:42:44", "url": "https://files.pythonhosted.org/packages/f1/55/8d35b058dde1b9a1a676548e5aecaaa95a88fa1acda92fcf3fe4fc5e58ab/python_dtuf-0.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3125b1ed8414992ee381122190ddafe4", "sha256": "057b1be18a6ad65405b32e3b40b5855bb950939dc566d925549effcbc0730b89" }, "downloads": -1, "filename": "python_dtuf-0.0.2.tar.gz", "has_sig": false, "md5_digest": "3125b1ed8414992ee381122190ddafe4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25125, "upload_time": "2016-01-23T22:42:50", "url": "https://files.pythonhosted.org/packages/f1/5d/3a9732155a35889fdfb711b0fa174085407efc141e17bba8af5c5c660a0a/python_dtuf-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "02b0166871bb68a595652211681dd550", "sha256": "67cabfc56fc8a61c9f9c5e8fe728a10ff84e6a7777ecd9c02878910ae12978c3" }, "downloads": -1, "filename": "python_dtuf-0.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "02b0166871bb68a595652211681dd550", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 88051, "upload_time": "2016-01-23T22:56:14", "url": "https://files.pythonhosted.org/packages/20/e5/4bd9855e10728b5b5ab9a3a3952ee7dc7bb3b58475b7346201df2ceff6e0/python_dtuf-0.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b09ca24ed1df08229d8c9ab656780681", "sha256": "0108ecd247b2f2f39913008a438f7ed3b66ed9fced23cdf99d64eb67b4b18191" }, "downloads": -1, "filename": "python_dtuf-0.0.3.tar.gz", "has_sig": false, "md5_digest": "b09ca24ed1df08229d8c9ab656780681", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25143, "upload_time": "2016-01-23T22:56:20", "url": "https://files.pythonhosted.org/packages/83/d2/2c5508debb5b8cbef3fa27766eca1ab69e33ffa31fff04b7b1acd9d33a6f/python_dtuf-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "06f773e3b4c3945041a68f726361d2a5", "sha256": "7e10d6f2c321c2550e5d34587f639f087298ddc8741eb4353c7922e8bc18165c" }, "downloads": -1, "filename": "python_dtuf-0.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "06f773e3b4c3945041a68f726361d2a5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 88079, "upload_time": "2016-01-23T23:18:14", "url": "https://files.pythonhosted.org/packages/18/07/4ea895aee64127f8c31de86997ffd7212ffe5c8d6198b03f60048ab6a9ac/python_dtuf-0.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a19739bd4339181c8fdf8749810a67c", "sha256": "52fcbd14e7ed983756c68274ce208ff6bf53baa7686aa7a84c6ee4288fcf3daf" }, "downloads": -1, "filename": "python_dtuf-0.0.4.tar.gz", "has_sig": false, "md5_digest": "4a19739bd4339181c8fdf8749810a67c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25145, "upload_time": "2016-01-23T23:18:20", "url": "https://files.pythonhosted.org/packages/fb/69/e43c38b1649dd707ad8c59c0fa8e2143e5b0cb7541da94ce32865c5e58ab/python_dtuf-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "5e219ddb6643e86c88ccdb3231d8bb9e", "sha256": "2a5fef302f2866052a4c1198e0e19e439cd1e123b7a66e49253416a52b5ebef5" }, "downloads": -1, "filename": "python_dtuf-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5e219ddb6643e86c88ccdb3231d8bb9e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 88098, "upload_time": "2016-01-24T23:46:34", "url": "https://files.pythonhosted.org/packages/64/05/bc780b83665342188b599b05f5939136f747684807b3bff8be2a438f4de9/python_dtuf-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "409bd431c766d84b02b9a6145652d87b", "sha256": "7513998e74e4debe31a16b459f73887f108dc4e0c0a4d4a0bd714702d21bb3e5" }, "downloads": -1, "filename": "python_dtuf-0.0.5.tar.gz", "has_sig": false, "md5_digest": "409bd431c766d84b02b9a6145652d87b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25145, "upload_time": "2016-01-24T23:46:48", "url": "https://files.pythonhosted.org/packages/8b/9e/938fef82f2b1bb025bd08b48f3c7ad453a93e5d6a581a669b082d077e3ae/python_dtuf-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "a5fd337c588f14623172acac9e58a3d8", "sha256": "4e19d74d320f82a622a9407fdbcdb8433832bd1984ed16617857a3f7bb8a69ac" }, "downloads": -1, "filename": "python_dtuf-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a5fd337c588f14623172acac9e58a3d8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 88374, "upload_time": "2016-01-26T08:49:59", "url": "https://files.pythonhosted.org/packages/69/1a/eb4ac61af169fac552584f097606f75c3ec68e93a174359263a504291fb9/python_dtuf-0.0.6-py2.py3-none-any.whl" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e9ad7ef8c52411174baf5f23fd49dc83", "sha256": "a619dab19984ef95c607af80e9a58b0ca7db2d30328e16fc6d2df6f354170488" }, "downloads": -1, "filename": "python_dtuf-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9ad7ef8c52411174baf5f23fd49dc83", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 88374, "upload_time": "2016-01-26T08:52:16", "url": "https://files.pythonhosted.org/packages/54/f8/31e12821890f0ebb82deda33df382d1e6c9d4158b9855c4d426f7b0062fc/python_dtuf-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd38deb254ece18fe6c87fab298cacb7", "sha256": "5144d4f8159dc3126d718a26e5c085b138870b9b0010fc1e3a40a31dcabfde9f" }, "downloads": -1, "filename": "python_dtuf-0.0.7.tar.gz", "has_sig": false, "md5_digest": "dd38deb254ece18fe6c87fab298cacb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25218, "upload_time": "2016-01-26T08:52:39", "url": "https://files.pythonhosted.org/packages/ef/6b/48a6821898e6f16abd553c761bf965383f509cc13227e377a4879a43a6e9/python_dtuf-0.0.7.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "3ae685e44a492ce0668d9c4a5ba27d80", "sha256": "02b96a9c5e737b60dc275b1f5242f66168f9cc5c1de768891711bf3031e1a86c" }, "downloads": -1, "filename": "python_dtuf-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ae685e44a492ce0668d9c4a5ba27d80", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 88543, "upload_time": "2016-02-17T22:49:34", "url": "https://files.pythonhosted.org/packages/fe/78/5e0c4473ef07e9b1a92faf2ae783497da93af66f87e17d71e77ef76d8773/python_dtuf-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a5f53aff817ac3573d281d4676f6715", "sha256": "c40410d321e74baeb6eef58c1d359ab86f997787087c3fe45c4224325cd87b0f" }, "downloads": -1, "filename": "python_dtuf-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9a5f53aff817ac3573d281d4676f6715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25313, "upload_time": "2016-02-17T22:49:39", "url": "https://files.pythonhosted.org/packages/85/0f/df6e1a4f80bf3ee59a72319233f00f10907dbffcf471d1ddb1b48da2cc36/python_dtuf-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "619b57077a96a205dadbbf37010f693a", "sha256": "305fe1d565d39c5544379021eabbcd7f36837a7f3be9595df2b15046b162ac10" }, "downloads": -1, "filename": "python-dtuf-1.1.0.tar.gz", "has_sig": false, "md5_digest": "619b57077a96a205dadbbf37010f693a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25236, "upload_time": "2017-01-13T07:29:54", "url": "https://files.pythonhosted.org/packages/28/b7/a8ffcabe82c5d636e0f8e8bc476e65d9bccd638750e5d0ab84632e5337d1/python-dtuf-1.1.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "7708cf7ee60dfe32ef45041889b1f783", "sha256": "95cfa661d0539564b8dd4b26cdc20c5408cd0c8b1f424ce116d1e75cc247444b" }, "downloads": -1, "filename": "python-dtuf-2.0.0.tar.gz", "has_sig": false, "md5_digest": "7708cf7ee60dfe32ef45041889b1f783", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25266, "upload_time": "2017-11-11T07:47:46", "url": "https://files.pythonhosted.org/packages/d1/83/6af1d57f98ff8034d6240dc38251d4dc0d93e62376c9ce259354dae4cb71/python-dtuf-2.0.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "3e4e618d6c6e06f2bdf079972f2d6427", "sha256": "d59e0718c1b1fce1e22ff4eb6463a2b1d03954fd02f7d565eea52ab8772f705c" }, "downloads": -1, "filename": "python-dtuf-3.0.0.tar.gz", "has_sig": false, "md5_digest": "3e4e618d6c6e06f2bdf079972f2d6427", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25457, "upload_time": "2017-11-16T09:41:50", "url": "https://files.pythonhosted.org/packages/77/99/bb89a65f2418c7352dcf89127254e9a4d4b84901fcaafbe33a9987a35253/python-dtuf-3.0.0.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "cd052803f923840dae0163bc2c00ef4f", "sha256": "fade6151c19546beb9c4b75c832249b77aa0d9427b3d5b30d63fcec44de3813f" }, "downloads": -1, "filename": "python-dtuf-3.1.0.tar.gz", "has_sig": false, "md5_digest": "cd052803f923840dae0163bc2c00ef4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25453, "upload_time": "2017-12-07T23:29:35", "url": "https://files.pythonhosted.org/packages/40/6a/0a1cef72298f3b543a4a97f76de279d7502e3c8f9e4a1b3ab3e3a8da744f/python-dtuf-3.1.0.tar.gz" } ], "3.2.0": [ { "comment_text": "", "digests": { "md5": "451d34791e7968fe86c421c6a706f75e", "sha256": "1dd079a0066fd6bc45b8a1ebdb73b896fbf6e80aed32595e773d44dc5070a6aa" }, "downloads": -1, "filename": "python-dtuf-3.2.0.tar.gz", "has_sig": false, "md5_digest": "451d34791e7968fe86c421c6a706f75e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25500, "upload_time": "2018-06-25T11:02:53", "url": "https://files.pythonhosted.org/packages/71/52/a1959d3c157c05965124069a49eac4f6d049800cb1a3d012ed24336a6010/python-dtuf-3.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "451d34791e7968fe86c421c6a706f75e", "sha256": "1dd079a0066fd6bc45b8a1ebdb73b896fbf6e80aed32595e773d44dc5070a6aa" }, "downloads": -1, "filename": "python-dtuf-3.2.0.tar.gz", "has_sig": false, "md5_digest": "451d34791e7968fe86c421c6a706f75e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25500, "upload_time": "2018-06-25T11:02:53", "url": "https://files.pythonhosted.org/packages/71/52/a1959d3c157c05965124069a49eac4f6d049800cb1a3d012ed24336a6010/python-dtuf-3.2.0.tar.gz" } ] }