Пример #1
0
def construct_schema_validators(schema, context):
    """
    Given a schema object, construct a dictionary of validators needed to
    validate a response matching the given schema.

    Special Cases:
        - $ref:
            These validators need to be Lazily evaluating so that circular
            validation dependencies do not result in an infinitely deep
            validation chain.
        - properties:
            These validators are meant to apply to properties of the object
            being validated rather than the object itself.  In this case, we
            need recurse back into this function to generate a dictionary of
            validators for the property.
    """
    validators = ValidationDict()
    if '$ref' in schema:
        validators.add_validator(
            '$ref', SchemaReferenceValidator(schema['$ref'], context),
        )
    if 'properties' in schema:
        for property_, property_schema in schema['properties'].items():
            property_validator = generate_object_validator(
                schema=property_schema,
                context=context,
            )
            validators.add_property_validator(property_, property_validator)
    assert 'context' not in schema
    for key in schema:
        if key in validator_mapping:
            validators.add_validator(key, validator_mapping[key](context=context, **schema))
    return validators
Пример #2
0
def construct_schema_validators(schema, context):
    """
    Given a schema object, construct a dictionary of validators needed to
    validate a response matching the given schema.

    Special Cases:
        - $ref:
            These validators need to be Lazily evaluating so that circular
            validation dependencies do not result in an infinitely deep
            validation chain.
        - properties:
            These validators are meant to apply to properties of the object
            being validated rather than the object itself.  In this case, we
            need recurse back into this function to generate a dictionary of
            validators for the property.
    """
    validators = ValidationDict()
    if '$ref' in schema:
        validators.add_validator(
            '$ref',
            LazyReferenceValidator(schema['$ref'], context),
        )
    if 'properties' in schema:
        for property_, property_schema in schema['properties'].items():
            property_validator = generate_object_validator(
                schema=property_schema,
                context=context,
            )
            validators.add_property_validator(property_, property_validator)
    assert 'context' not in schema
    for key in schema:
        if key in validator_mapping:
            validators.add_validator(
                key, validator_mapping[key](context=context, **schema))
    return validators
Пример #3
0
def generate_header_validator(headers, context, **kwargs):
    """
    Generates a validation function that will validate a dictionary of headers.
    """
    validators = ValidationDict()
    for header_definition in headers:
        header_processor = generate_value_processor(context=context, **header_definition)
        header_validator = generate_object_validator(
            field_validators=construct_header_validators(header_definition, context=context)
        )
        validators.add_property_validator(
            header_definition["name"], chain_reduce_partial(header_processor, header_validator)
        )
    return generate_object_validator(field_validators=validators)
Пример #4
0
def generate_header_validator(headers, context, **kwargs):
    """
    Generates a validation function that will validate a dictionary of headers.
    """
    validators = ValidationDict()
    for header_definition in headers:
        header_processor = generate_value_processor(context=context,
                                                    **header_definition)
        header_validator = generate_object_validator(
            field_validators=construct_header_validators(header_definition,
                                                         context=context), )
        validators.add_property_validator(
            header_definition['name'],
            chain_reduce_partial(
                header_processor,
                header_validator,
            ),
        )
    return generate_object_validator(field_validators=validators)
Пример #5
0
    validate_items_required_if_array_type,
)


single_parameter_schema = {
    'type': OBJECT,
    'required': [
        'name',
        'in',
    ],
}

single_parameter_field_validators = ValidationDict()
single_parameter_field_validators.update(common_field_validators)

single_parameter_field_validators.add_property_validator('in', in_validator)
single_parameter_field_validators.add_property_validator('name', name_validator)
single_parameter_field_validators.add_property_validator('description', description_validator)
single_parameter_field_validators.add_property_validator('required', required_validator)
single_parameter_field_validators.add_property_validator('type', type_validator)
single_parameter_field_validators.add_property_validator('format', format_validator)
single_parameter_field_validators.add_property_validator(
    'collectionFormat', collection_format_validator,
)

single_parameter_non_field_validators = ValidationDict()
single_parameter_non_field_validators.update(common_non_field_validators)
single_parameter_non_field_validators.update(common_type_validators)
single_parameter_non_field_validators.add_validator(
    'default', validate_default_is_of_one_of_declared_types,
)
Пример #6
0
)
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.
#
Пример #7
0
    'host_validator',
    'base_path_validator',
    'schemes_validator',
    'mimetype_validator',
    'paths_validator',
]

