OpenAPI schema validation for Python
Project description
About
Openapi-schema-validator is a Python library that validates schema against:
- OpenAPI Schema Specification v3.0 which is an extended subset of the JSON Schema Specification Wright Draft 00.
- OpenAPI Schema Specification v3.1 which is an extended superset of the JSON Schema Specification Draft 2020-12.
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/p1c2u/openapi-schema-validator.git#egg=openapi_schema_validator
Usage
By default, the latest OpenAPI schema syntax is expected.
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)
if you want to disambiguate the expected schema version, import and use OAS31Validator:
from openapi_schema_validator import OAS31Validator validate({"name": "John", "age": 23}, schema, cls=OAS31Validator)
In order to validate OpenAPI 3.0 schema, import and use OAS30Validator instead of OAS31Validator.
from openapi_schema_validator import OAS30Validator # A sample schema schema = { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" }, "age": { "type": "integer", "format": "int32", "minimum": 0, "nullable": True, }, "birth-date": { "type": "string", "format": "date", } }, "additionalProperties": False, } validate({"name": "John", "age": 23}, schema, cls=OAS30Validator)
Format check
You can also check format for primitive types
from openapi_schema_validator import oas31_format_checker validate({"name": "John", "birth-date": "-12"}, schema, format_checker=oas31_format_checker) Traceback (most recent call last): ... ValidationError: '-12' is not a 'date'
References
You can resolve JOSN references by passing custon reference resolver
from jsonschema.validators import RefResolver # A schema with reference schema = { "type" : "object", "required": [ "name" ], "properties": { "name": { "$ref": "#/components/schemas/Name" }, "age": { "$ref": "#/components/schemas/Age" }, "birth-date": { "$ref": "#/components/schemas/BirthDate" } }, "additionalProperties": False, } # Referenced schemas schemas = { "components": { "schemas": { "Name": { "type": "string" }, "Age": { "type": "integer", "format": "int32", "minimum": 0, "nullable": True, }, "BirthDate": { "type": "string", "format": "date", } }, }, } ref_resolver = RefResolver.from_schema(schemas) validate({"name": "John", "age": 23}, schema, resolver=ref_resolver)
For more information about reference resolver see Resolving JSON References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for openapi-schema-validator-0.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf2c96a45c9a9722ea06fc7264d2fc55e0e6258ba8ef291d0ea90b4c5c8bdcfc |
|
MD5 | ea3266197752d3462f4a76263f79d73c |
|
BLAKE2-256 | 1bf82962c173b80a803bb102646afd25b16b43f75a750f6e632e20693e9ebae7 |
Hashes for openapi_schema_validator-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 825801131306826553f9931fa1e0600d9fb4873611dc53f8ab77ef74d8fb4f91 |
|
MD5 | 6c07feddcebe03d74af2f85036e21760 |
|
BLAKE2-256 | 60b40702f4c8bf5fdae9ae06c33305736df66f395e95bb8f14f2a05220532d6a |