Source code for libb.mime

import pathlib

import wrapt


@wrapt.patch_function_wrapper('mimetypes', 'init')
def patch_mimetypes_init(wrapped, instance, args, kwargs):
    """Patch mimetypes init to use custom known files."""
    knownfiles = pathlib.Path(__file__).parent.absolute() / 'mime.types'
    return wrapped([str(knownfiles)])


import mimetypes


[docs] def magic_mime_from_buffer(buffer: bytes) -> str: """Detect mimetype using the ``magic`` library. :param bytes buffer: Buffer from header of file. :returns: The detected mimetype. :rtype: str """ import magic return magic.from_buffer(buffer, mime=True)
[docs] def guess_extension(mimetype: str) -> str: """Guess file extension for a mimetype. :param str mimetype: The mimetype to look up. :returns: File extension (including dot) or None. :rtype: str Example:: >>> guess_extension('image/jpeg') '.jpg' """ return mimetypes.guess_extension(mimetype)
[docs] def guess_type(url: str): """Guess mimetype from a URL or filename. :param str url: URL or filename to examine. :returns: Guessed mimetype or None. :rtype: str Example:: >>> guess_type('document.pdf') 'application/pdf' >>> guess_type('image.jpg') 'image/jpeg' """ return mimetypes.guess_type(url)[0]
__all__ = ['guess_type', 'guess_extension', 'magic_mime_from_buffer'] if __name__ == '__main__': # universal type assert guess_extension('image/jpeg') == '.jpg' assert guess_type('a.jpg') == 'image/jpeg' # custom patched type assert guess_extension('x-epoc/x-sisx-app') == '.sisx' assert guess_type('a.sisx') == 'x-epoc/x-sisx-app'