swagger_schema = {
    'type': OBJECT,
    'required': [
        'info',
        'paths',
        'swagger',
    ],
}

non_field_validators = ValidationDict()
non_field_validators.add_property_validator('info', info_validator)
non_field_validators.add_property_validator('swagger', swagger_version_validator)
non_field_validators.add_property_validator('host', host_validator)
non_field_validators.add_property_validator('basePath', base_path_validator)
non_field_validators.add_property_validator('schemes', schemes_validator)
non_field_validators.add_property_validator('produces', mimetype_validator)
non_field_validators.add_property_validator('consumes', mimetype_validator)
non_field_validators.add_property_validator('paths', paths_validator)

swagger_schema_validator = generate_object_validator(
    schema=swagger_schema,
    non_field_validators=non_field_validators,
)
Пример #8
0
from flex.constants import OBJECT, STRING
from flex.decorators import skip_if_not_of_type
from flex.validation.common import generate_object_validator

reference_object_schema = {
    "type": OBJECT,
    "additionalProperties": False,
    "required": ["$ref"],
    "properties": {"$ref": {"type": STRING}},
}


@skip_if_not_of_type(STRING)
def validate_reference_pointer(reference, context, **kwargs):
    parts = urlparse.urlparse(reference)
    if any((parts.scheme, parts.netloc, parts.path, parts.params, parts.query)):
        raise ValidationError(MESSAGES["reference"]["unsupported"].format(reference))

    try:
        jsonpointer.resolve_pointer(context, parts.fragment)
    except jsonpointer.JsonPointerException:
        raise ValidationError(MESSAGES["reference"]["undefined"].format(reference))


non_field_validators = ValidationDict()
non_field_validators.add_property_validator("$ref", validate_reference_pointer)

reference_object_validator = generate_object_validator(
    schema=reference_object_schema, non_field_validators=non_field_validators
)
Пример #9
0
    description_validator, )
from .type import (
    type_validator, )
from .collection_format import (
    collection_format_validator, )

single_header_schema = {
    'type': OBJECT,
    'required': [
        'type',
    ]
}

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):
    types = pluralize(type_)
    if ARRAY in types and items is EMPTY:
        raise ValidationError(MESSAGES['required']['required'])
Пример #10
0
__ALL__ = [
    'info_validator',
    'swagger_schema_validators',
    'host_validator',
    'base_path_validator',
    'schemes_validator',
    'mimetype_validator',
    'paths_validator',
]

swagger_schema = {
    'type': OBJECT,
}

non_field_validators = ValidationDict()
non_field_validators.add_property_validator('info', info_validator)
non_field_validators.add_property_validator('swagger',
                                            swagger_version_validator)
non_field_validators.add_property_validator('host', host_validator)
non_field_validators.add_property_validator('basePath', base_path_validator)
non_field_validators.add_property_validator('schemes', schemes_validator)
non_field_validators.add_property_validator('produces', mimetype_validator)
non_field_validators.add_property_validator('consumes', mimetype_validator)
non_field_validators.add_property_validator('paths', paths_validator)

swagger_schema_validator = generate_object_validator(
    schema=swagger_schema,
    non_field_validators=non_field_validators,
)
Пример #11
0

@skip_if_not_of_type(STRING)
def validate_reference_pointer(reference, context, **kwargs):
    parts = urlparse.urlparse(reference)
    if any((parts.scheme, parts.netloc, parts.params, parts.query)):
        raise ValidationError(
            MESSAGES['reference']['unsupported'].format(reference), )

    if parts.path:
        from flex.core import load_source
        if parts.path.startswith('/'):
            context = load_source(parts.path)
        elif 'base_path' in kwargs:
            context = load_source(os.path.join(kwargs['base_path'],
                                               parts.path))
    try:
        jsonpointer.resolve_pointer(context, parts.fragment)
    except jsonpointer.JsonPointerException:
        raise ValidationError(
            MESSAGES['reference']['undefined'].format(reference), )


non_field_validators = ValidationDict()
non_field_validators.add_property_validator('$ref', validate_reference_pointer)

