Metadata-Version: 2.4
Name: python-general-be-lib
Version: 0.8.0
Summary: General purpose backend library — SQLAlchemy CRUD/Geometry repositories, FastAPI exceptions, Pydantic base models, logger utilities.
Author-email: Andrea Di Placido <a.diplacido@arpes.it>, "Arpes S.r.l." <it.admin@arpes.it>
License: MIT
Project-URL: Homepage, https://github.com/Arpes-IS/python-general-be-lib
Project-URL: Repository, https://github.com/Arpes-IS/python-general-be-lib
Keywords: backend,sqlalchemy,fastapi,pydantic,repository,crud,geoalchemy2
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Database
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi>=0.100.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: sqlalchemy>=2.0.0
Requires-Dist: geoalchemy2>=0.14.0
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"
Dynamic: license-file
Dynamic: requires-python

# python-general-be-lib

Libreria backend general purpose per progetti Python: repository CRUD e spaziali
su **SQLAlchemy** / **GeoAlchemy2**, eccezioni **FastAPI**, modelli base
**Pydantic** e utility di logging.

- Distribuzione PyPI: `python-general-be-lib`
- Pacchetto importabile: `general`
- Python richiesto: **3.12+**

```bash
pip install python-general-be-lib
```

```python
from sqlalchemy import create_engine

from general.interface.repository.crud_repository import CrudRepository

engine = create_engine("postgresql://user:pass@localhost/db")
repo = CrudRepository(entity=User, model=UserModel, engine=engine)

repo.insert(models=[UserModel(name="Mario", email="mario@example.com")])
repo.find(active=True, order_by="name", asc=True)
```

---

## Cosa contiene

| Area | Componenti |
|---|---|
| Repository ORM | `CrudRepository`, `GeometryRepository`, `ManyToManyRepository`, `ViewRepository` |
| Layer Core (senza ORM) | `CrudMetadata`, `GeomMetadata` — CRUD e query spaziali su `Table` riflesse |
| Motore di filtraggio | `StatementManager` + `BaseHandler`, `JsonHandler`, `ILikeHandler`, `JsonILikeHandler`, `OrHandler`, `IntervalHandler` |
| Basi | `Base` (declarative base estesa), `ExtBaseModel`, `CamelExtBaseModel` |
| Paginazione | `PaginatorRequestModel`, `PaginatorResponseModel` |
| Eccezioni | `ExceptionInterface` e sottoclassi HTTP (400/401/403/404/422/500/503) |
| Logging | `init_logger`, decorator `@log` |

---

## Documentazione

Il codice della libreria vive nella directory `general/`, che è un **git
submodule** ([novatellus/shared-be-libs](https://github.com/novatellus/shared-be-libs)).
Questo repository esterno è il wrapper di packaging e pubblicazione.

- **[general/README.md](general/README.md)** — panoramica, quickstart, contratto
  di sessione, handler, operazioni spaziali
- **[general/DOCS.md](general/DOCS.md)** — riferimento completo di ogni metodo

Dopo il clone, inizializza il submodule:

```bash
git submodule update --init --recursive
```

---

## Build e pubblicazione

La versione è definita in **entrambi** `setup.py` e `pyproject.toml`: vanno
aggiornati insieme. I messaggi di commit sono prefissati con la nuova versione
(es. `0.7.2 OrHandler e distinct_pairs`).

```bash
python3 setup.py sdist bdist_wheel   # build di sdist + wheel in dist/
python3 -m twine upload dist/*       # pubblicazione su PyPI
```

---

## Licenza

MIT — vedi [LICENSE](LICENSE).
