{ "info": { "author": "silverback", "author_email": "hello@clivern.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "PyValitron\n==========\n\nPyValitron is a light-weight python inputs validation library.\n\n[![Build Status](https://travis-ci.org/silverbackhq/pyvalitron.svg?branch=master)](https://travis-ci.org/silverbackhq/pyvalitron)\n[![PyPI version](https://badge.fury.io/py/pyvalitron.svg)](https://badge.fury.io/py/pyvalitron)\n\nInstallation\n------------\nTo install PyValitron run this command:\n```\npip3 install pyvalitron\n```\n\nUsage\n-----\nAfter installing the library, Read the following usage criteria:\n\n#### Validate Values:\n\nTo validate a list of values:\n```python\nfrom pyvalitron.form import Form\n\nform = Form({\n 'test_field1': {\n 'value': 'Hello World',\n 'validate': {\n 'length_between': {\n 'param': [1, 12],\n 'error': 'Input lenght must be between 1 and 12 characters'\n }\n }\n },\n 'test_field2': {\n 'value': 'Hello World',\n 'validate': {\n 'length_between': {\n 'param': [1, 9],\n 'error': 'Input lenght must be between 1 and 9 characters'\n }\n }\n }\n})\nform.process()\nerrors = form.get_errors()\nprint(errors['test_field2']) # Input lenght must be between 1 and 9 characters\n```\n\n#### Sanitize Values:\n\nTo sanitize a list of values:\n```python\nfrom __future__ import print_function\nfrom pyvalitron.form import Form\n\n\nform = Form({\n 'test_field': {\n 'value': 'Hello& W\"or\"ld
.',\n 'sanitize': {\n 'escape': {}\n }\n }\n})\nform.process()\ninputs = form.get_inputs()\nprint(inputs['test_field']) # {'is_exact': False, 'svalue': 'Hello& W"or"ld<br>.', 'sanitize': {'escape': {}}, 'value': 'Hello& W\"or\"ld
.'}\nprint(inputs['test_field']['is_exact']) # False\nprint(inputs['test_field']['svalue']) # Hello& W"or"ld<br>.\nprint(inputs['test_field']['value']) # Hello& W\"or\"ld
.\n```\n```python\nfrom __future__ import print_function\nfrom pyvalitron.form import Form\n\n\nform = Form({\n 'test_field': {\n 'value': 'Hello World.',\n 'sanitize': {\n 'escape': {}\n }\n }\n})\nform.process()\ninputs = form.get_inputs()\nprint(inputs['test_field']) # {'is_exact': True, 'svalue': 'Hello World.', 'sanitize': {'escape': {}}, 'value': 'Hello World.'}\nprint(inputs['test_field']['is_exact']) # True\nprint(inputs['test_field']['svalue']) # Hello World.\nprint(inputs['test_field']['value']) # Hello World.\n```\n\n#### Validate & Sanitize Values:\n\nTo validate and sanitize a list of values:\n```python\nfrom __future__ import print_function\nfrom pyvalitron.form import Form\n\n\nform = Form({\n 'test_field': {\n 'value': 'hello@clivern.com',\n 'sanitize': {\n 'escape': {}\n },\n 'validate': {\n 'email': {\n 'error': 'Please provide a valid email.'\n }\n }\n }\n})\nform.process()\ninputs = form.get_inputs()\nerrors = form.get_errors()\nprint(errors) # {'test_field': []}\nprint(errors['test_field']) # []\nprint(inputs['test_field']) # {'status': True, 'is_exact': True, 'value': 'hello@clivern.com', 'sanitize': {'escape': {}}, 'svalue': 'hello@clivern.com', 'validate': {'email': {'error': 'Please provide a valid email.'}}}\nprint(inputs['test_field']['status']) # True\nprint(inputs['test_field']['is_exact']) # True\nprint(inputs['test_field']['value']) # hello@clivern.com\nprint(inputs['test_field']['svalue']) # hello@clivern.com\n```\n```python\nfrom __future__ import print_function\nfrom pyvalitron.form import Form\n\n\nform = Form({\n 'test_field': {\n 'value': 'hello@cliv@ern.com',\n 'sanitize': {\n 'escape': {}\n },\n 'validate': {\n 'email': {\n 'error': 'Please provide a valid email.'\n }\n }\n }\n})\nform.process()\ninputs = form.get_inputs()\nerrors = form.get_errors()\nprint(errors) # {'test_field': ['Please provide a valid email.']}\nprint(errors['test_field']) # ['Please provide a valid email.']\nprint(inputs['test_field']) # {'status': False, 'is_exact': True, 'value': 'hello@cliv@ern.com', 'sanitize': {'escape': {}}, 'svalue': 'hello@cliv@ern.com', 'validate': {'email': {'error': 'Please provide a valid email.'}}}\nprint(inputs['test_field']['status']) # False\nprint(inputs['test_field']['is_exact']) # True\nprint(inputs['test_field']['value']) # hello@cliv@ern.com\nprint(inputs['test_field']['svalue']) # hello@cliv@ern.com\n```\n\n#### Using With Frameworks:\n\nFlask Framework\n```python\nfrom flask import Flask\nfrom flask import request\nfrom pyvalitron.form import Form\n\n\napp = Flask(__name__)\n\n@app.route(\"/\")\ndef hello():\n form = Form({\n 'test_field1': {\n 'value': request.args.get('test_field1'),\n 'validate': {\n 'length_between': {\n 'param': [1, 12],\n 'error': 'Input lenght must be between 1 and 12 characters'\n }\n }\n },\n 'test_field2': {\n 'value': request.args.get('test_field2'),\n 'validate': {\n 'length_between': {\n 'param': [1, 9],\n 'error': 'Input lenght must be between 1 and 9 characters'\n }\n }\n }\n }, 'values')\n form.process()\n errors = form.get_errors()\n if 'Input lenght must be between 1 and 9 characters' in errors['test_field2']:\n return 'error'\n else:\n return 'success'\n\nif __name__ == \"__main__\":\n app.run(debug=True)\n```\n\n#### Validators List:\n\nHere is a list of all available validators:\n\n* `empty`: Validate if input or a value is empty.\n* `not_empty`: Validate if input or a value is not empty.\n* `length_between`: Validate if input or a value length is between provided lengths. It requires two parameters `[from_length, to_length]` like `[1, 13]`.\n* `min_length`: Validate if input or a value min lenght is like provided one. It requires one parameter `[min_length]` like `[1]`.\n* `max_length`: Validate if input or a value max lenght is like provided one. It requires one parameter `[max_length]` like `[12]`.\n* `exact_length`: Validate if input or a value lenght is equal to provided one. It requires one parameter `[exact_length]` like `[9]`.\n* `greater_than`: Validate if input or a value is greater than provided one. It requires one parameter `[number]` like `[5]`.\n* `greater_than_equal`: Validate if input or a value is greater than or equal provided one. It requires one parameter `[number]` like `[4]`.\n* `less_than`: Validate if input or a value is less than provided one. It requires one parameter `[number]` like `[5]`.\n* `less_than_equal`: Validate if input or a value is less than or equal provided one. It requires one parameter `[number]` like `[5]`.\n* `equal`: Validate if input or a value is equal to provided one. It requires one parameter `[number]` like `[5]`.\n* `same_as`: Validate if input or a value is same as provided one. It requires one parameter `[text]` like `['Hello World']`\n* `any_of`: Validate if input or a value is any of the provided list. It requires one parameter `[[options]]` like `[1,5,'text']`.\n* `all_of`: Validate if input or a value is all of the provided list. It requires one parameter `[[options]]` like `[1,5,'text']`.\n* `none_of`: Validate if input or a value is none of the provided list. It requires one parameter `[[options]]` like `[1,5,'text']`.\n* `alpha`: Validate if input or a value is alphabetical.\n* `alpha_numeric`: Validate if input or a value is alphanumeric.\n* `digit`: Validate if input or a value is digits.\n* `email`: Validate if input or a value is email.\n* `emails`: Validate if input or a value is a list of emails. It requires one parameter `[separator]` like `[',']`.\n* `url`: Validate if input or a value is a URL. It requires one parameter (a list of protocols) `[[protocols]]` like `[['http', 'https']]`.\n* `ip`: Validate if input or a value is IP. It requires one parameter (a list of formats) `[[formats]]` like `['ipv4']`\n* `ipv4`: Validate if input or a value is IPv4.\n* `uuid`: Validate if input or a value is universally unique identifier (UUID)\n* `matches`: Validate if input or a value matches provided regex. It requires one parameter `[regex]` like `[r'^[_a-z0-9-]+$']`.\n\n\n#### Sanitizers List\n\nHere is a list of all available sanitizers:\n\n* `strip`: Strip the input value. It accepts one parameter `[[chars]]` like `[[',', '.', '\\s']]`.\n* `lstrip`: Left strip the input value. It accepts one parameter `[[chars]]` like `[[',', '.', '\\s']]`.\n* `rstrip`: Right strip the input value. It accepts one parameter `[[chars]]` like `[[',', '.', '\\s']]`.\n* `escape`: Escape the input value to prevent evil scripts. It accepts one parameter (a list of chars to escape). currently it support these characters `['&', '\"', '\\'', '>', '<']`.\n\n\n#### Custom Validators\n\nTo define a new validator:\n```python\nfrom pyvalitron.validator import Validator\nfrom pyvalitron.form import Form\n\n\nclass MyValidator(Validator):\n\n def username(self):\n if not isinstance(self._input, (str)):\n return False\n current_input = self._input.strip()\n if len(current_input) > 5 and current_input.isalpha():\n return True\n return False\n\n def otherrule(self):\n return True\n\n #...and so one\n\n\nform = Form()\nform.add_validator(MyValidator())\nform.add_inputs({\n 'user_name': {\n 'value': '',\n 'validate': {\n 'username': {\n 'error': 'Invalid Username'\n }\n }\n }\n})\nform.process()\nerrors = form.get_errors() #{'user_name': ['Invalid Username']}\n```\n\n#### Custom Sanitizers\n\nTo define a new sanitizer:\n```python\nfrom __future__ import print_function\nfrom pyvalitron.sanitizer import Sanitizer\nfrom pyvalitron.form import Form\n\nclass MySanitizer(Sanitizer):\n\n def clear_spaces(self):\n if not isinstance(self._input, (str)):\n self._sinput = str(self._input)\n else:\n self._sinput = self._input\n\n self._sinput = self._sinput.replace(\" \", \"\")\n return self._sinput\n\n def lower_case(self):\n if not isinstance(self._input, (str)):\n self._sinput = str(self._input)\n else:\n self._sinput = self._input\n self._sinput = self._sinput.lower()\n return self._sinput\n\nform = Form({\n 'test_field': {\n 'value': 'Hello World',\n 'sanitize': {\n 'clear_spaces':{},\n 'lower_case': {}\n }\n }\n}, 'values')\nform.add_sanitizer(MySanitizer())\nform.process()\ninputs = form.get_inputs()\nprint(inputs['test_field']['svalue']) #helloworld\n```\n\nMisc\n====\n\nChangelog\n----------\nVersion 1.1.3:\n```\nFix issue with validation extensions.\n```\n\nVersion 1.1.2:\n```\nFix import issues.\n```\n\nVersion 1.1.1:\n```\nNew Validation Rules.\nAdd python lint check.\n```\n\nVersion 1.0.0:\n```\nInitial Release.\n```\n\nAcknowledgements\n----------------\n\n\u00a9 2019, Silverback. Released under [MIT License](https://opensource.org/licenses/mit-license.php).\n\n**PyValitron** is authored and maintained by [@silverbackhq](http://github.com/silverbackhq).\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/silverbackhq/pyvalitron", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyvalitron", "package_url": "https://pypi.org/project/pyvalitron/", "platform": "", "project_url": "https://pypi.org/project/pyvalitron/", "project_urls": { "Homepage": "https://github.com/silverbackhq/pyvalitron" }, "release_url": "https://pypi.org/project/pyvalitron/1.1.3/", "requires_dist": null, "requires_python": "", "summary": "A Python Inputs Validation Library.", "version": "1.1.3" }, "last_serial": 4896429, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "fd0052c328bfa1670915c59dce630d3d", "sha256": "321c40dc10f1063ab23ad861196d6a22ac3901c96b9a75be05b3d62d563b1f92" }, "downloads": -1, "filename": "PyValitron-1.0.0.zip", "has_sig": false, "md5_digest": "fd0052c328bfa1670915c59dce630d3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15428, "upload_time": "2016-04-22T14:41:26", "url": "https://files.pythonhosted.org/packages/5c/af/329f0524a4f97ec869036e6358b9ebe823f06da3229010430cd302687d1d/PyValitron-1.0.0.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "903ecbf706289a7e38533d444e287f41", "sha256": "3a5ebca93cf1363eb6c7c72cfa25fd3f968b3407a1cd881d0f370251145f8493" }, "downloads": -1, "filename": "pyvalitron-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "903ecbf706289a7e38533d444e287f41", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4346, "upload_time": "2019-03-03T18:32:33", "url": "https://files.pythonhosted.org/packages/21/b0/11c5b0af27e55d78d390042d85f5186b3040963434a1640554c8765bb956/pyvalitron-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15df3aaab924ddb4360fb61d82e79903", "sha256": "1bf3162a403e60700645d5c161b79a904f81eb4214febe3f51de343b34016bac" }, "downloads": -1, "filename": "pyvalitron-1.1.0.tar.gz", "has_sig": false, "md5_digest": "15df3aaab924ddb4360fb61d82e79903", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4284, "upload_time": "2019-03-03T18:32:35", "url": "https://files.pythonhosted.org/packages/2d/cf/3cde919f8ec7075537df8e2a1141e32435d3678777235ed5235447d50112/pyvalitron-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "3ae02f6380e9b7b4d07d5d00c660037d", "sha256": "de747e3e294cfe29743c4d8266ebd7a5829a935222c10260ab7632c1c6443f87" }, "downloads": -1, "filename": "pyvalitron-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3ae02f6380e9b7b4d07d5d00c660037d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4343, "upload_time": "2019-03-03T18:36:00", "url": "https://files.pythonhosted.org/packages/94/6d/331f3d111a3645d050feaa896a93520d081626f4091eb468ac4b5a61897b/pyvalitron-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3feaf09a3a949da1d12fdd89315a0196", "sha256": "8d2a0b9acb7ba941d00eed862ef36bea3a0034a675453fd92771b97971a76936" }, "downloads": -1, "filename": "pyvalitron-1.1.1.tar.gz", "has_sig": false, "md5_digest": "3feaf09a3a949da1d12fdd89315a0196", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4285, "upload_time": "2019-03-03T18:36:02", "url": "https://files.pythonhosted.org/packages/a0/8d/1399d6f608b77690272bc378fe28d1ef88ac99c0b3af5749e0d396156e73/pyvalitron-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "26c050ec1fddd4f9780c7a5976742fb2", "sha256": "de4949b2b211c3346aa4ebb4d7c064fe8012847ca1413388b24bc3182f434e51" }, "downloads": -1, "filename": "pyvalitron-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "26c050ec1fddd4f9780c7a5976742fb2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8379, "upload_time": "2019-03-04T20:35:57", "url": "https://files.pythonhosted.org/packages/ce/88/f44338370a19c41111aa95d2bf95d29fc462672a35cba416364ed68977c7/pyvalitron-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e1848443f930c50069b71e16abbc04c", "sha256": "5df5cfd22fdd60a6b477d89b23e83a1349d759ff351a1f8d6bb31285a80cb4b9" }, "downloads": -1, "filename": "pyvalitron-1.1.2.tar.gz", "has_sig": false, "md5_digest": "9e1848443f930c50069b71e16abbc04c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9162, "upload_time": "2019-03-04T20:35:58", "url": "https://files.pythonhosted.org/packages/00/31/307b277803590d40a2a972b5522f1177d4547419ad6ccd6cd6cd012869ac/pyvalitron-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "4aca61744c83dec948de189da9880be5", "sha256": "4d3005f929aba51203b841a610054cdf1e3dfc5cc1cafd806e1cf1bcb2f7b2a1" }, "downloads": -1, "filename": "pyvalitron-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4aca61744c83dec948de189da9880be5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8399, "upload_time": "2019-03-04T22:25:08", "url": "https://files.pythonhosted.org/packages/2a/00/c71922192246ae57567386e37636102b5b8dae81898c7c3ca2080588d6f1/pyvalitron-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2ec78ee4dcf02ffcd736d986a94be80", "sha256": "66d0cfdfd05c4db365e4afd02be6046b1bc1f1d24b4fbd3c7bfb67cb96c71674" }, "downloads": -1, "filename": "pyvalitron-1.1.3.tar.gz", "has_sig": false, "md5_digest": "d2ec78ee4dcf02ffcd736d986a94be80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9213, "upload_time": "2019-03-04T22:25:10", "url": "https://files.pythonhosted.org/packages/b6/5a/6cfa08da7dc86bd6e22fe8a02f342050f856f5c34e592cde6b1909839ee2/pyvalitron-1.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4aca61744c83dec948de189da9880be5", "sha256": "4d3005f929aba51203b841a610054cdf1e3dfc5cc1cafd806e1cf1bcb2f7b2a1" }, "downloads": -1, "filename": "pyvalitron-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4aca61744c83dec948de189da9880be5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8399, "upload_time": "2019-03-04T22:25:08", "url": "https://files.pythonhosted.org/packages/2a/00/c71922192246ae57567386e37636102b5b8dae81898c7c3ca2080588d6f1/pyvalitron-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2ec78ee4dcf02ffcd736d986a94be80", "sha256": "66d0cfdfd05c4db365e4afd02be6046b1bc1f1d24b4fbd3c7bfb67cb96c71674" }, "downloads": -1, "filename": "pyvalitron-1.1.3.tar.gz", "has_sig": false, "md5_digest": "d2ec78ee4dcf02ffcd736d986a94be80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9213, "upload_time": "2019-03-04T22:25:10", "url": "https://files.pythonhosted.org/packages/b6/5a/6cfa08da7dc86bd6e22fe8a02f342050f856f5c34e592cde6b1909839ee2/pyvalitron-1.1.3.tar.gz" } ] }