reference_object_validator = generate_object_validator(
    schema=reference_object_schema,
    non_field_validators=non_field_validators,
)
Пример #12
0
    validate_default_is_of_one_of_declared_types, )
from .items import (
    validate_items_required_if_array_type, )

single_parameter_schema = {
    'type': OBJECT,
    'required': [
        'name',
        'in',
    ],
}

single_parameter_field_validators = ValidationDict()
single_parameter_field_validators.update(common_field_validators)

single_parameter_field_validators.add_property_validator('in', in_validator)
single_parameter_field_validators.add_property_validator(
    'name', name_validator)
single_parameter_field_validators.add_property_validator(
    'description', description_validator)
single_parameter_field_validators.add_property_validator(
    'required', required_validator)
single_parameter_field_validators.add_property_validator(
    'type', type_validator)
single_parameter_field_validators.add_property_validator(
    'format', format_validator)
single_parameter_field_validators.add_property_validator(
    'collectionFormat',
    collection_format_validator,
)
Пример #13
0
from flex.datastructures import ValidationDict
from flex.constants import OBJECT, STRING
from flex.validation.common import generate_object_validator
from .headers import headers_validator
from .schema import schema_validator


single_response_schema = {"type": OBJECT, "required": ["description"], "properties": {"description": {"type": STRING}}}


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)
Пример #14
0
from .single import (
    single_response_validator,
)


responses_schema = {
    'type': OBJECT,
}


field_validators = ValidationDict()

field_validators.add_property_validator(
    'default',
    generate_any_validator(
        referenceObject=reference_object_validator,
        responseObject=single_response_validator,
    ),
)


non_field_validators = ValidationList()
non_field_validators.add_validator(
    functools.partial(
        apply_validator_to_object,
        validator=generate_any_validator(
            referenceObject=reference_object_validator,
            responseObject=single_response_validator,
        ),
    )
)
Пример #15
0
    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)


non_field_validators = ValidationDict()
Пример #16
0
)
from .collection_format import (
    collection_format_validator,
)


single_header_schema = {
    'type': OBJECT,
    'required': [
        'type',
    ]
}

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):
    types = pluralize(type_)
    if ARRAY in types and items is EMPTY:
        raise ValidationError(MESSAGES['required']['required'])

Пример #17
0
    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)


schema_non_field_validators.add_validator(
    'default', validate_default_is_of_one_of_declared_types,
Пример #18
0
    collection_format_validator,
    validate_collection_format_based_on_in_value,
)
from flex.loading.common.default import (
    validate_default_is_of_one_of_declared_types, )
from .items import (
    validate_items_required_if_array_type, )

single_parameter_schema = {
    'type': OBJECT,
}

single_parameter_field_validators = ValidationDict()
single_parameter_field_validators.update(common_field_validators)

single_parameter_field_validators.add_property_validator('in', in_validator)
single_parameter_field_validators.add_property_validator(
    'name', name_validator)
single_parameter_field_validators.add_property_validator(
    'description', description_validator)
single_parameter_field_validators.add_property_validator(
    'required', required_validator)
single_parameter_field_validators.add_property_validator(
    'type', type_validator)
single_parameter_field_validators.add_property_validator(
    'format', format_validator)
single_parameter_field_validators.add_property_validator(
    'collectionFormat',
    collection_format_validator,
)
Пример #19
0
            },
        },
        'produces': {
            'type': ARRAY,
            'items': {
                'type': STRING,
            },
        },
        # 'schemes':  # TODO:  Implement this.
        'deprecated': {
            'type': BOOLEAN,
        },
        # 'security':  # TODO:  Implement this.
    },
}


field_validators = ValidationDict()
field_validators.add_property_validator('parameters', parameters_validator)
field_validators.add_property_validator('responses', responses_validator)
field_validators.add_property_validator('externalDocs', external_docs_validator)

non_field_validators = ValidationDict()
non_field_validators.add_property_validator('consumes', mimetype_validator)
non_field_validators.add_property_validator('produces', mimetype_validator)

operation_validator = generate_object_validator(
    schema=operation_schema,
    field_validators=field_validators,
)
Пример #20
0
            parts = urlparse.urlparse(reference)
            if any((parts.scheme, parts.netloc, parts.path, parts.params, parts.query)):
                errors.add_error(
                    reference,
                    MESSAGES['reference']['unsupported'].format(reference),
                )
                continue
            try:
                jsonpointer.resolve_pointer(schema, parts.fragment)
            except jsonpointer.JsonPointerException:
                errors.add_error(
                    reference,
                    MESSAGES['reference']['undefined'].format(reference),
                )


field_validators = ValidationDict()
field_validators.add_property_validator('parameters', parameters_validator)
field_validators.add_property_validator('responses', responses_validator)
field_validators.add_property_validator('definitions', schema_definitions_validator)

non_field_validators = ValidationDict()
non_field_validators.add_validator('definitions', validate_deferred_references)


definitions_validator = generate_object_validator(
    schema=definitions_schema,
    field_validators=field_validators,
    non_field_validators=non_field_validators,
)
Пример #21
0
    read_only_validator,
)
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,
}

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)


schema_non_field_validators.add_validator(
    'default', validate_default_is_of_one_of_declared_types,
Пример #22
0
    STRING,
)
from flex.validation.common import (
    generate_object_validator, )
from .headers import (
    headers_validator, )
from .schema import (
    schema_validator, )

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

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,
)
Пример #23
0
    schema_validator,
)
from .headers import (
    headers_validator,
)


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


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,
)
Пример #24
0
            if parts.path:
                from flex.core import load_source
                if parts.path.startswith('/'):
                    schema = load_source(parts.path)
                elif 'base_path' in kwargs:
                    schema = load_source(
                        os.path.join(kwargs['base_path'], parts.path))
            try:
                jsonpointer.resolve_pointer(schema, parts.fragment)
            except jsonpointer.JsonPointerException:
                errors.add_error(
                    reference,
                    MESSAGES['reference']['undefined'].format(reference),
                )


field_validators = ValidationDict()
field_validators.add_property_validator('parameters', parameters_validator)
field_validators.add_property_validator('responses', responses_validator)
field_validators.add_property_validator('definitions',
                                        schema_definitions_validator)

non_field_validators = ValidationDict()
non_field_validators.add_validator('definitions', validate_deferred_references)

definitions_validator = generate_object_validator(
    schema=definitions_schema,
    field_validators=field_validators,
    non_field_validators=non_field_validators,
)
Пример #25
0
from flex.datastructures import 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.definitions.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,
    field_validators=single_parameter_field_validators,
    non_field_validators=single_parameter_non_field_validators,
)
Пример #26
0
)
from flex.validation.common import (
    generate_object_validator,
)
from .operation import (
    operation_validator,
)
from .parameters import (
    parameters_validator,
)


path_item_schema = {
    'type': OBJECT,
}

non_field_validators = ValidationDict()
non_field_validators.add_property_validator('get', operation_validator)
non_field_validators.add_property_validator('put', operation_validator)
non_field_validators.add_property_validator('post', operation_validator)
non_field_validators.add_property_validator('delete', operation_validator)
non_field_validators.add_property_validator('options', operation_validator)
non_field_validators.add_property_validator('head', operation_validator)
non_field_validators.add_property_validator('patch', operation_validator)
non_field_validators.add_property_validator('parameters', parameters_validator)

path_item_validator = generate_object_validator(
    schema=path_item_schema,
    non_field_validators=non_field_validators,
)
Пример #27
0
    generate_any_validator, )
from flex.loading.common.reference import (
    reference_object_validator, )
from .single import (
    single_response_validator, )

responses_schema = {
    'type': OBJECT,
}

field_validators = ValidationDict()

field_validators.add_property_validator(
    'default',
    generate_any_validator(
        referenceObject=reference_object_validator,
        responseObject=single_response_validator,
    ),
)

non_field_validators = ValidationList()
non_field_validators.add_validator(
    functools.partial(
        apply_validator_to_object,
        validator=generate_any_validator(
            referenceObject=reference_object_validator,
            responseObject=single_response_validator,
        ),
    ))

responses_validator = generate_object_validator(
Пример #28
0
    single_parameter_non_field_validators as common_single_parameter_non_field_validators,
)
from flex.validation.common import (
    generate_object_validator,
)
from flex.loading.schema.paths.path_item.operation.responses.single.schema import (
    schema_validator,
    items_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,
    field_validators=single_parameter_field_validators,
    non_field_validators=single_parameter_non_field_validators,
)
Пример #29
0
from flex.datastructures import (
    ValidationDict, )
