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.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7cf27585dd7970b7257cefe48e1a3a10d4e34421831bdb472d96967433bc27bd |
|
MD5 | 05e4dabd95d092bc222f5edb99890685 |
|
BLAKE2b-256 | 65be7d6fd03612863dd597e6411b8b77593e13f9d33231ac3964342c2715ca80 |
Hashes for openapi_schema_validator-0.3.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 34fbd14b7501abe25e64d7b4624a9db02cde1a578d285b3da6f34b290cdf0b3a |
|
MD5 | 253e985850818de90d03f48e0dd0005a |
|
BLAKE2b-256 | cd86a5fe282fb7f29a7aff27fe9e7918c8e4dc1f081af3bd06ee8cc425397885 |