src/eric7/PipInterface/PipLicensesDialog.py

Thu, 07 Jul 2022 11:23:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 07 Jul 2022 11:23:56 +0200
branch
eric7
changeset 9209
b99e7fd55fd3
parent 9108
eric7/PipInterface/PipLicensesDialog.py@19a57544f32c
child 9221
bf71ee032bb4
permissions
-rw-r--r--

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
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
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
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
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
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
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
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
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
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
57 self.__allFilter = self.tr("<All>")
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
58
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
59 self.__saveCSVButton = self.buttonBox.addButton(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
60 self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
61 self.__saveCSVButton.clicked.connect(self.__saveAsCSV)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
62
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
63 self.buttonBox.button(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
64 QDialogButtonBox.StandardButton.Close).setDefault(True)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
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
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
80 self.licenseFilterComboBox.currentTextChanged.connect(
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
81 self.__filterPackagesByLicense)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
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
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
93 self.licenseFilterComboBox.clear()
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
94
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
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
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
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
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
138
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
139 self.licenseFilterComboBox.addItems(
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
140 [self.__allFilter] + sorted(licensesForFilter))
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
141
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)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
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.
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
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(
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
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
167
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
168 @pyqtSlot()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
169 def __saveAsCSV(self):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
170 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
171 Private slot to save the license information as a CSV file.
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
172 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
173 import csv
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
174
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
175 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
176 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
177 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
178 os.path.expanduser("~"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
179 self.tr("CSV Files (*.csv);;All Files (*)"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
180 None,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
181 EricFileDialog.DontConfirmOverwrite
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 if fileName:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
184 ext = os.path.splitext(fileName)[1]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
185 if not ext:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
186 ex = selectedFilter.split("(*")[1].split(")")[0]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
187 if ex:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
188 fileName += ex
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
189
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
190 try:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
191 with open(fileName, "w", newline="",
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
192 encoding="utf-8") as csvFile:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
193 fieldNames = ["Name", "Version", "License"]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
194 writer = csv.DictWriter(csvFile, fieldnames=fieldNames)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
195
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
196 writer.writeheader()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
197 for row in range(self.licensesList.topLevelItemCount()):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
198 itm = self.licensesList.topLevelItem(row)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
199 writer.writerow({
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
200 "Name": itm.text(0),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
201 "Version": itm.text(1),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
202 "License": itm.text(2),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
203 })
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
204 except OSError as err:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
205 EricMessageBox.critical(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
206 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
207 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
208 self.tr(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
209 """<p>The license information could not be saved"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
210 """ into the CSV file <b>{0}</b>.</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
211 """<p>Reason: {1}</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
212 ).format(fileName, str(err))
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
213 )

eric ide

mercurial