payload-validator


Namepayload-validator JSON
Version 0.1.11 PyPI version JSON
download
home_pagehttps://github.com/cwadven/payload-validator
SummaryValidating payload datas for Python
upload_time2024-03-30 12:01:28
maintainercwadven
docs_urlNone
authorcwadven
requires_pythonNone
licenseMIT
keywords input payload validator validate validation data datas python python3 python3.6 python3.7 python3.8 python3.11
VCS
bugtrack_url
requirements flake8 flake8-import-order twine
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ================================
Payload Validator
================================

To validate the payload data.


Quick Start
============

pip install payload-validator


Example Code
=============
CodeSandBox Link:

https://codesandbox.io/p/sandbox/payload-validator-zngckp?file=%2Fmain.py%3A1%2C1


More Example
==============
Example List:

https://github.com/cwadven/payload-validator/blob/master/examples/example1.py


Explain
============

Normal ValidatorErrorContext Usage

using_this_payload.py::

    from datetime import datetime
    from payload_validator.exceptions import (
        InvalidValueError,
        ValidationException,
    )
    from utils import validate_date_parsing
    from payload_validator.validators import PayloadValidator


    def validate_date_parsing(date_str):
        try:
            datetime.strptime(date_str, '%Y-%m-%d')
            return True
        except (TypeError, ValueError):
            return False


    # [ Examples of using validators ]
    # 1. Inherit 'PayloadValidator' and define 'Meta class'
    # 2. Define 'DEFAULT_MANDATORY_ERROR_MESSAGE' in 'PayloadValidator'
    # 3-1. Define 'mandatory_keys' and 'type_of_keys' in 'Meta class'
    # 3-2. 'mandatory_keys' is a 'dictionary' that contains key and error message
    # 3-3. 'type_of_keys' is a 'dictionary' that contains key and type of key
    # 3-4. 'type_of_keys' value of first index can contain 'function' returning 'boolean' accepted
    # 4-1. Define 'validate_{key}' method in 'PayloadValidator'
    # 4-2. 'validate_{key}' validating sequence is top to bottom code written in 'PayloadValidator'
    # 4-3. If 'validate_{key}' raise 'InvalidValueError', it will be added to 'error_context'
    # 4-4. 'InvalidValueError' 'error_value_by_key' input should be 'dictionary' that contains payload key and error message (this message could be iterator)
    # 4-5. 'InvalidValueError' input can contain 'ignore_existing_error_keys' which skip if there is already payload key of error
    # 5. Can override 'common_validate' method to add 'common_validation'
    # 6. Validating Sequence: Mandatory Check -> Type Check -> validate_{key} (top from bottom code) -> common_validate
    # 7. Use 'validate()' method to validate payload or execute 'is_valid()' method to check validation even once
    # 8. 'ValidationException' will raise when error exists

    # [ Extra Information ]
    # you can use 'add_error_context' or 'add_error_and_skip_validation_key'
    # instead of 'InvalidValueError' to define errors

    # 1
    class NewPayloadValidator(PayloadValidator):
        # 2
        DEFAULT_MANDATORY_ERROR_MESSAGE = 'mandatory data missing2'

        class Meta:
            # 3-1, 3-2
            mandatory_keys = {
                'displayable': 'displayable is required',
                'mode': 'mode is always required',
                'amount': 'why are you not setting amount?',
                'minimum_order_value': 'minimum order value is required',
                'applicable_order_types': 'really you are not setting applicable order types?',
                'start_date': 'start date is required',
                'end_date': 'end date is required for your job',
            }
            # 3-1, 3-3
            type_of_keys = {
                'amount': [int, 'integer_type_needs'],
                'minimum_order_value': [int, 'integer_type_needs'],
                'maximum_download_count': [(int, type(None)), 'integer_type_needs or NoneType'],
                # 3-4
                'start_date': [validate_date_parsing, 'need to be date type'],
                'end_date': [validate_date_parsing, 'need to be date type'],
            }

        # 4-1, 4-2
        def validate_hello_world(self):
            if not self.get_payload('displayable'):
                # 4-3, 4-4
                raise InvalidValueError({'displayable': 'displayable is false'})

        # 4-1, 4-2
        def validate_max_length(self):
            if self.get_payload('max_length') <= 0:
                # 4-3, 4-4, 4-5
                raise InvalidValueError(
                    {
                        'max_length': 'min_length should be greater than 0'
                    },
                    ignore_existing_error_keys=['max_length']
                )

        # 5
        def common_validate(self):
            if self.get_payload('max_length') < self.get_payload('min_length'):
                raise InvalidValueError(
                    {
                        'max_length': 'max_length should be greater than min_length',
                        'min_length': 'min_length should be lesser than max_length'
                    },
                )



    validator = NewPayloadValidator({'displayable': True, 'start_date': 1, 'min_length': 10, 'max_length': 0})

    try:
        # 7
        validator.validate()
    except ValidationException as e:
        print(validator.error_context)

    # 8
    if not validator.is_valid():
        print(validator.error_context)

    # [ Result ]
    # {
    #     'mode': ['mode is always required'],
    #     'amount': ['why are you not setting amount?'],
    #     'minimum_order_value': ['minimum order value is required'],
    #     'applicable_order_types': ['really you are not setting applicable order types?'],
    #     'end_date': ['end date is required for your job'],
    #     'start_date': ['need to be date type'],
    #     'max_length': ['min_length should be greater than 0'],
    #     'min_length': ['min_length should be lesser than max_length']
    # }


