# validpeas
Small library to create structured validations
## Example
```python
# Elemental validators
@processor_from_validator
@make_validator()
def is_string(data: Any) -> bool:
return isinstance(data, str)
@processor_from_validator
@make_validator()
def is_valid_json(json_string: str) -> bool:
try:
loads(json_string)
return True
except ValueError:
return False
@processor_from_validator
@make_validator()
def has_numbers_field(data: dict) -> bool:
return "numbers" in data
@processor_from_validator
@make_validator()
def is_list(data: Any) -> bool:
return isinstance(data, list)
@processor_from_validator
@make_validator()
def is_integer(data: Any) -> bool:
return isinstance(data, int)
@processor_from_validator
@make_validator()
def length_is_greater_than_5(data: list) -> bool:
return len(data) > 5
@processor_from_validator
@make_validator()
def ascending_pair(numbers: tuple[int, int]) -> bool:
return numbers[0] < numbers[1]
# Composite validators
@make_composite_processor()
def all_list_items_are_integers(numbers: list[Any]) -> list[ValidationResult]:
return list(map(is_integer, numbers))
@make_composite_processor()
def is_in_ascending_order(numbers: list[int]) -> list[ValidationResult]:
return list(map(ascending_pair, pairwise(numbers)))
@make_composite_processor()
def main_validator(data: Any) -> list[ValidationResult]:
is_string_result = is_string(data)
is_valid_json_result = is_valid_json(data, dependencies=[is_string_result])
json_data = loads(data) if is_valid_json_result.passed else None
has_numbers_field_result = has_numbers_field(
json_data, dependencies=[is_valid_json_result]
)
numbers = json_data["numbers"] if has_numbers_field_result.passed else None
is_list_result = is_list(numbers, dependencies=[has_numbers_field_result])
length_is_greater_than_5_result = length_is_greater_than_5(
numbers, dependencies=[is_list_result]
)
all_list_items_are_integers_result = all_list_items_are_integers(
numbers, dependencies=[is_list_result]
)
is_in_ascending_order_result = is_in_ascending_order(
numbers, dependencies=[all_list_items_are_integers_result]
)
return [
is_string_result,
is_valid_json_result,
has_numbers_field_result,
is_list_result,
length_is_greater_than_5_result,
all_list_items_are_integers_result,
is_in_ascending_order_result,
]
samples = [
5,
"gfdgsgfsggfds",
'{"asdf": [1, 2, 3, 5, 4]}',
'{"numbers": [1, 2, 3]}',
'{"numbers": [1, 2, 3, 4, 5, "a"]}',
'{"numbers": [1, 2, 3, "b"]}',
'{"numbers": [1, 2, 3, 4, 6, 5, 7, 8, 9, 10]}',
'{"numbers": [1, 2, 3, 4, 5, 6]}',
]
for sample in samples:
result = main_validator(sample)
print(human_text_result_report(result))
print()
```
Raw data
{
"_id": null,
"home_page": "https://github.com/jmriddell/validpeas",
"name": "validpeas",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "validation",
"author": "Juan Ezequiel Molina Riddell",
"author_email": "jmriddell@protonmain.ch",
"download_url": "https://files.pythonhosted.org/packages/05/86/48a543cd4d992a78eb31389cd52dd59559c9781180e431b9b00d678710f7/validpeas-0.2.tar.gz",
"platform": null,
"description": "# validpeas\nSmall library to create structured validations\n\n\n## Example\n\n```python\n# Elemental validators\n\n\n@processor_from_validator\n@make_validator()\ndef is_string(data: Any) -> bool:\n return isinstance(data, str)\n\n\n@processor_from_validator\n@make_validator()\ndef is_valid_json(json_string: str) -> bool:\n try:\n loads(json_string)\n return True\n except ValueError:\n return False\n\n\n@processor_from_validator\n@make_validator()\ndef has_numbers_field(data: dict) -> bool:\n return \"numbers\" in data\n\n\n@processor_from_validator\n@make_validator()\ndef is_list(data: Any) -> bool:\n return isinstance(data, list)\n\n\n@processor_from_validator\n@make_validator()\ndef is_integer(data: Any) -> bool:\n return isinstance(data, int)\n\n\n@processor_from_validator\n@make_validator()\ndef length_is_greater_than_5(data: list) -> bool:\n return len(data) > 5\n\n\n@processor_from_validator\n@make_validator()\ndef ascending_pair(numbers: tuple[int, int]) -> bool:\n return numbers[0] < numbers[1]\n\n\n# Composite validators\n\n\n@make_composite_processor()\ndef all_list_items_are_integers(numbers: list[Any]) -> list[ValidationResult]:\n return list(map(is_integer, numbers))\n\n\n@make_composite_processor()\ndef is_in_ascending_order(numbers: list[int]) -> list[ValidationResult]:\n return list(map(ascending_pair, pairwise(numbers)))\n\n\n@make_composite_processor()\ndef main_validator(data: Any) -> list[ValidationResult]:\n is_string_result = is_string(data)\n\n is_valid_json_result = is_valid_json(data, dependencies=[is_string_result])\n\n json_data = loads(data) if is_valid_json_result.passed else None\n\n has_numbers_field_result = has_numbers_field(\n json_data, dependencies=[is_valid_json_result]\n )\n\n numbers = json_data[\"numbers\"] if has_numbers_field_result.passed else None\n\n is_list_result = is_list(numbers, dependencies=[has_numbers_field_result])\n\n length_is_greater_than_5_result = length_is_greater_than_5(\n numbers, dependencies=[is_list_result]\n )\n all_list_items_are_integers_result = all_list_items_are_integers(\n numbers, dependencies=[is_list_result]\n )\n\n is_in_ascending_order_result = is_in_ascending_order(\n numbers, dependencies=[all_list_items_are_integers_result]\n )\n\n return [\n is_string_result,\n is_valid_json_result,\n has_numbers_field_result,\n is_list_result,\n length_is_greater_than_5_result,\n all_list_items_are_integers_result,\n is_in_ascending_order_result,\n ]\n\n\nsamples = [\n 5,\n \"gfdgsgfsggfds\",\n '{\"asdf\": [1, 2, 3, 5, 4]}',\n '{\"numbers\": [1, 2, 3]}',\n '{\"numbers\": [1, 2, 3, 4, 5, \"a\"]}',\n '{\"numbers\": [1, 2, 3, \"b\"]}',\n '{\"numbers\": [1, 2, 3, 4, 6, 5, 7, 8, 9, 10]}',\n '{\"numbers\": [1, 2, 3, 4, 5, 6]}',\n]\n\nfor sample in samples:\n result = main_validator(sample)\n print(human_text_result_report(result))\n print()\n```\n",
"bugtrack_url": null,
"license": "",
"summary": "Tools for structured validations",
"version": "0.2",
"project_urls": {
"Homepage": "https://github.com/jmriddell/validpeas"
},
"split_keywords": [
"validation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "71909b90cab997755184aa76be5404e613f37f96ad5e7adf3df853606d88b0b1",
"md5": "851c1ae04fb622986bae9ffd5c839a55",
"sha256": "2a71cc3f43defc8b6fe00734c9160802b8d6398f9334ea1afe05241f9961a650"
},
"downloads": -1,
"filename": "validpeas-0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "851c1ae04fb622986bae9ffd5c839a55",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 4693,
"upload_time": "2024-02-12T15:33:19",
"upload_time_iso_8601": "2024-02-12T15:33:19.044566Z",
"url": "https://files.pythonhosted.org/packages/71/90/9b90cab997755184aa76be5404e613f37f96ad5e7adf3df853606d88b0b1/validpeas-0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "058648a543cd4d992a78eb31389cd52dd59559c9781180e431b9b00d678710f7",
"md5": "ba6eaaf03f864ef6c23ccf5a9da91e3d",
"sha256": "ec950aef9cf854eb542c88faefaf5b88fcc8ea780dcb15d01c8c1d05ffc57aef"
},
"downloads": -1,
"filename": "validpeas-0.2.tar.gz",
"has_sig": false,
"md5_digest": "ba6eaaf03f864ef6c23ccf5a9da91e3d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4370,
"upload_time": "2024-02-12T15:33:19",
"upload_time_iso_8601": "2024-02-12T15:33:19.970618Z",
"url": "https://files.pythonhosted.org/packages/05/86/48a543cd4d992a78eb31389cd52dd59559c9781180e431b9b00d678710f7/validpeas-0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-12 15:33:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jmriddell",
"github_project": "validpeas",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "validpeas"
}