src/eric7/PipInterface/PipLicensesDialog.py

Mon, 07 Nov 2022 17:19:58 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 07 Nov 2022 17:19:58 +0100
branch
eric7
changeset 9482
a2bc06a54d9d
parent 9473
3f23dbf37dbe
child 9549
67295777d9fe
child 9653
e67609152c5e
permissions
-rw-r--r--

Corrected/acknowledged some bad import style and removed some obsolete code.

9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show the licenses of an environment.
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9482
a2bc06a54d9d Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
10 import csv
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
11 import os
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
12 import re
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
13
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
14 from PyQt6.QtCore import Qt, pyqtSlot
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
15 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
17 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
18 from eric7.EricWidgets import EricFileDialog, EricMessageBox
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
19
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from .Ui_PipLicensesDialog import Ui_PipLicensesDialog
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 class PipLicensesDialog(QDialog, Ui_PipLicensesDialog):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
25 Class implementing a dialog to show the licenses of an environment.
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 LicensesPackageColumn = 0
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 LicensesVersionColumn = 1
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 LicensesLicenseColumn = 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
31
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 SummaryCountColumn = 0
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 SummaryLicenseColumn = 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
34
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35 def __init__(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36 self, pip, environment, localPackages=True, usersite=False, parent=None
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
37 ):
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param pip reference to the pip interface object
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type Pip
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
43 @param environment name of the environment to show the licenses for
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type str
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
45 @param localPackages flag indicating to show the licenses for local
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
46 packages only
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
47 @type bool
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
48 @param usersite flag indicating to show the licenses for packages
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
49 installed in user-site directory only
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
50 @type bool
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @param parent reference to the parent widget (defaults to None)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @type QWidget (optional)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 super().__init__(parent)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.setupUi(self)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
56
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.__pip = pip
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
58 self.__environment = environment
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
59
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
60 self.__allFilter = self.tr("<All>")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
61
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
62 self.__saveCSVButton = self.buttonBox.addButton(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
63 self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
64 )
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
65 self.__saveCSVButton.clicked.connect(self.__saveAsCSV)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
66
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
67 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
68
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
69 self.localCheckBox.setChecked(localPackages)
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
70 self.userCheckBox.setChecked(usersite)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
71
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
72 self.localCheckBox.toggled.connect(self.__refreshLicenses)
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
73 self.userCheckBox.toggled.connect(self.__refreshLicenses)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
74
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 if environment:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
76 self.environmentLabel.setText(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
77 "<b>{0}</b>".format(self.tr('Licenses of "{0}"').format(environment))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78 )
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
79 else:
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
80 # That should never happen; play it safe.
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
81 self.environmentLabel.setText(self.tr("No environment specified."))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
82
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
83 self.licenseFilterComboBox.currentTextChanged.connect(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
84 self.__filterPackagesByLicense
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
85 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
86
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
87 self.__refreshLicenses()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
88
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
89 @pyqtSlot()
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
90 def __refreshLicenses(self):
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
91 """
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
92 Private slot to refresh the license lists.
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
93 """
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
94 with EricOverrideCursor():
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
95 self.licensesList.clear()
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
96 self.summaryList.clear()
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
97 self.licenseFilterComboBox.clear()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
99 licensesForFilter = set()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 # step 1: show the licenses per package
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
102 self.licensesList.setUpdatesEnabled(False)
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
103 licenses = self.__pip.getLicenses(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
104 self.__environment,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
105 localPackages=self.localCheckBox.isChecked(),
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
106 usersite=self.userCheckBox.isChecked(),
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
107 )
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
108 for lic in licenses:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
109 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
110 self.licensesList,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
111 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
112 lic["Name"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113 lic["Version"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
114 lic["License"].replace("; ", "\n"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
115 ],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
116 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
117
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.licensesList.sortItems(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
119 PipLicensesDialog.LicensesPackageColumn, Qt.SortOrder.AscendingOrder
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
120 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 for col in range(self.licensesList.columnCount()):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.licensesList.resizeColumnToContents(col)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 self.licensesList.setUpdatesEnabled(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
124
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 # step 2: show the licenses summary
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
126 self.summaryList.setUpdatesEnabled(False)
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
127 licenses = self.__pip.getLicensesSummary(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
128 self.__environment,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
129 localPackages=self.localCheckBox.isChecked(),
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
130 usersite=self.userCheckBox.isChecked(),
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
131 )
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
132 for lic in licenses:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
133 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
134 self.summaryList,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
135 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
136 "{0:4d}".format(lic["Count"]),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
137 lic["License"].replace("; ", "\n"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
138 ],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139 )
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
140 licensesForFilter |= set(lic["License"].split("; "))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
141
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 self.summaryList.sortItems(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
143 PipLicensesDialog.SummaryLicenseColumn, Qt.SortOrder.AscendingOrder
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
144 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 for col in range(self.summaryList.columnCount()):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.summaryList.resizeColumnToContents(col)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 self.summaryList.setUpdatesEnabled(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
148
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
149 self.licenseFilterComboBox.addItems(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150 [self.__allFilter] + sorted(licensesForFilter)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
151 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
152
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
153 enable = bool(self.licensesList.topLevelItemCount())
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
154 self.__saveCSVButton.setEnabled(enable)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
155
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
156 @pyqtSlot(str)
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
157 def __filterPackagesByLicense(self, licenseName):
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
158 """
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
159 Private slot to filter the list of packages by license.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
160
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
161 @param licenseName license name
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
162 @type str
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
163 """
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
164 pattern = r"\b{0}".format(re.escape(licenseName))
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
165 if not licenseName.endswith((")", "]", "}")):
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
166 pattern += r"\b"
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
167 regexp = re.compile(pattern)
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
168 for row in range(self.licensesList.topLevelItemCount()):
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
169 itm = self.licensesList.topLevelItem(row)
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
170 if licenseName == self.__allFilter:
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
171 itm.setHidden(False)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
172 else:
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
173 itm.setHidden(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
174 regexp.search(itm.text(PipLicensesDialog.LicensesLicenseColumn))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175 is None
9108
19a57544f32c Corrected some code style issues and a glitch in the package license dialog filter function.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9103
diff changeset
176 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
177
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
178 @pyqtSlot()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
179 def __saveAsCSV(self):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
180 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
181 Private slot to save the license information as a CSV file.
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
182 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
183 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
184 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
185 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
186 os.path.expanduser("~"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
187 self.tr("CSV Files (*.csv);;All Files (*)"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
188 None,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
189 EricFileDialog.DontConfirmOverwrite,
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
190 )
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
191 if fileName:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
192 ext = os.path.splitext(fileName)[1]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
193 if not ext:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
194 ex = selectedFilter.split("(*")[1].split(")")[0]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
195 if ex:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
196 fileName += ex
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
198 try:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
199 with open(fileName, "w", newline="", encoding="utf-8") as csvFile:
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
200 fieldNames = ["Name", "Version", "License"]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
201 writer = csv.DictWriter(csvFile, fieldnames=fieldNames)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
202
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
203 writer.writeheader()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
204 for row in range(self.licensesList.topLevelItemCount()):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
205 itm = self.licensesList.topLevelItem(row)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
206 writer.writerow(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
207 {
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
208 "Name": itm.text(0),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
209 "Version": itm.text(1),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
210 "License": itm.text(2),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
211 }
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
212 )
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
213 except OSError as err:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
214 EricMessageBox.critical(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
215 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
216 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
217 self.tr(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
218 """<p>The license information could not be saved"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
219 """ into the CSV file <b>{0}</b>.</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
220 """<p>Reason: {1}</p>"""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
221 ).format(fileName, str(err)),
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
222 )

eric ide

mercurial