Source code for sqlalchemy_media.mimetypes_

"""

mimetypes\\_ Module
------------------

Due the python bugs:

- https://bugs.python.org/issue4963
- https://bugs.python.org/issue1043134
- https://bugs.python.org/issue6626#msg91205

The database was hardcoded here.

.. versionadded:: 0.3

"""

from os.path import splitext
import magic


# Libmagic
[docs]def magic_mime_from_buffer(buffer: bytes) -> str: """ Try to detect mimetype using ``magic`` library. .. warning:: :exc:`.OptionalPackageRequirementError` will be raised if ``python-magic`` is not installed. :param buffer: buffer from header of file. :return: The mimetype """ return magic.from_buffer(buffer, mime=True)
def guess_extension(mimetype: str) -> str: return _db.get(mimetype)[0] def guess_type(url: str): return _db_reverse.get(splitext(url)[1]) _db = { 'application/andrew-inset': ('.ez',), 'application/annodex': ('.anx',), 'application/atom+xml': ('.atom',), 'application/atomcat+xml': ('.atomcat',), 'application/atomserv+xml': ('.atomsrv',), 'application/bbolin': ('.lin',), 'application/cu-seeme': ('.cu',), 'application/davmount+xml': ('.davmount',), 'application/dicom': ('.dcm',), 'application/dsptype': ('.tsp',), 'application/ecmascript': ('.es',), 'application/font-sfnt': ('.otf', '.ttf',), 'application/font-tdpfr': ('.pfr',), 'application/font-woff': ('.woff',), 'application/futuresplash': ('.spl',), 'application/gzip': ('.gz',), 'application/hta': ('.hta',), 'application/java-archive': ('.jar',), 'application/java-serialized-object': ('.ser',), 'application/java-vm': ('.class',), 'application/javascript': ('.js',), 'application/json': ('.json',), 'application/m3g': ('.m3g',), 'application/mac-binhex40': ('.hqx',), 'application/mac-compactpro': ('.cpt',), 'application/mathematica': ('.nb', '.nbp',), 'application/mbox': ('.mbox',), 'application/msaccess': ('.mdb',), 'application/msword': ('.doc', '.dot',), 'application/mxf': ('.mxf',), 'application/octet-stream': ('.bin', '.deploy', '.msu', '.msp',), 'application/oda': ('.oda',), 'application/oebps-package+xml': ('.opf',), 'application/ogg': ('.ogx',), 'application/onenote': ('.one', '.onetoc2', '.onetmp', '.onepkg',), 'application/pdf': ('.pdf',), 'application/pgp-encrypted': ('.pgp',), 'application/pgp-keys': ('.key',), 'application/pgp-signature': ('.sig',), 'application/pics-rules': ('.prf',), 'application/postscript': ( '.ps', '.ai', '.eps', '.epsi', '.epsf', '.eps2', '.eps3', ), 'application/rar': ('.rar',), 'application/rdf+xml': ('.rdf',), 'application/rtf': ('.rtf',), 'application/sla': ('.stl',), 'application/smil+xml': ('.smi', '.smil',), 'application/xhtml+xml': ('.xhtml', '.xht',), 'application/xml': ('.xml', '.xsd',), 'application/xslt+xml': ('.xsl', '.xslt',), 'application/xspf+xml': ('.xspf',), 'application/zip': ('.zip',), 'application/vnd.android.package-archive': ('.apk',), 'application/vnd.cinderella': ('.cdy',), 'application/vnd.debian.binary-package': ('.deb', '.ddeb', '.udeb',), 'application/vnd.font-fontforge-sfd': ('.sfd',), 'application/vnd.google-earth.kml+xml': ('.kml',), 'application/vnd.google-earth.kmz': ('.kmz',), 'application/vnd.mozilla.xul+xml': ('.xul',), 'application/vnd.ms-excel': ('.xls', '.xlb', '.xlt',), 'application/vnd.ms-excel.addin.macroEnabled.12': ('.xlam',), 'application/vnd.ms-excel.sheet.binary.macroEnabled.12': ('.xlsb',), 'application/vnd.ms-excel.sheet.macroEnabled.12': ('.xlsm',), 'application/vnd.ms-excel.template.macroEnabled.12': ('.xltm',), 'application/vnd.ms-fontobject': ('.eot',), 'application/vnd.ms-officetheme': ('.thmx',), 'application/vnd.ms-pki.seccat': ('.cat',), 'application/vnd.ms-powerpoint': ('.ppt', '.pps',), 'application/vnd.ms-powerpoint.addin.macroEnabled.12': ('.ppam',), 'application/vnd.ms-powerpoint.presentation.macroEnabled.12': ('.pptm',), 'application/vnd.ms-powerpoint.slide.macroEnabled.12': ('.sldm',), 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12': ('.ppsm',), 'application/vnd.ms-powerpoint.template.macroEnabled.12': ('.potm',), 'application/vnd.ms-word.document.macroEnabled.12': ('.docm',), 'application/vnd.ms-word.template.macroEnabled.12': ('.dotm',), 'application/vnd.oasis.opendocument.chart': ('.odc',), 'application/vnd.oasis.opendocument.database': ('.odb',), 'application/vnd.oasis.opendocument.formula': ('.odf',), 'application/vnd.oasis.opendocument.graphics': ('.odg',), 'application/vnd.oasis.opendocument.graphics-template': ('.otg',), 'application/vnd.oasis.opendocument.image': ('.odi',), 'application/vnd.oasis.opendocument.presentation': ('.odp',), 'application/vnd.oasis.opendocument.presentation-template': ('.otp',), 'application/vnd.oasis.opendocument.spreadsheet': ('.ods',), 'application/vnd.oasis.opendocument.spreadsheet-template': ('.ots',), 'application/vnd.oasis.opendocument.text': ('.odt',), 'application/vnd.oasis.opendocument.text-master': ('.odm',), 'application/vnd.oasis.opendocument.text-template': ('.ott',), 'application/vnd.oasis.opendocument.text-web': ('.oth',), 'application/vnd.openxmlformats-officedocument.presentationml.presentation': ('.pptx',), 'application/vnd.openxmlformats-officedocument.presentationml.slide': ('.sldx',), 'application/vnd.openxmlformats-officedocument.presentationml.slideshow': ('.ppsx',), 'application/vnd.openxmlformats-officedocument.presentationml.template': ('.potx',), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ('.xlsx',), 'application/vnd.openxmlformats-officedocument.spreadsheetml.template': ('.xltx',), 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ('.docx',), 'application/vnd.openxmlformats-officedocument.wordprocessingml.template': ('.dotx',), 'application/vnd.rim.cod': ('.cod',), 'application/vnd.smaf': ('.mmf',), 'application/vnd.stardivision.calc': ('.sdc',), 'application/vnd.stardivision.chart': ('.sds',), 'application/vnd.stardivision.draw': ('.sda',), 'application/vnd.stardivision.impress': ('.sdd',), 'application/vnd.stardivision.math': ('.sdf',), 'application/vnd.stardivision.writer': ('.sdw',), 'application/vnd.stardivision.writer-global': ('.sgl',), 'application/vnd.sun.xml.calc': ('.sxc',), 'application/vnd.sun.xml.calc.template': ('.stc',), 'application/vnd.sun.xml.draw': ('.sxd',), 'application/vnd.sun.xml.draw.template': ('.std',), 'application/vnd.sun.xml.impress': ('.sxi',), 'application/vnd.sun.xml.impress.template': ('.sti',), 'application/vnd.sun.xml.math': ('.sxm',), 'application/vnd.sun.xml.writer': ('.sxw',), 'application/vnd.sun.xml.writer.global': ('.sxg',), 'application/vnd.sun.xml.writer.template': ('.stw',), 'application/vnd.symbian.install': ('.sis',), 'application/vnd.tcpdump.pcap': ('.cap', '.pcap',), 'application/vnd.visio': ('.vsd', '.vst', '.vsw', '.vss',), 'application/vnd.wap.wbxml': ('.wbxml',), 'application/vnd.wap.wmlc': ('.wmlc',), 'application/vnd.wap.wmlscriptc': ('.wmlsc',), 'application/vnd.wordperfect': ('.wpd',), 'application/vnd.wordperfect5.1': ('.wp5',), 'application/x-123': ('.wk',), 'application/x-7z-compressed': ('.7z',), 'application/x-abiword': ('.abw',), 'application/x-apple-diskimage': ('.dmg',), 'application/x-bcpio': ('.bcpio',), 'application/x-bittorrent': ('.torrent',), 'application/x-cab': ('.cab',), 'application/x-cbr': ('.cbr',), 'application/x-cbz': ('.cbz',), 'application/x-cdf': ('.cdf', '.cda',), 'application/x-cdlink': ('.vcd',), 'application/x-chess-pgn': ('.pgn',), 'application/x-comsol': ('.mph',), 'application/x-cpio': ('.cpio',), 'application/x-csh': ('.csh',), 'application/x-debian-package': ('.deb', '.udeb',), 'application/x-director': ('.dcr', '.dir', '.dxr',), 'application/x-dms': ('.dms',), 'application/x-doom': ('.wad',), 'application/x-dvi': ('.dvi',), 'application/x-font': ('.pfa', '.pfb', '.gsf',), 'application/x-font-pcf': ('.pcf', '.pcf.Z',), 'application/x-freemind': ('.mm',), 'application/x-futuresplash': ('.spl',), 'application/x-ganttproject': ('.gan',), 'application/x-gnumeric': ('.gnumeric',), 'application/x-go-sgf': ('.sgf',), 'application/x-graphing-calculator': ('.gcf',), 'application/x-gtar': ('.gtar',), 'application/x-gtar-compressed': ('.tgz', '.taz',), 'application/x-hdf': ('.hdf',), 'application/x-hwp': ('.hwp',), 'application/x-ica': ('.ica',), 'application/x-info': ('.info',), 'application/x-internet-signup': ('.ins', '.isp',), 'application/x-iphone': ('.iii',), 'application/x-iso9660-image': ('.iso',), 'application/x-jam': ('.jam',), 'application/x-java-jnlp-file': ('.jnlp',), 'application/x-jmol': ('.jmz',), 'application/x-kchart': ('.chrt',), 'application/x-killustrator': ('.kil',), 'application/x-koan': ('.skp', '.skd', '.skt', '.skm',), 'application/x-kpresenter': ('.kpr', '.kpt',), 'application/x-kspread': ('.ksp',), 'application/x-kword': ('.kwd', '.kwt',), 'application/x-latex': ('.latex',), 'application/x-lha': ('.lha',), 'application/x-lyx': ('.lyx',), 'application/x-lzh': ('.lzh',), 'application/x-lzx': ('.lzx',), 'application/x-maker': ('.frm', '.maker', '.frame', '.fm', '.fb', '.book', '.fbdoc',), 'application/x-mif': ('.mif',), 'application/x-mpegURL': ('.m3u8',), 'application/x-ms-application': ('.application',), 'application/x-ms-manifest': ('.manifest',), 'application/x-ms-wmd': ('.wmd',), 'application/x-ms-wmz': ('.wmz',), 'application/x-msdos-program': ('.com', '.exe', '.bat', '.dll',), 'application/x-msi': ('.msi',), 'application/x-netcdf': ('.nc',), 'application/x-ns-proxy-autoconfig': ('.pac',), 'application/x-nwc': ('.nwc',), 'application/x-object': ('.o',), 'application/x-oz-application': ('.oza',), 'application/x-pkcs7-certreqresp': ('.p7r',), 'application/x-pkcs7-crl': ('.crl',), 'application/x-python-code': ('.pyc', '.pyo',), 'application/x-qgis': ('.qgs', '.shp', '.shx',), 'application/x-quicktimeplayer': ('.qtl',), 'application/x-rdp': ('.rdp',), 'application/x-redhat-package-manager': ('.rpm',), 'application/x-rss+xml': ('.rss',), 'application/x-ruby': ('.rb',), 'application/x-scilab': ('.sci', '.sce',), 'application/x-scilab-xcos': ('.xcos',), 'application/x-sh': ('.sh',), 'application/x-shar': ('.shar',), 'application/x-shockwave-flash': ('.swf', '.swfl',), 'application/x-silverlight': ('.scr',), 'application/x-sql': ('.sql',), 'application/x-stuffit': ('.sit', '.sitx',), 'application/x-sv4cpio': ('.sv4cpio',), 'application/x-sv4crc': ('.sv4crc',), 'application/x-tar': ('.tar',), 'application/x-tcl': ('.tcl',), 'application/x-tex-gf': ('.gf',), 'application/x-tex-pk': ('.pk',), 'application/x-texinfo': ('.texinfo', '.texi',), 'application/x-trash': ('.~', '.%', '.bak', '.old', '.sik',), 'application/x-troff': ('.t', '.tr', '.roff',), 'application/x-troff-man': ('.man',), 'application/x-troff-me': ('.me',), 'application/x-troff-ms': ('.ms',), 'application/x-ustar': ('.ustar',), 'application/x-wais-source': ('.src',), 'application/x-wingz': ('.wz',), 'application/x-x509-ca-cert': ('.crt',), 'application/x-xcf': ('.xcf',), 'application/x-xfig': ('.fig',), 'application/x-xpinstall': ('.xpi',), 'application/x-xz': ('.xz',), 'audio/amr': ('.amr',), 'audio/amr-wb': ('.awb',), 'audio/annodex': ('.axa',), 'audio/basic': ('.au', '.snd',), 'audio/csound': ('.csd', '.orc', '.sco',), 'audio/flac': ('.flac',), 'audio/midi': ('.mid', '.midi', '.kar',), 'audio/mpeg': ('.mpga', '.mpega', '.mp2', '.mp3', '.m4a',), 'audio/mpegurl': ('.m3u',), 'audio/ogg': ('.oga', '.ogg', '.opus', '.spx',), 'audio/prs.sid': ('.sid',), 'audio/x-aiff': ('.aif', '.aiff', '.aifc',), 'audio/x-gsm': ('.gsm',), 'audio/x-mpegurl': ('.m3u',), 'audio/x-ms-wma': ('.wma',), 'audio/x-ms-wax': ('.wax',), 'audio/x-pn-realaudio': ('.ra', '.rm', '.ram',), 'audio/x-realaudio': ('.ra',), 'audio/x-scpls': ('.pls',), 'audio/x-sd2': ('.sd2',), 'audio/x-wav': ('.wav',), 'chemical/x-alchemy': ('.alc',), 'chemical/x-cache': ('.cac', '.cache',), 'chemical/x-cache-csf': ('.csf',), 'chemical/x-cactvs-binary': ('.cbin', '.cascii', '.ctab',), 'chemical/x-cdx': ('.cdx',), 'chemical/x-cerius': ('.cer',), 'chemical/x-chem3d': ('.c3d',), 'chemical/x-chemdraw': ('.chm',), 'chemical/x-cif': ('.cif',), 'chemical/x-cmdf': ('.cmdf',), 'chemical/x-cml': ('.cml',), 'chemical/x-compass': ('.cpa',), 'chemical/x-crossfire': ('.bsd',), 'chemical/x-csml': ('.csml', '.csm',), 'chemical/x-ctx': ('.ctx',), 'chemical/x-cxf': ('.cxf', '.cef',), 'chemical/x-embl-dl-nucleotide': ('.emb', '.embl',), 'chemical/x-galactic-spc': ('.spc',), 'chemical/x-gamess-input': ('.inp', '.gam', '.gamin',), 'chemical/x-gaussian-checkpoint': ('.fch', '.fchk',), 'chemical/x-gaussian-cube': ('.cub',), 'chemical/x-gaussian-input': ('.gau', '.gjc', '.gjf',), 'chemical/x-gaussian-log': ('.gal',), 'chemical/x-gcg8-sequence': ('.gcg',), 'chemical/x-genbank': ('.gen',), 'chemical/x-hin': ('.hin',), 'chemical/x-isostar': ('.istr', '.ist',), 'chemical/x-jcamp-dx': ('.jdx', '.dx',), 'chemical/x-kinemage': ('.kin',), 'chemical/x-macmolecule': ('.mcm',), 'chemical/x-macromodel-input': ('.mmd', '.mmod',), 'chemical/x-mdl-molfile': ('.mol',), 'chemical/x-mdl-rdfile': ('.rd',), 'chemical/x-mdl-rxnfile': ('.rxn',), 'chemical/x-mdl-sdfile': ('.sd', '.sdf',), 'chemical/x-mdl-tgf': ('.tgf',), 'chemical/x-mmcif': ('.mcif',), 'chemical/x-mol2': ('.mol2',), 'chemical/x-molconn-Z': ('.b',), 'chemical/x-mopac-graph': ('.gpt',), 'chemical/x-mopac-input': ('.mop', '.mopcrt', '.mpc', '.zmt',), 'chemical/x-mopac-out': ('.moo',), 'chemical/x-mopac-vib': ('.mvb',), 'chemical/x-ncbi-asn1': ('.asn',), 'chemical/x-ncbi-asn1-ascii': ('.prt', '.ent',), 'chemical/x-ncbi-asn1-binary': ('.val', '.aso',), 'chemical/x-ncbi-asn1-spec': ('.asn',), 'chemical/x-pdb': ('.pdb', '.ent',), 'chemical/x-rosdal': ('.ros',), 'chemical/x-swissprot': ('.sw',), 'chemical/x-vamas-iso14976': ('.vms',), 'chemical/x-vmd': ('.vmd',), 'chemical/x-xtel': ('.xtel',), 'chemical/x-xyz': ('.xyz',), 'image/gif': ('.gif',), 'image/ief': ('.ief',), 'image/jp2': ('.jp2', '.jpg2',), 'image/jpeg': ('.jpg', '.jpeg', '.jpe',), 'image/jpm': ('.jpm',), 'image/jpx': ('.jpx', '.jpf',), 'image/pcx': ('.pcx',), 'image/png': ('.png',), 'image/svg+xml': ('.svg', '.svgz',), 'image/tiff': ('.tiff', '.tif',), 'image/vnd.djvu': ('.djvu', '.djv',), 'image/vnd.microsoft.icon': ('.ico',), 'image/vnd.wap.wbmp': ('.wbmp',), 'image/x-canon-cr2': ('.cr2',), 'image/x-canon-crw': ('.crw',), 'image/x-cmu-raster': ('.ras',), 'image/x-coreldraw': ('.cdr',), 'image/x-coreldrawpattern': ('.pat',), 'image/x-coreldrawtemplate': ('.cdt',), 'image/x-corelphotopaint': ('.cpt',), 'image/x-epson-erf': ('.erf',), 'image/x-jg': ('.art',), 'image/x-jng': ('.jng',), 'image/x-ms-bmp': ('.bmp',), 'image/x-nikon-nef': ('.nef',), 'image/x-olympus-orf': ('.orf',), 'image/x-photoshop': ('.psd',), 'image/x-portable-anymap': ('.pnm',), 'image/x-portable-bitmap': ('.pbm',), 'image/x-portable-graymap': ('.pgm',), 'image/x-portable-pixmap': ('.ppm',), 'image/x-rgb': ('.rgb',), 'image/x-xbitmap': ('.xbm',), 'image/x-xpixmap': ('.xpm',), 'image/x-xwindowdump': ('.xwd',), 'message/rfc822': ('.eml',), 'model/iges': ('.igs', '.iges',), 'model/mesh': ('.msh', '.mesh', '.silo',), 'model/vrml': ('.wrl', '.vrml',), 'model/x3d+vrml': ('.x3dv',), 'model/x3d+xml': ('.x3d',), 'model/x3d+binary': ('.x3db',), 'text/cache-manifest': ('.appcache',), 'text/calendar': ('.ics', '.icz',), 'text/css': ('.css',), 'text/csv': ('.csv',), 'text/h323': ('.323',), 'text/html': ('.html', '.htm', '.shtml',), 'text/iuls': ('.uls',), 'text/mathml': ('.mml',), 'text/plain': ('.txt', '.text', '.asc', '.pot', '.brf', '.srt',), 'text/richtext': ('.rtx',), 'text/scriptlet': ('.sct', '.wsc',), 'text/texmacs': ('.tm',), 'text/tab-separated-values': ('.tsv',), 'text/turtle': ('.ttl',), 'text/vcard': ('.vcf', '.vcard',), 'text/vnd.sun.j2me.app-descriptor': ('.jad',), 'text/vnd.wap.wml': ('.wml',), 'text/vnd.wap.wmlscript': ('.wmls',), 'text/x-bibtex': ('.bib',), 'text/x-boo': ('.boo',), 'text/x-c++hdr': ('.h++', '.hpp', '.hxx', '.hh',), 'text/x-c++src': ('.c++', '.cpp', '.cxx', '.cc',), 'text/x-chdr': ('.h',), 'text/x-component': ('.htc',), 'text/x-csh': ('.csh',), 'text/x-csrc': ('.c',), 'text/x-dsrc': ('.d',), 'text/x-diff': ('.diff', '.patch',), 'text/x-haskell': ('.hs',), 'text/x-java': ('.java',), 'text/x-lilypond': ('.ly',), 'text/x-literate-haskell': ('.lhs',), 'text/x-moc': ('.moc',), 'text/x-pascal': ('.p', '.pas',), 'text/x-pcs-gcd': ('.gcd',), 'text/x-perl': ('.pl', '.pm',), 'text/x-python': ('.py',), 'text/x-scala': ('.scala',), 'text/x-setext': ('.etx',), 'text/x-sfv': ('.sfv',), 'text/x-sh': ('.sh',), 'text/x-tcl': ('.tcl', '.tk',), 'text/x-tex': ('.tex', '.ltx', '.sty', '.cls',), 'text/x-vcalendar': ('.vcs',), 'video/3gpp': ('.3gp',), 'video/annodex': ('.axv',), 'video/dl': ('.dl',), 'video/dv': ('.dif', '.dv',), 'video/fli': ('.fli',), 'video/gl': ('.gl',), 'video/mpeg': ('.mpeg', '.mpg', '.mpe',), 'video/MP2T': ('.ts',), 'video/mp4': ('.mp4',), 'video/quicktime': ('.qt', '.mov',), 'video/ogg': ('.ogv',), 'video/webm': ('.webm',), 'video/vnd.mpegurl': ('.mxu',), 'video/x-flv': ('.flv',), 'video/x-la-asf': ('.lsf', '.lsx',), 'video/x-mng': ('.mng',), 'video/x-ms-asf': ('.asf', '.asx',), 'video/x-ms-wm': ('.wm',), 'video/x-ms-wmv': ('.wmv',), 'video/x-ms-wmx': ('.wmx',), 'video/x-ms-wvx': ('.wvx',), 'video/x-msvideo': ('.avi',), 'video/x-sgi-movie': ('.movie',), 'video/x-matroska': ('.mpv', '.mkv',), 'x-conference/x-cooltalk': ('.ice',), 'x-epoc/x-sisx-app': ('.sisx',), 'x-world/x-vrml': ('.vrm', '.vrml', '.wrl',), } _db_reverse = {e: k for k, v in _db.items() for e in v} if __name__ == '__main__': # pragma: no cover print(guess_extension('image/jpeg')) print(guess_type('a' + guess_extension('image/jpeg')))