@@ -66,13 +66,13 @@ class MimeTypes:
66
66
def __init__ (self , filenames = (), strict = True ):
67
67
if not inited :
68
68
init ()
69
- self .encodings_map = encodings_map .copy ()
70
- self .suffix_map = suffix_map .copy ()
69
+ self .encodings_map = _encodings_map_default .copy ()
70
+ self .suffix_map = _suffix_map_default .copy ()
71
71
self .types_map = ({}, {}) # dict for (non-strict, strict)
72
72
self .types_map_inv = ({}, {})
73
- for (ext , type ) in types_map .items ():
73
+ for (ext , type ) in _types_map_default .items ():
74
74
self .add_type (type , ext , True )
75
- for (ext , type ) in common_types .items ():
75
+ for (ext , type ) in _common_types_default .items ():
76
76
self .add_type (type , ext , False )
77
77
for name in filenames :
78
78
self .read (name , strict )
@@ -346,11 +346,19 @@ def init(files=None):
346
346
global suffix_map , types_map , encodings_map , common_types
347
347
global inited , _db
348
348
inited = True # so that MimeTypes.__init__() doesn't call us again
349
- db = MimeTypes ()
350
- if files is None :
349
+
350
+ if files is None or _db is None :
351
+ db = MimeTypes ()
351
352
if _winreg :
352
353
db .read_windows_registry ()
353
- files = knownfiles
354
+
355
+ if files is None :
356
+ files = knownfiles
357
+ else :
358
+ files = knownfiles + list (files )
359
+ else :
360
+ db = _db
361
+
354
362
for file in files :
355
363
if os .path .isfile (file ):
356
364
db .read (file )
@@ -374,12 +382,12 @@ def read_mime_types(file):
374
382
375
383
376
384
def _default_mime_types ():
377
- global suffix_map
378
- global encodings_map
379
- global types_map
380
- global common_types
385
+ global suffix_map , _suffix_map_default
386
+ global encodings_map , _encodings_map_default
387
+ global types_map , _types_map_default
388
+ global common_types , _common_types_default
381
389
382
- suffix_map = {
390
+ suffix_map = _suffix_map_default = {
383
391
'.svgz' : '.svg.gz' ,
384
392
'.tgz' : '.tar.gz' ,
385
393
'.taz' : '.tar.gz' ,
@@ -388,7 +396,7 @@ def _default_mime_types():
388
396
'.txz' : '.tar.xz' ,
389
397
}
390
398
391
- encodings_map = {
399
+ encodings_map = _encodings_map_default = {
392
400
'.gz' : 'gzip' ,
393
401
'.Z' : 'compress' ,
394
402
'.bz2' : 'bzip2' ,
@@ -399,152 +407,155 @@ def _default_mime_types():
399
407
# at http://www.iana.org/assignments/media-types
400
408
# or extensions, i.e. using the x- prefix
401
409
402
- # If you add to these, please keep them sorted!
403
- types_map = {
410
+ # If you add to these, please keep them sorted by mime type.
411
+ # Make sure the entry with the preferred file extension for a particular mime type
412
+ # appears before any others of the same mimetype.
413
+ types_map = _types_map_default = {
414
+ '.js' : 'application/javascript' ,
415
+ '.mjs' : 'application/javascript' ,
416
+ '.json' : 'application/json' ,
417
+ '.doc' : 'application/msword' ,
418
+ '.dot' : 'application/msword' ,
419
+ '.wiz' : 'application/msword' ,
420
+ '.bin' : 'application/octet-stream' ,
404
421
'.a' : 'application/octet-stream' ,
422
+ '.dll' : 'application/octet-stream' ,
423
+ '.exe' : 'application/octet-stream' ,
424
+ '.o' : 'application/octet-stream' ,
425
+ '.obj' : 'application/octet-stream' ,
426
+ '.so' : 'application/octet-stream' ,
427
+ '.oda' : 'application/oda' ,
428
+ '.pdf' : 'application/pdf' ,
429
+ '.p7c' : 'application/pkcs7-mime' ,
430
+ '.ps' : 'application/postscript' ,
405
431
'.ai' : 'application/postscript' ,
406
- '.aif' : 'audio/x-aiff' ,
407
- '.aifc' : 'audio/x-aiff' ,
408
- '.aiff' : 'audio/x-aiff' ,
409
- '.au' : 'audio/basic' ,
410
- '.avi' : 'video/x-msvideo' ,
411
- '.bat' : 'text/plain' ,
432
+ '.eps' : 'application/postscript' ,
433
+ '.m3u' : 'application/vnd.apple.mpegurl' ,
434
+ '.m3u8' : 'application/vnd.apple.mpegurl' ,
435
+ '.xls' : 'application/vnd.ms-excel' ,
436
+ '.xlb' : 'application/vnd.ms-excel' ,
437
+ '.ppt' : 'application/vnd.ms-powerpoint' ,
438
+ '.pot' : 'application/vnd.ms-powerpoint' ,
439
+ '.ppa' : 'application/vnd.ms-powerpoint' ,
440
+ '.pps' : 'application/vnd.ms-powerpoint' ,
441
+ '.pwz' : 'application/vnd.ms-powerpoint' ,
442
+ '.wasm' : 'application/wasm' ,
412
443
'.bcpio' : 'application/x-bcpio' ,
413
- '.bin' : 'application/octet-stream' ,
414
- '.bmp' : 'image/bmp' ,
415
- '.c' : 'text/plain' ,
416
- '.cdf' : 'application/x-netcdf' ,
417
444
'.cpio' : 'application/x-cpio' ,
418
445
'.csh' : 'application/x-csh' ,
419
- '.css' : 'text/css' ,
420
- '.csv' : 'text/csv' ,
421
- '.dll' : 'application/octet-stream' ,
422
- '.doc' : 'application/msword' ,
423
- '.dot' : 'application/msword' ,
424
446
'.dvi' : 'application/x-dvi' ,
425
- '.eml' : 'message/rfc822' ,
426
- '.eps' : 'application/postscript' ,
427
- '.etx' : 'text/x-setext' ,
428
- '.exe' : 'application/octet-stream' ,
429
- '.gif' : 'image/gif' ,
430
447
'.gtar' : 'application/x-gtar' ,
431
- '.h' : 'text/plain' ,
432
448
'.hdf' : 'application/x-hdf' ,
433
- '.htm' : 'text/html' ,
434
- '.html' : 'text/html' ,
435
- '.ico' : 'image/vnd.microsoft.icon' ,
436
- '.ief' : 'image/ief' ,
437
- '.jpe' : 'image/jpeg' ,
438
- '.jpeg' : 'image/jpeg' ,
439
- '.jpg' : 'image/jpeg' ,
440
- '.js' : 'application/javascript' ,
441
- '.json' : 'application/json' ,
442
- '.ksh' : 'text/plain' ,
443
449
'.latex' : 'application/x-latex' ,
444
- '.m1v' : 'video/mpeg' ,
445
- '.m3u' : 'application/vnd.apple.mpegurl' ,
446
- '.m3u8' : 'application/vnd.apple.mpegurl' ,
447
- '.man' : 'application/x-troff-man' ,
448
- '.me' : 'application/x-troff-me' ,
449
- '.mht' : 'message/rfc822' ,
450
- '.mhtml' : 'message/rfc822' ,
451
450
'.mif' : 'application/x-mif' ,
452
- '.mjs' : 'application/javascript' ,
453
- '.mov' : 'video/quicktime' ,
454
- '.movie' : 'video/x-sgi-movie' ,
455
- '.mp2' : 'audio/mpeg' ,
456
- '.mp3' : 'audio/mpeg' ,
457
- '.mp4' : 'video/mp4' ,
458
- '.mpa' : 'video/mpeg' ,
459
- '.mpe' : 'video/mpeg' ,
460
- '.mpeg' : 'video/mpeg' ,
461
- '.mpg' : 'video/mpeg' ,
462
- '.ms' : 'application/x-troff-ms' ,
451
+ '.cdf' : 'application/x-netcdf' ,
463
452
'.nc' : 'application/x-netcdf' ,
464
- '.nws' : 'message/rfc822' ,
465
- '.o' : 'application/octet-stream' ,
466
- '.obj' : 'application/octet-stream' ,
467
- '.oda' : 'application/oda' ,
468
453
'.p12' : 'application/x-pkcs12' ,
469
- '.p7c' : 'application/pkcs7-mime' ,
470
- '.pbm' : 'image/x-portable-bitmap' ,
471
- '.pdf' : 'application/pdf' ,
472
454
'.pfx' : 'application/x-pkcs12' ,
473
- '.pgm' : 'image/x-portable-graymap' ,
474
- '.pl' : 'text/plain' ,
475
- '.png' : 'image/png' ,
476
- '.pnm' : 'image/x-portable-anymap' ,
477
- '.pot' : 'application/vnd.ms-powerpoint' ,
478
- '.ppa' : 'application/vnd.ms-powerpoint' ,
479
- '.ppm' : 'image/x-portable-pixmap' ,
480
- '.pps' : 'application/vnd.ms-powerpoint' ,
481
- '.ppt' : 'application/vnd.ms-powerpoint' ,
482
- '.ps' : 'application/postscript' ,
483
- '.pwz' : 'application/vnd.ms-powerpoint' ,
484
- '.py' : 'text/x-python' ,
455
+ '.ram' : 'application/x-pn-realaudio' ,
485
456
'.pyc' : 'application/x-python-code' ,
486
457
'.pyo' : 'application/x-python-code' ,
487
- '.qt' : 'video/quicktime' ,
488
- '.ra' : 'audio/x-pn-realaudio' ,
489
- '.ram' : 'application/x-pn-realaudio' ,
490
- '.ras' : 'image/x-cmu-raster' ,
491
- '.rdf' : 'application/xml' ,
492
- '.rgb' : 'image/x-rgb' ,
493
- '.roff' : 'application/x-troff' ,
494
- '.rtx' : 'text/richtext' ,
495
- '.sgm' : 'text/x-sgml' ,
496
- '.sgml' : 'text/x-sgml' ,
497
458
'.sh' : 'application/x-sh' ,
498
459
'.shar' : 'application/x-shar' ,
499
- '.snd' : 'audio/basic' ,
500
- '.so' : 'application/octet-stream' ,
501
- '.src' : 'application/x-wais-source' ,
460
+ '.swf' : 'application/x-shockwave-flash' ,
502
461
'.sv4cpio' : 'application/x-sv4cpio' ,
503
462
'.sv4crc' : 'application/x-sv4crc' ,
504
- '.svg' : 'image/svg+xml' ,
505
- '.swf' : 'application/x-shockwave-flash' ,
506
- '.t' : 'application/x-troff' ,
507
463
'.tar' : 'application/x-tar' ,
508
464
'.tcl' : 'application/x-tcl' ,
509
465
'.tex' : 'application/x-tex' ,
510
466
'.texi' : 'application/x-texinfo' ,
511
467
'.texinfo' : 'application/x-texinfo' ,
512
- '.tif ' : 'image/tiff ' ,
513
- '.tiff ' : 'image/tiff ' ,
468
+ '.roff ' : 'application/x-troff ' ,
469
+ '.t ' : 'application/x-troff ' ,
514
470
'.tr' : 'application/x-troff' ,
515
- '.tsv' : 'text/tab-separated-values' ,
516
- '.txt' : 'text/plain' ,
471
+ '.man' : 'application/x-troff-man' ,
472
+ '.me' : 'application/x-troff-me' ,
473
+ '.ms' : 'application/x-troff-ms' ,
517
474
'.ustar' : 'application/x-ustar' ,
518
- '.vcf' : 'text/x-vcard' ,
519
- '.wasm' : 'application/wasm' ,
520
- '.wav' : 'audio/x-wav' ,
521
- '.webm' : 'video/webm' ,
522
- '.wiz' : 'application/msword' ,
475
+ '.src' : 'application/x-wais-source' ,
476
+ '.xsl' : 'application/xml' ,
477
+ '.rdf' : 'application/xml' ,
523
478
'.wsdl' : 'application/xml' ,
524
- '.xbm' : 'image/x-xbitmap' ,
525
- '.xlb' : 'application/vnd.ms-excel' ,
526
- '.xls' : 'application/vnd.ms-excel' ,
527
- '.xml' : 'text/xml' ,
528
479
'.xpdl' : 'application/xml' ,
480
+ '.zip' : 'application/zip' ,
481
+ '.au' : 'audio/basic' ,
482
+ '.snd' : 'audio/basic' ,
483
+ '.mp3' : 'audio/mpeg' ,
484
+ '.mp2' : 'audio/mpeg' ,
485
+ '.aif' : 'audio/x-aiff' ,
486
+ '.aifc' : 'audio/x-aiff' ,
487
+ '.aiff' : 'audio/x-aiff' ,
488
+ '.ra' : 'audio/x-pn-realaudio' ,
489
+ '.wav' : 'audio/x-wav' ,
490
+ '.bmp' : 'image/bmp' ,
491
+ '.gif' : 'image/gif' ,
492
+ '.ief' : 'image/ief' ,
493
+ '.jpg' : 'image/jpeg' ,
494
+ '.jpe' : 'image/jpeg' ,
495
+ '.jpeg' : 'image/jpeg' ,
496
+ '.png' : 'image/png' ,
497
+ '.svg' : 'image/svg+xml' ,
498
+ '.tiff' : 'image/tiff' ,
499
+ '.tif' : 'image/tiff' ,
500
+ '.ico' : 'image/vnd.microsoft.icon' ,
501
+ '.ras' : 'image/x-cmu-raster' ,
502
+ '.bmp' : 'image/x-ms-bmp' ,
503
+ '.pnm' : 'image/x-portable-anymap' ,
504
+ '.pbm' : 'image/x-portable-bitmap' ,
505
+ '.pgm' : 'image/x-portable-graymap' ,
506
+ '.ppm' : 'image/x-portable-pixmap' ,
507
+ '.rgb' : 'image/x-rgb' ,
508
+ '.xbm' : 'image/x-xbitmap' ,
529
509
'.xpm' : 'image/x-xpixmap' ,
530
- '.xsl' : 'application/xml' ,
531
510
'.xwd' : 'image/x-xwindowdump' ,
532
- '.zip' : 'application/zip' ,
511
+ '.eml' : 'message/rfc822' ,
512
+ '.mht' : 'message/rfc822' ,
513
+ '.mhtml' : 'message/rfc822' ,
514
+ '.nws' : 'message/rfc822' ,
515
+ '.css' : 'text/css' ,
516
+ '.csv' : 'text/csv' ,
517
+ '.html' : 'text/html' ,
518
+ '.htm' : 'text/html' ,
519
+ '.txt' : 'text/plain' ,
520
+ '.bat' : 'text/plain' ,
521
+ '.c' : 'text/plain' ,
522
+ '.h' : 'text/plain' ,
523
+ '.ksh' : 'text/plain' ,
524
+ '.pl' : 'text/plain' ,
525
+ '.rtx' : 'text/richtext' ,
526
+ '.tsv' : 'text/tab-separated-values' ,
527
+ '.py' : 'text/x-python' ,
528
+ '.etx' : 'text/x-setext' ,
529
+ '.sgm' : 'text/x-sgml' ,
530
+ '.sgml' : 'text/x-sgml' ,
531
+ '.vcf' : 'text/x-vcard' ,
532
+ '.xml' : 'text/xml' ,
533
+ '.mp4' : 'video/mp4' ,
534
+ '.mpeg' : 'video/mpeg' ,
535
+ '.m1v' : 'video/mpeg' ,
536
+ '.mpa' : 'video/mpeg' ,
537
+ '.mpe' : 'video/mpeg' ,
538
+ '.mpg' : 'video/mpeg' ,
539
+ '.mov' : 'video/quicktime' ,
540
+ '.qt' : 'video/quicktime' ,
541
+ '.webm' : 'video/webm' ,
542
+ '.avi' : 'video/x-msvideo' ,
543
+ '.movie' : 'video/x-sgi-movie' ,
533
544
}
534
545
535
546
# These are non-standard types, commonly found in the wild. They will
536
547
# only match if strict=0 flag is given to the API methods.
537
548
538
549
# Please sort these too
539
- common_types = {
540
- '.jpg' : 'image/jpg' ,
541
- '.mid' : 'audio/midi' ,
550
+ common_types = _common_types_default = {
551
+ '.rtf' : 'application/rtf' ,
542
552
'.midi' : 'audio/midi' ,
553
+ '.mid' : 'audio/midi' ,
554
+ '.jpg' : 'image/jpg' ,
555
+ '.pict' : 'image/pict' ,
543
556
'.pct' : 'image/pict' ,
544
557
'.pic' : 'image/pict' ,
545
- '.pict' : 'image/pict' ,
546
- '.rtf' : 'application/rtf' ,
547
- '.xul' : 'text/xul'
558
+ '.xul' : 'text/xul' ,
548
559
}
549
560
550
561
0 commit comments