src/eric7/CodeFormatting/IsortFormattingDialog.py

Wed, 02 Nov 2022 10:11:18 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 02 Nov 2022 10:11:18 +0100
branch
eric7
changeset 9460
0d1b5d0fd815
parent 9455
5f138ee215a5
child 9465
8a020c34dce2
permissions
-rw-r--r--

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.

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
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from isort.settings import Config
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.progressBar.setMaximum(len(filesList))
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.resultsList.header().setSortIndicator(1, Qt.SortOrder.AscendingOrder)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
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"]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.__isortConfig = Config(**self.__config)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__config["__action__"] = action # needed by the workers
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.__project = project
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.__filesList = filesList[:]
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.__diffDialog = None
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.__allFilter = self.tr("<all>")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.__sortImportsButton = self.buttonBox.addButton(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.tr("Sort Imports"), QDialogButtonBox.ButtonRole.ActionRole
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.__sortImportsButton.setVisible(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 self.show()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 QCoreApplication.processEvents()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 self.__performAction()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 def __performAction(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
109 Private method to execute the requested sorting action.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.progressBar.setValue(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.progressBar.setVisible(True)
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.statisticsGroup.setVisible(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.__statistics = IsortStatistics()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.__cancelled = False
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.statusFilterComboBox.clear()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.resultsList.clear()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setDefault(True)
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 files = self.__filterFiles(self.__filesList)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 if len(files) > 1:
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
128 self.__sortManyFiles(files)
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 elif len(files) == 1:
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
130 self.__sortOneFile(files[0])
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 def __filterFiles(self, filesList):
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 Private method to filter the given list of files according the
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 configuration parameters.
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 @param filesList list of files
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @type list of str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 @return list of filtered files
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 @rtype list of str
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 files = []
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 for file in filesList:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 if not self.__isortConfig.is_supported_filetype(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 file
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 ) or self.__isortConfig.is_skipped(pathlib.Path(file)):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 self.__handleIsortResult(file, "skipped")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 files.append(file)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 return files
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 def __resort(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 Private method to resort the result list.
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 self.resultsList.sortItems(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.resultsList.sortColumn(),
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.resultsList.header().sortIndicatorOrder(),
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
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 def __resizeColumns(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 Private method to resize the columns of the result list.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self.resultsList.header().resizeSections(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 QHeaderView.ResizeMode.ResizeToContents
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.resultsList.header().setStretchLastSection(True)
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 def __populateStatusFilterCombo(self):
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 Private method to populate the status filter combo box with allowed selections.
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 allowedSelections = set()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 for row in range(self.resultsList.topLevelItemCount()):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 allowedSelections.add(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 self.resultsList.topLevelItem(row).text(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 IsortFormattingDialog.StatusColumn
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
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 self.statusFilterComboBox.addItem(self.__allFilter)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 self.statusFilterComboBox.addItems(sorted(allowedSelections))
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 def __finish(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 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
189 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.__resort()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 self.__resizeColumns()
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 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
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.progressBar.setVisible(False)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 self.__sortImportsButton.setVisible(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 self.__config["__action__"] is not IsortFormattingAction.Sort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 and self.__statistics.changeCount > 0
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.__updateStatistics()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 self.__populateStatusFilterCombo()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 def __updateStatistics(self):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
209 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
210 make them visible.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 self.reformattedLabel.setText(
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
213 self.tr("Resorted:")
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 if self.__config["__action__"] is IsortFormattingAction.Sort
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
215 else self.tr("Would Resort:")
9453
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 total = self.progressBar.maximum()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 self.totalCountLabel.setText("{0:n}".format(total))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 self.skippedCountLabel.setText("{0:n}".format(self.__statistics.skippedCount))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 self.failuresCountLabel.setText("{0:n}".format(self.__statistics.failureCount))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 self.processedCountLabel.setText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 "{0:n}".format(self.__statistics.processedCount)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 self.reformattedCountLabel.setText(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 "{0:n}".format(self.__statistics.changeCount)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 self.unchangedCountLabel.setText("{0:n}".format(self.__statistics.sameCount))
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 self.statisticsGroup.setVisible(True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 @pyqtSlot(QAbstractButton)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 def on_buttonBox_clicked(self, button):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 Private slot to handle button presses of the dialog buttons.
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 @param button reference to the pressed button
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @type QAbstractButton
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 if button == self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 self.__cancelled = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 elif button == self.buttonBox.button(QDialogButtonBox.StandardButton.Close):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 self.accept()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 elif button is self.__sortImportsButton:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 self.__sortImportsButtonClicked()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @pyqtSlot()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 def __sortImportsButtonClicked(self):
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 Private slot handling the selection of the 'Sort Imports' button.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 """
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
253 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
254 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
255 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
256 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
257 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
258 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
259 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
260
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.__config["__action__"] = IsortFormattingAction.Sort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 self.__performAction()
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 @pyqtSlot(QTreeWidgetItem, int)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 def on_resultsList_itemDoubleClicked(self, item, column):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 Private slot handling a double click of a result item.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 @param item reference to the double clicked item
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 @type QTreeWidgetItem
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @param column column number that was double clicked
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @type int
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 dataType = item.data(0, IsortFormattingDialog.DataTypeRole)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 if dataType == "error":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 EricMessageBox.critical(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 self,
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
278 self.tr("Imports Sorting Failure"),
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
279 self.tr(
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
280 "<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
281 ).format(item.data(0, IsortFormattingDialog.DataRole)),
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 elif dataType == "diff":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 if self.__diffDialog is None:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 self.__diffDialog = FormattingDiffWidget()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 self.__diffDialog.showDiff(item.data(0, IsortFormattingDialog.DataRole))
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 @pyqtSlot(str)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 def on_statusFilterComboBox_currentTextChanged(self, status):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 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
292
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 @param status selected status
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 for row in range(self.resultsList.topLevelItemCount()):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 itm = self.resultsList.topLevelItem(row)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 itm.setHidden(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 status != self.__allFilter
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 and itm.text(IsortFormattingDialog.StatusColumn) != status
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 )
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 def closeEvent(self, evt):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 Protected slot implementing a close event handler.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 @param evt reference to the close event
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 @type QCloseEvent
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 if self.__diffDialog is not None:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 self.__diffDialog.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 evt.accept()
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 def __handleIsortResult(self, filename, status, data=""):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
316 Private method to handle an isort sorting result.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @param filename name of the processed file
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 @param status status of the performed action (one of 'changed', 'failed',
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 'skipped' or 'unchanged')
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 @param data action data (error message or unified diff) (defaults to "")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 @type str (optional)
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 isError = False
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 if status == "changed":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 statusMsg = (
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 self.tr("would resort")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 if self.__config["__action__"]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 in (IsortFormattingAction.Check, IsortFormattingAction.Diff)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 else self.tr("resorted")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 self.__statistics.changeCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 elif status == "unchanged":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 statusMsg = self.tr("unchanged")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 self.__statistics.sameCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 elif status == "skipped":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 statusMsg = self.tr("skipped")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 self.__statistics.skippedCount += 1
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 elif status == "failed":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 statusMsg = self.tr("failed")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 self.__statistics.failureCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 isError = True
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 elif status == "unsupported":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 statusMsg = self.tr("error")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 data = self.tr("Unsupported 'isort' action ({0}) given.").format(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 self.__config["__action__"]
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.failureCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 isError = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 statusMsg = self.tr("invalid status ({0})").format(status)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 self.__statistics.failureCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 isError = True
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 if status != "skipped":
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 self.__statistics.processedCount += 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 if self.__project:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 filename = self.__project.getRelativePath(filename)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368
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
369 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
370 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
371 [
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
372 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
373 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
374 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
375 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
376 ],
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
377 )
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
378 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
379 itm.setData(0, IsortFormattingDialog.FileNameRole, filename)
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 if data:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 itm.setData(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 0, IsortFormattingDialog.DataTypeRole, "error" if isError else "diff"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 itm.setData(0, IsortFormattingDialog.DataRole, data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 self.progressBar.setValue(self.progressBar.value() + 1)
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 QCoreApplication.processEvents()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
390 def __sortManyFiles(self, files):
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
392 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
393 using multiple processes in parallel.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 @param files list of files to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 @type list of str
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 maxProcesses = Preferences.getUI("BackgroundServiceProcesses")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 if maxProcesses == 0:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 # determine based on CPU count
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 try:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 NumberOfProcesses = multiprocessing.cpu_count()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 if NumberOfProcesses >= 1:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 NumberOfProcesses -= 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 except NotImplementedError:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 NumberOfProcesses = 1
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 NumberOfProcesses = maxProcesses
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 # Create queues
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 taskQueue = multiprocessing.Queue()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 doneQueue = multiprocessing.Queue()
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 # Submit tasks (initially two times the number of processes)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 tasks = len(files)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 initialTasks = min(2 * NumberOfProcesses, tasks)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 for _ in range(initialTasks):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 file = files.pop(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 taskQueue.put((file, self.__config["__action__"]))
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 # Start worker processes
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 workers = [
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 multiprocessing.Process(
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
424 target=self.sortingWorkerTask,
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 args=(taskQueue, doneQueue, self.__isortConfig),
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 for _ in range(NumberOfProcesses)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 ]
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 for worker in workers:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 worker.start()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 # Get the results from the worker tasks
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 for _ in range(tasks):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 result = doneQueue.get()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 self.__handleIsortResult(result.filename, result.status, data=result.data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 if self.__cancelled:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 break
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 if files:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 file = files.pop(0)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 taskQueue.put((file, self.__config["__action__"]))
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 # Tell child processes to stop
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 for _ in range(NumberOfProcesses):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 taskQueue.put("STOP")
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 for worker in workers:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 worker.join()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 worker.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 taskQueue.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 doneQueue.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 self.__finish()
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 @staticmethod
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
458 def sortingWorkerTask(inputQueue, outputQueue, isortConfig):
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 Static method acting as the parallel worker for the formatting task.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 @param inputQueue input queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 @type multiprocessing.Queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 @param outputQueue output queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 @type multiprocessing.Queue
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 @param isortConfig config object for isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 @type isort.Config
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 for file, action in iter(inputQueue.get, "STOP"):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 if action == IsortFormattingAction.Diff:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 result = IsortFormattingDialog.__isortCheckFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 withDiff=True,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 )
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 elif action == IsortFormattingAction.Sort:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
478 result = IsortFormattingDialog.__isortSortFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
479 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
480 isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
481 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
482
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484 result = IsortResult(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 status="unsupported",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 filename=file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
487 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
488
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 outputQueue.put(result)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
491 def __sortOneFile(self, file):
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
493 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
494 configuration.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 @param file name of the file to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 @type str
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 if self.__config["__action__"] == IsortFormattingAction.Diff:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 result = IsortFormattingDialog.__isortCheckFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
501 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502 self.__isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 withDiff=True,
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 elif self.__config["__action__"] == IsortFormattingAction.Sort:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 result = IsortFormattingDialog.__isortSortFile(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
508 file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 self.__isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513 result = IsortResult(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 status="unsupported",
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 filename=file,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 )
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
518 self.__handleIsortResult(result.filename, result.status, data=result.data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
519
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
520 self.__finish()
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 @staticmethod
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 def __isortCheckFile(filename, isortConfig, withDiff=True):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 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
526
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 @param filename name of the file to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 @param isortConfig config object for isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 @type isort.Config
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 @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
532 be changed (defaults to True)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 @type bool (optional)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 @return result object
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535 @rtype IsortResult
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 diffIO = io.StringIO() if withDiff else False
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
538 with suppressStderr():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
539 ok = check_file(filename, show_diff=diffIO, config=isortConfig)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
540 if withDiff:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
541 data = "" if ok else diffIO.getvalue()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
542 diffIO.close()
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 else:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
544 data = ""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
545
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546 status = "unchanged" if ok else "changed"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
547
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 return IsortResult(status=status, filename=filename, data=data)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
549
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
550 @staticmethod
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 def __isortSortFile(filename, isortConfig):
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
553 Static method to sort the import statements of a file.
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
554
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
555 @param filename name of the file to be processed
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 @type str
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 @param isortConfig config object for isort
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
558 @type isort.Config
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
559 @return result object
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 @rtype IsortResult
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 with suppressStderr():
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 ok = sort_file(
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564 filename,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 config=isortConfig,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 ask_to_apply=False,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
567 write_to_stdout=False,
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
568 show_diff=False,
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
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571 status = "changed" if ok else "unchanged"
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573 return IsortResult(status=status, filename=filename)
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
574
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
576 @dataclass
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 class IsortStatistics:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
579 Class containing the isort statistic data.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
580 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582 skippedCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
583 changeCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584 sameCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 failureCount: int = 0
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586 processedCount: int = 0
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
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589 @dataclass
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590 class IsortResult:
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
591 """
9455
5f138ee215a5 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9453
diff changeset
592 Class containing the isort result data.
9453
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
593 """
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
594
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
595 status: str = ""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
596 filename: str = ""
e5065dde905d Code Formatting
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597 data: str = ""

eric ide

mercurial