Skip to content

sysfce2/python-openapi-schema-validator

 
 

Repository files navigation

openapi-schema-validator

https://img.shields.io/codecov/c/github/python-openapi/openapi-schema-validator/master.svg?style=flat

About

Openapi-schema-validator is a Python library that validates schema against:

Documentation

Check documentation to see more details about the features. All documentation is in the "docs" directory and online at openapi-schema-validator.readthedocs.io

Installation

Recommended way (via pip):

pip install openapi-schema-validator

Alternatively you can download the code and install from the repository:

pip install -e git+https://github.com/python-openapi/openapi-schema-validator.git#egg=openapi_schema_validator

Usage

To validate an OpenAPI v3.1 schema:

from openapi_schema_validator import validate

# A sample schema
schema = {
    "type": "object",
    "required": [
       "name"
    ],
    "properties": {
        "name": {
            "type": "string"
        },
        "age": {
            "type": ["integer", "null"],
            "format": "int32",
            "minimum": 0,
        },
        "birth-date": {
            "type": "string",
            "format": "date",
        },
        "address": {
             "type": 'array',
             "prefixItems": [
                 { "type": "number" },
                 { "type": "string" },
                 { "enum": ["Street", "Avenue", "Boulevard"] },
                 { "enum": ["NW", "NE", "SW", "SE"] }
             ],
             "items": False,
         }
    },
    "additionalProperties": False,
}

# If no exception is raised by validate(), the instance is valid.
validate({"name": "John", "age": 23, "address": [1600, "Pennsylvania", "Avenue"]}, schema)

validate({"name": "John", "city": "London"}, schema)

Traceback (most recent call last):
    ...
ValidationError: Additional properties are not allowed ('city' was unexpected)

By default, the latest OpenAPI schema syntax is expected.

Strict vs Pragmatic Validators

OpenAPI 3.0 has two validator variants with different behaviors for binary format:

OAS30Validator (default - pragmatic)
  • Accepts Python bytes for type: string with format: binary
  • More lenient for Python use cases where binary data is common
  • Use when validating Python objects directly
OAS30StrictValidator
  • Follows OAS spec strictly: only accepts str for type: string
  • For format: binary, only accepts base64-encoded strings
  • Use when strict spec compliance is required

Comparison Matrix

Schema Value OAS30Validator (default) OAS30StrictValidator
type: string "test" (str) Pass Pass
type: string b"test" (bytes) Fail Fail
type: string, format: binary b"test" (bytes) Pass Fail
type: string, format: binary "dGVzdA==" (base64) Pass Pass
type: string, format: binary "test" (plain str) Pass Fail

For more details read about Validation.

Related projects

  • openapi-core
    Python library that adds client-side and server-side support for the OpenAPI.
  • openapi-spec-validator
    Python library that validates OpenAPI Specs against the OpenAPI 2.0 (aka Swagger) and OpenAPI 3.0 specification

About

OpenAPI schema validation for Python (Required by python-openapi-spec-validator) | (PKGBUILD: https://archlinux.org/packages/extra/any/python-openapi-schema-validator)

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 98.6%
  • Makefile 1.4%