Skip to content

Validation

Ignyx leverages the power of Pydantic v2 for high-speed data validation and schema enforcement. This allows you to define the structure of your data once and have Ignyx handle the validation and parsing automatically.

Overview

When you type-hint a route handler parameter with a Pydantic BaseModel, Ignyx automatically: 1. Reads the request body. 2. Validates the data against the model. 3. Returns a 422 Unprocessable Entity response if validation fails. 4. Passes the parsed model instance to your handler.

Basic Example

Define a model and use it in your route.

from pydantic import BaseModel
from ignyx import Ignyx

app = Ignyx()

class User(BaseModel):
    name: str
    age: int

@app.post("/users")
def create_user(user: User):
    return {"message": f"Hello {user.name}, you are {user.age}!"}

Nested Models

You can nest models to represent complex data structures.

class Address(BaseModel):
    city: str
    country: str

class Profile(BaseModel):
    username: str
    address: Address

@app.post("/profile")
def update_profile(profile: Profile):
    return {"city": profile.address.city}

Optional Fields

Use Python's type system to define optional fields.

from typing import Optional

class Item(BaseModel):
    name: str
    description: Optional[str] = None # Or use name: str | None = None
    price: float

Validation Errors

If a client sends invalid data, Ignyx automatically returns a structured 422 error response.

Request:

{
    "name": "Saketh",
    "age": "invalid_age"
}

Response (422):

{
    "detail": [
        {
            "loc": ["body", "age"],
            "msg": "Input should be a valid integer",
            "type": "int_parsing"
        }
    ]
}

Field Validators

You can add custom validation logic using Pydantic's @field_validator.

from pydantic import BaseModel, field_validator

class Signup(BaseModel):
    username: str
    password: str

    @field_validator('username')
    @classmethod
    def username_must_be_long(cls, v: str) -> str:
        if len(v) < 3:
            raise ValueError('Username is too short')
        return v

API Reference

Ignyx supports any Pydantic BaseModel. For full documentation on model features, see the Pydantic Documentation.