This release is a pre-release and may not be stable for production use.
forge-mvc-files
Module opt-in propriétaire de l'upload générique dans Forge MVC : écriture disque sécurisée, storage anti-traversal, service de fichiers (streaming HTTP Range), suppression et rate-limit d'upload.
Statut : extraction complète (ADR-019)
forge-mvc-files détient désormais tout le pipeline d'upload générique,
extrait du core : save_upload, SavedUpload, serve_media_file (HTTP Range),
storage anti-traversal, suppression et rate-limit. core/uploads/ a été
supprimé du core (CORE-DROP-UPLOADS-001). La validation pure de fichier
(extension/MIME/taille + UploadError) reste dans le core (core.forms),
réutilisée par ce paquet.
Pourquoi ce module (ADR-019)
Après l'extraction du traitement d'image (ADR-018), l'upload générique reste
le dernier gros bloc applicatif logé dans le noyau. Un framework web peut
exister sans upload de fichiers : c'est une brique applicative, pas un
fondement. forge-mvc-files devient l'unique propriétaire de l'upload
générique (principes 8 « noyau minimal » et 11 « une seule façon officielle »).
Ce qui a été déplacé du core
manager—save_upload,SavedUpload,serve_media_file,delete_upload,delete_media_file,get_upload_path,upload_root,_read_upload;storage— écriture/anti-traversal (normalize_media_path,media_path_to_storage_path,is_safe_media_path,save_bytes,delete_file) ;rate_limitd'upload (is_upload_rate_limited,record_upload_attempt).
Ce qui reste dans le core (définitif)
- Les validators purs (
validate_extension,validate_mime_type,validate_size) et la hiérarchie d'exceptionsUploadError:core/forms(FileField) en dépend, et le core ne peut pas dépendre d'un opt-in (ADR-004). Ce sont des contrôles purs sans I/O.forge-mvc-filesles réutilise.
Plan d'exécution (ADR-019)
| Ticket | Description | État |
|---|---|---|
FILES-PKG-SCAFFOLD-001 |
Squelette du paquet + enregistrement opt-in | livré |
FILES-VALIDATORS-KEEP-001 |
Relocaliser validators + exceptions dans le core | livré |
FILES-MOVE-PIPELINE-001 |
Déplacer manager + storage + rate_limit | livré |
FILES-IMAGES-REPOINT-001 |
forge-mvc-images dépend de forge-mvc-files | livré |
FILES-CLI-RENAME-001 |
Générateurs + cli/uploads + starter | livré |
FILES-DOCS-PERIMETER-001 |
Docs + ADR-004 + CLAUDE.md §3 | livré |
CORE-DROP-UPLOADS-001 |
Suppression de core/uploads/ |
livré |
Installation (mode éditable, depuis les sources)
git clone https://github.com/caucrogeGit/Forge.git
cd Forge
pip install -e packages/forge-mvc-files/
Référence
docs/adr/019-upload-extraction.md— décision et périmètre figés.- Charte principes 8 (noyau minimal), 11 (une seule façon officielle).
Release files for forge-mvc-files 1.0.0rc8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| forge_mvc_files-1.0.0rc8.tar.gz | 37.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| forge_mvc_files-1.0.0rc8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 68.5 kB
Release files / forge_mvc_files-1.0.0rc8.tar.gz
| Download URL | forge_mvc_files-1.0.0rc8.tar.gz |
|---|---|
| Size | 37.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e8c6108f211a63d611e847fda49227806b31ab602b2317ef87d2bcd8136e276
|
|
BLAKE2b-256 checksum How to use checksums |
e38d7824aed7f7a92fe8cae4366080786842ce2cbc14e131b77facbcc712e653
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / forge_mvc_files-1.0.0rc8-py3-none-any.whl
| Download URL | forge_mvc_files-1.0.0rc8-py3-none-any.whl |
|---|---|
| Size | 30.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b7232e13de96b05d11728d472ad0b2e1d03a8183ea399afbb09d625be69afe87
|
|
BLAKE2b-256 checksum How to use checksums |
d8bb97460082a1048fbb5151a7a4fb7e9f6dc7d4724a4ea4741ad40b0309b011
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|