src/eric7/VirtualEnv/VirtualenvAddEditDialog.py

branch
server
changeset 10725
51fe971610d3
parent 10439
21c28b0f9e41
child 10765
b0632e55ec9a
--- a/src/eric7/VirtualEnv/VirtualenvAddEditDialog.py	Tue May 21 19:31:50 2024 +0200
+++ b/src/eric7/VirtualEnv/VirtualenvAddEditDialog.py	Tue May 21 19:35:41 2024 +0200
@@ -12,8 +12,9 @@
 from PyQt6.QtCore import Qt, pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
+from eric7.EricWidgets.EricApplication import ericApp
 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
-from eric7.SystemUtilities import OSUtilities, PythonUtilities
+from eric7.SystemUtilities import FileSystemUtilities, OSUtilities, PythonUtilities
 
 from .Ui_VirtualenvAddEditDialog import Ui_VirtualenvAddEditDialog
 from .VirtualenvMeta import VirtualenvMetaData
@@ -50,6 +51,8 @@
         self.__venvName = "" if metadata is None else metadata.name
         self.__manager = manager
         self.__editMode = bool(self.__venvName)
+        self.__serverInterface = ericApp().getObject("EricServer")
+        self.__fsInterface = self.__serverInterface.getServiceInterface("FileSystem")
 
         if self.__editMode:
             self.setWindowTitle(self.tr("Edit Virtual Environment"))
@@ -60,15 +63,29 @@
         if not self.__envBaseDir:
             self.__envBaseDir = OSUtilities.getHomeDir()
 
+        self.serverRadioButton.setEnabled(self.__serverInterface.isServerConnected())
+
         self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE)
         self.targetDirectoryPicker.setWindowTitle(
             self.tr("Virtualenv Target Directory")
         )
-        self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir)
+        if self.__serverInterface.isServerConnected():
+            self.targetDirectoryPicker.setRemote(
+                metadata.is_eric_server if metadata else False
+            )
+        if metadata is None or (not metadata.is_eric_server and not metadata.is_remote):
+            self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir)
 
         self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
         self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter"))
-        self.pythonExecPicker.setDefaultDirectory(PythonUtilities.getPythonExecutable())
+        if self.__serverInterface.isServerConnected():
+            self.pythonExecPicker.setRemote(
+                metadata.is_eric_server if metadata else False
+            )
+        if metadata is None or (not metadata.is_eric_server and not metadata.is_remote):
+            self.pythonExecPicker.setDefaultDirectory(
+                PythonUtilities.getPythonExecutable()
+            )
 
         self.execPathEdit.setToolTip(
             self.tr(
@@ -81,27 +98,40 @@
         if metadata:
             if metadata.path:
                 self.targetDirectoryPicker.setText(
-                    metadata.path, toNative=not metadata.is_remote
+                    metadata.path,
+                    toNative=not metadata.is_remote and not metadata.is_eric_server,
                 )
             else:
                 self.targetDirectoryPicker.setText(
-                    self.__envBaseDir, toNative=not metadata.is_remote
+                    self.__envBaseDir,
+                    toNative=not metadata.is_remote and not metadata.is_eric_server,
                 )
-            if not metadata.interpreter and metadata.path and not metadata.is_remote:
+            if (
+                not metadata.interpreter
+                and metadata.path
+                and not metadata.is_remote
+                and not metadata.is_eric_server
+            ):
                 py = self.__detectPythonInterpreter(metadata.path)
                 self.pythonExecPicker.setText(py)
             else:
                 self.pythonExecPicker.setText(
-                    metadata.interpreter, toNative=not metadata.is_remote
+                    metadata.interpreter,
+                    toNative=not metadata.is_remote and not metadata.is_eric_server,
                 )
         else:
             self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True)
 
         self.globalCheckBox.setChecked(metadata.is_global if metadata else False)
-        self.anacondaCheckBox.setChecked(metadata.is_conda if metadata else False)
-        self.remoteCheckBox.setChecked(metadata.is_remote if metadata else False)
+        self.standardRadioButton.setChecked(True)
+        self.anacondaRadioButton.setChecked(metadata.is_conda if metadata else False)
+        self.remoteRadioButton.setChecked(metadata.is_remote if metadata else False)
+        self.serverRadioButton.setChecked(
+            metadata.is_eric_server if metadata else False
+        )
         self.execPathEdit.setText(metadata.exec_path if metadata else "")
         self.descriptionEdit.setPlainText(metadata.description if metadata else "")
+        self.serverLineEdit.setText(metadata.eric_server if metadata else "")
 
         self.__updateOk()
 
@@ -127,18 +157,34 @@
         )
 
         if not self.globalCheckBox.isChecked():
