Metadata-Version: 2.4
Name: exdrf-gen-al2r
Version: 0.1.14
Summary: Generate FastAPI route modules from SQLAlchemy-backed ExDataset metadata.
Author-email: Nicu Tofan <nicu.tofan@gmail.com>
License-Expression: MIT
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Development Status :: 3 - Alpha
Classifier: Typing :: Typed
Requires-Python: >=3.12.2
Description-Content-Type: text/markdown
Requires-Dist: click<8.2.0,>=8.1.8
Requires-Dist: exdrf-al
Requires-Dist: exdrf-gen
Requires-Dist: exdrf-gen-al2pd
Provides-Extra: dev
Requires-Dist: autoflake; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: pyproject-flake8; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pytest-mock; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: wheel; extra == "dev"

# exdrf-gen-al2r

**exdrf-gen-al2r** is an **`exdrf-gen`** plugin that emits **FastAPI**
`APIRouter` stubs from SQLAlchemy-backed **`ExDataset`** metadata. List and
read handlers are typed with **`XxxEx`**; create uses **`XxxCreate`**. Patch
is emitted only when **`exdrf-gen-al2pd`** would emit **`XxxEdit`** (composite
PK–only link tables skip PATCH).

Python **3.12.2+** is required.

## Command-line usage

```bash
exdrf-gen al2r DATASET OUT-PATH DB-MODULE SCHEMAS-PKG
```

Or: `python -m exdrf_gen al2r ...`.

- **DATASET** — `module.path:DeclarativeBase`.
- **OUT-PATH** — directory for `*_routes.py` and `__init__.py` (or
  **`EXDRF_AL2R_PATH`**).
- **DB-MODULE** — dotted import path for ORM classes (`from DB-MODULE import
  Model`).
- **SCHEMAS-PKG** — dotted root package where **`al2pd`** wrote schemas (or
  **`EXDRF_AL2R_SCHEMAS`**). Import path per resource is
  `SCHEMAS-PKG.<categories...>.<snake_case_name_plural>` (e.g.
  `myapp.schemas.widgets` for `Widget` at the root category).

Path parameters for GET/PATCH follow **`resource.primary_fields()`** order
(e.g. `{left_id}/{right_id}` for composite keys).

## Dependencies

**`exdrf-gen`**, **`exdrf-al`**, **`click`**, **`exdrf-gen-al2pd`** (for
`resource_generates_edit_payload`). Generated routers import **FastAPI** and
**SQLAlchemy** — add those to the application environment.

## Plugin registration

```toml
[project.entry-points.'exdrf.plugins']
exdrf_gen = 'exdrf_gen_al2r'
```

## See also

- **`exdrf-gen-al2pd`** — generates the Pydantic modules **`al2r`** imports.
- **`exdrf-gen`** — [`README.md`](../exdrf-gen/README.md).
