diff -r 6d4838c04feb -r 2ea34362b6b6 src/eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py --- a/src/eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py Wed Apr 02 16:44:07 2025 +0200 +++ b/src/eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py Wed Apr 02 16:46:15 2025 +0200 @@ -13,6 +13,7 @@ import os import pathlib +import spdx_license_list import tomlkit import trove_classifiers @@ -89,6 +90,16 @@ lineEdit.setStyleSheet(self.__mandatoryStyleSheet) self.__populateClassifiers() + if category == "pyproject.toml": + self.licenseClassifierCheckBox.setText( + self.tr("Select From SPDX License List") + ) + self.__populateSpdxLicenses() + else: + self.licenseClassifierCheckBox.setText( + self.tr("Select From Trove License Classifiers") + ) + self.__populateTroveLicenses() self.__okButton = self.buttonBox.button(QDialogButtonBox.StandardButton.Ok) self.__okButton.setEnabled(False) @@ -141,7 +152,6 @@ """ Private method to populate the classifiers. """ - self.licenseClassifierComboBox.clear() self.classifiersList.clear() self.developmentStatusComboBox.clear() @@ -150,9 +160,8 @@ self.__classifiersDict = {} for classifier in trove_classifiers.sorted_classifiers: if classifier.startswith("License ::"): - self.licenseClassifierComboBox.addItem( - "/".join(classifier.split(" :: ")[1:]), classifier - ) + # These are handled separately for setup.py and setup.cfg. + continue elif classifier.startswith("Development Status ::"): self.developmentStatusComboBox.addItem( classifier.split(" :: ")[1], classifier @@ -161,12 +170,6 @@ self.__addClassifierEntry(classifier) self.__classifiersDict = {} - self.licenseClassifierComboBox.setCurrentIndex( - self.licenseClassifierComboBox.findText( - "(GPLv3)", Qt.MatchFlag.MatchContains | Qt.MatchFlag.MatchCaseSensitive - ) - ) - def __addClassifierEntry(self, classifier): """ Private method to add a new entry to the list of trove classifiers. @@ -192,6 +195,46 @@ itm.setCheckState(0, Qt.CheckState.Unchecked) itm.setData(0, Qt.ItemDataRole.UserRole, classifier) + def __populateTroveLicenses(self): + """ + Private method to populate the license selector for the creation of a + setup.py or setup.cfg file. + + Note: These files are deprecated in favor of pyproject.toml. + """ + self.licenseClassifierComboBox.clear() + + for classifier in trove_classifiers.sorted_classifiers: + if classifier.startswith("License ::"): + self.licenseClassifierComboBox.addItem( + "/".join(classifier.split(" :: ")[1:]), classifier + ) + + self.licenseClassifierComboBox.setCurrentIndex( + self.licenseClassifierComboBox.findText( + "(GPLv3)", + Qt.MatchFlag.MatchContains | Qt.MatchFlag.MatchCaseSensitive, + ) + ) + + def __populateSpdxLicenses(self): + """ + Private method to populate the license selector for the creation of a + pyproject.toml file. + """ + self.licenseClassifierComboBox.clear() + + for spdxLicense in spdx_license_list.LICENSES.values(): + if not spdxLicense.deprecated_id: + self.licenseClassifierComboBox.addItem(spdxLicense.name, spdxLicense.id) + + self.licenseClassifierComboBox.setCurrentIndex( + self.licenseClassifierComboBox.findData( + "GPL-3.0", + flags=Qt.MatchFlag.MatchStartsWith | Qt.MatchFlag.MatchCaseSensitive, + ) + ) + def __getLicenseText(self): """ Private method to get the license text. @@ -688,17 +731,14 @@ urls[urlItem.text(0)] = urlItem.text(1) project["urls"] = urls - classifiers = [] - if not self.licenseClassifierCheckBox.isChecked(): - licenseTbl = tomlkit.table() - licenseTbl["text"] = self.licenseEdit.text() - project["license"] = licenseTbl + if self.licenseClassifierCheckBox.isChecked(): + project["license"] = self.licenseClassifierComboBox.itemData( + self.licenseClassifierComboBox.currentIndex() + ) else: - classifiers.append( - self.licenseClassifierComboBox.itemData( - self.licenseClassifierComboBox.currentIndex() - ) - ) + project["license"] = self.licenseEdit.text() + + classifiers = [] if self.developmentStatusComboBox.currentIndex() != 0: classifiers.append(self.developmentStatusComboBox.currentData())