30 LicensesLicenseColumn = 2 |
32 LicensesLicenseColumn = 2 |
31 |
33 |
32 SummaryCountColumn = 0 |
34 SummaryCountColumn = 0 |
33 SummaryLicenseColumn = 1 |
35 SummaryLicenseColumn = 1 |
34 |
36 |
35 def __init__( |
37 def __init__(self, pip, environment, packages=None, parent=None): |
36 self, pip, environment, localPackages=True, usersite=False, parent=None |
|
37 ): |
|
38 """ |
38 """ |
39 Constructor |
39 Constructor |
40 |
40 |
41 @param pip reference to the pip interface object |
41 @param pip reference to the pip interface object |
42 @type Pip |
42 @type Pip |
43 @param environment name of the environment to show the licenses for |
43 @param environment name of the environment to show the licenses for |
44 @type str |
44 @type str |
45 @param localPackages flag indicating to show the licenses for local |
45 @param packages list of packages to show licenses for (or None to show all |
46 packages only |
46 licenses (defaults to None) |
47 @type bool |
47 @type list (optional) |
48 @param usersite flag indicating to show the licenses for packages |
|
49 installed in user-site directory only |
|
50 @type bool |
|
51 @param parent reference to the parent widget (defaults to None) |
48 @param parent reference to the parent widget (defaults to None) |
52 @type QWidget (optional) |
49 @type QWidget (optional) |
53 """ |
50 """ |
54 super().__init__(parent) |
51 super().__init__(parent) |
55 self.setupUi(self) |
52 self.setupUi(self) |
56 |
53 |
57 self.__pip = pip |
54 self.__pip = pip |
58 self.__environment = environment |
55 self.__environment = environment |
|
56 self.__packages = packages[:] if packages is not None else None |
59 |
57 |
60 self.__allFilter = self.tr("<All>") |
58 self.__allFilter = self.tr("<All>") |
61 |
59 |
62 self.__saveCSVButton = self.buttonBox.addButton( |
60 self.__saveCSVButton = self.buttonBox.addButton( |
63 self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole |
61 self.tr("Save as CSV..."), QDialogButtonBox.ButtonRole.ActionRole |
64 ) |
62 ) |
65 self.__saveCSVButton.clicked.connect(self.__saveAsCSV) |
63 self.__saveCSVButton.clicked.connect(self.__saveAsCSV) |
66 |
64 |
67 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True) |
65 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setDefault(True) |
68 |
66 |
69 self.localCheckBox.setChecked(localPackages) |
|
70 self.userCheckBox.setChecked(usersite) |
|
71 |
|
72 self.localCheckBox.toggled.connect(self.__refreshLicenses) |
|
73 self.userCheckBox.toggled.connect(self.__refreshLicenses) |
|
74 |
|
75 if environment: |
67 if environment: |
76 self.environmentLabel.setText( |
68 self.environmentLabel.setText( |
77 "<b>{0}</b>".format(self.tr('Licenses of "{0}"').format(environment)) |
69 "<b>{0}</b>".format(self.tr('Licenses of "{0}"').format(environment)) |
78 ) |
70 ) |
79 else: |
71 else: |
82 |
74 |
83 self.licenseFilterComboBox.currentTextChanged.connect( |
75 self.licenseFilterComboBox.currentTextChanged.connect( |
84 self.__filterPackagesByLicense |
76 self.__filterPackagesByLicense |
85 ) |
77 ) |
86 |
78 |
87 self.__refreshLicenses() |
79 self.__populateLicenses() |
88 |
80 |
89 @pyqtSlot() |
81 @pyqtSlot() |
90 def __refreshLicenses(self): |
82 def __populateLicenses(self): |
91 """ |
83 """ |
92 Private slot to refresh the license lists. |
84 Private slot to populate the license lists. |
93 """ |
85 """ |
94 with EricOverrideCursor(): |
86 with EricOverrideCursor(): |
95 self.licensesList.clear() |
87 self.licensesList.clear() |
96 self.summaryList.clear() |
88 self.summaryList.clear() |
97 self.licenseFilterComboBox.clear() |
89 self.licenseFilterComboBox.clear() |
98 |
90 |
99 licensesForFilter = set() |
91 licensesForFilter = set() |
|
92 licenseSummaryList = [] |
100 |
93 |
101 # step 1: show the licenses per package |
94 # step 1: show the licenses per package |
102 self.licensesList.setUpdatesEnabled(False) |
95 self.licensesList.setUpdatesEnabled(False) |
103 licenses = self.__pip.getLicenses( |
96 licenses = self.__pip.getLicenses(self.__environment) |
104 self.__environment, |
|
105 localPackages=self.localCheckBox.isChecked(), |
|
106 usersite=self.userCheckBox.isChecked(), |
|
107 ) |
|
108 for lic in licenses: |
97 for lic in licenses: |
109 QTreeWidgetItem( |
98 if self.__packages is None or lic["Name"] in self.__packages: |
110 self.licensesList, |
99 QTreeWidgetItem( |
111 [ |
100 self.licensesList, |
112 lic["Name"], |
101 [ |
113 lic["Version"], |
102 lic["Name"], |
114 lic["License"].replace("; ", "\n"), |
103 lic["Version"], |
115 ], |
104 lic["License"].replace("; ", "\n"), |
116 ) |
105 ], |
|
106 ) |
|
107 licenseSummaryList.extend( |
|
108 x.strip() for x in lic["License"].split("; ") |
|
109 ) |
117 |
110 |
118 self.licensesList.sortItems( |
111 self.licensesList.sortItems( |
119 PipLicensesDialog.LicensesPackageColumn, Qt.SortOrder.AscendingOrder |
112 PipLicensesDialog.LicensesPackageColumn, Qt.SortOrder.AscendingOrder |
120 ) |
113 ) |
121 for col in range(self.licensesList.columnCount()): |
114 for col in range(self.licensesList.columnCount()): |
122 self.licensesList.resizeColumnToContents(col) |
115 self.licensesList.resizeColumnToContents(col) |
123 self.licensesList.setUpdatesEnabled(True) |
116 self.licensesList.setUpdatesEnabled(True) |
124 |
117 |
125 # step 2: show the licenses summary |
118 # step 2: show the licenses summary |
126 self.summaryList.setUpdatesEnabled(False) |
119 self.summaryList.setUpdatesEnabled(False) |
127 licenses = self.__pip.getLicensesSummary( |
120 licenseCounter = Counter(licenseSummaryList) |
128 self.__environment, |
121 for lic in licenseCounter: |
129 localPackages=self.localCheckBox.isChecked(), |
|
130 usersite=self.userCheckBox.isChecked(), |
|
131 ) |
|
132 for lic in licenses: |
|
133 QTreeWidgetItem( |
122 QTreeWidgetItem( |
134 self.summaryList, |
123 self.summaryList, |
135 [ |
124 [ |
136 "{0:4d}".format(lic["Count"]), |
125 "{0:4d}".format(licenseCounter[lic]), |
137 lic["License"].replace("; ", "\n"), |
126 lic, |
138 ], |
127 ], |
139 ) |
128 ) |
140 licensesForFilter |= set(lic["License"].split("; ")) |
129 licensesForFilter.add(lic) |
141 |
130 |
142 self.summaryList.sortItems( |
131 self.summaryList.sortItems( |
143 PipLicensesDialog.SummaryLicenseColumn, Qt.SortOrder.AscendingOrder |
132 PipLicensesDialog.SummaryLicenseColumn, Qt.SortOrder.AscendingOrder |
144 ) |
133 ) |
145 for col in range(self.summaryList.columnCount()): |
134 for col in range(self.summaryList.columnCount()): |