src/eric7/PipInterface/PipLicensesDialog.py

Sat, 26 Apr 2025 12:34:32 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 26 Apr 2025 12:34:32 +0200
branch
eric7
changeset 11240
c48c615c04a3
parent 11090
f5f5f5803935
child 11118
967a88a16a21
permissions
-rw-r--r--

MicroPython
- Added a configuration option to disable the support for the no longer produced Pimoroni Pico Wireless Pack.

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
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3 # Copyright (c) 2022 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
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
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
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
14 from collections import Counter
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
15
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
16 from PyQt6.QtCore import Qt, pyqtSlot
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
17 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
18
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
19 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
20 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
21
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
22 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
23
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
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 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
26 """
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
27 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
28 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
29
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
30 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
31 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
32 LicensesLicenseColumn = 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
33
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
34 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
35 SummaryLicenseColumn = 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
37 def __init__(self, pip, environment, packages=None, parent=None):
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
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
45 @param packages list of packages to show licenses for (or None to show all
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
46 licenses (defaults to None)
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
47 @type list (optional)
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
48 @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
49 @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
50 """
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 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
52 self.setupUi(self)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53
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
54 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
55 self.__environment = environment
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
56 self.__packages = packages[:] if packages is not None else None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
57
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
58 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
59
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
60 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
61 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
62 )
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
63 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
64
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
65 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
66
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
67 if environment:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
68 self.environmentLabel.setText(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
69 "<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
70 )
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
71 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
72 # 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
73 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
74
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
75 self.licenseFilterComboBox.currentTextChanged.connect(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
76 self.__filterPackagesByLicense
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
77 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78
9850
20c49b517679 Modified the pip licenses dialog to not show the package type selection anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
79 self.__populateLicenses()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
80
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
81 @pyqtSlot()
9850
20c49b517679 Modified the pip licenses dialog to not show the package type selection anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
82 def __populateLicenses(self):
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
83 """
9850
20c49b517679 Modified the pip licenses dialog to not show the package type selection anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
84 Private slot to populate the license lists.
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
85 """
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
86 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
87 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
88 self.summaryList.clear()
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
89 self.licenseFilterComboBox.clear()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
90
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
91 licensesForFilter = set()
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
92 licenseSummaryList = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
93
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
94 # 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
95 self.licensesList.setUpdatesEnabled(False)
9850
20c49b517679 Modified the pip licenses dialog to not show the package type selection anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
96 licenses = self.__pip.getLicenses(self.__environment)
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
97 for lic in licenses:
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
98 if self.__packages is None or lic["Name"] in self.__packages:
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
99 QTreeWidgetItem(
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
100 self.licensesList,
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
101 [
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
102 lic["Name"],
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
103 lic["Version"],
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
104 lic["License"].replace("; ", "\n"),
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
105 ],
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
106 )
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
107 licenseSummaryList.extend(
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
108 x.strip() for x in lic["License"].split("; ")
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
109 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
110
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
111 self.licensesList.sortItems(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
112 PipLicensesDialog.LicensesPackageColumn, Qt.SortOrder.AscendingOrder
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
113 )
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
114 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
115 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
116 self.licensesList.setUpdatesEnabled(True)
9221
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 # 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
119 self.summaryList.setUpdatesEnabled(False)
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
120 licenseCounter = Counter(licenseSummaryList)
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
121 for lic in licenseCounter:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
122 QTreeWidgetItem(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
123 self.summaryList,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
124 [
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
125 "{0:4d}".format(licenseCounter[lic]),
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
126 lic,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
127 ],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
128 )
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
129 licensesForFilter.add(lic)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
130
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
131 self.summaryList.sortItems(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
132 PipLicensesDialog.SummaryLicenseColumn, Qt.SortOrder.AscendingOrder
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
133 )
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
134 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
135 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
136 self.summaryList.setUpdatesEnabled(True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
137
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
138 self.licenseFilterComboBox.addItems(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139 [self.__allFilter] + sorted(licensesForFilter)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
140 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
141
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
142 enable = bool(self.licensesList.topLevelItemCount())
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
143 self.__saveCSVButton.setEnabled(enable)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
144
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
145 @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
146 def __filterPackagesByLicense(self, licenseName):
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
147 """
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
148 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
149
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
150 @param licenseName license name
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
151 @type str
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
152 """
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
153 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
154 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
155 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
156 regexp = re.compile(pattern)
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
157 for row in range(self.licensesList.topLevelItemCount()):
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
158 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
159 if licenseName == self.__allFilter:
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
160 itm.setHidden(False)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
161 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
162 itm.setHidden(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
163 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
164 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
165 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
166
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
167 @pyqtSlot()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
168 def __saveAsCSV(self):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
169 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
170 Private slot to save the license information as a CSV file.
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
171 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
172 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
173 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
174 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
175 os.path.expanduser("~"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
176 self.tr("CSV Files (*.csv);;All Files (*)"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
177 None,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
178 EricFileDialog.DontConfirmOverwrite,
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
179 )
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
180 if fileName:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
181 ext = os.path.splitext(fileName)[1]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
182 if not ext:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
183 ex = selectedFilter.split("(*")[1].split(")")[0]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
184 if ex:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
185 fileName += ex
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
186
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
187 try:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
188 with open(fileName, "w", newline="", encoding="utf-8") as csvFile:
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
189 fieldNames = ["Name", "Version", "License"]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
190 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
191
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
192 writer.writeheader()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
193 for row in range(self.licensesList.topLevelItemCount()):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
194 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
195 writer.writerow(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
196 {
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197 "Name": itm.text(0),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
198 "Version": itm.text(1),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
199 "License": itm.text(2),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
200 }
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
201 )
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
202 except OSError as err:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
203 EricMessageBox.critical(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
204 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
205 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
206 self.tr(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
207 """<p>The license information could not be saved"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
208 """ into the CSV file <b>{0}</b>.</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
209 """<p>Reason: {1}</p>"""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
210 ).format(fileName, str(err)),
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
211 )

eric ide

mercurial