{ "info": { "author": "Timofey Danshin", "author_email": "t.danshin@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development" ], "description": ".. image:: https://badge.fury.io/py/pyhamcrest-toolbox.svg\n :target: https://badge.fury.io/py/pyhamcrest-toolbox\n\n.. image:: https://readthedocs.org/projects/pyhamcrest-toolbox/badge/?version=latest\n :target: https://pyhamcrest-toolbox.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://api.codeclimate.com/v1/badges/511fa5e42116a9ab746b/maintainability\n :target: https://codeclimate.com/github/ibolit/pyhamcrest_toolbox/maintainability\n :alt: Maintainability\n\n.. image:: http://img.shields.io/pypi/dm/pyhamcrest_toolbox.png?style=flat\n :alt: PyPI Package monthly downloads\n :target: https://pypi.python.org/pypi/PyHamcrest\n\n======================\nPyHamcrest Toolbox\n======================\n\nPyHamcrest is a great thing for writing reusable tests, but sometimes\nwriting your own matchers may be a bit of a chore. This project aims at\nmaking this task easy, fast and even fun (for want of a better word).\n\nTo reiterate the obvious, a test should always do all the checks it has to do,\nand even if some of them fail, the rest should still be run. That way you will\nget a better idea of what's gone wrong with your code, and you will waste\nless time fixing the first of the checks only to find the the second one is\nstill failing, and that means that you should have fixed the first one in a\ndifferent way.\n\nSo, instead of this:\n\n.. code:: python\n\n def test_the_holy_grail():\n the_holy_grail = seek_the_holy_grail()\n assert_that(the_holy_grail.is_holy(), is_(True))\n assert_that(the_holy_grail.depth, greater_than(5))\n assert_that(the_holy_grail.width, greater_than(6))\n assert_that(the_holy_grail.height, greater_than(7))\n\nthis should be written as:\n\n.. code:: python\n\n def test_the_holy_grail():\n the_holy_grail = seek_the_holy_grail()\n assert_that(\n the_holy_grail,\n is_holy()\n .with_depth(greater_than(5))\n .with_width(greater_than(6))\n .with_height(greater_than(7))\n )\n\nor:\n\n.. code:: python\n\n def test_the_holy_grail():\n the_holy_grail = seek_the_holy_grail()\n assert_that(\n the_holy_grail,\n grail(holy=True, width=5))\n\n\nBoth these examples, however, require writing your own matchers. With this toolbox,\nit is easy.\n\nMulticomponentMatcher\n---------------------\nThe ``MulticomponentMatcher`` allows writing the chain-style matchers.\n\nAll you have to do is to write your ``is_holy`` matcher that inherits from the\n``MulticomponentMatcher`` as the backbone. Then you write individual matchers\nfor each of the holy grail properties enhancing them with the\n``MatcherPlugin``, and you register them with the ``is_holy`` matcher.\n\nSo, this is your ``is_holy`` matcher:\n\n.. code:: python\n\n class IsHolyMatcher(MulticomponentMatcher):\n def __init__(self):\n super().__init__()\n\n def is_holy():\n return IsHolyMatcher()\n\nAnd that's it. You don't have to override the usual matcher methods. Everything\nwill be done by the parent class. However, it doesn't do any matching yet, so we\nneed to write the plugins. Let's start with the actual holiness:\n\n.. code:: python\n\n class HolinessMatcher(MatcherPlugin):\n def __init__(is_holy=True):\n super().__init__()\n self.is_holy = is_holy\n\n def component_matches(self, item):\n # the item will be a grail\n return self.is_holy == item.is_holy()\n\n def describe_to(self, description):\n description.append_text(\n \"A grail which is {}holy\".format(\"\" if self.is_holy else \"not \"))\n\n def describe_component_mismatch(self, item, mismatch_description):\n mismatch_description.append_text(\n \"The grail was {}holy\".format(\"\" if item.is_holy() else \"not \"))\n\nAnd then you register it with the main matcher:\n\n.. code:: python\n\n class IsHolyMatcher(MulticomponentMatcher):\n def __init__(self, is_holy):\n super().__init__()\n self.register(HolynessMatcher(is_holy))\n\n def holy(is_holy):\n return IsHolyMatcher(is_holy)\n\nOf course, you could write that ``HolinessMatcher`` logic in your\n``IsHolyMatcher``, but if we have the power of plugins, then why not use it?\n\nFor now, we only have this bit: ``assert_that(the_grail, is_holy())``, and\nnot the ``.with_width(...)`` stuff. So let's write it. I won't go through the\nprocess of writing the plugin for the width as it is rather straightforward,\nbut here's how you register it with the main matcher:\n\n.. code:: python\n\n class IsHolyMatcher(MulticomponentMatcher):\n def __init__(self, is_holy):\n super().__init__()\n self.register(HolinessMatcher(is_holy))\n\n def with_width(self, value):\n return self.register(GrailWidthMatcher(value))\n\n def holy(is_holy):\n return IsHolyMatcher(is_holy)\n\nNow you can do the ``is_holy().with_width(greater_than(5))`` stuff.\n**Note that you have to return** ``self.register(...)`` **from the plugin registering methods**,\nas (a) you might want to chain them, and (b) the result of the chain still\nneeds to be a matcher.\n\nKwargMulticomponentMatcher\n--------------------------\n\nThis matcher allows writing the kwarg-style matchers (as in the second example\nabove), which are more pythonic, but look kind of unnatural when you want to\nmatch against another matcher instead of a plain value. I will show what I mean\nin a minute.\n\nThe general approach is the same as with the multicomponent matcher: you write\nmatcher plugins for your components, and then you register them with your main\nmatcher:\n\n.. code:: python\n\n class GrailMatcher(KwargMulticomponentMatcher):\n def __init__(self, holy=None, width=None):\n self.register_for_kwarg(HolinessMatcher(holy), holy)\n self.register_for_kwarg(GrailWidthMatcher(width), width)\n\nAnd then in your tests you do:\n\n.. code:: python\n\n def test_correct_width_wrong_holiness(self, my_grail):\n assert_that(\n my_grail,\n grail(holy=True, width=4))\n\nAs I said before, this looks more pythonic, however, if you want to check your\nvalues against matchers, and not just plain values (like `width=4` here), your\ncode starts looking a bit strange:\n\n.. code:: python\n\n def test_correct_width_wrong_holiness(self, my_grail):\n assert_that(\n my_grail,\n grail(holy=True, width=greater_than(4)))\n\nMy recommendation is to use the chain-style matchers if you know that your\nmain matcher might be used this way.\n\nDemos\n-----\n\nYou can find the demos for both approaches in the `demo` folder of this repo.\nClone it, install the requirements from `demo/requirements.txt`, and run\n`pytest demo/test_*`\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ibolit/pyhamcrest_toolbox", "keywords": "pyhamcrest,hamcrest,testing,matchers,test,pytest,unittest", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "pyhamcrest-toolbox", "package_url": "https://pypi.org/project/pyhamcrest-toolbox/", "platform": "", "project_url": "https://pypi.org/project/pyhamcrest-toolbox/", "project_urls": { "Homepage": "https://github.com/ibolit/pyhamcrest_toolbox" }, "release_url": "https://pypi.org/project/pyhamcrest-toolbox/0.3.0/", "requires_dist": [ "pyhamcrest (>=1.9)" ], "requires_python": ">=2.7", "summary": "A library that makes writing pyhamcrest matchers easier and more fun.", "version": "0.3.0" }, "last_serial": 4691429, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "2c8caae9880b6abfaaf8335cada0f63f", "sha256": "2e7386b3ad5ba5e19c02627af2024c90a33c004038ea1d79af2e8b52b649f9d4" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2c8caae9880b6abfaaf8335cada0f63f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5162, "upload_time": "2018-12-13T18:54:51", "url": "https://files.pythonhosted.org/packages/b3/f0/ccc13fa0668be2e3768732a1cd078773145ad6d722e7cf10d11d06ca4760/pyhamcrest_toolbox-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea2ecd95332adcfea2eec4e366ad3df2", "sha256": "410825cd7fecedecfee0c3ec93d40ba6499da2df55a8cebab889851ca3aee478" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.0.tar.gz", "has_sig": false, "md5_digest": "ea2ecd95332adcfea2eec4e366ad3df2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3839, "upload_time": "2018-12-13T18:54:53", "url": "https://files.pythonhosted.org/packages/9c/3a/a90ec5443e93cd772317402d05ee3a6770aeaa7314a19edbe700fc2ce115/pyhamcrest_toolbox-0.0.0.tar.gz" } ], "0.0.0a0": [ { "comment_text": "", "digests": { "md5": "addbdb55748e19608969b1402d9aee7e", "sha256": "724191bb8dfcefc6e3efe262bedeb1f26aa5c4eef3dcd6bbdca53c9967732947" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.0a0-py3-none-any.whl", "has_sig": false, "md5_digest": "addbdb55748e19608969b1402d9aee7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5197, "upload_time": "2018-12-13T19:56:54", "url": "https://files.pythonhosted.org/packages/92/48/c170baf306a7a4732748d18f709f8e9d24c200e5d90bf97dec9e6f83c2fc/pyhamcrest_toolbox-0.0.0a0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da530a5183f9ada711c732e03033a6e2", "sha256": "0641381bba3d19d6fb3700db5fd23595a774122ffe406c704d9a522499566aec" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.0a0.tar.gz", "has_sig": false, "md5_digest": "da530a5183f9ada711c732e03033a6e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3863, "upload_time": "2018-12-13T19:56:56", "url": "https://files.pythonhosted.org/packages/c5/fd/19124978aea8bb47212d1f194602686b36409845909e4e2eb994e351feb3/pyhamcrest_toolbox-0.0.0a0.tar.gz" } ], "0.0.1": [ { "comment_text": "", "digests": { "md5": "c492fb4ffaf918edb7b29dba9f994839", "sha256": "1722d086fa57c7ddd121e15a308d16131d3b4f22ca80b6fd1d009a3efe988e9f" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c492fb4ffaf918edb7b29dba9f994839", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5177, "upload_time": "2018-12-13T19:58:33", "url": "https://files.pythonhosted.org/packages/c1/3c/1bec2ac856f179e2ce514ebfaf18fa831d6012112f55cf9529e3ac7c7cc7/pyhamcrest_toolbox-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "613487481732193ffa5985a67bfe7afd", "sha256": "350d5e5f1fc966c36860311b78b66fb217989a67ea5b0c1cdd7ad7bfe682f049" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.1.tar.gz", "has_sig": false, "md5_digest": "613487481732193ffa5985a67bfe7afd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3856, "upload_time": "2018-12-13T19:58:35", "url": "https://files.pythonhosted.org/packages/d5/3d/f4f55b4cb2b2e3403ce9369de6a5a8bd5c11af277d3133d942e650d7147c/pyhamcrest_toolbox-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "478f09d04e41347e1e3d18755782ed19", "sha256": "3d71c663c011333674704cbab08ab997e02ce4d87e6d64e3a1873391681c0a67" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "478f09d04e41347e1e3d18755782ed19", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5175, "upload_time": "2018-12-13T20:01:12", "url": "https://files.pythonhosted.org/packages/06/da/63cb4e01da5fa1486bb5705ecffe3932b587a2afd6a30f290eda611fd5ce/pyhamcrest_toolbox-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "32b37ffc8667236131abe7110b3d8f7a", "sha256": "5f505f0fa8fa6ee1b2657d6f8054208c7d4487e51e84998067df774454004968" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.2.tar.gz", "has_sig": false, "md5_digest": "32b37ffc8667236131abe7110b3d8f7a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3853, "upload_time": "2018-12-13T20:01:14", "url": "https://files.pythonhosted.org/packages/56/e0/3d7a40766af0e07c1ef4eecb68d375b44daf7ef5e0d52939962a0eef6217/pyhamcrest_toolbox-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "41c2b5428b98dd3d616121bc957e7b21", "sha256": "7d46ca0caf311e3fe7942e258d961b10d13da16b63c19a2e8ad350cc7961ffe5" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "41c2b5428b98dd3d616121bc957e7b21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5325, "upload_time": "2018-12-13T20:20:09", "url": "https://files.pythonhosted.org/packages/00/d6/3f3c419919dfd97d6921ccddc2409325c40ea151760072b248704eabfe71/pyhamcrest_toolbox-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b77a50bb8607cabefccb9d88498de68a", "sha256": "f78bb923d8506d9964522e145e4d324176cac5538b66c5f8c4751e18dc3cd46a" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.3.tar.gz", "has_sig": false, "md5_digest": "b77a50bb8607cabefccb9d88498de68a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4037, "upload_time": "2018-12-13T20:20:11", "url": "https://files.pythonhosted.org/packages/78/97/2204e194ef0369d9787ac2ce5fdc6af28f47e293bcf0c5cd01eb70a80dcb/pyhamcrest_toolbox-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "fffd487f6420b54dc14ba28767da7f26", "sha256": "3abbccc95cc8146f5442b5965829fb567cd625eda23a4e017d731ff36ca55c09" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "fffd487f6420b54dc14ba28767da7f26", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5394, "upload_time": "2018-12-14T05:17:50", "url": "https://files.pythonhosted.org/packages/3e/57/3018e5c21ac6c17dc406942dc38b20c27b0719def658d9723b57a0c288cc/pyhamcrest_toolbox-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b898c020b9b2a4406973b9fd98dbbb1e", "sha256": "011c6c5b3d6f27653f5d82187b8db5d97be0f1382f52d3c314e4f102f28b755a" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.0.4.tar.gz", "has_sig": false, "md5_digest": "b898c020b9b2a4406973b9fd98dbbb1e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4084, "upload_time": "2018-12-14T05:17:51", "url": "https://files.pythonhosted.org/packages/53/ca/fa14d7ef00e6b23be3edf7b7422f1df338ea649bcdeb02d5ff928f944875/pyhamcrest_toolbox-0.0.4.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "a70e7a4d1f66631c852a342e054adf0f", "sha256": "18f715fff680c7864c1d11c54994e6e62ce9c7691952f6b09bdc4977ff297120" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a70e7a4d1f66631c852a342e054adf0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 3877, "upload_time": "2018-12-14T17:44:01", "url": "https://files.pythonhosted.org/packages/b9/24/f7281a538e8491f20e9bc8d40bdb3dbc4a3036195d6e6da78b588a7519d2/pyhamcrest_toolbox-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10c8d38f542b2cdd48836b30fa338f47", "sha256": "dbe66d22ab2803854427abf5d20d5880533b90cd0a21a92f9787d22ffac12a67" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.1.0.tar.gz", "has_sig": false, "md5_digest": "10c8d38f542b2cdd48836b30fa338f47", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 2247, "upload_time": "2018-12-14T17:44:02", "url": "https://files.pythonhosted.org/packages/84/d1/7b9088824c82007112b4bca356c80c20bd0efd0bcf01c37249b6a65462e4/pyhamcrest_toolbox-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "4f4a6f5772f45585330683abffdb252b", "sha256": "3a719216cb906404bf122eb50152cd24244677e15b7bebd61dd67a6c8d777258" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4f4a6f5772f45585330683abffdb252b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 5327, "upload_time": "2018-12-14T18:35:28", "url": "https://files.pythonhosted.org/packages/ec/b6/f7e3de02f93a3bd81c8f47ff078bb4411a39b582bc4c7b206832ae6609e0/pyhamcrest_toolbox-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84edd6256c1bfe312f6afeecf490a41a", "sha256": "129700b57c6ea68b4633d055e0c1cbcf46680af8294b5b1f4a57d289a1ca56b5" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.1.1.tar.gz", "has_sig": false, "md5_digest": "84edd6256c1bfe312f6afeecf490a41a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4029, "upload_time": "2018-12-14T18:35:32", "url": "https://files.pythonhosted.org/packages/f7/1b/953172a525823d5a2dbd9571f9031ab905ab8aa5d6ad6cf307c981e85e4e/pyhamcrest_toolbox-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8321c477a07284023881b5b01aba9ae5", "sha256": "f70de8448d68649a9bd149cc0fbf865bf9c098bf60e1d87d87c9c552a514de66" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8321c477a07284023881b5b01aba9ae5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7000, "upload_time": "2018-12-16T19:10:43", "url": "https://files.pythonhosted.org/packages/77/16/e97ef827a2b3d56473897d19097cafaae1b9c021b5b2d834e4cf8e0f93ce/pyhamcrest_toolbox-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05428f43efb477eedd6f6a8368124c25", "sha256": "f2f5aaf4cebe6e2998add57d1767bbb3ce804f79145b95aca6011a9b326975a0" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.2.0.tar.gz", "has_sig": false, "md5_digest": "05428f43efb477eedd6f6a8368124c25", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5124, "upload_time": "2018-12-16T19:10:45", "url": "https://files.pythonhosted.org/packages/23/99/f46f88677afe7c100f38bdd161f7a693583757f93b64bc7a0bd0aefae76a/pyhamcrest_toolbox-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "690dd536408fa737e046e56c98b2f334", "sha256": "e7150a995af8999ba0fb799f8260dc3d5a3f951a7a8d9cdc03d025074f85be2a" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "690dd536408fa737e046e56c98b2f334", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 6992, "upload_time": "2018-12-27T18:05:35", "url": "https://files.pythonhosted.org/packages/d1/ef/76c63fad6166b1c9d9e7c87b26995193351b59cc01718b0a24df789ef787/pyhamcrest_toolbox-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a9a3a842b2cfdbe33ba79da065022a36", "sha256": "4696744ff39d0c361c9bcaaedcd5f59bd9782df213c44fe973485f689ad04869" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a9a3a842b2cfdbe33ba79da065022a36", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5113, "upload_time": "2018-12-27T18:05:37", "url": "https://files.pythonhosted.org/packages/07/3f/457b9932ada681aaf9536c6fa46f7f684c9db3d06e72a3ee5857ed9d2c3c/pyhamcrest_toolbox-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "ee8651ff2d15ccb1032abcbc46c67f25", "sha256": "a1329907d314748c97f0a7e2f2e7b64ca6cad9891693f7862ee1297cfa6fafdf" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ee8651ff2d15ccb1032abcbc46c67f25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7733, "upload_time": "2019-01-13T18:18:49", "url": "https://files.pythonhosted.org/packages/89/ab/014b5b5403167222e31877b52ecde9144a950a9efff512a88bd0b7070813/pyhamcrest_toolbox-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07ad44ac7c59e9c7f17e981ed026d90f", "sha256": "a6d366e4d4463e38feb07c3a1b8d1fb0465266ec1b77814841119fad3935d0ac" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.3.0.tar.gz", "has_sig": false, "md5_digest": "07ad44ac7c59e9c7f17e981ed026d90f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5975, "upload_time": "2019-01-13T18:18:52", "url": "https://files.pythonhosted.org/packages/0f/f3/96b05755128ed4c5a4fc1256455aa4b8015f5c86f180ada11ccf51dc0936/pyhamcrest_toolbox-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ee8651ff2d15ccb1032abcbc46c67f25", "sha256": "a1329907d314748c97f0a7e2f2e7b64ca6cad9891693f7862ee1297cfa6fafdf" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ee8651ff2d15ccb1032abcbc46c67f25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7733, "upload_time": "2019-01-13T18:18:49", "url": "https://files.pythonhosted.org/packages/89/ab/014b5b5403167222e31877b52ecde9144a950a9efff512a88bd0b7070813/pyhamcrest_toolbox-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07ad44ac7c59e9c7f17e981ed026d90f", "sha256": "a6d366e4d4463e38feb07c3a1b8d1fb0465266ec1b77814841119fad3935d0ac" }, "downloads": -1, "filename": "pyhamcrest_toolbox-0.3.0.tar.gz", "has_sig": false, "md5_digest": "07ad44ac7c59e9c7f17e981ed026d90f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5975, "upload_time": "2019-01-13T18:18:52", "url": "https://files.pythonhosted.org/packages/0f/f3/96b05755128ed4c5a4fc1256455aa4b8015f5c86f180ada11ccf51dc0936/pyhamcrest_toolbox-0.3.0.tar.gz" } ] }