Metadata-Version: 2.4
Name: baobab-ai-dev-database
Version: 0.1.0
Summary: Persistence library for the Baobab AI development ecosystem.
Author-email: Michel ANDRIANAIVO <patrick.andri@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/baobabgit/baobab-ai-dev-database
Project-URL: Repository, https://github.com/baobabgit/baobab-ai-dev-database.git
Project-URL: Issues, https://github.com/baobabgit/baobab-ai-dev-database/issues
Keywords: baobab,database,persistence,sqlalchemy,workflow
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: alembic<2,>=1
Requires-Dist: baobab-ai-dev-core<1,>=0.2
Requires-Dist: baobab-database[postgresql]<3,>=2
Provides-Extra: dev
Requires-Dist: bandit<2,>=1.7; extra == "dev"
Requires-Dist: black<26,>=24; extra == "dev"
Requires-Dist: build<2,>=1; extra == "dev"
Requires-Dist: coverage[toml]<8,>=7; extra == "dev"
Requires-Dist: flake8<8,>=7; extra == "dev"
Requires-Dist: flake8-pyproject<2,>=1.2; extra == "dev"
Requires-Dist: mypy<2,>=1.10; extra == "dev"
Requires-Dist: pylint<5,>=3; extra == "dev"
Requires-Dist: pytest<9,>=8; extra == "dev"
Requires-Dist: pytest-cov<7,>=5; extra == "dev"
Requires-Dist: ruff<1,>=0.8; extra == "dev"
Provides-Extra: postgresql
Requires-Dist: baobab-database[postgresql]<3,>=2; extra == "postgresql"
Provides-Extra: mysql
Requires-Dist: baobab-database[mysql]<3,>=2; extra == "mysql"
Provides-Extra: mariadb
Requires-Dist: baobab-database[mariadb]<3,>=2; extra == "mariadb"
Provides-Extra: all-dialects
Requires-Dist: baobab-database[all]<3,>=2; extra == "all-dialects"
Dynamic: license-file

# baobab-ai-dev-database

Librairie de persistance de l'écosystème `baobab-ai-development`.

Le module fournit la configuration database, les sessions et transactions, les
modèles ORM, les mappers, les repositories, les migrations Alembic et les
services de lecture nécessaires aux workflows de développement IA.

## Prérequis

- Python 3.12 ou supérieur
- pip

## Installation

### Depuis PyPI

```bash
python -m pip install baobab-ai-dev-database
```

L'installation standard cible PostgreSQL et résout :

- `baobab-ai-dev-core>=0.2,<1` (version PyPI courante : **0.2.0**)
- `baobab-database[postgresql]>=2,<3` (version PyPI courante : **2.0.0**)
- `alembic>=1,<2`

### Développement (dépôt local)

```bash
python -m pip install -e ".[dev]"
```

## Usage de base

### Configuration et session

Les variables d'environnement `BAOBAB_DB_*` pilotent la connexion (voir
`.env.example` et `docs/configuration/environment-variables.md`).

```python
from baobab_ai_dev_database.config.database_settings import DatabaseSettings
from baobab_ai_dev_database.session.database_session_manager import DatabaseSessionManager

settings = DatabaseSettings().build()
manager = DatabaseSessionManager.from_settings(settings)

with manager.create_session() as session:
  # utiliser la session SQLAlchemy
  pass
```

### Repositories

```python
from baobab_ai_dev_database.repositories.repository_registry import RepositoryRegistry

registry = RepositoryRegistry(session)
project = registry.projects.get_by_slug("mon-projet")
```

### Migrations Alembic

Les scripts de migration sont **embarqués dans le wheel** (`env.py`,
`script.py.mako`, révisions sous `versions/`).

Le fichier `alembic.ini` à la racine de ce dépôt **n'est pas publié** sur PyPI :
l'application consommatrice fournit sa propre configuration Alembic. Pointez
`script_location` vers le répertoire packagé :

```python
from baobab_ai_dev_database.migrations import MIGRATIONS_SCRIPT_LOCATION

print(MIGRATIONS_SCRIPT_LOCATION)
```

Exemple minimal de section `[alembic]` côté consommateur :

```ini
[alembic]
script_location = %(CHEMIN_VERS_MIGRATIONS_SCRIPT_LOCATION)s
```

Dans ce dépôt (développement), exécuter depuis la racine :

```bash
alembic upgrade head
alembic current
```

Documentation détaillée : [`docs/technical/alembic-migrations.md`](docs/technical/alembic-migrations.md).

## Validation

Quality gate agrégée et multiplateforme (sans shell) :

```bash
python -m baobab_ai_dev_database.quality
```

Commandes individuelles :

```bash
python -m pytest
coverage run -m pytest
coverage report
ruff check .
mypy backend/src
```

La documentation de l'arborescence interne et de la quality gate se trouve dans
[`backend/README.md`](backend/README.md).

## Publication PyPI (Trusted Publishing)

Le workflow [`.github/workflows/release.yml`](.github/workflows/release.yml) publie
sur PyPI via OIDC (aucun token longue durée dans le dépôt).

Configuration côté PyPI (une fois par projet) :

1. Compte PyPI → **Publishing** → **Add a new pending publisher**
2. **PyPI project name** : `baobab-ai-dev-database`
3. **Owner** : `baobabgit` (organisation GitHub du dépôt)
4. **Repository name** : `baobab-ai-dev-database`
5. **Workflow name** : `release.yml`
6. **Environment name** : `pypi`

Créer ensuite l'environnement `pypi` dans les paramètres GitHub du dépôt
(Settings → Environments) avant de pousser un tag `v*.*.*`.

## Versionnement

- Version actuelle du package : **0.1.0** (alpha).
- Historique : [`CHANGELOG.md`](CHANGELOG.md).

## Licence

MIT — voir [`LICENSE`](LICENSE).
