Metadata-Version: 2.4
Name: forge-mvc-media
Version: 1.0.0b8
Summary: Brique médias applicatifs pour Forge — repository, galerie, couverture.
Author: Roger Cauchon
License-Expression: LicenseRef-Forge-Proprietary
Project-URL: Homepage, https://github.com/caucrogeGit/Forge
Project-URL: Repository, https://github.com/caucrogeGit/Forge
Project-URL: Documentation, https://caucrogegit.github.io/Forge/
Keywords: python,mvc,forge,media,uploads,gallery
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: forge-mvc==1.0.0b8

# forge-mvc-media

Module opt-in pour la gestion applicative des médias dans Forge MVC.

## Statut : Alpha — préparé pour publication future

`forge-mvc-media` est en statut `3 - Alpha` depuis `MEDIA-PYPI-READY-002`.
L'extraction depuis `core/uploads/` est complète. La documentation et les shims
de compatibilité ont été livrés.

**Non publié sur PyPI dans la vague `1.0.0b7`.** Publication prévue dans une prochaine release.

Il s'installe depuis les sources du dépôt Forge :

```bash
git clone https://github.com/caucrogeGit/Forge.git
cd Forge
pip install -e packages/forge-mvc-media/
```

## Ce que contient ce module

Depuis `MEDIA-REPOSITORY-MOVE-001`, le package contient :

- `media_repository` — persistance SQL des métadonnées médias (table `media`) :
  `create_media_record`, `attach_media_to_entity`, `get_media_record`,
  `list_media_for_entity`, `update_media_alt_text`, `update_media_position`,
  `delete_media_record`, `delete_media`

- `media_gallery` — galerie, couverture, URL des médias par entité :
  `get_media_gallery`, `get_cover_media`, `media_url`

## Ce qui reste dans le core (définitif)

Les briques génériques restent dans `core/uploads/` et ne bougent pas :

- `exceptions.py` — hiérarchie UploadError
- `validators.py` — validation extension, MIME type, taille
- `storage.py` — filesystem, protection anti-traversal
- `manager.py` — SavedUpload, save_upload, serve_media_file
- `image.py` — save_image, generate_image_variants (Pillow)
- `rate_limit.py` — rate limiting in-memory

## Note sur les générateurs CLI

À partir de `MEDIA-CRUD-INTEGRATION-OPTIN-001`, les nouveaux générateurs média
applicatifs (`forge make:crud --media`, `forge make:public:list`, `forge make:public:show`)
ciblent `forge_mvc_media` pour les helpers applicatifs :

```python
from core.uploads import save_upload          # générique — reste dans core
from forge_mvc_media import attach_media_to_entity, delete_media, get_cover_media, ...
```

Les anciens imports `from core.uploads import attach_media_to_entity` ne sont plus
supportés depuis `MEDIA-SHIMS-REMOVE-001`.
Ce package n'est pas encore publié sur PyPI — publication prévue dans une prochaine release.

## Shims de compatibilité dans core

Les fichiers `core/uploads/media_repository.py` et `core/uploads/media_gallery.py`
étaient des shims de compatibilité qui re-exportaient depuis ce module.
Ils ont été supprimés dans `MEDIA-SHIMS-REMOVE-001`.

## Conditions avant publication sur PyPI

Toutes les conditions préparatoires sont remplies depuis `MEDIA-PYPI-READY-002`.
La publication PyPI sera déclenchée par un ticket dédié lors d'une prochaine release.

Les critères étaient :

1. ~~**`MEDIA-DOCS-MIGRATION-001` livré**~~ ✓ livré — documentation technique à jour dans `docs/`.
2. ~~**Shims supprimés**~~ ✓ livré (`MEDIA-SHIMS-REMOVE-001`) — `core/uploads/media_repository.py` et
   `core/uploads/media_gallery.py` retirés du core.
3. ~~**`Development Status` ajusté**~~ ✓ livré (`MEDIA-PYPI-READY-002`) — statut `3 - Alpha` actif.
4. ~~**Classifier retiré**~~ ✓ livré (`MEDIA-PYPI-READY-002`) — `"Private :: Do Not Upload"` supprimé du `pyproject.toml`.

Le ticket de publication PyPI sera `PYPI-PUBLISH-MEDIA-001` (ou `PYPI-PUBLISH-B8-MEDIA-001`
selon la version cible).

## Tickets de référence

| Ticket | Description | État |
|---|---|---|
| `MEDIA-CORE-BOUNDARY-AUDIT-001` | Audit de la frontière core/opt-in | livré |
| `MEDIA-EXTRACT-PACKAGE-SCAFFOLD-001` | Création du squelette source-only | livré |
| `MEDIA-REPOSITORY-MOVE-001` | Déplacement du code applicatif | livré |
| `MEDIA-CRUD-INTEGRATION-OPTIN-001` | Mise à jour des générateurs CLI | livré |
| `MEDIA-DOCS-MIGRATION-001` | Mise à jour de la documentation | livré |
| `MEDIA-SHIMS-REMOVE-001` | Suppression des shims core/uploads | livré |
| `MEDIA-PYPI-READY-001` | Décision source-only confirmée | livré |
| `MEDIA-PYPI-READY-002` | Requalification Alpha, retrait classifier privé | livré |
