src/eric7/CodeFormatting/IsortConfigurationDialog.py

Mon, 04 Mar 2024 11:42:39 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 04 Mar 2024 11:42:39 +0100
branch
eric7
changeset 10621
f5631f40c4d9
parent 10439
21c28b0f9e41
child 11090
f5f5f5803935
permissions
-rw-r--r--

Corrected some code formatting issues.

9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10373
diff changeset
3 # Copyright (c) 2022 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to enter the parameters for an isort formatting run.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import contextlib
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import copy
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import pathlib
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
14 import tomlkit
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
15
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
16 from isort import Config
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
17 from isort.profiles import profiles
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
18 from isort.settings import VALID_PY_TARGETS
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
19 from isort.wrap_modes import WrapModes
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from PyQt6.QtCore import pyqtSlot
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from PyQt6.QtGui import QGuiApplication
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from eric7.EricWidgets import EricMessageBox
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from eric7.EricWidgets.EricApplication import ericApp
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 from .Ui_IsortConfigurationDialog import Ui_IsortConfigurationDialog
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 class IsortConfigurationDialog(QDialog, Ui_IsortConfigurationDialog):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 Class implementing a dialog to enter the parameters for an isort formatting run.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 def __init__(self, withProject=True, onlyProject=False, parent=None):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Constructor
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param withProject flag indicating to look for project configurations
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 (defaults to True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type bool (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param onlyProject flag indicating to only look for project configurations
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 (defaults to False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type bool (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param parent reference to the parent widget (defaults to None)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @type QWidget (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 super().__init__(parent)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.setupUi(self)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.profileComboBox.lineEdit().setClearButtonEnabled(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__parameterWidgetMapping = {
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 "profile": self.profileComboBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 "py_version": self.pythonComboBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 "multi_line_output": self.multiLineComboBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 "sort_order": self.sortOrderComboBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 "supported_extensions": self.extensionsEdit,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 "line_length": self.lineLengthSpinBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 "lines_before_imports": self.linesBeforeImportsSpinBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 "lines_after_imports": self.linesAfterImportsSpinBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 "lines_between_sections": self.linesBetweenSectionsSpinBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 "lines_between_types": self.linesBetweenTypesSpinBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 "include_trailing_comma": self.trailingCommaCheckBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 "use_parentheses": self.parenthesesCheckBox,
9476
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
66 "combine_as_imports": self.combineAsCheckBox,
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 "sections": self.sectionsEdit,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 "extend_skip_glob": self.excludeEdit,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 "case_sensitive": self.sortCaseSensitiveCheckBox,
9476
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
70 "force_sort_within_sections": self.sortIgnoreStyleCheckBox,
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
71 "from_first": self.sortFromFirstCheckBox,
9630
4cd6e4b1db12 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9476
diff changeset
72 "known_first_party": self.firstPartyEdit,
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 }
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__project = (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 ericApp().getObject("Project") if (withProject or onlyProject) else None
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__onlyProject = onlyProject
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.__pyprojectData = {}
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__projectData = {}
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__defaultConfig = Config()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__tomlButton = self.buttonBox.addButton(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.tr("Generate TOML"), QDialogButtonBox.ButtonRole.ActionRole
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__tomlButton.setToolTip(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.tr("Place a code snippet for 'pyproject.toml' into the clipboard.")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 self.__tomlButton.clicked.connect(self.__createTomlSnippet)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.profileComboBox.addItem("")
10373
093dcebe5ecb Corrected some uses of dict.keys(), dict.values() and dict.items().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
94 self.profileComboBox.addItems(sorted(profiles))
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.pythonComboBox.addItem("", "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.pythonComboBox.addItem(self.tr("All Versions"), "all")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 for pyTarget in VALID_PY_TARGETS:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 if pyTarget.startswith("3"):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.pythonComboBox.addItem(
10621
f5631f40c4d9 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
101 (
f5631f40c4d9 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
102 self.tr("Python {0}").format(pyTarget)
f5631f40c4d9 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
103 if len(pyTarget) == 1
f5631f40c4d9 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
104 else self.tr("Python {0}.{1}").format(pyTarget[0], pyTarget[1:])
f5631f40c4d9 Corrected some code formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
105 ),
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 pyTarget,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.sortOrderComboBox.addItem("", "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.sortOrderComboBox.addItem("Natural", "natural")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.sortOrderComboBox.addItem("Native Python", "native")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.__populateMultiLineComboBox()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 # setup the source combobox
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.sourceComboBox.addItem("", "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 if self.__project:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 pyprojectPath = (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 pathlib.Path(self.__project.getProjectPath()) / "pyproject.toml"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 if pyprojectPath.exists():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 with contextlib.suppress(tomlkit.exceptions.ParseError, OSError):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 with pyprojectPath.open("r", encoding="utf-8") as f:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 data = tomlkit.load(f)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 config = data.get("tool", {}).get("isort", {})
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 if config:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.__pyprojectData = {
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 k.replace("--", ""): v for k, v in config.items()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 }
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.sourceComboBox.addItem("pyproject.toml", "pyproject")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 if self.__project.getData("OTHERTOOLSPARMS", "isort") is not None:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.__projectData = copy.deepcopy(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 self.__project.getData("OTHERTOOLSPARMS", "isort")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 self.sourceComboBox.addItem(self.tr("Project File"), "project")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 elif onlyProject:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.sourceComboBox.addItem(self.tr("Project File"), "project")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 if not onlyProject:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 self.sourceComboBox.addItem(self.tr("Defaults"), "default")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 self.sourceComboBox.addItem(self.tr("Configuration Below"), "dialog")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 if self.__projectData:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 source = self.__projectData.get("config_source", "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.sourceComboBox.setCurrentIndex(self.sourceComboBox.findData(source))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 elif onlyProject:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.sourceComboBox.setCurrentIndex(self.sourceComboBox.findData("project"))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 def __populateMultiLineComboBox(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 Private method to populate the multi line output selector.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.multiLineComboBox.addItem("", -1)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 for entry, wrapMode in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 (self.tr("Grid"), WrapModes.GRID),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 (self.tr("Vertical"), WrapModes.VERTICAL),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 (self.tr("Hanging Indent"), WrapModes.HANGING_INDENT),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.tr("Vertical Hanging Indent"),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 WrapModes.VERTICAL_HANGING_INDENT,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 ),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 (self.tr("Hanging Grid"), WrapModes.VERTICAL_GRID),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 (self.tr("Hanging Grid Grouped"), WrapModes.VERTICAL_GRID_GROUPED),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 (self.tr("NOQA"), WrapModes.NOQA),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.tr("Vertical Hanging Indent Bracket"),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 WrapModes.VERTICAL_HANGING_INDENT_BRACKET,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 ),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 self.tr("Vertical Prefix From Module Import"),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 WrapModes.VERTICAL_PREFIX_FROM_MODULE_IMPORT,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 ),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 self.tr("Hanging Indent With Parentheses"),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 WrapModes.HANGING_INDENT_WITH_PARENTHESES,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 ),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 (self.tr("Backslash Grid"), WrapModes.BACKSLASH_GRID),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 self.multiLineComboBox.addItem(entry, wrapMode.value)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 def __loadConfiguration(self, confDict):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 Private method to load the configuration section with data of the given
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 dictionary.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 Note: Default values will be loaded for missing parameters.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 @param confDict reference to the data to be loaded
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 @type dict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.pythonComboBox.setCurrentIndex(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 self.pythonComboBox.findData(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 str(confDict["py_version"])
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 if "py_version" in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 else self.__defaultConfig.py_version.replace("py", "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 self.multiLineComboBox.setCurrentIndex(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.multiLineComboBox.findData(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 int(confDict["multi_line_output"])
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 if "multi_line_output" in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 else self.__defaultConfig.multi_line_output.value
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 self.sortOrderComboBox.setCurrentIndex(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 self.sortOrderComboBox.findData(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 str(confDict["sort_order"])
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 if "sort_order" in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 else self.__defaultConfig.sort_order
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 self.extensionsEdit.setText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 " ".join(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 confDict["supported_extensions"]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 if "supported_extensions" in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 else self.__defaultConfig.supported_extensions
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 for parameter in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 "line_length",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 "lines_before_imports",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 "lines_after_imports",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 "lines_between_sections",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 "lines_between_types",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 # set spin box values
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 self.__parameterWidgetMapping[parameter].setValue(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 confDict[parameter]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 if parameter in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 else getattr(self.__defaultConfig, parameter)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 for parameter in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 "include_trailing_comma",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 "use_parentheses",
9476
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
234 "combine_as_imports",
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 "case_sensitive",
9476
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
236 "force_sort_within_sections",
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
237 "from_first",
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 # set check box values
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 self.__parameterWidgetMapping[parameter].setChecked(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 confDict[parameter]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 if parameter in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 else getattr(self.__defaultConfig, parameter)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 for parameter in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 "sections",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 "extend_skip_glob",
9630
4cd6e4b1db12 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9476
diff changeset
248 "known_first_party",
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 # set the plain text edits
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 self.__parameterWidgetMapping[parameter].setPlainText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 "\n".join(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 confDict[parameter]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 if parameter in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 else getattr(self.__defaultConfig, parameter)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 # set the profile combo box last because it may change other entries
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 self.profileComboBox.setEditText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 confDict["profile"]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 if "profile" in confDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 else self.__defaultConfig.profile
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 @pyqtSlot(str)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 def on_sourceComboBox_currentTextChanged(self, selection):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 Private slot to handle the selection of a configuration source.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 @param selection text of the currently selected item
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 bool(selection) or self.__onlyProject
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 source = self.sourceComboBox.currentData()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 if source != "dialog":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 # reset the profile combo box first
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 self.profileComboBox.setCurrentIndex(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 if source == "pyproject":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 self.__loadConfiguration(self.__pyprojectData)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 elif source == "project":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 self.__loadConfiguration(self.__projectData)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 elif source == "default":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 self.__loadConfiguration({}) # loads the default values
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 elif source == "dialog":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 # just leave the current entries
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 pass
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 @pyqtSlot(str)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 def on_profileComboBox_editTextChanged(self, profileName):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 Private slot to react upon changes of the selected/entered profile.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 @param profileName name of the current profile
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 if profileName and profileName in profiles:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 confDict = self.__getConfigurationDict()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 confDict["profile"] = profileName
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 confDict.update(profiles[profileName])
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 self.__loadConfiguration(confDict)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 for parameter in self.__parameterWidgetMapping:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 self.__parameterWidgetMapping[parameter].setEnabled(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 parameter not in profiles[profileName]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 for widget in self.__parameterWidgetMapping.values():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 widget.setEnabled(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @pyqtSlot()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 def __createTomlSnippet(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 Private slot to generate a TOML snippet of the current configuration.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 Note: Only non-default values are included in this snippet.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 The code snippet is copied to the clipboard and may be placed inside the
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 'pyproject.toml' file.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 configDict = self.__getConfigurationDict()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 isort = tomlkit.table()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 for key, value in configDict.items():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 isort[key] = value
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 doc = tomlkit.document()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 doc["tool"] = tomlkit.table(is_super_table=True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 doc["tool"]["isort"] = isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 QGuiApplication.clipboard().setText(tomlkit.dumps(doc))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 EricMessageBox.information(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 self,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 self.tr("Create TOML snippet"),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 self.tr(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 """The 'pyproject.toml' snippet was copied to the clipboard"""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 """ successfully."""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 ),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 def __getConfigurationDict(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 Private method to assemble and return a dictionary containing the entered
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 non-default configuration parameters.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 @return dictionary containing the non-default configuration parameters
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 @rtype dict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 configDict = {}
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 if self.profileComboBox.currentText():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 configDict["profile"] = self.profileComboBox.currentText()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 if (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 self.pythonComboBox.currentText()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 and self.pythonComboBox.currentData()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 != self.__defaultConfig.py_version.replace("py", "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 configDict["py_version"] = self.pythonComboBox.currentData()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 if self.multiLineComboBox.isEnabled() and self.multiLineComboBox.currentText():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 configDict["multi_line_output"] = self.multiLineComboBox.currentData()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 if self.sortOrderComboBox.isEnabled() and self.sortOrderComboBox.currentText():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 configDict["sort_order"] = self.sortOrderComboBox.currentData()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 if self.extensionsEdit.isEnabled() and self.extensionsEdit.text():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 configDict["supported_extensions"] = [
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 e.lstrip(".")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 for e in self.extensionsEdit.text().strip().split()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 if e.lstrip(".")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 ]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 for parameter in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 "line_length",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 "lines_before_imports",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 "lines_after_imports",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 "lines_between_sections",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 "lines_between_types",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 if self.__parameterWidgetMapping[
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 ].isEnabled() and self.__parameterWidgetMapping[
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 ].value() != getattr(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 self.__defaultConfig, parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 configDict[parameter] = self.__parameterWidgetMapping[parameter].value()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 for parameter in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 "include_trailing_comma",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 "use_parentheses",
9476
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
393 "combine_as_imports",
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 "case_sensitive",
9476
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
395 "force_sort_within_sections",
3238ffc4b3df Added some more isort options and reorganized the configuration dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
396 "from_first",
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 if self.__parameterWidgetMapping[
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 ].isEnabled() and self.__parameterWidgetMapping[
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 ].isChecked() != getattr(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 self.__defaultConfig, parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 configDict[parameter] = self.__parameterWidgetMapping[
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 parameter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 ].isChecked()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 for parameter in (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 "sections",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 "extend_skip_glob",
9630
4cd6e4b1db12 Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9476
diff changeset
412 "known_first_party",
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 if self.__parameterWidgetMapping[parameter].isEnabled():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 value = (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 self.__parameterWidgetMapping[parameter].toPlainText().splitlines()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 if value != list(getattr(self.__defaultConfig, parameter)):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 configDict[parameter] = value
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 return configDict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 def getConfiguration(self, saveToProject=False):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 Public method to get the current configuration parameters.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 @param saveToProject flag indicating to save the configuration data in the
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 project file (defaults to False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 @type bool (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 @return dictionary containing the configuration parameters
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 @rtype dict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 configuration = self.__getConfigurationDict()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 if saveToProject and self.__project:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 configuration["config_source"] = self.sourceComboBox.currentData()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 self.__project.setData("OTHERTOOLSPARMS", "isort", configuration)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 return configuration

eric ide

mercurial