OpenAPI v3 parser that transforms specification documents into structured Python objects for programmatic access and manipulation
—
The schema system provides comprehensive data model definitions for representing and validating data structures in OpenAPI specifications. It includes primitive types, complex objects, arrays, and composition schemas with validation constraints and format specifications.
The foundational schema class that all other schema types inherit from, providing common properties for validation and metadata.
@dataclass
class Schema:
type: DataType
title: Optional[str] = None
enum: Optional[list[Any]] = field(default_factory=list)
example: Optional[Any] = None
description: Optional[str] = None
default: Optional[Any] = None
nullable: Optional[bool] = field(default=False)
read_only: Optional[bool] = field(default=False)
write_only: Optional[bool] = field(default=False)
deprecated: Optional[bool] = field(default=False)
extensions: Optional[dict] = field(default_factory=dict)Properties:
type: Schema data type from DataType enumtitle: Schema title for documentationenum: List of allowed values for enumerated typesexample: Example value demonstrating valid datadescription: Human-readable descriptiondefault: Default value when not providednullable: Whether null values are allowedread_only: Whether the value is read-only (response only)write_only: Whether the value is write-only (request only)deprecated: Whether this schema is deprecatedextensions: Custom schema extensions (x-* properties)Integer type with numeric validation constraints and format specifications.
@dataclass
class Integer(Schema):
multiple_of: Optional[int] = None
maximum: Optional[int] = None
exclusive_maximum: Optional[int] = None
minimum: Optional[int] = None
exclusive_minimum: Optional[int] = None
format: Optional[Union[IntegerFormat, LooseIntegerFormat]] = NoneProperties:
multiple_of: Value must be multiple of this numbermaximum: Maximum allowed value (inclusive)exclusive_maximum: Maximum allowed value (exclusive)minimum: Minimum allowed value (inclusive)exclusive_minimum: Minimum allowed value (exclusive)format: Integer format (int32, int64) or custom formatFloating-point number type with numeric validation constraints.
@dataclass
class Number(Schema):
multiple_of: Optional[float] = None
maximum: Optional[float] = None
exclusive_maximum: Optional[float] = None
minimum: Optional[float] = None
exclusive_minimum: Optional[float] = None
format: Optional[Union[NumberFormat, LooseNumberFormat]] = NoneProperties:
multiple_of: Value must be multiple of this numbermaximum: Maximum allowed value (inclusive)exclusive_maximum: Maximum allowed value (exclusive)minimum: Minimum allowed value (inclusive)exclusive_minimum: Minimum allowed value (exclusive)format: Number format (float, double) or custom formatString type with length constraints, patterns, and format validation.
@dataclass
class String(Schema):
max_length: Optional[int] = None
min_length: Optional[int] = None
pattern: Optional[str] = None
format: Optional[Union[StringFormat, LooseStringFormat]] = NoneProperties:
max_length: Maximum string lengthmin_length: Minimum string lengthpattern: Regular expression pattern for validationformat: String format (date, email, uri, uuid, etc.) or custom formatBoolean type for true/false values.
@dataclass
class Boolean(Schema):
passNull type representing absence of value.
@dataclass
class Null(Schema):
passArray type with item validation and size constraints.
@dataclass
class Array(Schema):
max_items: Optional[int] = None
min_items: Optional[int] = None
unique_items: Optional[bool] = None
items: Schema = NoneProperties:
max_items: Maximum number of array itemsmin_items: Minimum number of array itemsunique_items: Whether array items must be uniqueitems: Schema for array itemsObject type with property definitions and validation rules.
@dataclass
class Object(Schema):
max_properties: Optional[int] = None
min_properties: Optional[int] = None
required: list[str] = field(default_factory=list)
properties: list[Property] = field(default_factory=list)Properties:
max_properties: Maximum number of object propertiesmin_properties: Minimum number of object propertiesrequired: List of required property namesproperties: List of object property definitionsIndividual property within an object schema.
@dataclass
class Property:
name: str
schema: SchemaProperties:
name: Property nameschema: Schema definition for the property valueSchema composition where data must match exactly one of the provided schemas.
@dataclass
class OneOf(Schema):
schemas: list[Schema] = field(default_factory=list)
discriminator: Optional[Discriminator] = NoneProperties:
schemas: List of schema options (exactly one must match)discriminator: Discriminator for polymorphic schema resolutionSchema composition where data must match one or more of the provided schemas.
@dataclass
class AnyOf(Schema):
schemas: list[Schema] = field(default_factory=list)Properties:
schemas: List of schema options (one or more must match)Discriminator configuration for polymorphic schema inheritance.
@dataclass
class Discriminator:
property_name: str
mapping: Optional[dict] = field(default_factory=dict)Properties:
property_name: Property name used for discriminationmapping: Mapping of discriminator values to schema namesWorking with primitive schemas:
from openapi_parser import parse
spec = parse('api-spec.yml')
# Find schemas by type
for name, schema in spec.schemas.items():
if isinstance(schema, String):
print(f"String schema: {name}")
if schema.format:
print(f" Format: {schema.format}")
if schema.pattern:
print(f" Pattern: {schema.pattern}")
elif isinstance(schema, Integer):
print(f"Integer schema: {name}")
if schema.minimum is not None:
print(f" Minimum: {schema.minimum}")
if schema.maximum is not None:
print(f" Maximum: {schema.maximum}")Working with object schemas:
# Examine object properties
for name, schema in spec.schemas.items():
if isinstance(schema, Object):
print(f"Object schema: {name}")
print(f" Required properties: {schema.required}")
for prop in schema.properties:
print(f" Property: {prop.name} ({prop.schema.type.value})")Working with array schemas:
# Check array item types
for name, schema in spec.schemas.items():
if isinstance(schema, Array):
print(f"Array schema: {name}")
print(f" Item type: {schema.items.type.value}")
if schema.min_items:
print(f" Min items: {schema.min_items}")
if schema.max_items:
print(f" Max items: {schema.max_items}")Install with Tessl CLI
npx tessl i tessl/pypi-openapi3-parser