eric7/PipInterface/PipLicensesDialog.py

Tue, 24 May 2022 15:34:31 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 24 May 2022 15:34:31 +0200
branch
eric7
changeset 9103
8ac26b4c4316
parent 9014
cdf68c00881d
child 9108
19a57544f32c
permissions
-rw-r--r--

pip Interface
- added a filter to the package licenses dialog

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
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
11
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
12 from PyQt6.QtCore import pyqtSlot, Qt
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
13 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
14
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
15 from EricGui.EricOverrideCursor import EricOverrideCursor
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
16 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
17
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 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
19
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 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
22 """
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
23 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
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 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
26 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
27 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
28
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 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
30 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
31
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
32 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
33 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
34 """
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 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
36
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 @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
38 @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
39 @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
40 @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
41 @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
42 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
43 @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
44 @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
45 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
46 @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
47 @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
48 @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
49 """
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 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
51 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
52
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 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
54 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
55
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
56 self.__allFilter = self.tr("<All>")
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
57
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
58 self.__saveCSVButton = self.buttonBox.addButton(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
59 self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
60 self.__saveCSVButton.clicked.connect(self.__saveAsCSV)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
61
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
62 self.buttonBox.button(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
63 QDialogButtonBox.StandardButton.Close).setDefault(True)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
64
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
65 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
66 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
67
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 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
69 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
70
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 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
72 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
73 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
74 ))
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
75 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
76 # 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
77 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
78
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
79 self.licenseFilterComboBox.currentTextChanged.connect(
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
80 self.__filterPackagesByLicense)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
81
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
82 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
83
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 @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
85 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
86 """
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 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
88 """
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 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
90 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
91 self.summaryList.clear()
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
92 self.licenseFilterComboBox.clear()
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
93
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
94 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
95
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 # 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
97 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
98 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
99 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
100 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
101 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
102 )
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 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
104 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
105 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
106 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
107 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
108 ])
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 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
111 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
112 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
113 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
114 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
115 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
116
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 # 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
118 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
119 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
120 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
121 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
122 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
123 )
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 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
125 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
126 "{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
127 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
128 ])
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
129 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
130
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(
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 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
133 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
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)
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
137
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
138 self.licenseFilterComboBox.addItems(
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
139 [self.__allFilter] + sorted(licensesForFilter))
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
140
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
141 enable = bool(self.licensesList.topLevelItemCount())
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
142 self.__saveCSVButton.setEnabled(enable)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
143
9103
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
144 @pyqtSlot(str)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
145 def __filterPackagesByLicense(self, license):
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
146 """
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
147 Private slot to filter the list of packages by license.
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
148
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
149 @param license license name
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
150 @type str
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
151 """
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
152 for row in range(self.licensesList.topLevelItemCount()):
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
153 itm = self.licensesList.topLevelItem(row)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
154 if license == self.__allFilter:
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
155 itm.setHidden(False)
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
156 else:
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
157 itm.setHidden(license not in itm.text(
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
158 PipLicensesDialog.LicensesLicenseColumn
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
159 ))
8ac26b4c4316 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9014
diff changeset
160
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
161 @pyqtSlot()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
162 def __saveAsCSV(self):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
163 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
164 Private slot to save the license information as a CSV file.
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
165 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
166 import csv
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
167
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
168 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
169 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
170 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
171 os.path.expanduser("~"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
172 self.tr("CSV Files (*.csv);;All Files (*)"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
173 None,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
174 EricFileDialog.DontConfirmOverwrite
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
175 )
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
176 if fileName:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
177 ext = os.path.splitext(fileName)[1]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
178 if not ext:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
179 ex = selectedFilter.split("(*")[1].split(")")[0]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
180 if ex:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
181 fileName += ex
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 try:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
184 with open(fileName, "w", newline="",
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
185 encoding="utf-8") as csvFile:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
186 fieldNames = ["Name", "Version", "License"]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
187 writer = csv.DictWriter(csvFile, fieldnames=fieldNames)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
188
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
189 writer.writeheader()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
190 for row in range(self.licensesList.topLevelItemCount()):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
191 itm = self.licensesList.topLevelItem(row)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
192 writer.writerow({
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
193 "Name": itm.text(0),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
194 "Version": itm.text(1),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
195 "License": itm.text(2),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
196 })
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
197 except OSError as err:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
198 EricMessageBox.critical(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
199 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
200 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
201 self.tr(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
202 """<p>The license information could not be saved"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
203 """ into the CSV file <b>{0}</b>.</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
204 """<p>Reason: {1}</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
205 ).format(fileName, str(err))
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
206 )

eric ide

mercurial