Summary
This package patches the python standard library’s mailcap module in order to correctly handle windcard entries.
The bug is documented on the bug tracker here: issue 14977
Installation
$ pip install mailcap-fix
Example
Consider a mailcap file that contains the following two lines
image/*; feh %s image/jpeg; eog %s
Because the image/* entry is defined first, it should take precedence over the image/jpeg entry when searching for a match. This behavior is defined by RFC 1524. However, the standard library’s implementation will always evaluate wildcard entries last.
Before
>>> import mailcap
>>> d = mailcap.getcaps()
>>> # Incorrectly returns the second entry
>>> mailcap.findmatch(d, 'image/jpeg', filename='test.jpg')
('eog test.jpg', {'view': 'eog %s'})
After
>>> from mailcap_fix import mailcap
>>> d = mailcap.getcaps()
>>> # Correctly returns the wildcard entry
>>> mailcap.findmatch(d, 'image/jpeg', filename='test.jpg')
('feh test.jpg', {'view': 'feh %s', 'lineno': 0})
How it works
The goal of this patch is to conform to RFCC 1524, while preserving as much backwards compatibility as possible and without adding any “magic”.
mailcap_fix adds a new field lineno to each entry in the mailcap dict. This line number is then used to sort entries in descending order when searching for a match. For backwards compatability, if lineno is not present entries will simply not be sorted. Because RFC 1524 defines a whitelist of valid mailcap fieldnames, the addition of lineno should not conflict with any other mailcap fields.
Benchmark
mailcap.get_caps() - per file |
||
|---|---|---|
mailcap |
mailcap_fix |
|
0.081881 ms |
0.084525 ms |
|
17.746289 ms |
18.407623 ms |
mailcap.lookup() - avg function call |
||
|---|---|---|
mailcap |
mailcap_fix |
|
0.000996 ms |
0.003144 ms |
|
0.000798 ms |
0.002731 ms |
Release files for mailcap-fix 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mailcap-fix-1.0.1.tar.gz | 6.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mailcap_fix-1.0.1-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 16.8 kB
Release files / mailcap-fix-1.0.1.tar.gz
| Download URL | mailcap-fix-1.0.1.tar.gz |
|---|---|
| Size | 6.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
113c0b36091ac0b8181c33f2cd4905280e1bb316383d3c3fcae98c6df094910a
|
|
BLAKE2b-256 checksum How to use checksums |
c2e555485018f29af549d94e7a52ce9271ec88ff5f5f2f8246bcc7ce13e3897f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / mailcap_fix-1.0.1-py2.py3-none-any.whl
| Download URL | mailcap_fix-1.0.1-py2.py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
fd1371d9599fde5724037a02caede75da1b8b425f10da710d1b7798ac14b2540
|
|
BLAKE2b-256 checksum How to use checksums |
0b0d321abc5ca1efb647b51611bda34d6884099d390492c4627dc8b4c2322ff7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |