validpeas


Namevalidpeas JSON
Version 0.2 PyPI version JSON
download
home_pagehttps://github.com/jmriddell/validpeas
SummaryTools for structured validations
upload_time2024-02-12 15:33:19
maintainer
docs_urlNone
authorJuan Ezequiel Molina Riddell
requires_python
license
keywords validation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.89703s