src/eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py

branch
eric7
changeset 11203
2ea34362b6b6
parent 11090
f5f5f5803935
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())

eric ide

mercurial