Skills pydantic
install
source · Clone the upstream repo
git clone https://github.com/TerminalSkills/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TerminalSkills/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/pydantic" ~/.claude/skills/terminalskills-skills-pydantic && rm -rf "$T"
manifest:
skills/pydantic/SKILL.mdsafety · automated scan (low risk)
This is a pattern-based risk scan, not a security review. Our crawler flagged:
- references .env files
- references API keys
Always read a skill's source content before installing. Patterns alone don't mean the skill is malicious — but they warrant attention.
source content
Pydantic
Overview
Pydantic is a data validation library that uses Python type hints. Define a model class, and Pydantic validates inputs, coerces types, and serializes outputs automatically. Used by FastAPI, LangChain, and most modern Python frameworks.
Instructions
Step 1: Basic Models
# schemas.py — Data models with validation from pydantic import BaseModel, Field, EmailStr, field_validator from datetime import datetime class UserCreate(BaseModel): name: str = Field(min_length=2, max_length=100) email: EmailStr age: int = Field(ge=13, le=120) role: str = Field(default="member", pattern="^(admin|member|viewer)$") class UserResponse(BaseModel): id: str name: str email: str role: str created_at: datetime model_config = {"from_attributes": True} # works with ORM objects # Usage user = UserCreate(name="Alice", email="alice@example.com", age=28) print(user.model_dump()) # {"name": "Alice", "email": "alice@example.com", ...} print(user.model_dump_json()) # JSON string # Validation error try: UserCreate(name="A", email="not-an-email", age=5) except ValidationError as e: print(e.errors()) # [{"type": "string_too_short", "loc": ["name"], ...}, ...]
Step 2: Custom Validators
from pydantic import BaseModel, field_validator, model_validator class ProjectCreate(BaseModel): name: str slug: str start_date: datetime end_date: datetime | None = None @field_validator("slug") @classmethod def validate_slug(cls, v: str) -> str: if not v.replace("-", "").isalnum(): raise ValueError("Slug must contain only letters, numbers, and hyphens") return v.lower() @model_validator(mode="after") def validate_dates(self): if self.end_date and self.end_date <= self.start_date: raise ValueError("End date must be after start date") return self
Step 3: Settings from Environment
# config.py — App configuration from env vars from pydantic_settings import BaseSettings class Settings(BaseSettings): database_url: str redis_url: str = "redis://localhost:6379" secret_key: str debug: bool = False allowed_origins: list[str] = ["http://localhost:3000"] max_upload_mb: int = 10 model_config = { "env_file": ".env", "env_file_encoding": "utf-8", } settings = Settings() # auto-reads from .env and environment variables
Step 4: Discriminated Unions
# events.py — Polymorphic event types from pydantic import BaseModel from typing import Literal class TaskCreated(BaseModel): type: Literal["task.created"] = "task.created" task_id: str project_id: str title: str class TaskCompleted(BaseModel): type: Literal["task.completed"] = "task.completed" task_id: str completed_by: str duration_hours: float class CommentAdded(BaseModel): type: Literal["comment.added"] = "comment.added" comment_id: str task_id: str body: str # Discriminated union — Pydantic picks the right type based on "type" field WebhookEvent = TaskCreated | TaskCompleted | CommentAdded # Parse any event event = WebhookEvent.model_validate({"type": "task.completed", "task_id": "123", ...}) # Returns TaskCompleted instance
Guidelines
- Pydantic v2 is 5-50x faster than v1 — rewritten in Rust (pydantic-core).
- Use
for constraints:Field(...)
,min_length
,max_length
,ge
,le
.pattern
enables direct serialization of ORM objects (SQLAlchemy, Django).from_attributes = True- Use
for type-safe configuration from environment variables.pydantic-settings - Discriminated unions handle polymorphic data — Pydantic picks the right model based on a field value.