Пример #1
0
)
from flex.datastructures import (
    ValidationDict,
    ValidationList,
)
from .ref import (
    ref_validator, )
from flex.loading.common.schema import (
    schema_schema as common_schema_schema,
    schema_field_validators as common_schema_field_validators,
    schema_non_field_validators as common_schema_non_field_validators,
    properties_schema as common_properties_schema,
    items_schema as common_items_schema,
)

schema_field_validators = ValidationDict()
schema_field_validators.update(common_schema_field_validators)

schema_field_validators.add_property_validator('$ref', ref_validator)

schema_non_field_validators = ValidationDict()
schema_non_field_validators.update(common_schema_non_field_validators)

schema_validator = generate_object_validator(
    schema=common_schema_schema,
    field_validators=schema_field_validators,
    non_field_validators=schema_non_field_validators,
)

#
# Properties.
Пример #2
0
)
from .headers import (
    headers_validator,
)
from .schema import (
    schema_validator,
)


single_response_schema = {
    'type': OBJECT,
    'properties': {
        'description': {
            'type': STRING,
            'required': True,
        },
    },
}


field_validators = ValidationDict()

field_validators.add_property_validator('schema', schema_validator)
field_validators.add_property_validator('headers', headers_validator)


single_response_validator = generate_object_validator(
    schema=single_response_schema,
    field_validators=field_validators,
)
Пример #3
0
from flex.validation.common import (
    generate_object_validator, )
from flex.loading.common.format import (
    format_validator, )
from .description import (
    description_validator, )
from .type import (
    type_validator, )
from .collection_format import (
    collection_format_validator, )

single_header_schema = {
    'type': OBJECT,
}

single_header_field_validators = ValidationDict()
single_header_field_validators.update(common_field_validators)
single_header_field_validators.add_property_validator('description',
                                                      description_validator)
single_header_field_validators.add_property_validator('type', type_validator)
single_header_field_validators.add_property_validator('format',
                                                      format_validator)
single_header_field_validators.add_property_validator(
    'collectionFormat',
    collection_format_validator,
)


@pull_keys_from_obj('type', 'items')
@suffix_reserved_words
def validate_items_required_if_type_arraw(type_, items, **kwargs):
Пример #4
0
    ValidationDict, )
from flex.loading.common.single_parameter import (
    single_parameter_schema,
    single_parameter_field_validators as
    common_single_parameter_field_validators,
    single_parameter_non_field_validators as
    common_single_parameter_non_field_validators,
)
from flex.loading.schema.paths.path_item.operation.responses.single.schema import (
    schema_validator,
    items_validator,
)
from flex.validation.common import (
    generate_object_validator, )

single_parameter_field_validators = ValidationDict()
single_parameter_field_validators.update(
    common_single_parameter_field_validators)

# schema fields
single_parameter_field_validators.add_property_validator(
    'schema', schema_validator)
single_parameter_field_validators.add_property_validator(
    'items', items_validator)

single_parameter_non_field_validators = ValidationDict()
single_parameter_non_field_validators.update(
    common_single_parameter_non_field_validators)

single_parameter_validator = generate_object_validator(
    schema=single_parameter_schema,
Пример #5
0
)
from .max_items import (
    max_items_validator,
    validate_max_items_greater_than_or_equal_to_min_items,
    validate_type_for_max_items,
)
from .unique_items import (
    unique_items_validator,
    validate_type_for_unique_items,
)
from .enum import (
    enum_validator,
)


field_validators = ValidationDict()

field_validators.add_property_validator('multipleOf', multiple_of_validator)
field_validators.add_property_validator('minimum', minimum_validator)
field_validators.add_property_validator('maximum', maximum_validator)
field_validators.add_property_validator('exclusiveMinimum', exclusive_minimum_validator)
field_validators.add_property_validator('exclusiveMaximum', exclusive_maximum_validator)
field_validators.add_property_validator('minLength', min_length_validator)
field_validators.add_property_validator('maxLength', max_length_validator)
field_validators.add_property_validator('pattern', pattern_validator)
field_validators.add_property_validator('minItems', min_items_validator)
field_validators.add_property_validator('maxItems', max_items_validator)
field_validators.add_property_validator('uniqueItems', unique_items_validator)
field_validators.add_property_validator('enum', enum_validator)

Пример #6
0
from flex.loading.common import (
    field_validators as common_field_validators,
    non_field_validators as common_non_field_validators,
    type_validators as common_type_validators,
)

schema_schema = {
    'type': OBJECT,
    'properties': {
        'properties': {
            'type': OBJECT,
        },
    }
}

schema_field_validators = ValidationDict()
schema_field_validators.update(common_field_validators)

schema_field_validators.add_property_validator('format', format_validator)
schema_field_validators.add_property_validator('title', title_validator)
schema_field_validators.add_property_validator('minProperties', min_properties_validator)
schema_field_validators.add_property_validator('maxProperties', max_properties_validator)
schema_field_validators.add_property_validator('required', required_validator)
schema_field_validators.add_property_validator('type', type_validator)
schema_field_validators.add_property_validator('readOnly', read_only_validator)
schema_field_validators.add_property_validator('externalDocs', external_docs_validator)

schema_non_field_validators = ValidationDict()
schema_non_field_validators.update(common_non_field_validators)
schema_non_field_validators.update(common_type_validators)
Пример #7
0
def generate_parameters_validator(api_path, path_definition, parameters,
                                  context, **kwargs):
    """
    Generates a validator function to validate.

    - request.path against the path parameters.
    - request.query against the query parameters.
    - request.headers against the header parameters.
    - TODO: request.body against the body parameters.
    - TODO: request.formData against any form data.
    """
    # TODO: figure out how to merge this with the same code in response
    # validation.
    validators = ValidationDict()
    path_level_parameters = dereference_parameter_list(
        path_definition.get('parameters', []),
        context,
    )
    operation_level_parameters = dereference_parameter_list(
        parameters,
        context,
    )

    all_parameters = merge_parameter_lists(
        path_level_parameters,
        operation_level_parameters,
    )

    # PATH
    in_path_parameters = filter_parameters(all_parameters, in_=PATH)
    validators.add_validator(
        'path',
        chain_reduce_partial(
            attrgetter('path'),
            generate_path_parameters_validator(api_path, in_path_parameters,
                                               context),
        ),
    )

    # QUERY
    in_query_parameters = filter_parameters(all_parameters, in_=QUERY)
    validators.add_validator(
        'query',
        chain_reduce_partial(
            attrgetter('query_data'),
            functools.partial(
                validate_query_parameters,
                query_parameters=in_query_parameters,
                context=context,
            ),
        ),
    )

    # HEADERS
    in_header_parameters = filter_parameters(all_parameters, in_=HEADER)
    validators.add_validator(
        'headers',
        chain_reduce_partial(
            attrgetter('headers'),
            generate_header_validator(in_header_parameters, context),
        ),
    )

    # FORM_DATA
    # in_form_data_parameters = filter_parameters(all_parameters, in_=FORM_DATA)
    # validators.add_validator(
    #     'form_data',
    #     chain_reduce_partial(
    #         attrgetter('data'),
    #         generate_form_data_validator(in_form_data_parameters, context),
    #     )
    # )

    # REQUEST_BODY
    in_request_body_parameters = filter_parameters(all_parameters, in_=BODY)
    validators.add_validator(
        'request_body',
        chain_reduce_partial(
            attrgetter('data'),
            generate_request_body_validator(in_request_body_parameters,
                                            context),
        ))

    return generate_object_validator(field_validators=validators)