19.3. mailcap – Обработка файлов mailcap¶mailcap – Mailcap file handling
Исходный код: Lib/mailcap.py
Файлы mailcap используются для настройки того, как MIME-совместимые приложения, такие как почтовые клиенты и веб-браузеры, обрабатывают файлы с различными MIME-типами. (Название «mailcap» происходит от фразы «mail capability».) Например, файл mailcap может содержать строку вида video/mpeg; xmpeg %s. Затем, если пользователь встречает электронное письмо или веб-документ с MIME-типом video/mpeg, %s будет заменён на имя файла (обычно временного), и программа xmpeg может быть автоматически запущена для просмотра файла.
Формат mailcap описан в RFC 1524, «A User Agent Configuration Mechanism For Multimedia Mail Format Information», но не является интернет-стандартом. Однако файлы mailcap поддерживаются в большинстве систем Unix.
- mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])¶
Возвращает кортеж из двух элементов; первый элемент – строка, содержащая команду для выполнения (которую можно передать в os.system()), а второй элемент – запись mailcap для данного MIME-типа. Если подходящий MIME-тип не найден, возвращается (None, None).
key – имя требуемого поля, которое представляет тип выполняемого действия; значение по умолчанию – ‘view’, поскольку в наиболее типичном случае требуется просто просмотреть содержимое данных указанного MIME-типа. Другими возможными значениями могут быть ‘compose’ и ‘edit’, если требуется создать новое содержимое указанного MIME-типа или изменить существующее. Полный список этих полей приведён в RFC 1524.
filename – это имя файла, которое будет подставлено вместо %s в командной строке; значение по умолчанию – '/dev/null', что почти наверняка не то, что нужно, поэтому обычно его переопределяют, указав имя файла.
plist может быть списком, содержащим именованные параметры; значение по умолчанию – просто пустой список. Каждая запись в списке должна быть строкой, содержащей имя параметра, знак равенства ('=') и значение параметра. Записи mailcap могут содержать именованные параметры, например %{foo}, которые будут заменены на значение параметра с именем 'foo'. Например, если в файле mailcap была командная строка showpartial %{id} %{number} %{total}, и plist был установлен в ['id=1', 'number=2', 'total=3'], то результирующая командная строка была бы 'showpartial 1 2 3'.
В файле mailcap можно дополнительно указать поле «test» для проверки некоторого внешнего условия (например, архитектуры машины или используемой оконной системы), чтобы определить, применима ли строка mailcap. findmatch() автоматически проверяет такие условия и пропускает запись, если проверка не пройдена.
- mailcap.getcaps()¶
Возвращает словарь, сопоставляющий MIME-типы со списком записей файла mailcap. Этот словарь должен быть передан функции findmatch(). Запись хранится в виде списка словарей, но знать детали этого представления не обязательно.
Информация берётся из всех файлов mailcap, найденных в системе. Настройки в пользовательском файле mailcap $HOME/.mailcap переопределяют настройки в системных файлах mailcap /etc/mailcap, /usr/etc/mailcap и /usr/local/etc/mailcap.
Пример использования:
>>> import mailcap
>>> d=mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
('xmpeg tmp1223', {'view': 'xmpeg %s'})