{ "info": { "author": "Adam Kaufman", "author_email": "kaufman.blue@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Software Development", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Testing" ], "description": "hatchery\n========\n\n|Latest Version| |Build Status| |Coverage Status|\n\nA helper for continuous delivery of python packages\n\nWhat is the problem, exactly?\n-----------------------------\n\nPython's packaging and distribution scheme is really designed for manual\nintervention, most notably as regards versions. In your typical project,\nthe version is hardcoded *somewhere* in the source tree, and the project\nhistory will be littered with messages like \"bumped version to x.y.\"\nIsn't this what tagging is for? Also, why should a work in progress be\ngiven a version number in the first place? It seems backwards. It also\nis solvable.\n\nAside from that major issue, there are a number of minor annoyances that\narise when handling python projects in github. Chief among these is the\nproblem of README files. Github clearly prefers ``README.md`` files, and\nthe markdown syntax widely available and very natural to use. Pypi, on\nthe other hand, requires the use of ``README.rst`` files (or at least\nthat format) in order to display on the project's main site. I find this\nmore difficult to work with and, regardless, one should be able to use\none's preferred README syntax. Converting from one to the other is\ndoable, so it should also be simple.\n\nFinally, when doing any kind of modification of source files on the fly\n(a build process) it is important that the package tree be untouched.\nThis is largely due to the fact that an automated tagging process\n(critical to CD) falls down when the working copy is dirty. As such,\nautomated management of a working directory which can be safely ignored\nin VCS is an integrated part of ``hatchery``.\n\nCore features\n-------------\n\n- Isolation of all source manipulations to a working directory\n (``.hatchery.work``)\n- On-the-fly version management using the popular ``_version.py``\n specification method\n- Logic to make sure that only pypi-accepted (see\n `PEP-386 `__) versions are\n used\n- Optional on-the-fly readme conversion from ``md`` to ``rst``\n- Notion of \"tasks\" which must be run in a particular order\n- Dictate as little project structure as possible (see below)\n\nProject prerequisites\n---------------------\n\nAs of the time of this writing, there are a few prerequisites that a\nproject must meet in order to integrate with ``hatchery``:\n\n- The project should consist of a single root package which contains\n all of the python logic. That package can be as large or as small as\n is needed, containing as many subpackages as you like, but there must\n only be one.\n- There are some code requirements in ``setup.py`` and\n ``._version.py``. Run ``hatchery check`` for more\n information. And don't worry, if these prereqs aren't met,\n ``hatchery`` will tell you about it instead of doing something wonky.\n- In order to make use of some of the features (running tests,\n registering and uploading releases of your project), you will have to\n maintain a configuration file. More information below.\n\nTop-level project\n~~~~~~~~~~~~~~~~~\n\n``hatchery`` automatically infers the name of top-level package during\noperation based on the layout of the file system, and it expects there\nto be exactly one. In order for this to work properly, your project\nneeds to look like this:\n\n::\n\n # the project directory is the path you cloned to\n project_directory/\n\n .git/\n\n .hatchery.yml\n\n ...\n\n # the package name can be whatever you want, so long as it's not \"tests\"\n package_name/\n\n __init__.py\n\n ...\n\n # the \"tests\" directory is where your tests are stored, and will be ignored when determining\n # the top-level package -- any other directories which contain an __init__.py and are not\n # children of package_name will cause the inference to fail\n tests/\n\n __init__.py\n\n ...\n\nSo, if you want your tests in a python package, make sure it's called\n``tests``. If there are two python packages which are not named\n``tests``, ``hatchery`` will throw an error. This is in service of a\nunified package version. In order for ``setup.py`` (and ``setuptools``)\nto infer the project version from the package safely, there should only\nbe one package from which to infer.\n\nInstallation\n------------\n\n::\n\n $ pip install hatchery\n\nAs always, it is strongly recommended that you use this inside of a\nvirtual environment.\n\nConfiguration\n-------------\n\nAs previously mentioned, in order to take full advantage of what\n``hatchery`` has to offer, there is a little configuration that is\nrequired...and I do mean a little. There are a number of parameters\navailable, but most of them can just be left to their default values:\n\n+------------+----------------+--------+\n| Parameter | Default value | Usage |\n+============+================+========+\n| ``auto_pus | ``False`` | Automa |\n| h_tag`` | | ticall |\n| | | y |\n| | | run |\n| | | the |\n| | | tag-an |\n| | | d-push |\n| | | logic |\n| | | after |\n| | | a |\n| | | succes |\n| | | sful |\n| | | upload |\n| | | operat |\n| | | ion |\n+------------+----------------+--------+\n| ``create_w | ``True`` | Create |\n| heel`` | | a |\n| | | wheel |\n| | | along |\n| | | with |\n| | | the |\n| | | source |\n| | | distri |\n| | | bution |\n| | | during |\n| | | the |\n| | | packag |\n| | | ing |\n| | | step |\n+------------+----------------+--------+\n| ``git_remo | ``'origin'`` | The |\n| te_name`` | | name |\n| | | of the |\n| | | remote |\n| | | to |\n| | | push |\n| | | to |\n| | | when |\n| | | pushin |\n| | | g |\n| | | a git |\n| | | tag |\n+------------+----------------+--------+\n| ``pypi_rep | ``None`` | String |\n| ository`` | | parame |\n| | | ter |\n| | | descri |\n| | | bing |\n| | | which |\n| | | pypi |\n| | | index |\n| | | server |\n| | | to |\n| | | upload |\n| | | packag |\n| | | es |\n| | | to. It |\n| | | actual |\n| | | ly |\n| | | refers |\n| | | to an |\n| | | alias |\n| | | which |\n| | | must |\n| | | be |\n| | | define |\n| | | d |\n| | | in |\n| | | your |\n| | | `pypir |\n| | | c |\n| | | file < |\n| | | https: |\n| | | //docs |\n| | | .pytho |\n| | | n.org/ |\n| | | 3.5/di |\n| | | stutil |\n| | | s/pack |\n| | | ageind |\n| | | ex.htm |\n| | | l#the- |\n| | | pypirc |\n| | | -file> |\n| | | `__ |\n+------------+----------------+--------+\n| ``readme_t | ``True`` | Conver |\n| o_rst`` | | t |\n| | | a |\n| | | README |\n| | | .md |\n| | | file |\n| | | to |\n| | | README |\n| | | .rst |\n| | | on the |\n| | | fly if |\n| | | the |\n| | | former |\n| | | is |\n| | | detect |\n| | | ed |\n| | | and |\n| | | the |\n| | | latter |\n| | | is |\n| | | not. |\n| | | This |\n| | | featur |\n| | | e |\n| | | requir |\n| | | es |\n| | | ``pand |\n| | | oc`` |\n| | | (OS-le |\n| | | vel |\n| | | depend |\n| | | ency) |\n| | | ... so |\n| | | if you |\n| | | do not |\n| | | want |\n| | | to |\n| | | depend |\n| | | on |\n| | | ``pand |\n| | | oc``, |\n| | | set to |\n| | | ``Fals |\n| | | e`` |\n| | | and |\n| | | this |\n| | | featur |\n| | | e |\n| | | won't |\n| | | be |\n| | | used. |\n+------------+----------------+--------+\n| ``test_com | ``None`` | A list |\n| mand`` | | of |\n| | | arbitr |\n| | | ary |\n| | | shell |\n| | | comman |\n| | | ds |\n| | | that |\n| | | should |\n| | | be run |\n| | | during |\n| | | the |\n| | | test |\n| | | task. |\n| | | If any |\n| | | of |\n| | | them |\n| | | fails, |\n| | | the |\n| | | test |\n| | | will |\n| | | be |\n| | | consid |\n| | | ered |\n| | | a |\n| | | failur |\n| | | e. |\n+------------+----------------+--------+\n\nThese parameters should be defined in `yaml\nformat `__ in the file\n``.hatchery.yml`` in the root of your project. If you want to make any\nof them global across all your projects, you can also choose to define\nthem in ``~/.hatchery/hatchery.yml``; just remember that the\nproject-level file's values will always win!\n\nA minimal ``.hatchery.yml`` might look like this:\n\n.. code:: yaml\n\n ---\n\n pypi_repository: pypi\n\n test_command:\n - tox\n\nSee ``.hatchery.yml`` in this repository for a contextual example.\n\nAside: there are lots of different opinions about how best to test one's\ncode. There are many frameworks, and many ways to execute them. Allowing\nusers to have complete control over this was a key design decision. You\nwant to use ``tox``? Go for it! Prefer using ``py.test`` directly? Fine\nby me. Think ``pylint`` is important? Throw it on there! The point is,\nchoose what testing feedback is important to you, and ``hatchery`` will\nfaithfully execute it for you.\n\nPrivate pypi repositories\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nNew feature alert! If you specify a full address of a pypi server as a\nvalue for ``pypi_repository``, ``hatchery`` will attempt to upload to\nthat server, bypassing the pypirc file entirely. **This will only work\nfor anonymous-upload servers, and cannot be used for interaction with\npublic servers such as pypi.python.org!** Example:\n\n.. code:: yaml\n\n pypi_repository: https://pypi.mydomain.com\n\nExamples\n--------\n\nMake sure you have all of the prerequisites in place\n\n::\n\n $ hatchery check\n\nRun all tests defined in configuration\n\n::\n\n $ hatchery clean test\n\nRegister your project with the pypi repository defined in configuration\n\n::\n\n $ hatchery register\n\nCreate packages (with markdown -> rst conversion)\n\n::\n\n $ hatchery package --release-version=1.2.3\n\nUpload your packages to the pypi repository defined in configuration\n\n::\n\n $ hatchery upload\n\nString everything together in one go!\n\n::\n\n $ hatchery clean register test package upload --release-version=1.2.3\n\nFind out what other great features you're missing out on\n\n::\n\n $ hatchery help\n\nPostscript\n----------\n\nI wrote this utility because it helps me to work in the way in which I\nam most productive. It will not be perfect for everyone...not yet. If\nyou think there's something missing that would help you find your happy\npath, please open up a feature request. Better yet, implement it and\nthrow up a pull request. Feedback is welcome!\n\n.. |Latest Version| image:: https://img.shields.io/pypi/v/hatchery.svg\n :target: https://pypi.python.org/pypi/hatchery\n.. |Build Status| image:: https://travis-ci.org/ajk8/hatchery.svg?branch=master\n :target: https://travis-ci.org/ajk8/hatchery\n.. |Coverage Status| image:: https://coveralls.io/repos/github/ajk8/hatchery/badge.svg?branch=master\n :target: https://coveralls.io/github/ajk8/hatchery?branch=master\n", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/ajk8/hatchery/tarball/0.4.2", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ajk8/hatchery", "keywords": "hatchery build test package upload pypi ci cd continuous delivery development", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "hatchery", "package_url": "https://pypi.org/project/hatchery/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/hatchery/", "project_urls": { "Download": "https://github.com/ajk8/hatchery/tarball/0.4.2", "Homepage": "https://github.com/ajk8/hatchery" }, "release_url": "https://pypi.org/project/hatchery/0.4.2/", "requires_dist": [ "docopt (>=0.6.2)", "funcy (>=1.4)", "gitpython (>=1.0.2)", "microcache (>=0.2)", "pypandoc (>=1.1.3)", "requests (>=2.10.0)", "ruamel.yaml (>=0.11.3)", "setuptools (>=28.8.0)", "six (>=1.10.0)", "twine (>=1.6.5)", "wheel (>=0.26.0)", "workdir (>=0.3.1)" ], "requires_python": "", "summary": "Continuous delivery helpers for python projects", "version": "0.4.2" }, "last_serial": 2595674, "releases": { "0.0": [], "0.1": [ { "comment_text": "", "digests": { "md5": "46dec53e132b3e3c70f689d15c1e4d4c", "sha256": "c997d14f8b955a2b21c132bef49240c40b920ed63a654916f2b5a2baa9833fee" }, "downloads": -1, "filename": "hatchery-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "46dec53e132b3e3c70f689d15c1e4d4c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14874, "upload_time": "2016-03-08T01:31:41", "url": "https://files.pythonhosted.org/packages/b3/b1/8c5eacde93e333c2931f452769a8095cae1ab623491cc8df80e54a204ceb/hatchery-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e8dcf19279162663e3157cf7828de6c", "sha256": "c385bee039da83ed576f1bd49695b66442f4a99a77d3e8f22cac65a2d4544a5f" }, "downloads": -1, "filename": "hatchery-0.1.tar.gz", "has_sig": false, "md5_digest": "6e8dcf19279162663e3157cf7828de6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13863, "upload_time": "2016-03-08T01:31:47", "url": "https://files.pythonhosted.org/packages/92/c9/d6954929bedbe1a1a9e7cd322c12b692808451fbf5b15621e06cb9f19b4a/hatchery-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "0c7c6709d106363ade402dc743e781b7", "sha256": "a30fc94b8f6b1554bf39df31337883bf378cd4a8122e69078dcefcb5dbf8b2ad" }, "downloads": -1, "filename": "hatchery-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0c7c6709d106363ade402dc743e781b7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15074, "upload_time": "2016-05-17T02:10:59", "url": "https://files.pythonhosted.org/packages/ed/a9/554326cca07160c41095108ed660adae26c1fb915aa8a29f6059176d0569/hatchery-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92d8d68d2cde7aaa60c52aceebb6a116", "sha256": "48eb1a7aa70db5d5bd9b46980a8b7b15a8b486058e46daca9139f65777a8df82" }, "downloads": -1, "filename": "hatchery-0.2.tar.gz", "has_sig": false, "md5_digest": "92d8d68d2cde7aaa60c52aceebb6a116", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14357, "upload_time": "2016-05-17T02:11:21", "url": "https://files.pythonhosted.org/packages/f7/12/9c83773b019cfe184baa83dd27a347f43885f071b84f5876cf2777005cd7/hatchery-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "9d87d0a501b06f89455c3f6233dd5b6a", "sha256": "a750b963d835a83a07852c4e545a43134e022472378c0c006830a1a9a22c6630" }, "downloads": -1, "filename": "hatchery-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d87d0a501b06f89455c3f6233dd5b6a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15649, "upload_time": "2016-07-13T18:48:05", "url": "https://files.pythonhosted.org/packages/a5/1d/494a67b074ebdbcf5b5ae5c49a4129682cba017dc9f51ab26c487833ed7e/hatchery-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "280551d0f607d36af558ad08591be110", "sha256": "1badf33e7ca6674d70d5204dcaae9edaab590910a5276d6b45f82a41d97df9d2" }, "downloads": -1, "filename": "hatchery-0.3.tar.gz", "has_sig": false, "md5_digest": "280551d0f607d36af558ad08591be110", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14587, "upload_time": "2016-07-13T18:48:07", "url": "https://files.pythonhosted.org/packages/7b/fa/8784f880f77de82fc7503d33014758369b0bec39127999ff2dc0c93ccc04/hatchery-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "60fadd356a4ca11593b21a9c74a50130", "sha256": "a52dd8d6f7401246bef535607f115eb36cd1a1eabccd421d4e72e769c0977256" }, "downloads": -1, "filename": "hatchery-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "60fadd356a4ca11593b21a9c74a50130", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15773, "upload_time": "2016-07-13T20:20:01", "url": "https://files.pythonhosted.org/packages/d5/de/a39695ae071636e16b93b63863361a4d5c33c5bf95ebeafff66fb674813e/hatchery-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc77eb740566dcfe25cb965c53d0c979", "sha256": "4a076360fca10246175f13c042fae8a2eed8e392c1af57dd8dafa20e56531ec8" }, "downloads": -1, "filename": "hatchery-0.3.1.tar.gz", "has_sig": false, "md5_digest": "dc77eb740566dcfe25cb965c53d0c979", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14682, "upload_time": "2016-07-13T20:20:03", "url": "https://files.pythonhosted.org/packages/03/82/1b7cbd7b949ca720d4830ba0765bbfb3ff6cdaa3535002e3ddcfac2d1b09/hatchery-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "16944d410e69fe1273109646c3b41e29", "sha256": "d966debf5fd7ffdee3147959553ea839f16a2b24b0f4c59d44da8ef416a6f8f1" }, "downloads": -1, "filename": "hatchery-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16944d410e69fe1273109646c3b41e29", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15775, "upload_time": "2016-07-14T14:55:53", "url": "https://files.pythonhosted.org/packages/ea/ae/78b5eeca6d136b356a13d2e8d8b50778c282a23aff69c84d6cf489a91692/hatchery-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "507b531a0ee6c3d9592af72addebe46c", "sha256": "44b7ea4eb58f164ccdadbd3d9853e00e0c679491fb56f3fc068ea1c3450ad1dd" }, "downloads": -1, "filename": "hatchery-0.3.2.tar.gz", "has_sig": false, "md5_digest": "507b531a0ee6c3d9592af72addebe46c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14689, "upload_time": "2016-07-14T14:55:55", "url": "https://files.pythonhosted.org/packages/08/91/832354810b90acd6cd7aeb3457cd0174094bbca6746b4514f5bf5e09fd8e/hatchery-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "14fc5efcb03a67d4e83b03e0b1bb6163", "sha256": "83fad8b316bf8b04df95e6cdd77ff169c27d8adc062870fe68fdf896559e8914" }, "downloads": -1, "filename": "hatchery-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "14fc5efcb03a67d4e83b03e0b1bb6163", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15600, "upload_time": "2016-07-20T13:49:49", "url": "https://files.pythonhosted.org/packages/b7/aa/0b5aed17aabc8db5805a3d51dffb7f341825120d56f4472266869ab0d11d/hatchery-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b94c9297229469543bd3896fe9221211", "sha256": "a0900adadbd6e1a496c5b8f6d7565c015064db15ed5b88bd9d959d7c5a033b16" }, "downloads": -1, "filename": "hatchery-0.3.3.tar.gz", "has_sig": false, "md5_digest": "b94c9297229469543bd3896fe9221211", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14553, "upload_time": "2016-07-20T13:49:50", "url": "https://files.pythonhosted.org/packages/94/0b/1ac21beb1f95f6201eb3bc56ade83420cf7f05dc2bd7df7df26da00285b2/hatchery-0.3.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "9944d4eecf56d325c31e9e672057beaa", "sha256": "f25bdb183cf35d9ee0b4d98e340cdb1a10c180d5e6b217660c4f57950edaa3f6" }, "downloads": -1, "filename": "hatchery-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9944d4eecf56d325c31e9e672057beaa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16154, "upload_time": "2016-11-07T15:44:32", "url": "https://files.pythonhosted.org/packages/f6/33/8b424df03f6d6adf7463fa3692ba6a50f6ce5a0f95ac4a191952d15f216e/hatchery-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7e9bc99af07f6c358e701fc8e3dac4d", "sha256": "c26df548b38dadecc1c517578d8e0a4ea6688486a2c2ba0036358e3c42140012" }, "downloads": -1, "filename": "hatchery-0.4.tar.gz", "has_sig": false, "md5_digest": "d7e9bc99af07f6c358e701fc8e3dac4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15061, "upload_time": "2016-11-07T15:44:34", "url": "https://files.pythonhosted.org/packages/c3/1a/68d36556fd3c0afdc45af46e6b9edd7ed8700ccce1ffb45fda4bc45df63b/hatchery-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "4c97ae58149a7fd17f579b8e5d4a3c15", "sha256": "bbdb19d8351b597b459e78cd7fb5c4fc1e05b6bf03f0decaba7d9d2e8278ab2e" }, "downloads": -1, "filename": "hatchery-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4c97ae58149a7fd17f579b8e5d4a3c15", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16382, "upload_time": "2016-12-14T03:06:35", "url": "https://files.pythonhosted.org/packages/b3/7a/9e80c37ec5c87fea0b5b48c6f35ad60ccc71ccab07685f1e03da5ec18856/hatchery-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "825ab95fcda90ae30b79353b0257e67e", "sha256": "71c1a8cca68509a2570349c038368769cf2f8c672361e066aeff432c85a7b6a3" }, "downloads": -1, "filename": "hatchery-0.4.1.tar.gz", "has_sig": false, "md5_digest": "825ab95fcda90ae30b79353b0257e67e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16010, "upload_time": "2016-12-14T03:06:37", "url": "https://files.pythonhosted.org/packages/e5/a8/2c12cad238314f5f27075df6c62ad4d45217f2009dfdd2c5b2959b651591/hatchery-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "27a4fbf842407015389483368d129a75", "sha256": "528ce7af96aef0d013b99cceac67814624f289d86c3265b3a88773f0c56e07c4" }, "downloads": -1, "filename": "hatchery-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "27a4fbf842407015389483368d129a75", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16434, "upload_time": "2017-01-24T17:14:02", "url": "https://files.pythonhosted.org/packages/1d/73/186b79f11bd6a5df6a34a2b8a301d40655068044ba58bdafff0123be1174/hatchery-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca23b273d531e2f4ac980490ea1c80a5", "sha256": "d5ba1af214282b2c27e9aac6800fcf706b156cd99e79cf3d3a5d80e3456a4a4b" }, "downloads": -1, "filename": "hatchery-0.4.2.tar.gz", "has_sig": false, "md5_digest": "ca23b273d531e2f4ac980490ea1c80a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16042, "upload_time": "2017-01-24T17:14:04", "url": "https://files.pythonhosted.org/packages/14/f1/d8a48fa12b8dc0eab08aada83201cf3342d3d569640412a574bf163ce198/hatchery-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "27a4fbf842407015389483368d129a75", "sha256": "528ce7af96aef0d013b99cceac67814624f289d86c3265b3a88773f0c56e07c4" }, "downloads": -1, "filename": "hatchery-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "27a4fbf842407015389483368d129a75", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16434, "upload_time": "2017-01-24T17:14:02", "url": "https://files.pythonhosted.org/packages/1d/73/186b79f11bd6a5df6a34a2b8a301d40655068044ba58bdafff0123be1174/hatchery-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca23b273d531e2f4ac980490ea1c80a5", "sha256": "d5ba1af214282b2c27e9aac6800fcf706b156cd99e79cf3d3a5d80e3456a4a4b" }, "downloads": -1, "filename": "hatchery-0.4.2.tar.gz", "has_sig": false, "md5_digest": "ca23b273d531e2f4ac980490ea1c80a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16042, "upload_time": "2017-01-24T17:14:04", "url": "https://files.pythonhosted.org/packages/14/f1/d8a48fa12b8dc0eab08aada83201cf3342d3d569640412a574bf163ce198/hatchery-0.4.2.tar.gz" } ] }