src/eric7/CodeFormatting/IsortFormattingDialog.py

Fri, 04 Nov 2022 13:46:31 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Nov 2022 13:46:31 +0100
branch
eric7
changeset 9472
5798ee4a8807
parent 9468
a4d8091cd8f7
child 9473
3f23dbf37dbe
permissions
-rw-r--r--

Corrected a little glitch in the isort formatting dialog.

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
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
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 showing the isort code formatting progress and the results.
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 copy
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import io
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import multiprocessing
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import pathlib
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from dataclasses import dataclass
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
9468
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
17 from isort import settings
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from isort.api import check_file, sort_file
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from PyQt6.QtCore import pyqtSlot, Qt, QCoreApplication
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from PyQt6.QtWidgets import (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 QAbstractButton,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 QDialog,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 QDialogButtonBox,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 QHeaderView,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 QTreeWidgetItem,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 )
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 from eric7 import Preferences
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 from eric7.EricWidgets import EricMessageBox
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 from .FormattingDiffWidget import FormattingDiffWidget
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 from .IsortFormattingAction import IsortFormattingAction
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 from .IsortUtilities import suppressStderr
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 from .Ui_IsortFormattingDialog import Ui_IsortFormattingDialog
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
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 class IsortFormattingDialog(QDialog, Ui_IsortFormattingDialog):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 Class implementing a dialog showing the isort code formatting progress and the
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 results.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
9460
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
45 DataRole = Qt.ItemDataRole.UserRole
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
46 DataTypeRole = Qt.ItemDataRole.UserRole + 1
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
47 FileNameRole = Qt.ItemDataRole.UserRole + 2
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
48 StatusRole = Qt.ItemDataRole.UserRole + 3
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
9460
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
50 FileNameColumn = 1
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 StatusColumn = 0
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 def __init__(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 configuration,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 filesList,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 project=None,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 action=IsortFormattingAction.Sort,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 parent=None,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 ):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 Constructor
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @param configuration dictionary containing the configuration parameters
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @type dict
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @param filesList list of absolute file paths to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @type list of str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @param project reference to the project object (defaults to None)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @type Project (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @param action action to be performed (defaults to IsortFormattingAction.Sort)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 @type IsortFormattingAction (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @param parent reference to the parent widget (defaults to None)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @type QWidget (optional)
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 super().__init__(parent)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.setupUi(self)
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.resultsList.header().setSortIndicator(1, Qt.SortOrder.AscendingOrder)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
9465
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
80 self.__project = project
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
81
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.__config = copy.deepcopy(configuration)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__config["quiet"] = True # we don't want extra output
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.__config["overwrite_in_place"] = True # we want to overwrite the files
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 if "config_source" in self.__config:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 del self.__config["config_source"]
9465
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
87
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
88 # Create an isort Config object and pre-load it with parameters contained in
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
89 # project specific configuration files (like pyproject.toml). The configuration
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
90 # given as a dictionary (i.e. data entered in the configuration dialog)
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
91 # overwrites these. If the project is not passed, the isort config is based on
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
92 # the isort defaults.
9468
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
93 if project:
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
94 # clear the caches in order to force a re-read of config files
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
95 settings._get_config_data.cache_clear()
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
96 settings._find_config.cache_clear()
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
97 try:
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
98 self.__isortConfig = (
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
99 settings.Config(settings_path=project.getProjectPath(), **self.__config)
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
100 if project
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
101 else settings.Config(**self.__config)
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
102 )
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
103 except KeyError:
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
104 # invalid configuration entry found in some config file; use just the dialog
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
105 # parameters
a4d8091cd8f7 Changed the isort formatting dialog to ensure the cached isort config data is cleared.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9465
diff changeset
106 self.__isortConfig = settings.Config(**self.__config)
9465
8a020c34dce2 Fine tuned the isort support so the configuration will default to project specific config files overwritten by data entered via the dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9460
diff changeset
107
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.__config["__action__"] = action # needed by the workers
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.__filesList = filesList[:]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.__diffDialog = None
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 self.__allFilter = self.tr("<all>")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__sortImportsButton = self.buttonBox.addButton(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.tr("Sort Imports"), QDialogButtonBox.ButtonRole.ActionRole
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self.__sortImportsButton.setVisible(False)
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 self.show()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 QCoreApplication.processEvents()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.__performAction()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 def __performAction(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
128 Private method to execute the requested sorting action.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 """
9472
5798ee4a8807 Corrected a little glitch in the isort formatting dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9468
diff changeset
130 self.progressBar.setMaximum(len(self.__filesList))
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.progressBar.setValue(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.progressBar.setVisible(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.statisticsGroup.setVisible(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 self.__statistics = IsortStatistics()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.__cancelled = False
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 self.statusFilterComboBox.clear()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 self.resultsList.clear()
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 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setDefault(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 files = self.__filterFiles(self.__filesList)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 if len(files) > 1:
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
148 self.__sortManyFiles(files)
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 elif len(files) == 1:
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
150 self.__sortOneFile(files[0])
9453
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 def __filterFiles(self, filesList):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 Private method to filter the given list of files according the
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 configuration parameters.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 @param filesList list of files
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 @type list of str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 @return list of filtered files
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 @rtype list of str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 files = []
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 for file in filesList:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 if not self.__isortConfig.is_supported_filetype(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 file
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 ) or self.__isortConfig.is_skipped(pathlib.Path(file)):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.__handleIsortResult(file, "skipped")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 files.append(file)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 return files
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 def __resort(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 Private method to resort the result list.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 self.resultsList.sortItems(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 self.resultsList.sortColumn(),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 self.resultsList.header().sortIndicatorOrder(),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 )
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 def __resizeColumns(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 Private method to resize the columns of the result list.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.resultsList.header().resizeSections(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 QHeaderView.ResizeMode.ResizeToContents
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 self.resultsList.header().setStretchLastSection(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 def __populateStatusFilterCombo(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 Private method to populate the status filter combo box with allowed selections.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 allowedSelections = set()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 for row in range(self.resultsList.topLevelItemCount()):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 allowedSelections.add(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.resultsList.topLevelItem(row).text(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 IsortFormattingDialog.StatusColumn
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 )
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 self.statusFilterComboBox.addItem(self.__allFilter)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 self.statusFilterComboBox.addItems(sorted(allowedSelections))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 def __finish(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 Private method to perform some actions after the run was performed or canceled.
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 self.__resort()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 self.__resizeColumns()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
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 self.progressBar.setVisible(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 self.__sortImportsButton.setVisible(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 self.__config["__action__"] is not IsortFormattingAction.Sort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 and self.__statistics.changeCount > 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 self.__updateStatistics()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 self.__populateStatusFilterCombo()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 def __updateStatistics(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
229 Private method to update the statistics about the recent sorting run and
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 make them visible.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 self.reformattedLabel.setText(
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
233 self.tr("Resorted:")
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 if self.__config["__action__"] is IsortFormattingAction.Sort
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
235 else self.tr("Would Resort:")
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 total = self.progressBar.maximum()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 self.totalCountLabel.setText("{0:n}".format(total))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 self.skippedCountLabel.setText("{0:n}".format(self.__statistics.skippedCount))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 self.failuresCountLabel.setText("{0:n}".format(self.__statistics.failureCount))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 self.processedCountLabel.setText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 "{0:n}".format(self.__statistics.processedCount)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 self.reformattedCountLabel.setText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 "{0:n}".format(self.__statistics.changeCount)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 self.unchangedCountLabel.setText("{0:n}".format(self.__statistics.sameCount))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 self.statisticsGroup.setVisible(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 @pyqtSlot(QAbstractButton)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 def on_buttonBox_clicked(self, button):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 Private slot to handle button presses of the dialog buttons.
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 @param button reference to the pressed button
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 @type QAbstractButton
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 if button == self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 self.__cancelled = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 elif button == self.buttonBox.button(QDialogButtonBox.StandardButton.Close):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 self.accept()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 elif button is self.__sortImportsButton:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 self.__sortImportsButtonClicked()
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 @pyqtSlot()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 def __sortImportsButtonClicked(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 Private slot handling the selection of the 'Sort Imports' button.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 """
9460
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
273 files = []
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
274 for row in range(self.resultsList.topLevelItemCount()):
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
275 itm = self.resultsList.topLevelItem(row)
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
276 if itm.data(0, IsortFormattingDialog.StatusRole) == "changed":
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
277 files.append(itm.data(0, IsortFormattingDialog.FileNameRole))
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
278 if files:
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
279 self.__filesList = files
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
280
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 self.__config["__action__"] = IsortFormattingAction.Sort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 self.__performAction()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @pyqtSlot(QTreeWidgetItem, int)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 def on_resultsList_itemDoubleClicked(self, item, column):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 Private slot handling a double click of a result item.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 @param item reference to the double clicked item
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 @type QTreeWidgetItem
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 @param column column number that was double clicked
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 @type int
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 dataType = item.data(0, IsortFormattingDialog.DataTypeRole)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 if dataType == "error":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 EricMessageBox.critical(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 self,
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
298 self.tr("Imports Sorting Failure"),
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
299 self.tr(
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
300 "<p>Imports sorting failed due to this error.</p><p>{0}</p>"
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
301 ).format(item.data(0, IsortFormattingDialog.DataRole)),
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 elif dataType == "diff":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 if self.__diffDialog is None:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 self.__diffDialog = FormattingDiffWidget()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 self.__diffDialog.showDiff(item.data(0, IsortFormattingDialog.DataRole))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 @pyqtSlot(str)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 def on_statusFilterComboBox_currentTextChanged(self, status):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 Private slot handling the selection of a status for items to be shown.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 @param status selected status
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 for row in range(self.resultsList.topLevelItemCount()):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 itm = self.resultsList.topLevelItem(row)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 itm.setHidden(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 status != self.__allFilter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 and itm.text(IsortFormattingDialog.StatusColumn) != status
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 def closeEvent(self, evt):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 Protected slot implementing a close event handler.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 @param evt reference to the close event
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 @type QCloseEvent
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 if self.__diffDialog is not None:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 self.__diffDialog.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 evt.accept()
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 def __handleIsortResult(self, filename, status, data=""):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
336 Private method to handle an isort sorting result.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 @param filename name of the processed file
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 @param status status of the performed action (one of 'changed', 'failed',
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 'skipped' or 'unchanged')
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 @param data action data (error message or unified diff) (defaults to "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 @type str (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 isError = False
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 if status == "changed":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 statusMsg = (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 self.tr("would resort")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 if self.__config["__action__"]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 in (IsortFormattingAction.Check, IsortFormattingAction.Diff)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 else self.tr("resorted")
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 self.__statistics.changeCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 elif status == "unchanged":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 statusMsg = self.tr("unchanged")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 self.__statistics.sameCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 elif status == "skipped":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 statusMsg = self.tr("skipped")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 self.__statistics.skippedCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 elif status == "failed":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 statusMsg = self.tr("failed")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 self.__statistics.failureCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 isError = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 elif status == "unsupported":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 statusMsg = self.tr("error")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 data = self.tr("Unsupported 'isort' action ({0}) given.").format(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 self.__config["__action__"]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 self.__statistics.failureCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 isError = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 statusMsg = self.tr("invalid status ({0})").format(status)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 self.__statistics.failureCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 isError = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 if status != "skipped":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 self.__statistics.processedCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
9460
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
386 itm = QTreeWidgetItem(
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
387 self.resultsList,
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
388 [
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
389 statusMsg,
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
390 self.__project.getRelativePath(filename)
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
391 if self.__project
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
392 else filename,
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
393 ],
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
394 )
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
395 itm.setData(0, IsortFormattingDialog.StatusRole, status)
0d1b5d0fd815 Modified the Black and Isort dialogs such, that only files that need a change are processed after a diff or check run by pressing the relevant button.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9455
diff changeset
396 itm.setData(0, IsortFormattingDialog.FileNameRole, filename)
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 if data:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 itm.setData(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 0, IsortFormattingDialog.DataTypeRole, "error" if isError else "diff"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 itm.setData(0, IsortFormattingDialog.DataRole, data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 self.progressBar.setValue(self.progressBar.value() + 1)
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 QCoreApplication.processEvents()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
407 def __sortManyFiles(self, files):
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
409 Private method to sort imports of the list of files according the configuration
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
410 using multiple processes in parallel.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 @param files list of files to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 @type list of str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 maxProcesses = Preferences.getUI("BackgroundServiceProcesses")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 if maxProcesses == 0:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 # determine based on CPU count
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 try:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 NumberOfProcesses = multiprocessing.cpu_count()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 if NumberOfProcesses >= 1:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 NumberOfProcesses -= 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 except NotImplementedError:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 NumberOfProcesses = 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 NumberOfProcesses = maxProcesses
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 # Create queues
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 taskQueue = multiprocessing.Queue()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 doneQueue = multiprocessing.Queue()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 # Submit tasks (initially two times the number of processes)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 tasks = len(files)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 initialTasks = min(2 * NumberOfProcesses, tasks)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 for _ in range(initialTasks):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 file = files.pop(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 taskQueue.put((file, self.__config["__action__"]))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 # Start worker processes
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 workers = [
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 multiprocessing.Process(
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
441 target=self.sortingWorkerTask,
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 args=(taskQueue, doneQueue, self.__isortConfig),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 for _ in range(NumberOfProcesses)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 ]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 for worker in workers:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 worker.start()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 # Get the results from the worker tasks
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 for _ in range(tasks):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 result = doneQueue.get()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 self.__handleIsortResult(result.filename, result.status, data=result.data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 if self.__cancelled:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 break
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 if files:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 file = files.pop(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 taskQueue.put((file, self.__config["__action__"]))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 # Tell child processes to stop
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 for _ in range(NumberOfProcesses):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 taskQueue.put("STOP")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 for worker in workers:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 worker.join()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 worker.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 taskQueue.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 doneQueue.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 self.__finish()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 @staticmethod
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
475 def sortingWorkerTask(inputQueue, outputQueue, isortConfig):
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 Static method acting as the parallel worker for the formatting task.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 @param inputQueue input queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 @type multiprocessing.Queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 @param outputQueue output queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482 @type multiprocessing.Queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483 @param isortConfig config object for isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484 @type isort.Config
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 for file, action in iter(inputQueue.get, "STOP"):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487 if action == IsortFormattingAction.Diff:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488 result = IsortFormattingDialog.__isortCheckFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
491 withDiff=True,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 elif action == IsortFormattingAction.Sort:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495 result = IsortFormattingDialog.__isortSortFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
498 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
499
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
501 result = IsortResult(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502 status="unsupported",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 filename=file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
504 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
505
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 outputQueue.put(result)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
508 def __sortOneFile(self, file):
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
510 Private method to sort the imports of the list of files according the
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
511 configuration.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513 @param file name of the file to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 if self.__config["__action__"] == IsortFormattingAction.Diff:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 result = IsortFormattingDialog.__isortCheckFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519 self.__isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 withDiff=True,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 elif self.__config["__action__"] == IsortFormattingAction.Sort:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 result = IsortFormattingDialog.__isortSortFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 self.__isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 result = IsortResult(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 status="unsupported",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 filename=file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535 self.__handleIsortResult(result.filename, result.status, data=result.data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 self.__finish()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 @staticmethod
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540 def __isortCheckFile(filename, isortConfig, withDiff=True):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
542 Static method to check, if a file's import statements need to be changed.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 @param filename name of the file to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546 @param isortConfig config object for isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547 @type isort.Config
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 @param withDiff flag indicating to return a unified diff, if the file needs to
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549 be changed (defaults to True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 @type bool (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 @return result object
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 @rtype IsortResult
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
554 diffIO = io.StringIO() if withDiff else False
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 with suppressStderr():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 ok = check_file(filename, show_diff=diffIO, config=isortConfig)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 if withDiff:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 data = "" if ok else diffIO.getvalue()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559 diffIO.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 data = ""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 status = "unchanged" if ok else "changed"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 return IsortResult(status=status, filename=filename, data=data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 @staticmethod
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
568 def __isortSortFile(filename, isortConfig):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
569 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
570 Static method to sort the import statements of a file.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 @param filename name of the file to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
574 @param isortConfig config object for isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575 @type isort.Config
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
576 @return result object
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 @rtype IsortResult
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
579 with suppressStderr():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
580 ok = sort_file(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581 filename,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582 config=isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
583 ask_to_apply=False,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584 write_to_stdout=False,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 show_diff=False,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
587
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
588 status = "changed" if ok else "unchanged"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590 return IsortResult(status=status, filename=filename)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
591
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
592
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
593 @dataclass
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
594 class IsortStatistics:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
595 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
596 Class containing the isort statistic data.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
598
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
599 skippedCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
600 changeCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
601 sameCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
602 failureCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603 processedCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
604
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
605
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
606 @dataclass
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
607 class IsortResult:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
608 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
609 Class containing the isort result data.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
610 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
611
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
612 status: str = ""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
613 filename: str = ""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
614 data: str = ""

eric ide

mercurial