Famille mayan.apps.file_metadata* — Extraction automatique de métadonnées depuis les fichiers de documents.
L'application File Metadata est composée d'un moteur central (file_metadata) et de plusieurs drivers spécialisés, chacun dans sa propre app Django. L'architecture est entièrement pilotée par les types MIME : chaque driver déclare la liste des types MIME qu'il sait traiter, et le moteur achemine automatiquement chaque fichier vers les bons drivers.
file_metadata ← moteur : orchestration, modèles, API, tâches Celery
├── file_metadata_exif ← driver : ExifTool (tous types, métadonnées riches)
├── file_metadata_clamav ← driver : ClamAV (antivirus, tous types)
├── file_metadata_eml ← driver : emails .eml / .msg
├── file_metadata_msg ← driver : emails Outlook .msg
├── file_metadata_pypdf ← driver : métadonnées PDF via PyPDF
├── file_metadata_ollama ← driver : analyse IA via Ollama (LLM local)
└── file_metadata_openai ← driver : analyse IA via OpenAI API
StoredDriver ← enregistrement en base d'un driver disponible
DocumentTypeDriverConfiguration ← activation/désactivation par type de document
DocumentFileDriverEntry ← résultat d'exécution d'un driver sur un DocumentFile
└── FileMetadataEntry ← une entrée clé/valeur extraite (ex: "GPS:Latitude" = "48.8566")
DocumentFile est uploadé → le signal signal_post_document_file_upload se déclenchehandler_post_document_file_upload vérifie si le type de document a des drivers configuréstask_file_metadata_process est mise en queueDocumentFileDriverEntry est créé_process(document_file) et retourne un dictionnaireFileMetadataEntryevent_file_metadata_document_file_finished est émisLes drivers sont activés par type de document dans l'interface :
Types de documents → [Type] → Drivers de métadonnées de fichier
Pour chaque type de document, on peut activer/désactiver chaque driver individuellement. Un nouveau type de document hérite de la configuration par défaut via le signal post_save.
# Soumettre un DocumentFile pour re-traitement
# Via l'interface : Documents → [Document] → Fichiers → [Fichier] → Soumettre
# Via l'API REST : POST /api/v4/documents/{id}/files/{file_id}/metadata/submit/
| Variable | Défaut | Rôle |
|---|---|---|
FILE_METADATA_AUTO_PROCESS |
True | Traitement automatique à l'upload |
FILE_METADATA_DRIVERS_ARGUMENTS |
{} |
Arguments passés aux drivers (dict par driver) |
| Permission | Rôle |
|---|---|
permission_file_metadata_view |
Consulter les métadonnées extraites |
permission_file_metadata_submit |
Soumettre un fichier pour (re)traitement |
permission_document_type_file_metadata_setup |
Configurer les drivers par type de document |
Les métadonnées sont accessibles depuis les templates via des property helpers :
{# Toutes les métadonnées d'un DocumentFile #}
{{ document_file.file_metadata.all }}
{# Une valeur spécifique #}
{{ document_file.file_metadata.get_value_of.EXIF:Make }}
Types MIME : tous (*)
Dépendance : exiftool (binaire système)
Le driver le plus complet. ExifTool lit les métadonnées de quasiment tous les formats de fichiers : EXIF pour les images, XMP, IPTC, ID3 pour les MP3, métadonnées PDF, propriétés Office, etc.
Exemples d'attributs extraits :
EXIF:Make, EXIF:Model — appareil photoEXIF:GPSLatitude, EXIF:GPSLongitude — coordonnées GPSEXIF:DateTimeOriginal — date de prise de vuePDF:Author, PDF:Creator, PDF:PageCountFile:FileSize, File:MIMEType# Chemin de l'exécutable (défaut: /usr/bin/exiftool)
MAYAN_FILE_METADATA_DRIVERS_ARGUMENTS={
"mayan.apps.file_metadata_exif.drivers.FileMetadataDriverEXIF": {
"exiftool_path": "/usr/bin/exiftool"
}
}
Types MIME : tous (*)
Dépendance : clamscan (binaire système, base de signatures à jour)
Scanne chaque fichier uploadé avec ClamAV. Le résultat est stocké comme métadonnée :
scan_result : OK ou le nom du virus détectéscan_output : sortie complète de clamscanMAYAN_FILE_METADATA_DRIVERS_ARGUMENTS={
"mayan.apps.file_metadata_clamav.drivers.ClamScanDriver": {
"path_clamscan": "/usr/bin/clamscan"
}
}
Note : Ce driver ne bloque pas l'upload — il stocke le résultat comme métadonnée. La logique de quarantaine doit être implémentée via un workflow (
document_states).
Types MIME : message/rfc822, application/octet-stream (et variantes EML)
Dépendance : stdlib Python email
Extrait les en-têtes et la structure des emails sauvegardés au format .eml :
From, To, Cc, Subject, DateTypes MIME : application/vnd.ms-outlook
Dépendance : extract-msg (Python)
Extrait les métadonnées des fichiers .msg du format propriétaire Microsoft Outlook : expéditeur, destinataires, sujet, corps, pièces jointes.
Types MIME : application/pdf
Dépendance : pypdf (Python)
Extrait les métadonnées du dictionnaire d'information du PDF :
/Author, /Creator, /Producer/Title, /Subject, /Keywords/CreationDate, /ModDatePlus léger qu'ExifTool pour les PDFs simples, mais sans les métadonnées XMP étendues.
Types MIME : tous (*)
Dépendance : ollama (Python), serveur Ollama local
Activé par défaut : Non (enabled = False)
Envoie le contenu du document à un modèle de langage local via l'API Ollama. Les messages envoyés au modèle sont configurables, ce qui permet d'extraire des informations structurées selon un prompt personnalisé.
MAYAN_FILE_METADATA_DRIVERS_ARGUMENTS={
"mayan.apps.file_metadata_ollama.drivers.FileMetadataDriverOllamaChat": {
"host": "http://localhost:11434",
"model": "llama3",
"messages": "[{"role": "user", "content": "Extrais le type, la date et le montant de ce document."}]",
"timeout": "30"
}
}
Types MIME : tous (*)
Dépendance : openai (Python), clé API OpenAI
Activé par défaut : Non
Similaire au driver Ollama, mais utilise l'API OpenAI (GPT-4, GPT-4o, etc.) pour l'analyse du contenu. Utile pour les extractions complexes nécessitant un modèle plus puissant.
MAYAN_FILE_METADATA_DRIVERS_ARGUMENTS={
"mayan.apps.file_metadata_openai.drivers.FileMetadataDriverOpenAIChat": {
"api_key": "sk-...",
"model": "gpt-4o",
"messages": "[{"role": "user", "content": "Résume ce document en 3 points clés."}]"
}
}
Les FileMetadataEntry sont indexées par l'app dynamic_search. On peut donc rechercher des documents par valeur de métadonnée : EXIF:Make:Canon ou PDF:Author:Dupont.
L'app document_states peut déclencher des transitions de workflow basées sur des valeurs de métadonnées via les conditions de transition.
Ce fork ajoute un driver de métadonnées image_barcode_extract qui suit exactement la même interface FileMetadataDriver. Il extrait les codes-barres (QR, EAN, Code 128…) des pages d'un document via zxingcpp ou pyzbar, avec un scope configurable par type de document (first_page, all_pages, etc.).