Custom ValidatorErrorContext Usage

custom_using_this_payload.py::

    from datetime import datetime
    from payload_validator.exceptions import (
        InvalidValueError,
        ValidationException,
    )
    from utils import validate_date_parsing
    from payload_validator.validators import PayloadValidator, ValidatorErrorContext

    def validate_date_parsing(date_str):
        try:
            datetime.strptime(date_str, '%Y-%m-%d')
            return True
        except (TypeError, ValueError):
            return False

    # [ Examples of using validators ]
    # 1. Inherit 'PayloadValidator' and define 'Meta class'
    # 2. Define 'DEFAULT_MANDATORY_ERROR_MESSAGE' in 'PayloadValidator'
    # 3-1. Define 'mandatory_keys' and 'type_of_keys' in 'Meta class'
    # 3-2. 'mandatory_keys' is a 'dictionary' that contains key and error message
    # 3-3. 'type_of_keys' is a 'dictionary' that contains key and type of key
    # 3-4. 'type_of_keys' value of first index can contain 'function' returning 'boolean' accepted
    # 4-1. Define 'validate_{key}' method in 'PayloadValidator'
    # 4-2. 'validate_{key}' validating sequence is top to bottom code written in 'PayloadValidator'
    # 4-3. If 'validate_{key}' raise 'InvalidValueError', it will be added to 'error_context'
    # 4-4. 'InvalidValueError' 'error_value_by_key' input should be 'dictionary' that contains payload key and error message (this message could be iterator)
    # 4-5. 'InvalidValueError' input can contain 'ignore_existing_error_keys' which skip if there is already payload key of error
    # 5. Can override 'common_validate' method to add 'common_validation'
    # 6. Validating Sequence: Mandatory Check -> Type Check -> validate_{key} (top from bottom code) -> common_validate
    # 7. Use 'validate()' method to validate payload or execute 'is_valid()' method to check validation even once
    # 8. 'ValidationException' will raise when error exists

    # [ Extra Information ]
    # you can use 'add_error_context' or 'add_error_and_skip_validation_key'
    # instead of 'InvalidValueError' to define errors

    # Extra: Customize Error Context
    # 'ColorValidatorErrorContext' is a 'PayloadValidator' can return error message with color
    class ColorValidatorErrorContext(ValidatorErrorContext):
        DEFAULT_COLOR = '#FFFFFF'

        def add_error(self, field: str, error: str):
            value = self.setdefault(field, [])
            try:
                error, color = error.split(',')
            except (IndexError, ValueError):
                color = self.DEFAULT_COLOR
            value.append([error, color])


    # 1
    class ColorPayloadValidator(PayloadValidator):
        # 2
        DEFAULT_MANDATORY_ERROR_MESSAGE = 'mandatory data missing2'

        class Meta:
            # 3-1, 3-2
            mandatory_keys = {
                'displayable': 'displayable is required',
                'mode': 'mode is always required',
                'amount': 'why are you not setting amount?',
                'minimum_order_value': 'minimum order value is required',
                'applicable_order_types': 'really you are not setting applicable order types?',
                'start_date': 'start date is required',
                'end_date': 'end date is required for your job',
            }
            # 3-1, 3-3
            type_of_keys = {
                'amount': [int, 'integer_type_needs'],
                'minimum_order_value': [int, 'integer_type_needs'],
                'maximum_download_count': [(int, type(None)), 'integer_type_needs or NoneType'],
                # 3-4
                'start_date': [validate_date_parsing, 'need to be date type'],
                'end_date': [validate_date_parsing, 'need to be date type'],
            }

        # 4-1, 4-2
        def validate_hello_world(self):
            if not self.get_payload('displayable'):
                # 4-3, 4-4
                raise InvalidValueError({'displayable': 'displayable is false,#123456'})

        # 4-1, 4-2
        def validate_max_length(self):
            if self.get_payload('max_length') <= 0:
                # 4-3, 4-4, 4-5
                raise InvalidValueError(
                    {
                        'max_length': 'min_length should be greater than 0,#000000'
                    },
                    ignore_existing_error_keys=['max_length']
                )

        # 5
        def common_validate(self):
            if self.get_payload('max_length') < self.get_payload('min_length'):
                raise InvalidValueError(
                    {
                        'max_length': 'max_length should be greater than min_length,#000000',
                        'min_length': 'min_length should be lesser than max_length,#123123'
                    },
                )


    validator = ColorPayloadValidator(
        {'displayable': True, 'start_date': 1, 'min_length': 10, 'max_length': 0},
        ColorValidatorErrorContext(),
    )

    try:
        # 7
        validator.validate()
    except ValidationException as e:
        print(validator.error_context)

    # 8
    if not validator.is_valid():
        print(validator.error_context)

    # [ Result ]
    # {
    #     'mode': [['mode is always required', '#FFFFFF']],
    #     'amount': [['why are you not setting amount?', '#FFFFFF']],
    #     'minimum_order_value': [['minimum order value is required', '#FFFFFF']],
    #     'applicable_order_types': [['really you are not setting applicable order types?', '#FFFFFF']],
    #     'end_date': [['end date is required for your job', '#FFFFFF']],
    #     'start_date': [['need to be date type', '#FFFFFF']],
    #     'max_length': [['min_length should be greater than 0', '#000000']],
    #     'min_length': [['min_length should be lesser than max_length', '#123123']]
    # }



