Thu, 07 Jul 2022 11:23:56 +0200
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
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 | |
9014 | 10 | 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
|
11 | import re |
9014 | 12 | |
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
|
13 | from PyQt6.QtCore import pyqtSlot, Qt |
9014 | 14 | 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
|
15 | |
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
|
16 | from EricGui.EricOverrideCursor import EricOverrideCursor |
9014 | 17 | from 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
|
18 | |
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
|
19 | 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
|
20 | |
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 | 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
|
23 | """ |
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
|
24 | 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
|
25 | """ |
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 | 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
|
27 | 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
|
28 | LicensesLicenseColumn = 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
|
29 | |
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 | 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
|
31 | SummaryLicenseColumn = 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 | |
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
|
33 | def __init__(self, pip, environment, localPackages=True, usersite=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
|
34 | 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
|
35 | """ |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | Constructor |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
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 | @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
|
39 | @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
|
40 | @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
|
41 | @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
|
42 | @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
|
43 | 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
|
44 | @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
|
45 | @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
|
46 | 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
|
47 | @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
|
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) |
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 | 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 |
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
|
56 | |
9103 | 57 | self.__allFilter = self.tr("<All>") |
58 | ||
9014 | 59 | self.__saveCSVButton = self.buttonBox.addButton( |
60 | self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole) | |
61 | self.__saveCSVButton.clicked.connect(self.__saveAsCSV) | |
62 | ||
63 | self.buttonBox.button( | |
64 | QDialogButtonBox.StandardButton.Close).setDefault(True) | |
65 | ||
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
|
66 | 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
|
67 | self.userCheckBox.setChecked(usersite) |
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
|
68 | |
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.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
|
70 | self.userCheckBox.toggled.connect(self.__refreshLicenses) |
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
|
71 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | if 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
|
73 | self.environmentLabel.setText("<b>{0}</b>".format( |
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
|
74 | self.tr('Licenses of "{0}"').format(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
|
75 | )) |
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
|
76 | 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
|
77 | # 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
|
78 | self.environmentLabel.setText(self.tr("No environment specified.")) |
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 | |
9103 | 80 | self.licenseFilterComboBox.currentTextChanged.connect( |
81 | self.__filterPackagesByLicense) | |
82 | ||
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 | 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
|
84 | |
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 | @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
|
86 | 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
|
87 | """ |
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 | 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
|
89 | """ |
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 | 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
|
91 | 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
|
92 | self.summaryList.clear() |
9103 | 93 | self.licenseFilterComboBox.clear() |
94 | ||
95 | licensesForFilter = set() | |
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
|
96 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | # 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
|
98 | 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
|
99 | 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
|
100 | 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
|
101 | 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
|
102 | 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
|
103 | ) |
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 | for lic in licenses: |
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
|
105 | QTreeWidgetItem(self.licensesList, [ |
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
|
106 | lic["Name"], |
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 | lic["Version"], |
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 | lic["License"].replace("; ", "\n"), |
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
|
109 | ]) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | |
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( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | PipLicensesDialog.LicensesPackageColumn, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | Qt.SortOrder.AscendingOrder) |
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) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | |
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) |
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
|
120 | 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
|
121 | 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
|
122 | 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
|
123 | 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
|
124 | ) |
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
|
125 | for lic in licenses: |
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
|
126 | QTreeWidgetItem(self.summaryList, [ |
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
|
127 | "{0:4d}".format(lic["Count"]), |
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 | lic["License"].replace("; ", "\n"), |
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
|
129 | ]) |
9103 | 130 | licensesForFilter |= set(lic["License"].split("; ")) |
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 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | self.summaryList.sortItems( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | PipLicensesDialog.SummaryLicenseColumn, |
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 | Qt.SortOrder.AscendingOrder) |
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 | 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
|
136 | 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
|
137 | self.summaryList.setUpdatesEnabled(True) |
9103 | 138 | |
139 | self.licenseFilterComboBox.addItems( | |
140 | [self.__allFilter] + sorted(licensesForFilter)) | |
9014 | 141 | |
142 | enable = bool(self.licensesList.topLevelItemCount()) | |
143 | self.__saveCSVButton.setEnabled(enable) | |
144 | ||
9103 | 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 | 147 | """ |
148 | Private slot to filter the list of packages by license. | |
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 | 151 | @type str |
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 | 157 | for row in range(self.licensesList.topLevelItemCount()): |
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 | 160 | itm.setHidden(False) |
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( |
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
|
163 | regexp.search( |
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 | itm.text(PipLicensesDialog.LicensesLicenseColumn) |
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 | ) is None |
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 | ) |
9103 | 167 | |
9014 | 168 | @pyqtSlot() |
169 | def __saveAsCSV(self): | |
170 | """ | |
171 | Private slot to save the license information as a CSV file. | |
172 | """ | |
173 | import csv | |
174 | ||
175 | fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter( | |
176 | self, | |
177 | self.tr("Save as CSV"), | |
178 | os.path.expanduser("~"), | |
179 | self.tr("CSV Files (*.csv);;All Files (*)"), | |
180 | None, | |
181 | EricFileDialog.DontConfirmOverwrite | |
182 | ) | |
183 | if fileName: | |
184 | ext = os.path.splitext(fileName)[1] | |
185 | if not ext: | |
186 | ex = selectedFilter.split("(*")[1].split(")")[0] | |
187 | if ex: | |
188 | fileName += ex | |
189 | ||
190 | try: | |
191 | with open(fileName, "w", newline="", | |
192 | encoding="utf-8") as csvFile: | |
193 | fieldNames = ["Name", "Version", "License"] | |
194 | writer = csv.DictWriter(csvFile, fieldnames=fieldNames) | |
195 | ||
196 | writer.writeheader() | |
197 | for row in range(self.licensesList.topLevelItemCount()): | |
198 | itm = self.licensesList.topLevelItem(row) | |
199 | writer.writerow({ | |
200 | "Name": itm.text(0), | |
201 | "Version": itm.text(1), | |
202 | "License": itm.text(2), | |
203 | }) | |
204 | except OSError as err: | |
205 | EricMessageBox.critical( | |
206 | self, | |
207 | self.tr("Save as CSV"), | |
208 | self.tr( | |
209 | """<p>The license information could not be saved""" | |
210 | """ into the CSV file <b>{0}</b>.</p>""" | |
211 | """<p>Reason: {1}</p>""" | |
212 | ).format(fileName, str(err)) | |
213 | ) |