{ "info": { "author": "Henrik Andersson", "author_email": "henrik@http418.se", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "> Function argument validation for humans for Python 3!\n\n\n## Highlights\n\n- Straight port from the amazing library [`ow`](https://github.com/sindresorhus/ow/) from Sindre Sorhus\n- Expressive chainable API\n- Pythonic approach via decorator\n- Lots of built-in validations\n- Supports custom validations\n- Written in Python3 with Type hinting\n\n\n## Notes\nSince this is a straight up port from the JavaScript library not all features are available.\nPartly since this is a port and I haven't caught up and also since Python doesn't support all usecases\nas JavaScript does.\n\n## Install\n\n```shell\n$ pip3 install pyow\n```\n\n\n## Usage\n\n```python\nfrom pyow import pyow\n\ndef unicorn(input):\n\tpyow(input, pyow.string.min_length(5))\n\n\t# ...\n\nunicorn(3)\n>>> ArgumentError: 'Expected argument to be of type `str` but received type `int`\n\nunicorn('yo')\n>>> ArgumentError: Expected string to have a minimum length of `3`, got `yo`\n```\n\nor via decorator\n\n```python\n\nfrom pyow.decorator import validate\n\n@validate(\n pyow.string.min_length(5)\n)\ndef unicorn(input):\n return 1\n```\n\n## API\n\n### pyow(value, predicate)\n\nTest if `value` matches the provided `predicate`. Throws an `ArgumentError` if the test fails.\n\n### pyow.is_valid(value, predicate)\n\nReturns `True` if the value matches the predicate, otherwise returns `False`.\n\n### pyow.create(predicate)\n\nCreate a reusable validator.\n\n```python\ncheck_password = pyow.create(pyow.string.min_length(6))\n\ncheck_password('foo')\n>>> ArgumentError: ('Expected string to have a minimum length of `6`, got `foo`')\n```\n\n### pyow.any(predicate: List[Predicate])\n\nReturns a predicate that verifies if the value matches at least one of the given predicates.\n\n```python\npyow('foo', pyow.any(pyow.string.max_length(3), pyow.number))\n```\n\n### pyow.{type}\n\nAll the below types return a predicate. Every predicate has some extra operators that you can use to test the value even more fine-grained.\n\n#### Primitives\n\n- [`string`]()\n- [`number`]()\n- [`boolean`]()\n\n#### Built-in types\n\n- [`list`]()\n- [`set`]()\n- [`dict`]()\n- [`error`]()\n\n### Predicates\n\nThe following predicates are available on every type.\n\n#### nix/isnot\n\nInverts the following predicates.\n\n```python\npyow(1, pyow.number.nix.infinite)\npyow(1, pyow.number.isnot.infinite)\n\npyow('', pyow.string.isnot.empty);\n>>> ArgumentError: [NOT] Expected string to be empty, got ``\n```\n\n#### is_(fn)\n\nUse a custom validation function. Return `True` if the value matches the validation, return `False` if it doesn't.\n\n```python\npyow(1, pyow.number.is_(lambda x: x < 10))\n\npyow(1, pyow.number.is_(lambda x: x > 10))\n>>> ArgumentError: Expected `1` to pass custom validation function\n```\n\nInstead of returning `False`, you can also return a custom error message which results in a failure.\n\n```python\ndef greater_than(max_number: int, x: int):\n\treturn x > max_number or f'Expected `{x}` to be greater than `{max_number}`'\n};\n\npyow(5, pyow.number.is_(lambda x: greater_than(10, x)))\n>>> ArgumentError: Expected `5` to be greater than `10`\n```\n\n\n## Maintainers\n\n- [Henrik Andersson](https://github.com/limelights)\n\n\n## Related\n\n- [@sindresorhus/ow](https://github.com/sindresorhus/ow) - Function argument validation for humans\n\n\n## License\n\nMIT\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/limelights/pyow", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyow", "package_url": "https://pypi.org/project/pyow/", "platform": "", "project_url": "https://pypi.org/project/pyow/", "project_urls": { "Homepage": "https://github.com/limelights/pyow" }, "release_url": "https://pypi.org/project/pyow/0.0.4/", "requires_dist": [ "python-dateutil" ], "requires_python": "", "summary": "A function argument validation for humans", "version": "0.0.4" }, "last_serial": 3984691, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "a3c454eb3dfabdeb9885f89531188686", "sha256": "53627d900ba27184ecae53e5f7c9de31ddb22b68d31c6e1104e5211bcafed572" }, "downloads": -1, "filename": "pyow-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a3c454eb3dfabdeb9885f89531188686", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21880, "upload_time": "2018-06-05T04:33:20", "url": "https://files.pythonhosted.org/packages/dc/5f/925f5e84e48759c3b37f33d7c7983c6869c83244444e48e2adb800a6d45d/pyow-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c489c26573782f9aa23ad36e8a85fd10", "sha256": "b59447054a184034f62f40a1b61a588368b29a3439fccbcd4287c4db72fe8e54" }, "downloads": -1, "filename": "pyow-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c489c26573782f9aa23ad36e8a85fd10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8690, "upload_time": "2018-06-05T04:33:21", "url": "https://files.pythonhosted.org/packages/c1/39/d75ef66bf612ba0fe570072fee521c836d52af8225ac0a473836f586e973/pyow-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "bcfced12777d37a6d38b6815ab49c485", "sha256": "1737a52cd64f7031c9b15455317f596e758873d836e6bb4debab8f033d581a4a" }, "downloads": -1, "filename": "pyow-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "bcfced12777d37a6d38b6815ab49c485", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23013, "upload_time": "2018-06-05T06:47:25", "url": "https://files.pythonhosted.org/packages/e4/26/e127ff763fe71537ab83dcd097e7d13631a9dd24a3981a802363161c418d/pyow-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae7ef4a9206d2d42444af998333c5986", "sha256": "4e3de88d206e64b8965b069f659e2af357a48c6fac585e3847d1cda93ad9b01e" }, "downloads": -1, "filename": "pyow-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ae7ef4a9206d2d42444af998333c5986", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9065, "upload_time": "2018-06-05T06:47:27", "url": "https://files.pythonhosted.org/packages/50/54/288853502f133642839db4882458e81845a48eff43d529a9a9370b11147f/pyow-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "fc8df800c6f1e9add4ae0b097a9193f5", "sha256": "af1feb79d7de3a176b1f921d6f9f05570faf1111eb5cb4b33eea3d9648aa4109" }, "downloads": -1, "filename": "pyow-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "fc8df800c6f1e9add4ae0b097a9193f5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24695, "upload_time": "2018-06-06T00:52:45", "url": "https://files.pythonhosted.org/packages/82/db/c8e89e594c3a0fb6e09acb3fd5b6b9acc390b9f0c3c641baebebe1daac7d/pyow-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6198b6226808336ddc73765530763ad", "sha256": "ed50a1822d997e2fba308b1e95524cc4df968e2c6788982af0b6ea22d2ca0008" }, "downloads": -1, "filename": "pyow-0.0.3.tar.gz", "has_sig": false, "md5_digest": "c6198b6226808336ddc73765530763ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10558, "upload_time": "2018-06-06T00:52:47", "url": "https://files.pythonhosted.org/packages/28/88/a603e86afd909e6f0509a1849a742e7c2e702cfb60891bfa20db63cee265/pyow-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "c4956c0987c5dde75933be333260950a", "sha256": "852d73b39ea5cd57deb2d2e572220ac1a7b6278046e0a1e2d9d0a09b6b7781db" }, "downloads": -1, "filename": "pyow-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c4956c0987c5dde75933be333260950a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27492, "upload_time": "2018-06-21T07:12:56", "url": "https://files.pythonhosted.org/packages/f9/29/c2c1d9f4f7000cf2c6da82ac7630eafd8f96e1eae87624c0fd7c1758dbfe/pyow-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f6d49b02ed5d8c9bbe0f8d6baedc68e", "sha256": "8e1911fa586c68dc213eb20fea374ffd2b17ead2bc96dd49e9ff78363fcce009" }, "downloads": -1, "filename": "pyow-0.0.4.tar.gz", "has_sig": false, "md5_digest": "9f6d49b02ed5d8c9bbe0f8d6baedc68e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12683, "upload_time": "2018-06-21T07:12:58", "url": "https://files.pythonhosted.org/packages/da/e6/2160de3f74481e74743565543bcce68c386860d9e4b49425dead027cfdd5/pyow-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c4956c0987c5dde75933be333260950a", "sha256": "852d73b39ea5cd57deb2d2e572220ac1a7b6278046e0a1e2d9d0a09b6b7781db" }, "downloads": -1, "filename": "pyow-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c4956c0987c5dde75933be333260950a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27492, "upload_time": "2018-06-21T07:12:56", "url": "https://files.pythonhosted.org/packages/f9/29/c2c1d9f4f7000cf2c6da82ac7630eafd8f96e1eae87624c0fd7c1758dbfe/pyow-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f6d49b02ed5d8c9bbe0f8d6baedc68e", "sha256": "8e1911fa586c68dc213eb20fea374ffd2b17ead2bc96dd49e9ff78363fcce009" }, "downloads": -1, "filename": "pyow-0.0.4.tar.gz", "has_sig": false, "md5_digest": "9f6d49b02ed5d8c9bbe0f8d6baedc68e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12683, "upload_time": "2018-06-21T07:12:58", "url": "https://files.pythonhosted.org/packages/da/e6/2160de3f74481e74743565543bcce68c386860d9e4b49425dead027cfdd5/pyow-0.0.4.tar.gz" } ] }