-            enable &= self.remoteCheckBox.isChecked() or (
+            enable &= self.remoteRadioButton.isChecked() or (
                 bool(self.targetDirectoryPicker.text())
                 and self.targetDirectoryPicker.text() != self.__envBaseDir
-                and os.path.exists(self.targetDirectoryPicker.text())
+                and (
+                    (
+                        self.serverRadioButton.isChecked()
+                        and self.__fsInterface.exists(self.targetDirectoryPicker.text())
+                    )
+                    or (
+                        not self.serverRadioButton.isChecked()
+                        and os.path.exists(self.targetDirectoryPicker.text())
+                    )
+                )
             )
 
-        enable = (
-            enable
-            and bool(self.pythonExecPicker.text())
+        enable &= self.remoteRadioButton.isChecked() or (
+            bool(self.pythonExecPicker.text())
             and (
-                self.remoteCheckBox.isChecked()
-                or os.access(self.pythonExecPicker.text(), os.X_OK)
+                (
+                    self.serverRadioButton.isChecked()
+                    and self.__fsInterface.access(
+                        self.pythonExecPicker.text(), "execute"
+                    )
+                )
+                or (
+                    not self.serverRadioButton.isChecked()
+                    and os.access(self.pythonExecPicker.text(), os.X_OK)
+                )
             )
         )
 
@@ -220,21 +266,38 @@
         self.__updateOk()
 
     @pyqtSlot(bool)
-    def on_remoteCheckBox_toggled(self, checked):
+    def on_remoteRadioButton_toggled(self, checked):
         """
-        Private slot handling a change of the remote check box state.
+        Private slot handling a change of the remote radio button state.
 
-        @param checked state of the check box
+        @param checked state of the radio button
         @type bool
         """
         self.__updateOk()
 
     @pyqtSlot(bool)
-    def on_anacondaCheckBox_clicked(self, checked):
+    def on_serverRadioButton_toggled(self, checked):
+        """
+        Private slot handling a change of the eric IDE server radio button state.
+
+        @param checked state of the radio button
+        @type bool
         """
-        Private slot handling a user click on this check box.
+        if self.__serverInterface.isServerConnected():
+            self.targetDirectoryPicker.setRemote(checked)
+            self.pythonExecPicker.setRemote(checked)
+            self.serverLineEdit.setText(
+                self.__serverInterface.getHost() if checked else ""
+            )
 
-        @param checked state of the check box
+        self.__updateOk()
+
+    @pyqtSlot(bool)
+    def on_anacondaRadioButton_clicked(self, checked):
+        """
+        Private slot handling a user click on this radio button.
+
+        @param checked state of the radio button
         @type bool
         """
         if checked and not bool(self.execPathEdit.text()):
@@ -263,14 +326,34 @@
         @return metadata for the virtual environment
         @rtype VirtualenvMetaData
         """
-        nativePaths = not self.remoteCheckBox.isChecked()
+        nativePaths = (
+            not self.remoteRadioButton.isChecked()
+            and not self.serverRadioButton.isChecked()
+        )
+        is_eric_server = self.serverRadioButton.isChecked()
+        envPath = (
+            FileSystemUtilities.remoteFileName(self.targetDirectoryPicker.text())
+            if is_eric_server
+            else FileSystemUtilities.plainFileName(
+                self.targetDirectoryPicker.text(toNative=nativePaths)
+            )
+        )
+        interpreter = (
+            FileSystemUtilities.remoteFileName(self.pythonExecPicker.text())
+            if is_eric_server
+            else FileSystemUtilities.plainFileName(
+                self.pythonExecPicker.text(toNative=nativePaths)
+            )
+        )
         return VirtualenvMetaData(
             name=self.nameEdit.text(),
-            path=self.targetDirectoryPicker.text(toNative=nativePaths),
-            interpreter=self.pythonExecPicker.text(toNative=nativePaths),
+            path=envPath,
+            interpreter=interpreter,
             is_global=self.globalCheckBox.isChecked(),
-            is_conda=self.anacondaCheckBox.isChecked(),
-            is_remote=self.remoteCheckBox.isChecked(),
+            is_conda=self.anacondaRadioButton.isChecked(),
+            is_remote=self.remoteRadioButton.isChecked(),
             exec_path=self.execPathEdit.text(),
             description=self.descriptionEdit.toPlainText(),
+            is_eric_server=is_eric_server,
+            eric_server=self.serverLineEdit.text(),
         )

eric ide

mercurial