19.3. "mailcap" — Manipulation de fichiers Mailcap
**************************************************

**Code source :** Lib/mailcap.py

======================================================================

Les fichiers *mailcap* sont utilisés pour configurer la façon dont les
applications compatibles avec MIME, comme les clients mails ou les
navigateurs, réagissent aux différents fichiers de types MIME. (Le nom
*mailcap* est une contraction de l’expression « *mail capability* ».)
Par exemple, un fichier *mailcap* peut contenir une ligne de type
"video/mpeg; xmpeg %s".  Ensuite, si l’utilisateur récupère un message
mail ou un document web avec un type MIME *video/mpeg*, "%s" est
remplacé par un nom de fichier (généralement celui d’un fichier
temporaire) et le programme **xmpeg** peut automatiquement débuter la
lecture de ce dernier.

Le format *mailcap* est documenté dans la **RFC 1524** « A User Agent
Configuration Mechanism For Multimedia Mail Format Information », mais
n’est pas un standard Internet. Cependant, la plupart des systèmes
Unix savent gérer les fichiers *mailcap*.

mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])

   Renvoie un tuple à deux éléments ; le premier élément est une
   chaîne de caractères (string) contenant la ligne de commande à
   exécuter (qui peut être passée à "os.system()"), et le second
   élément est l’entrée *mailcap* pour un type de MIME donné. Si le
   type MIME n’est pas identifié, "(None, None)" est renvoyé.

   *key* est le nom de champ souhaité, qui représente le type d’action
   à exécuter ; la valeur par défaut est "'view'", puisque dans la
   majorité des cas le besoin consiste juste à lire le corps (body) de
   la donnée de type MIME. Les autres valeurs possibles peuvent être
   "'compose'" et "'edit'", si le besoin consiste à créer un nouveau
   corps de données (body) ou modifier celui existant. Voir la **RFC
   1524** pour une liste complète des champs.

   *filename* est le nom de fichier à remplacer pour "%s" en ligne de
   commande ; la valeur par défaut est "’/dev/null’" qui n’est
   certainement pas celle que vous attendez. Donc la plupart du temps,
   le nom de fichier doit être indiqué.

   *plist* peut être une liste contenant des noms de paramètres ; la
   valeur par défaut est une simple liste vide. Chaque entrée dans la
   liste doit être une chaîne de caractères contenant le nom du
   paramètre, un signe égal ("’=‘"), ainsi que la valeur du paramètre.
   Les entrées *mailcap* peuvent contenir des noms de paramètres tels
   que "%{foo}", remplacé par la valeur du paramètre nommé *foo*. Par
   exemple, si la ligne de commande "showpartial %{id} %{number}
   %{total}" est un fichier *mailcap*, et *plist*  configuré à
   "[‘id=1’, ‘number=2’, ‘total=3’]", la ligne de commande qui en
   résulte est "’showpartial 1 2 3’".

   Dans un fichier *mailcap*, le champ « test » peut être renseigné de
   façon optionnelle afin de tester certaines conditions externes
   (comme l’architecture machine, ou le gestionnaire de fenêtre
   utilisé) afin de déterminer si la ligne *mailcap* est pertinente ou
   non. "findmatch()" vérifie automatiquement ces conditions et ignore
   l’entrée si la vérification échoue.

mailcap.getcaps()

   Renvoie un dictionnaire qui associe les types MIME à une liste
   d’entrées de fichier *mailcap*. Ce dictionnaire doit être transmis
   à la fonction "findmatch()". Une entrée est enregistrée en tant
   qu’une liste de dictionnaires, mais il n’est pas nécessaire de
   connaitre les détails de cette représentation.

   L’information provient de tous les fichiers *mailcap* trouvés dans
   le système. Les configurations réalisées dans le fichier *mailcap*
   du répertoire utilisateur "$HOME/.mailcap" outrepasse les
   configurations systèmes des fichiers *mailcap* "/etc/mailcap",
   "/usr/etc/mailcap", et "/usr/local/etc/mailcap".

Un exemple d’utilisation :

   >>> import mailcap
   >>> d = mailcap.getcaps()
   >>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
   ('xmpeg tmp1223', {'view': 'xmpeg %s'})
