Validation API

Schema

Base schema class.

Constructor

class Schema(metaclass=SchemaMeta)

Class Methods

load

@classmethod
def load(cls, data: Any) -> Schema

Load and validate data from a dictionary.

Methods

to_dict

def to_dict(self) -> dict[str, Any]

to_json

def to_json(self) -> dict[str, Any]

validate

def validate(self) -> None

Fields

StrField

StrField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    min_length: int | None = None,
    max_length: int | None = None,
    strip: bool = True,
    pattern: str | None = None,
)

IntField

IntField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    minimum: int | None = None,
    maximum: int | None = None,
)

FloatField

FloatField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    minimum: float | None = None,
    maximum: float | None = None,
)

BoolField

BoolField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
)

ChoiceField

ChoiceField(
    choices: list[Any] | tuple[Any, ...] | set[Any],
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
)

EmailField

EmailField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    min_length: int | None = None,
    max_length: int | None = None,
)

DateField

DateField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    format: str = "%Y-%m-%d",
)

DateTimeField

DateTimeField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    format: str = "%Y-%m-%dT%H:%M:%S",
)

UUIDField

UUIDField(
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
)

ListField

ListField(
    item_field: Field | None = None,
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
    min_items: int | None = None,
    max_items: int | None = None,
)

NestedField

NestedField(
    schema_class: type[Schema],
    *,
    required: bool = False,
    default: Any = None,
    nullable: bool = False,
)

Validators

  • required_validator(value, field) — Value must not be None
  • length_validator(min_length, max_length) — String/list length
  • min_validator(min_value) — Minimum value
  • max_validator(max_value) — Maximum value
  • range_validator(min_value, max_value) — Range
  • email_validator() — Email format
  • url_validator() — URL format
  • pattern_validator(pattern) — Regex pattern
  • and_validators(*validators) — Combine with AND
  • or_validators(*validators) — Combine with OR
  • custom_validator(func) — Custom validator function

Exceptions

ValidationError

ValidationError(fields: dict[str, list[str]])

FieldError

FieldError(message: str)
Example
class CreateUser(Schema):
    name = fields.String(required=True, min_length=2)
    email = fields.Email(required=True)

@app.post("/users")
async def create_user(data: CreateUser):
    return {"user": data.to_dict()}