{ "info": { "author": "Konstantin Enchant", "author_email": "sirkonst@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: Pytest", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10" ], "description": "About\n=====\n\nModule allows to compare variables not only by value but by type too. \n\nQuick example:\n\n.. code-block:: python\n\n from typing import Any\n\n from type_comparable import make_type_comparable\n\n response = {\n 'id': 144233,\n 'date_create': '2020-01-25T17:31:33.910803',\n 'important_data': 'important data',\n 'other_data': 'other data',\n 'inner_data': {\n 'field a': 'value a',\n 'field d': 'value b'\n },\n 'line': [1, 'some text', 3]\n }\n assert make_type_comparable(response) == {\n 'id': int, # <-- will compare by type int\n 'date_create': str, # < -- will compare by type str\n 'important_data': 'important data', # <-- exact match as is\n 'other_data': Any, # <-- allow any data,\n 'inner_date': { # <-- also work with nested dictionaries\n 'field a': str,\n 'field b': 'value b'\n }\n 'line': [int, Any, 3] # <- check elements in array\n }\n\n # if you don't want wrap left variable (response) if can wrap right:\n assert response == make_type_comparable(...)\n\nVery useful for tests by pytest.\n\n\nSupport types\n=============\n\nComparable types (which can be passed to `make_type_comparable()`):\n\n- `int`\n- `bool`\n- `str`\n- `list`\n- `dict`\n- other\n\nTypes for comparison:\n\n- all python builtin (`int`, `str`, `bool`, `list`, `dict`, etc.)\n- `object` and `typing.Any` - mean any type but not `None`\n- `typing.Optional` - mean any type and `None`. `Optional[int]` now not supported\n\nAlso you can try to use with your custom types but without guaranteed (verify \nmanually before use in product)\n\n\nKnow issues\n===========\n\nWrapped `None` is not `None` :-(\n\n.. code-block:: python\n\n >> make_type_comparable(None) is None\n False\n\n # use equal\n >> make_type_comparable(None) == None\n True\n\n\nInstall\n=======\n\nFrom PyPi:\n\n.. code-block:: bash\n\n $ pip install type_comparable\n\n\nFrom local:\n\n.. code-block:: bash\n\n # update setuptools\n $ pip install 'setuptools >= 30.4'\n # do install\n $ make install\n # or\n $ pip install .\n\n\nDevelopment\n===========\n\nPrepare and activate virtual environment like:\n\n.. code-block:: bash\n\n $ python3 -m venv .env\n # for bash\n $ source .env/bin/activate\n # for fish\n $ . .env/bin/activate.fish\n \nUpdate pre-install dependencies:\n\n.. code-block:: bash\n\n $ pip install 'setuptools >= 30.4'\n\n\nInstall:\n\n.. code-block:: bash\n\n $ make install_dev\n # or\n $ pip install --editable .[develop]\n\nRun tests:\n\n.. code-block:: bash\n\n $ make test\n # or \n $ pytest tests/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sirkonst/type_comparable", "keywords": "test,tests,pytest,pytest-pluggin,type,typing", "license": "MIT", "maintainer": "Konstantin Enchant", "maintainer_email": "sirkonst@gmail.com", "name": "type-comparable", "package_url": "https://pypi.org/project/type-comparable/", "platform": "", "project_url": "https://pypi.org/project/type-comparable/", "project_urls": { "Homepage": "https://github.com/sirkonst/type_comparable" }, "release_url": "https://pypi.org/project/type-comparable/1/", "requires_dist": [ "wrapt", "typing ; python_version <= \"3.5\"", "wheel ; extra == 'develop'", "twine ; extra == 'develop'", "docutils ; extra == 'develop'", "Pygments ; extra == 'develop'", "pytest ; extra == 'develop'", "pytest-xdist ; extra == 'develop'", "coverage ; extra == 'develop'", "tox ; extra == 'develop'" ], "requires_python": ">=3.5", "summary": "Helper for checking variable equivalence by type. Useful for tests.", "version": "1", "yanked": false, "yanked_reason": null }, "last_serial": 12051551, "releases": { "0.0.19": [ { "comment_text": "", "digests": { "md5": "7d42beeedb1763659fa5dfcd8c7353a6", "sha256": "4c77d722b6e09d2e72ef7fab1e2dced6d7edcc2c0387322aadcfafa766f94b14" }, "downloads": -1, "filename": "type_comparable-0.0.19-py3-none-any.whl", "has_sig": false, "md5_digest": "7d42beeedb1763659fa5dfcd8c7353a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 5913, "upload_time": "2018-02-05T07:24:03", "upload_time_iso_8601": "2018-02-05T07:24:03.652923Z", "url": "https://files.pythonhosted.org/packages/c8/cb/15dd9e095ab71ddc3ce45aa3c359e722bad54acc22d4ab16e7d11d3f75b9/type_comparable-0.0.19-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4d3f3393f4b5d65cc36bf4646f13649b", "sha256": "ad01f24b6e1de4bc516b149b1ac518a12eaa8d88077ec0b81dfba03b0b92d4c5" }, "downloads": -1, "filename": "type_comparable-0.0.19.tar.gz", "has_sig": false, "md5_digest": "4d3f3393f4b5d65cc36bf4646f13649b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 3753, "upload_time": "2018-02-05T07:24:04", "upload_time_iso_8601": "2018-02-05T07:24:04.979944Z", "url": "https://files.pythonhosted.org/packages/6b/82/12344573dcbfa3b951c7241a2152d0c740ed1e30cb357b2dc99e479e9480/type_comparable-0.0.19.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "c28cee7f74e4583c341df35c36a2205f", "sha256": "8c645ea9ccb6379157606b38925a67961b7b7d981050b673549b4d27faa1e0c0" }, "downloads": -1, "filename": "type_comparable-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c28cee7f74e4583c341df35c36a2205f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 6031, "upload_time": "2018-01-30T08:37:39", "upload_time_iso_8601": "2018-01-30T08:37:39.007885Z", "url": "https://files.pythonhosted.org/packages/71/31/7178a7ab27d3b5f9753b2699181582a2a8d424d7654040c3e4eb0aa1a506/type_comparable-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.1.25": [ { "comment_text": "", "digests": { "md5": "a755fe6eacbff736fe5e70eda2b656be", "sha256": "d745e96b1079f8f7379df78237987a5e5c72f8857af4921f953ca6e84585c3a3" }, "downloads": -1, "filename": "type_comparable-0.1.25-py3-none-any.whl", "has_sig": false, "md5_digest": "a755fe6eacbff736fe5e70eda2b656be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 5995, "upload_time": "2018-02-06T15:11:19", "upload_time_iso_8601": "2018-02-06T15:11:19.746049Z", "url": "https://files.pythonhosted.org/packages/2f/60/bda1ed370f3bc076d0bd3d859c4da1366eabe9a483beb2d61f2dbac566b7/type_comparable-0.1.25-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b4ac1e8de9bae816316aba747995a908", "sha256": "e8b1d8653dc30f473251efba487cc786d3cc2834cbd2e94e93b903b8e5962ebd" }, "downloads": -1, "filename": "type_comparable-0.1.25.tar.gz", "has_sig": false, "md5_digest": "b4ac1e8de9bae816316aba747995a908", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 3831, "upload_time": "2018-02-06T15:11:20", "upload_time_iso_8601": "2018-02-06T15:11:20.885799Z", "url": "https://files.pythonhosted.org/packages/41/bd/d59b6262ea247252f3585827a3fa73eda218f4731ea24c3d60ab41ae2f05/type_comparable-0.1.25.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "aeb4d07469f39a238a4166347c7f040e", "sha256": "54e8fa1a307c7e1d4fe1a12e46ca3338db343ca694807d9a48cd73abebf0b986" }, "downloads": -1, "filename": "type_comparable-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "aeb4d07469f39a238a4166347c7f040e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 5943, "upload_time": "2018-02-16T10:07:19", "upload_time_iso_8601": "2018-02-16T10:07:19.725002Z", "url": "https://files.pythonhosted.org/packages/e1/57/601c39a40f47c82b4d22b75fab17b67f7a4f729cf928dfb393a07a5872b3/type_comparable-0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "abe728a30d8e877d9c8376cbb3a573f5", "sha256": "de8ed5d317344319c42f7c3fb381eb9494640fcd878865735630f84625727797" }, "downloads": -1, "filename": "type_comparable-0.2.tar.gz", "has_sig": false, "md5_digest": "abe728a30d8e877d9c8376cbb3a573f5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 3475, "upload_time": "2018-02-16T10:07:21", "upload_time_iso_8601": "2018-02-16T10:07:21.770843Z", "url": "https://files.pythonhosted.org/packages/2c/b7/ac8201ca66f01c8aa737cd22c43d6f2c6bccefac90f602fc76c5064d5e08/type_comparable-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3": [ { "comment_text": "", "digests": { "md5": "3bc1b5e598af0f9ffe9ea9c12b658a90", "sha256": "d09c3a1b1e5eed32ce2b2e68057b7b28ca734ef8427aede53eddb039e8a5b61c" }, "downloads": -1, "filename": "type_comparable-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3bc1b5e598af0f9ffe9ea9c12b658a90", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 3891, "upload_time": "2018-09-12T18:04:05", "upload_time_iso_8601": "2018-09-12T18:04:05.705749Z", "url": "https://files.pythonhosted.org/packages/ac/49/85e2ab979ebf3025b179f852996434dd9e1f0b6aceefb12fbdddc12f5710/type_comparable-0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d07a97dce495bffb917b4b69535c764f", "sha256": "bf82f73172486120037618cf8236bf37bf867be810c15d9c57ab343d725acdfd" }, "downloads": -1, "filename": "type_comparable-0.3.tar.gz", "has_sig": false, "md5_digest": "d07a97dce495bffb917b4b69535c764f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 4223, "upload_time": "2018-09-12T18:04:06", "upload_time_iso_8601": "2018-09-12T18:04:06.914812Z", "url": "https://files.pythonhosted.org/packages/cc/e6/77e501f1e3e9b9c4a2bd6670c2285cd48134da4b604344dcd7c769c102c2/type_comparable-0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.dev9": [ { "comment_text": "", "digests": { "md5": "498717a27df33e957ce852497a1cb091", "sha256": "08a6c190b16da639f6191a9e6e382037dd000e6457ccabadd39ab1caee349abc" }, "downloads": -1, "filename": "type_comparable-0.3.dev9-py3-none-any.whl", "has_sig": false, "md5_digest": "498717a27df33e957ce852497a1cb091", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 3950, "upload_time": "2018-09-12T17:58:12", "upload_time_iso_8601": "2018-09-12T17:58:12.328400Z", "url": "https://files.pythonhosted.org/packages/3b/46/eef5184a704df5e79e2eaa1685c6ac3f0f3e7133ec7f486c93b50b384e3b/type_comparable-0.3.dev9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "16bba73e0e77ceb8d64ea5fc598cf46c", "sha256": "e71d6ca8c494a3f1fc2bfa64b8ed96054d0c54bcdde9a88ca6077ec2c5212667" }, "downloads": -1, "filename": "type_comparable-0.3.dev9.tar.gz", "has_sig": false, "md5_digest": "16bba73e0e77ceb8d64ea5fc598cf46c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 4236, "upload_time": "2018-09-12T17:58:13", "upload_time_iso_8601": "2018-09-12T17:58:13.569578Z", "url": "https://files.pythonhosted.org/packages/3b/0f/78d2effe35572af1e32f1a71ce87638fc86204954e454254e5df93c592e3/type_comparable-0.3.dev9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4": [ { "comment_text": "", "digests": { "md5": "bc29db2aa7e41cca3bb3f57ac0bd7085", "sha256": "241b74ec48f1915902c3f5bcaae3b1eea262645886d5c7d65d4bd2515d968d65" }, "downloads": -1, "filename": "type_comparable-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "bc29db2aa7e41cca3bb3f57ac0bd7085", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 4736, "upload_time": "2019-10-23T12:18:27", "upload_time_iso_8601": "2019-10-23T12:18:27.886364Z", "url": "https://files.pythonhosted.org/packages/4b/67/e59358747c591c84e3ee9a9f97238ee710a72cc39edc06e0df5abb27c7f6/type_comparable-0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "eae2ccd7368ecb2c2de902c0594eb915", "sha256": "1e5bd6e451849be34458ed65228ca8a48b5ff8660cdf6db14e8c6963110af581" }, "downloads": -1, "filename": "type_comparable-0.4.tar.gz", "has_sig": false, "md5_digest": "eae2ccd7368ecb2c2de902c0594eb915", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 4433, "upload_time": "2019-10-23T12:18:29", "upload_time_iso_8601": "2019-10-23T12:18:29.761292Z", "url": "https://files.pythonhosted.org/packages/3e/a0/132270d382d5e326b5d083af9d7b2127585707e14a83a7596cc0717fd22d/type_comparable-0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1": [ { "comment_text": "", "digests": { "md5": "b3ca2f633fb45ad5ade4929c2568282b", "sha256": "4cd6dab5a07379081b0c736689ccc4a1077f9e22238f2dfe322466ff826e0984" }, "downloads": -1, "filename": "type_comparable-1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3ca2f633fb45ad5ade4929c2568282b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 4727, "upload_time": "2021-11-17T19:49:12", "upload_time_iso_8601": "2021-11-17T19:49:12.275242Z", "url": "https://files.pythonhosted.org/packages/59/f6/63686fe544fc8b4cbd14b66f903f4b5148a2434dca72f19584082ad5c14d/type_comparable-1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ad68bec79320b8274e8449d15fc09c9e", "sha256": "778bb71d4d81c5834513dbabb3513e458930a321a04b106e3b7641395c8612e3" }, "downloads": -1, "filename": "type_comparable-1.tar.gz", "has_sig": false, "md5_digest": "ad68bec79320b8274e8449d15fc09c9e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4902, "upload_time": "2021-11-17T19:49:14", "upload_time_iso_8601": "2021-11-17T19:49:14.169952Z", "url": "https://files.pythonhosted.org/packages/37/9b/c0e2d3d6afe110db28d3a1850b1a93c11e8fc5014759d570c73ae1815e3b/type_comparable-1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b3ca2f633fb45ad5ade4929c2568282b", "sha256": "4cd6dab5a07379081b0c736689ccc4a1077f9e22238f2dfe322466ff826e0984" }, "downloads": -1, "filename": "type_comparable-1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3ca2f633fb45ad5ade4929c2568282b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 4727, "upload_time": "2021-11-17T19:49:12", "upload_time_iso_8601": "2021-11-17T19:49:12.275242Z", "url": "https://files.pythonhosted.org/packages/59/f6/63686fe544fc8b4cbd14b66f903f4b5148a2434dca72f19584082ad5c14d/type_comparable-1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ad68bec79320b8274e8449d15fc09c9e", "sha256": "778bb71d4d81c5834513dbabb3513e458930a321a04b106e3b7641395c8612e3" }, "downloads": -1, "filename": "type_comparable-1.tar.gz", "has_sig": false, "md5_digest": "ad68bec79320b8274e8449d15fc09c9e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4902, "upload_time": "2021-11-17T19:49:14", "upload_time_iso_8601": "2021-11-17T19:49:14.169952Z", "url": "https://files.pythonhosted.org/packages/37/9b/c0e2d3d6afe110db28d3a1850b1a93c11e8fc5014759d570c73ae1815e3b/type_comparable-1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }