forge.crud¶
Template-based CRUD code generation for FastAPI from Pydantic schemas.
forge.crud ¶
forge.crud — Template-based CRUD code generation for FastAPI.
Generates Create/Read/Update/Delete route handlers from a Pydantic schema with pagination, filtering, sorting, and optional soft-delete support.
Classes¶
CrudError ¶
Bases: ForgeError
Base exception for all CRUD generation errors.
CrudGenerationError ¶
CrudGenerator ¶
Template-based CRUD code generator.
Analyzes a Pydantic schema and generates FastAPI route handler files with configurable operations, pagination, filtering, sorting, and soft-delete support.
Usage
generator = CrudGenerator(User, output_dir="app/crud/generated") generator.generate()
Source code in src/forge/crud/generator.py
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 | |
Attributes¶
Methods:¶
build_context ¶
generate ¶
generate(template_name: str = 'crud_router.py.jinja', output_filename: str | None = None, force: bool = False) -> Path
Generate the CRUD router file and write it to disk.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
template_name
|
str
|
The template file to render. |
'crud_router.py.jinja'
|
output_filename
|
str | None
|
Optional custom output filename. Defaults to '{table_name}.py'. |
None
|
force
|
bool
|
Overwrite existing file if True. |
False
|
Returns:
| Type | Description |
|---|---|
Path
|
The path to the generated file. |
Raises:
| Type | Description |
|---|---|
CrudGenerationError
|
If the output file already exists and force is False. |
Source code in src/forge/crud/generator.py
render ¶
Render the CRUD template into generated source code.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
template_name
|
str
|
Name of the Jinja2 template file to render. |
'crud_router.py.jinja'
|
Returns:
| Type | Description |
|---|---|
str
|
The rendered source code as a string. |
Source code in src/forge/crud/generator.py
CrudGeneratorConfig ¶
Bases: BaseModel
Configuration for the CRUD generator.
Controls which operations are generated, how the output is structured, and what features (pagination, filtering, sorting, soft delete) are included.
Source code in src/forge/crud/models.py
CrudModule ¶
Bases: ForgeModule
Forge module providing CRUD code generation capabilities.
The CrudModule integrates the CRUD generator into the forge runtime.
It is a lightweight module that makes the CrudGenerator and
generate_crud convenience function available through the runtime,
enabling programmatic code generation during development workflows.
Source code in src/forge/crud/module.py
CrudOperation ¶
FieldInfo ¶
Bases: BaseModel
Describes a single field from a Pydantic schema for template context.
Source code in src/forge/crud/models.py
Methods:¶
declaration ¶
Return the Python field declaration line.
Source code in src/forge/crud/models.py
SchemaValidationError ¶
TemplateNotFoundError ¶
Functions:¶
generate_crud ¶
generate_crud(schema: type, output_dir: str = '.', operations: set[CrudOperation] | None = None, auth_dependency: str | None = None, response_model: str | None = None, create_schema: str | None = None, update_schema: str | None = None, pagination: bool = True, filter_fields: list[str] | None = None, sort_fields: list[str] | None = None, soft_delete: bool = False, primary_key: str | None = None, table_name: str | None = None, force: bool = False) -> Path
Convenience function to generate CRUD routes in one call.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
schema
|
type
|
A Pydantic model class to generate CRUD routes for. |
required |
output_dir
|
str
|
Directory to write the generated file to. |
'.'
|
operations
|
set[CrudOperation] | None
|
Set of CRUD operations to generate. |
None
|
auth_dependency
|
str | None
|
Fully qualified auth dependency (e.g. 'app.auth.get_current_user'). |
None
|
response_model
|
str | None
|
Custom response model class name. |
None
|
create_schema
|
str | None
|
Custom create schema class name. |
None
|
update_schema
|
str | None
|
Custom update schema class name. |
None
|
pagination
|
bool
|
Enable pagination for list endpoint. |
True
|
filter_fields
|
list[str] | None
|
List of field names to enable filtering on. |
None
|
sort_fields
|
list[str] | None
|
List of field names to enable sorting on. |
None
|
soft_delete
|
bool
|
Enable soft-delete support. |
False
|
primary_key
|
str | None
|
Primary key field name. |
None
|
table_name
|
str | None
|
Database table name (used for URL prefix). |
None
|
force
|
bool
|
Overwrite existing output file. |
False
|
Returns:
| Type | Description |
|---|---|
Path
|
The path to the generated file. |
Example
from pydantic import BaseModel from forge.crud import generate_crud
class User(BaseModel): ... id: int ... name: str ... email: str ... path = generate_crud( ... User, ... output_dir="app/crud/generated", ... auth_dependency="app.auth.get_current_user", ... soft_delete=True, ... )