src/eric7/Utilities/MimeTypes.py

Sat, 23 Dec 2023 15:48:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 23 Dec 2023 15:48:12 +0100
branch
eric7
changeset 10439
21c28b0f9e41
parent 9894
8f0da84f216f
child 10929
edfd452bb9be
permissions
-rw-r--r--

Updated copyright for 2024.

3565
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9894
diff changeset
3 # Copyright (c) 2014 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
3565
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing mimetype dependent functions.
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9563
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
10 import fnmatch
3565
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import mimetypes
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
9563
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
13 from PyQt6.QtCore import QCoreApplication
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
14
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
15 from eric7 import Preferences
9563
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
16 from eric7.EricWidgets import EricMessageBox
3565
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 def isTextFile(filename):
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Function to test, if the given file is a text (i.e. editable) file.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
22
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
23 @param filename name of the file to be checked
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
24 @type str
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
25 @return flag indicating an editable file
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
26 @rtype bool
3565
8e1cd7721515 Added a utility function to handle mime types other than 'text' that are editable text files as well.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
9534
5ed8445f3b31 Improved the file type determination (i.e. is it text) and added a configurable option to even load files, whose type cannot be determine as being text.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
28 mimetype = mimetypes.guess_type(filename)[0]
9563
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
29 if mimetype is None:
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
30 return (
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
31 Preferences.getUI("LoadUnknownMimeTypeFiles")
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
32 or any(
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
33 fnmatch.fnmatch(filename, pat)
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
34 for pat in Preferences.getUI("TextFilePatterns")
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
35 )
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
36 or EricMessageBox.yesNo(
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
37 None,
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
38 QCoreApplication.translate("MimeTypes", "Open File"),
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
39 QCoreApplication.translate(
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
40 "MimeTypes",
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
41 "<p>Is the file <b>{0}</b> a text file to be opened in eric?</p>"
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
42 "<p><b>Note:</b> You may suppress this question by adding a pattern"
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
43 " to the list of known text files on the <b>MimeTypes</b>"
9576
be9f8e7e42e0 Corrected some 'wrong' string quotes caused by the Black line merging.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9572
diff changeset
44 " configuration page.</p>",
9563
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
45 ).format(filename),
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
46 )
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
47 )
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9559
diff changeset
48 else:
9894
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
49 return (
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
50 mimetype.split("/")[0] == "text"
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
51 or mimetype in Preferences.getUI("TextMimeTypes")
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
52 or EricMessageBox.yesNo(
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
53 None,
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
54 QCoreApplication.translate("MimeTypes", "Open File"),
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
55 QCoreApplication.translate(
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
56 "MimeTypes",
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
57 "<p>The file <b>{0}</b> has the mime type <b>{1}</b>. This type"
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
58 " is not recognized as being text to be opened in eric. Is this"
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
59 " an editable text file?</p>"
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
60 "<p><b>Note:</b> You may suppress this question by adding an"
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
61 " entry to the list of known text file types on the"
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
62 " <b>MimeTypes</b> configuration page.</p>",
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
63 ).format(filename, mimetype),
8f0da84f216f Added the mimetype 'application/sql' to the default list of text mimetypes and added a dialog in case an unknown mimetype was discovered (see issue490).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
64 )
9534
5ed8445f3b31 Improved the file type determination (i.e. is it text) and added a configurable option to even load files, whose type cannot be determine as being text.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
65 )
4101
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
66
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
67
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
68 def mimeType(filename):
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
69 """
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
70 Function to get the mime type of a file.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
71
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
72 @param filename name of the file to be checked
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
73 @type str
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
74 @return mime type of the file
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
75 @rtype str
4101
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
76 """
68c26f72c0d1 Added the capability to show a file's mime type and to add it to the text mime types list to the project others browser and the file browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4097
diff changeset
77 return mimetypes.guess_type(filename)[0]

eric ide

mercurial