{
"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[](https://travis-ci.org/silverbackhq/pyvalitron)\n[](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"
}
]
}