from flex.constants import (
    OBJECT, )
from flex.validation.common import (
    generate_object_validator, )
from .operation import (
    operation_validator, )
from .parameters import (
    parameters_validator, )

path_item_schema = {
    'type': OBJECT,
}

non_field_validators = ValidationDict()
non_field_validators.add_property_validator('get', operation_validator)
non_field_validators.add_property_validator('put', operation_validator)
non_field_validators.add_property_validator('post', operation_validator)
non_field_validators.add_property_validator('delete', operation_validator)
non_field_validators.add_property_validator('options', operation_validator)
non_field_validators.add_property_validator('head', operation_validator)
non_field_validators.add_property_validator('patch', operation_validator)
non_field_validators.add_property_validator('parameters', parameters_validator)

path_item_validator = generate_object_validator(
    schema=path_item_schema,
    non_field_validators=non_field_validators,
)
Пример #30
0
from flex.datastructures import (
    ValidationDict,
)
from flex.loading.common.single_header import (
    single_header_schema,
    single_header_field_validators as common_single_header_field_validators,
    single_header_non_field_validators as common_single_header_non_field_validators,
)
from flex.validation.common import (
    generate_object_validator,
)
from flex.loading.schema.paths.path_item.operation.responses.single.schema import (
    schema_validator,
    items_validator,
)


single_header_field_validators = ValidationDict()
single_header_field_validators.update(common_single_header_field_validators)

single_header_field_validators.add_property_validator('schema', schema_validator)
single_header_field_validators.add_property_validator('items', items_validator)


single_header_validator = generate_object_validator(
    schema=single_header_schema,
    field_validators=single_header_field_validators,
    non_field_validators=common_single_header_non_field_validators,
)
Пример #31
0
from .parameters import parameters_validator
from .responses import responses_validator


operation_schema = {
    "type": OBJECT,
    "properties": {
        "tags": {"type": ARRAY, "items": {"type": STRING}},
        "summary": {"type": STRING},
        "description": {"type": STRING},
        "operationId": {"type": STRING},
        "consumes": {"type": ARRAY, "items": {"type": STRING}},
        "produces": {"type": ARRAY, "items": {"type": STRING}},
        # 'schemes':  # TODO:  Implement this.
        "deprecated": {"type": BOOLEAN},
        # 'security':  # TODO:  Implement this.
    },
}


field_validators = ValidationDict()
field_validators.add_property_validator("parameters", parameters_validator)
field_validators.add_property_validator("responses", responses_validator)
field_validators.add_property_validator("externalDocs", external_docs_validator)

non_field_validators = ValidationDict()
non_field_validators.add_property_validator("consumes", mimetype_validator)
non_field_validators.add_property_validator("produces", mimetype_validator)

operation_validator = generate_object_validator(schema=operation_schema, field_validators=field_validators)
Пример #32
0
    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.
#
properties_non_field_validators = ValidationDict()
properties_non_field_validators.add_validator(
Пример #33
0
def validate_deferred_references(schema, context, **kwargs):
    try:
        deferred_references = context["deferred_references"]
    except:
        raise KeyError("`deferred_references` not found in context")

    with ErrorDict() as errors:
        for reference in deferred_references:
            parts = urlparse.urlparse(reference)
            if any((parts.scheme, parts.netloc, parts.path, parts.params, parts.query)):
                errors.add_error(reference, MESSAGES["reference"]["unsupported"].format(reference))
                continue
            try:
                jsonpointer.resolve_pointer(schema, parts.fragment)
            except jsonpointer.JsonPointerException:
                errors.add_error(reference, MESSAGES["reference"]["undefined"].format(reference))


field_validators = ValidationDict()
field_validators.add_property_validator("parameters", parameters_validator)
field_validators.add_property_validator("responses", responses_validator)
field_validators.add_property_validator("definitions", schema_definitions_validator)

non_field_validators = ValidationDict()
non_field_validators.add_validator("definitions", validate_deferred_references)


definitions_validator = generate_object_validator(
    schema=definitions_schema, field_validators=field_validators, non_field_validators=non_field_validators
)