eric7/PipInterface/PipLicensesDialog.py

Sat, 02 Apr 2022 17:07:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 02 Apr 2022 17:07:56 +0200
branch
eric7
changeset 9014
cdf68c00881d
parent 9003
6bc210cd5726
child 9103
8ac26b4c4316
child 9111
4ac66b6c33a4
permissions
-rw-r--r--

pip Interface
- added the capability to save the licenses overview as a CSV file

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
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
56 self.__saveCSVButton = self.buttonBox.addButton(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
57 self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
58 self.__saveCSVButton.clicked.connect(self.__saveAsCSV)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
59
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
60 self.buttonBox.button(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
61 QDialogButtonBox.StandardButton.Close).setDefault(True)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
62
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
63 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
64 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
65
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.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
67 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
68
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 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
70 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
71 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
72 ))
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 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
74 # 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
75 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
76
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.__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
78
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 @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
80 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
81 """
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 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
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 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
85 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
86 self.summaryList.clear()
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
87
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 # 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
89 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
90 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
91 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
92 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
93 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
94 )
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
95 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
96 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
97 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
98 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
99 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
100 ])
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 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
103 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
104 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
105 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
106 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
107 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
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 # 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
110 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
111 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
112 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
113 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
114 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
115 )
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
116 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
117 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
118 "{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
119 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
120 ])
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.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
123 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
124 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
125 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
126 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
127 self.summaryList.setUpdatesEnabled(True)
9014
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
128
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
129 enable = bool(self.licensesList.topLevelItemCount())
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
130 self.__saveCSVButton.setEnabled(enable)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
131
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
132 @pyqtSlot()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
133 def __saveAsCSV(self):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
134 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
135 Private slot to save the license information as a CSV file.
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
136 """
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
137 import csv
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
138
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
139 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
140 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
141 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
142 os.path.expanduser("~"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
143 self.tr("CSV Files (*.csv);;All Files (*)"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
144 None,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
145 EricFileDialog.DontConfirmOverwrite
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
146 )
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
147 if fileName:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
148 ext = os.path.splitext(fileName)[1]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
149 if not ext:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
150 ex = selectedFilter.split("(*")[1].split(")")[0]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
151 if ex:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
152 fileName += ex
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
153
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
154 try:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
155 with open(fileName, "w", newline="",
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
156 encoding="utf-8") as csvFile:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
157 fieldNames = ["Name", "Version", "License"]
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
158 writer = csv.DictWriter(csvFile, fieldnames=fieldNames)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
159
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
160 writer.writeheader()
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
161 for row in range(self.licensesList.topLevelItemCount()):
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
162 itm = self.licensesList.topLevelItem(row)
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
163 writer.writerow({
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
164 "Name": itm.text(0),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
165 "Version": itm.text(1),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
166 "License": itm.text(2),
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 except OSError as err:
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
169 EricMessageBox.critical(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
170 self,
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
171 self.tr("Save as CSV"),
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
172 self.tr(
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
173 """<p>The license information could not be saved"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
174 """ into the CSV file <b>{0}</b>.</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
175 """<p>Reason: {1}</p>"""
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
176 ).format(fileName, str(err))
cdf68c00881d pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9003
diff changeset
177 )

eric ide

mercurial