mailcap — Manejo de archivos Mailcap

Código fuente: Lib/mailcap.py


Mailcap files are used to configure how MIME-aware applications such as mail readers and web browsers react to files with different MIME types. (The name «mailcap» is derived from the phrase «mail capability».) For example, a mailcap file might contain a line like video/mpeg; xmpeg %s. Then, if the user encounters an email message or web document with the MIME type video/mpeg, %s will be replaced by a filename (usually one belonging to a temporary file) and the xmpeg program can be automatically started to view the file.

The mailcap format is documented in RFC 1524, «A User Agent Configuration Mechanism For Multimedia Mail Format Information», but is not an internet standard. However, mailcap files are supported on most Unix systems.

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

Retorna una tupla; el primer elemento es una cadena que contiene la línea de comando a ser ejecutada (la cual puede ser pasada a la función os.system()), y el segundo elemento es la entrada mailcap para el tipo MIME proporcionado. Si no se encuentra un tipo MIME que coincida, entonces se retornan los valores de (None, None).

key es el nombre del campo deseado, que representa el tipo de actividad a realizar; el valor por defecto es “view”, ya que en el caso más común se quiere simplemente ver el cuerpo de los datos tecleados en MIME. Otros posibles valores podrían ser “compose” y “edit”, si se quisiera crear un nuevo cuerpo del tipo MIME dado o alterar los datos del cuerpo existente. Consulta RFC 1524 para una lista completa de estos campos.

filename es el nombre de fichero que debe ser sustituido por %s en la línea de comandos; el valor por defecto es '/dev/null' que casi seguro no es lo que quieres, así que normalmente lo anularás especificando un nombre de archivo.

plist puede ser una lista que contenga parámetros con nombre; el valor por defecto es simplemente una lista vacía. Cada entrada de la lista debe ser una cadena que contenga el nombre del parámetro, un signo igual ('=') y el valor del parámetro. Las entradas de mailcap pueden contener parámetros con nombre como %{foo}, que serán reemplazados por el valor del parámetro llamado “foo”. Por ejemplo, si la línea de comandos showpartial %{id} %{number} %{total} estaba en un archivo mailcap, y plist estaba establecido como ['id=1', 'number=2', 'total=3'], la línea de comandos resultante sería 'showpartial 1 2 3'.

En un archivo mailcap, el campo «test» puede especificarse opcionalmente para probar alguna condición externa (como la arquitectura de la máquina, o el sistema de ventanas en uso) para determinar si se aplica o no la línea mailcap. La función findmatch() comprobará automáticamente dichas condiciones y omitirá la entrada si la comprobación falla.

mailcap.getcaps()

Retorna un diccionario que mapea los tipos de MIME a una lista de entradas de archivos mailcap. Este diccionario debe ser pasado a la función findmatch(). Una entrada se almacena como una lista de diccionarios, pero no debería ser necesario conocer los detalles de esta representación.

La información se deriva de todos los archivos mailcap que se encuentran en el sistema. Los ajustes en el archivo mailcap del usuario $HOME/.mailcap anularán los ajustes en los archivos mailcap del sistema /etc/mailcap, /usr/etc/mailcap, y /usr/local/etc/mailcap.

Un ejemplo de uso:

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