src/eric7/VirtualEnv/VirtualenvManagerWidgets.py

branch
eric7
changeset 10351
1f9bafeff96c
parent 10194
2c26b4fe25db
child 10359
de0420dac60e
diff -r b2297669c065 -r 1f9bafeff96c src/eric7/VirtualEnv/VirtualenvManagerWidgets.py
--- a/src/eric7/VirtualEnv/VirtualenvManagerWidgets.py	Wed Nov 29 11:33:32 2023 +0100
+++ b/src/eric7/VirtualEnv/VirtualenvManagerWidgets.py	Wed Nov 29 14:27:25 2023 +0100
@@ -8,6 +8,7 @@
 environments.
 """
 
+import datetime
 import os
 
 from PyQt6.QtCore import Qt, pyqtSlot
@@ -21,11 +22,14 @@
 )
 
 from eric7.EricGui import EricPixmapCache
+from eric7.EricWidgets import EricMessageBox
 from eric7.EricWidgets.EricMainWindow import EricMainWindow
 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
+from eric7.EricWidgets.EricListSelectionDialog import EricListSelectionDialog
 from eric7.SystemUtilities import OSUtilities
 
 from .Ui_VirtualenvManagerWidget import Ui_VirtualenvManagerWidget
+from .VirtualenvMeta import VirtualenvMetaData
 
 
 class VirtualenvManagerWidget(QWidget, Ui_VirtualenvManagerWidget):
@@ -55,6 +59,7 @@
         self.refreshButton.setIcon(EricPixmapCache.getIcon("reload"))
         self.addButton.setIcon(EricPixmapCache.getIcon("plus"))
         self.newButton.setIcon(EricPixmapCache.getIcon("new"))
+        self.searchNewButton.setIcon(EricPixmapCache.getIcon("question"))
         self.editButton.setIcon(EricPixmapCache.getIcon("edit"))
         self.upgradeButton.setIcon(EricPixmapCache.getIcon("upgrade"))
         self.removeButton.setIcon(EricPixmapCache.getIcon("minus"))
@@ -161,6 +166,73 @@
         self.__manager.createVirtualEnv(baseDir=self.envBaseDirectoryPicker.text())
 
     @pyqtSlot()
+    def on_searchNewButton_clicked(self):
+        """
+        Public slot to search for new (not yet registered) Python interpreters.
+        """
+        potentialInterpreters = self.__manager.searchUnregisteredInterpreters()
+
+        if not bool(potentialInterpreters):
+            EricMessageBox.information(
+                self,
+                self.tr("Search Virtual Environments"),
+                self.tr("""No unregistered virtual environments were found."""),
+            )
+            return
+
+        baseDir = self.__manager.getVirtualEnvironmentsBaseDir()
+        if not baseDir:
+            baseDir = OSUtilities.getHomeDir()
+
+        selectionList = []
+        for interpreter in potentialInterpreters:
+            if not interpreter.startswith(baseDir):
+                realpath = os.path.realpath(interpreter)
+                if realpath != interpreter:
+                    # interpreter is a link
+                    selectionList.append(
+                        (
+                            self.tr("{0}\n(=> {1})").format(interpreter, realpath),
+                            interpreter,
+                        )
+                    )
+                    continue
+
+            selectionList.append((interpreter, interpreter))
+
+        dlg = EricListSelectionDialog(
+            sorted(selectionList),
+            title=self.tr("Search Virtual Environments"),
+            message=self.tr(
+                "Select the interpreters to create environment entries for:"
+            ),
+            checkBoxSelection=True,
+            emptySelectionOk=True,
+            showSelectAll=True,
+        )
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            selectedInterpreters = [env[1] for env in dlg.getSelection()]
+
+            nameTemplate = (
+                "Environment #{0} added "
+                + datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
+            )
+            for interpreter in selectedInterpreters:
+                metadata = VirtualenvMetaData(
+                    name=nameTemplate.format(
+                        selectedInterpreters.index(interpreter) + 1
+                    ),
+                    path=(
+                        os.path.abspath(os.path.join(interpreter, "..", ".."))
+                        if interpreter.startswith(baseDir)
+                        else ""
+                    ),
+                    interpreter=interpreter,
+                    is_global=not interpreter.startswith(baseDir),
+                )
+                self.__manager.addVirtualEnv(metadata)
+
+    @pyqtSlot()
     def on_editButton_clicked(self):
         """
         Private slot to edit the selected entry.

eric ide

mercurial