Extra
========

Issue or Pull Request are welcome.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/cwadven/payload-validator",
    "name": "payload-validator",
    "maintainer": "cwadven",
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "input, payload, validator, validate, validation, data, datas, python, python3, python3.6, python3.7, python3.8, python3.11",
    "author": "cwadven",
    "author_email": "cwadven4@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/54/35/51b3293bc35e80b4e91c06efc4cd713c00e53fff7667d386c998dd23af9a/payload-validator-0.1.11.tar.gz",
    "platform": null,
    "description": "================================\r\nPayload Validator\r\n================================\r\n\r\nTo validate the payload data.\r\n\r\n\r\nQuick Start\r\n============\r\n\r\npip install payload-validator\r\n\r\n\r\nExample Code\r\n=============\r\nCodeSandBox Link:\r\n\r\nhttps://codesandbox.io/p/sandbox/payload-validator-zngckp?file=%2Fmain.py%3A1%2C1\r\n\r\n\r\nMore Example\r\n==============\r\nExample List:\r\n\r\nhttps://github.com/cwadven/payload-validator/blob/master/examples/example1.py\r\n\r\n\r\nExplain\r\n============\r\n\r\nNormal ValidatorErrorContext Usage\r\n\r\nusing_this_payload.py::\r\n\r\n    from datetime import datetime\r\n    from payload_validator.exceptions import (\r\n        InvalidValueError,\r\n        ValidationException,\r\n    )\r\n    from utils import validate_date_parsing\r\n    from payload_validator.validators import PayloadValidator\r\n\r\n\r\n    def validate_date_parsing(date_str):\r\n        try:\r\n            datetime.strptime(date_str, '%Y-%m-%d')\r\n            return True\r\n        except (TypeError, ValueError):\r\n            return False\r\n\r\n\r\n    # [ Examples of using validators ]\r\n    # 1. Inherit 'PayloadValidator' and define 'Meta class'\r\n    # 2. Define 'DEFAULT_MANDATORY_ERROR_MESSAGE' in 'PayloadValidator'\r\n    # 3-1. Define 'mandatory_keys' and 'type_of_keys' in 'Meta class'\r\n    # 3-2. 'mandatory_keys' is a 'dictionary' that contains key and error message\r\n    # 3-3. 'type_of_keys' is a 'dictionary' that contains key and type of key\r\n    # 3-4. 'type_of_keys' value of first index can contain 'function' returning 'boolean' accepted\r\n    # 4-1. Define 'validate_{key}' method in 'PayloadValidator'\r\n    # 4-2. 'validate_{key}' validating sequence is top to bottom code written in 'PayloadValidator'\r\n    # 4-3. If 'validate_{key}' raise 'InvalidValueError', it will be added to 'error_context'\r\n    # 4-4. 'InvalidValueError' 'error_value_by_key' input should be 'dictionary' that contains payload key and error message (this message could be iterator)\r\n    # 4-5. 'InvalidValueError' input can contain 'ignore_existing_error_keys' which skip if there is already payload key of error\r\n    # 5. Can override 'common_validate' method to add 'common_validation'\r\n    # 6. Validating Sequence: Mandatory Check -> Type Check -> validate_{key} (top from bottom code) -> common_validate\r\n    # 7. Use 'validate()' method to validate payload or execute 'is_valid()' method to check validation even once\r\n    # 8. 'ValidationException' will raise when error exists\r\n\r\n    # [ Extra Information ]\r\n    # you can use 'add_error_context' or 'add_error_and_skip_validation_key'\r\n    # instead of 'InvalidValueError' to define errors\r\n\r\n    # 1\r\n    class NewPayloadValidator(PayloadValidator):\r\n        # 2\r\n        DEFAULT_MANDATORY_ERROR_MESSAGE = 'mandatory data missing2'\r\n\r\n        class Meta:\r\n            # 3-1, 3-2\r\n            mandatory_keys = {\r\n                'displayable': 'displayable is required',\r\n                'mode': 'mode is always required',\r\n                'amount': 'why are you not setting amount?',\r\n                'minimum_order_value': 'minimum order value is required',\r\n                'applicable_order_types': 'really you are not setting applicable order types?',\r\n                'start_date': 'start date is required',\r\n                'end_date': 'end date is required for your job',\r\n            }\r\n            # 3-1, 3-3\r\n            type_of_keys = {\r\n                'amount': [int, 'integer_type_needs'],\r\n                'minimum_order_value': [int, 'integer_type_needs'],\r\n                'maximum_download_count': [(int, type(None)), 'integer_type_needs or NoneType'],\r\n                # 3-4\r\n                'start_date': [validate_date_parsing, 'need to be date type'],\r\n                'end_date': [validate_date_parsing, 'need to be date type'],\r\n            }\r\n\r\n        # 4-1, 4-2\r\n        def validate_hello_world(self):\r\n            if not self.get_payload('displayable'):\r\n                # 4-3, 4-4\r\n                raise InvalidValueError({'displayable': 'displayable is false'})\r\n\r\n        # 4-1, 4-2\r\n        def validate_max_length(self):\r\n            if self.get_payload('max_length') <= 0:\r\n                # 4-3, 4-4, 4-5\r\n                raise InvalidValueError(\r\n                    {\r\n                        'max_length': 'min_length should be greater than 0'\r\n                    },\r\n                    ignore_existing_error_keys=['max_length']\r\n                )\r\n\r\n        # 5\r\n        def common_validate(self):\r\n            if self.get_payload('max_length') < self.get_payload('min_length'):\r\n                raise InvalidValueError(\r\n                    {\r\n                        'max_length': 'max_length should be greater than min_length',\r\n                        'min_length': 'min_length should be lesser than max_length'\r\n                    },\r\n                )\r\n\r\n\r\n\r\n    validator = NewPayloadValidator({'displayable': True, 'start_date': 1, 'min_length': 10, 'max_length': 0})\r\n\r\n    try:\r\n        # 7\r\n        validator.validate()\r\n    except ValidationException as e:\r\n        print(validator.error_context)\r\n\r\n    # 8\r\n    if not validator.is_valid():\r\n        print(validator.error_context)\r\n\r\n    # [ Result ]\r\n    # {\r\n    #     'mode': ['mode is always required'],\r\n    #     'amount': ['why are you not setting amount?'],\r\n    #     'minimum_order_value': ['minimum order value is required'],\r\n    #     'applicable_order_types': ['really you are not setting applicable order types?'],\r\n    #     'end_date': ['end date is required for your job'],\r\n    #     'start_date': ['need to be date type'],\r\n    #     'max_length': ['min_length should be greater than 0'],\r\n    #     'min_length': ['min_length should be lesser than max_length']\r\n    # }\r\n\r\n\r\nCustom ValidatorErrorContext Usage\r\n\r\ncustom_using_this_payload.py::\r\n\r\n    from datetime import datetime\r\n    from payload_validator.exceptions import (\r\n        InvalidValueError,\r\n        ValidationException,\r\n    )\r\n    from utils import validate_date_parsing\r\n    from payload_validator.validators import PayloadValidator, ValidatorErrorContext\r\n\r\n    def validate_date_parsing(date_str):\r\n        try:\r\n            datetime.strptime(date_str, '%Y-%m-%d')\r\n            return True\r\n        except (TypeError, ValueError):\r\n            return False\r\n\r\n    # [ Examples of using validators ]\r\n    # 1. Inherit 'PayloadValidator' and define 'Meta class'\r\n    # 2. Define 'DEFAULT_MANDATORY_ERROR_MESSAGE' in 'PayloadValidator'\r\n    # 3-1. Define 'mandatory_keys' and 'type_of_keys' in 'Meta class'\r\n    # 3-2. 'mandatory_keys' is a 'dictionary' that contains key and error message\r\n    # 3-3. 'type_of_keys' is a 'dictionary' that contains key and type of key\r\n    # 3-4. 'type_of_keys' value of first index can contain 'function' returning 'boolean' accepted\r\n    # 4-1. Define 'validate_{key}' method in 'PayloadValidator'\r\n    # 4-2. 'validate_{key}' validating sequence is top to bottom code written in 'PayloadValidator'\r\n    # 4-3. If 'validate_{key}' raise 'InvalidValueError', it will be added to 'error_context'\r\n    # 4-4. 'InvalidValueError' 'error_value_by_key' input should be 'dictionary' that contains payload key and error message (this message could be iterator)\r\n    # 4-5. 'InvalidValueError' input can contain 'ignore_existing_error_keys' which skip if there is already payload key of error\r\n    # 5. Can override 'common_validate' method to add 'common_validation'\r\n    # 6. Validating Sequence: Mandatory Check -> Type Check -> validate_{key} (top from bottom code) -> common_validate\r\n    # 7. Use 'validate()' method to validate payload or execute 'is_valid()' method to check validation even once\r\n    # 8. 'ValidationException' will raise when error exists\r\n\r\n    # [ Extra Information ]\r\n    # you can use 'add_error_context' or 'add_error_and_skip_validation_key'\r\n    # instead of 'InvalidValueError' to define errors\r\n\r\n    # Extra: Customize Error Context\r\n    # 'ColorValidatorErrorContext' is a 'PayloadValidator' can return error message with color\r\n    class ColorValidatorErrorContext(ValidatorErrorContext):\r\n        DEFAULT_COLOR = '#FFFFFF'\r\n\r\n        def add_error(self, field: str, error: str):\r\n            value = self.setdefault(field, [])\r\n            try:\r\n                error, color = error.split(',')\r\n            except (IndexError, ValueError):\r\n                color = self.DEFAULT_COLOR\r\n            value.append([error, color])\r\n\r\n\r\n    # 1\r\n    class ColorPayloadValidator(PayloadValidator):\r\n        # 2\r\n        DEFAULT_MANDATORY_ERROR_MESSAGE = 'mandatory data missing2'\r\n\r\n        class Meta:\r\n            # 3-1, 3-2\r\n            mandatory_keys = {\r\n                'displayable': 'displayable is required',\r\n                'mode': 'mode is always required',\r\n                'amount': 'why are you not setting amount?',\r\n                'minimum_order_value': 'minimum order value is required',\r\n                'applicable_order_types': 'really you are not setting applicable order types?',\r\n                'start_date': 'start date is required',\r\n                'end_date': 'end date is required for your job',\r\n            }\r\n            # 3-1, 3-3\r\n            type_of_keys = {\r\n                'amount': [int, 'integer_type_needs'],\r\n                'minimum_order_value': [int, 'integer_type_needs'],\r\n                'maximum_download_count': [(int, type(None)), 'integer_type_needs or NoneType'],\r\n                # 3-4\r\n                'start_date': [validate_date_parsing, 'need to be date type'],\r\n                'end_date': [validate_date_parsing, 'need to be date type'],\r\n            }\r\n\r\n        # 4-1, 4-2\r\n        def validate_hello_world(self):\r\n            if not self.get_payload('displayable'):\r\n                # 4-3, 4-4\r\n                raise InvalidValueError({'displayable': 'displayable is false,#123456'})\r\n\r\n        # 4-1, 4-2\r\n        def validate_max_length(self):\r\n            if self.get_payload('max_length') <= 0:\r\n                # 4-3, 4-4, 4-5\r\n                raise InvalidValueError(\r\n                    {\r\n                        'max_length': 'min_length should be greater than 0,#000000'\r\n                    },\r\n                    ignore_existing_error_keys=['max_length']\r\n                )\r\n\r\n        # 5\r\n        def common_validate(self):\r\n            if self.get_payload('max_length') < self.get_payload('min_length'):\r\n                raise InvalidValueError(\r\n                    {\r\n                        'max_length': 'max_length should be greater than min_length,#000000',\r\n                        'min_length': 'min_length should be lesser than max_length,#123123'\r\n                    },\r\n                )\r\n\r\n\r\n    validator = ColorPayloadValidator(\r\n        {'displayable': True, 'start_date': 1, 'min_length': 10, 'max_length': 0},\r\n        ColorValidatorErrorContext(),\r\n    )\r\n\r\n    try:\r\n        # 7\r\n        validator.validate()\r\n    except ValidationException as e:\r\n        print(validator.error_context)\r\n\r\n    # 8\r\n    if not validator.is_valid():\r\n        print(validator.error_context)\r\n\r\n    # [ Result ]\r\n    # {\r\n    #     'mode': [['mode is always required', '#FFFFFF']],\r\n    #     'amount': [['why are you not setting amount?', '#FFFFFF']],\r\n    #     'minimum_order_value': [['minimum order value is required', '#FFFFFF']],\r\n    #     'applicable_order_types': [['really you are not setting applicable order types?', '#FFFFFF']],\r\n    #     'end_date': [['end date is required for your job', '#FFFFFF']],\r\n    #     'start_date': [['need to be date type', '#FFFFFF']],\r\n    #     'max_length': [['min_length should be greater than 0', '#000000']],\r\n    #     'min_length': [['min_length should be lesser than max_length', '#123123']]\r\n    # }\r\n\r\n\r\n\r\nExtra\r\n========\r\n\r\nIssue or Pull Request are welcome.\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Validating payload datas for Python",
    "version": "0.1.11",
    "project_urls": {
        "Homepage": "https://github.com/cwadven/payload-validator"
    },
    "split_keywords": [
        "input",
        " payload",
        " validator",
        " validate",
        " validation",
        " data",
        " datas",
        " python",
        " python3",
        " python3.6",
        " python3.7",
        " python3.8",
        " python3.11"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "17664c474e42a41e88af8bf4da69b10fef5a41b138e4a5c68e55a64edddde4f5",
                "md5": "defd6459cf7a5f9478b4a3a63c06d41f",
                "sha256": "83c47a44b08925ddd265deaa19d8d160d57ffeba84fb0c1af5b7dd76b3010d57"
            },
            "downloads": -1,
            "filename": "payload_validator-0.1.11-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "defd6459cf7a5f9478b4a3a63c06d41f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 17832,
            "upload_time": "2024-03-30T12:01:26",
            "upload_time_iso_8601": "2024-03-30T12:01:26.309268Z",
            "url": "https://files.pythonhosted.org/packages/17/66/4c474e42a41e88af8bf4da69b10fef5a41b138e4a5c68e55a64edddde4f5/payload_validator-0.1.11-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "543551b3293bc35e80b4e91c06efc4cd713c00e53fff7667d386c998dd23af9a",
                "md5": "c931af53547c1574949ed7b2cbf3cc75",
                "sha256": "426a8fa8fc5e331c085fdcd54c8822c437c7605cd25846f07f6b603f67c6ba50"
            },
            "downloads": -1,
            "filename": "payload-validator-0.1.11.tar.gz",
            "has_sig": false,
            "md5_digest": "c931af53547c1574949ed7b2cbf3cc75",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 16618,
            "upload_time": "2024-03-30T12:01:28",
            "upload_time_iso_8601": "2024-03-30T12:01:28.033737Z",
            "url": "https://files.pythonhosted.org/packages/54/35/51b3293bc35e80b4e91c06efc4cd713c00e53fff7667d386c998dd23af9a/payload-validator-0.1.11.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-30 12:01:28",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cwadven",
    "github_project": "payload-validator",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "flake8",
            "specs": []
        },
        {
            "name": "flake8-import-order",
            "specs": []
        },
        {
            "name": "twine",
            "specs": []
        }
    ],
    "lcname": "payload-validator"
}
        
Elapsed time: 2.18078s