src/eric7/VirtualEnv/VirtualenvAddEditDialog.py

branch
server
changeset 10725
51fe971610d3
parent 10439
21c28b0f9e41
child 10765
b0632e55ec9a
equal deleted inserted replaced
10724:6299dec09231 10725:51fe971610d3
10 import os 10 import os
11 11
12 from PyQt6.QtCore import Qt, pyqtSlot 12 from PyQt6.QtCore import Qt, pyqtSlot
13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox 13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
14 14
15 from eric7.EricWidgets.EricApplication import ericApp
15 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes 16 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
16 from eric7.SystemUtilities import OSUtilities, PythonUtilities 17 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities, PythonUtilities
17 18
18 from .Ui_VirtualenvAddEditDialog import Ui_VirtualenvAddEditDialog 19 from .Ui_VirtualenvAddEditDialog import Ui_VirtualenvAddEditDialog
19 from .VirtualenvMeta import VirtualenvMetaData 20 from .VirtualenvMeta import VirtualenvMetaData
20 21
21 22
48 self.setupUi(self) 49 self.setupUi(self)
49 50
50 self.__venvName = "" if metadata is None else metadata.name 51 self.__venvName = "" if metadata is None else metadata.name
51 self.__manager = manager 52 self.__manager = manager
52 self.__editMode = bool(self.__venvName) 53 self.__editMode = bool(self.__venvName)
54 self.__serverInterface = ericApp().getObject("EricServer")
55 self.__fsInterface = self.__serverInterface.getServiceInterface("FileSystem")
53 56
54 if self.__editMode: 57 if self.__editMode:
55 self.setWindowTitle(self.tr("Edit Virtual Environment")) 58 self.setWindowTitle(self.tr("Edit Virtual Environment"))
56 else: 59 else:
57 self.setWindowTitle(self.tr("Add Virtual Environment")) 60 self.setWindowTitle(self.tr("Add Virtual Environment"))
58 61
59 self.__envBaseDir = baseDir 62 self.__envBaseDir = baseDir
60 if not self.__envBaseDir: 63 if not self.__envBaseDir:
61 self.__envBaseDir = OSUtilities.getHomeDir() 64 self.__envBaseDir = OSUtilities.getHomeDir()
62 65
66 self.serverRadioButton.setEnabled(self.__serverInterface.isServerConnected())
67
63 self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) 68 self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE)
64 self.targetDirectoryPicker.setWindowTitle( 69 self.targetDirectoryPicker.setWindowTitle(
65 self.tr("Virtualenv Target Directory") 70 self.tr("Virtualenv Target Directory")
66 ) 71 )
67 self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir) 72 if self.__serverInterface.isServerConnected():
73 self.targetDirectoryPicker.setRemote(
74 metadata.is_eric_server if metadata else False
75 )
76 if metadata is None or (not metadata.is_eric_server and not metadata.is_remote):
77 self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir)
68 78
69 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) 79 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
70 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter")) 80 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter"))
71 self.pythonExecPicker.setDefaultDirectory(PythonUtilities.getPythonExecutable()) 81 if self.__serverInterface.isServerConnected():
82 self.pythonExecPicker.setRemote(
83 metadata.is_eric_server if metadata else False
84 )
85 if metadata is None or (not metadata.is_eric_server and not metadata.is_remote):
86 self.pythonExecPicker.setDefaultDirectory(
87 PythonUtilities.getPythonExecutable()
88 )
72 89
73 self.execPathEdit.setToolTip( 90 self.execPathEdit.setToolTip(
74 self.tr( 91 self.tr(
75 "Enter the executable search path to be prepended to the PATH" 92 "Enter the executable search path to be prepended to the PATH"
76 " environment variable. Use '{0}' as the separator." 93 " environment variable. Use '{0}' as the separator."
79 96
80 self.nameEdit.setText(self.__venvName) 97 self.nameEdit.setText(self.__venvName)
81 if metadata: 98 if metadata:
82 if metadata.path: 99 if metadata.path:
83 self.targetDirectoryPicker.setText( 100 self.targetDirectoryPicker.setText(
84 metadata.path, toNative=not metadata.is_remote 101 metadata.path,
102 toNative=not metadata.is_remote and not metadata.is_eric_server,
85 ) 103 )
86 else: 104 else:
87 self.targetDirectoryPicker.setText( 105 self.targetDirectoryPicker.setText(
88 self.__envBaseDir, toNative=not metadata.is_remote 106 self.__envBaseDir,
89 ) 107 toNative=not metadata.is_remote and not metadata.is_eric_server,
90 if not metadata.interpreter and metadata.path and not metadata.is_remote: 108 )
109 if (
110 not metadata.interpreter
111 and metadata.path
112 and not metadata.is_remote
113 and not metadata.is_eric_server
114 ):
91 py = self.__detectPythonInterpreter(metadata.path) 115 py = self.__detectPythonInterpreter(metadata.path)
92 self.pythonExecPicker.setText(py) 116 self.pythonExecPicker.setText(py)
93 else: 117 else:
94 self.pythonExecPicker.setText( 118 self.pythonExecPicker.setText(
95 metadata.interpreter, toNative=not metadata.is_remote 119 metadata.interpreter,
120 toNative=not metadata.is_remote and not metadata.is_eric_server,
96 ) 121 )
97 else: 122 else:
98 self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True) 123 self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True)
99 124
100 self.globalCheckBox.setChecked(metadata.is_global if metadata else False) 125 self.globalCheckBox.setChecked(metadata.is_global if metadata else False)
101 self.anacondaCheckBox.setChecked(metadata.is_conda if metadata else False) 126 self.standardRadioButton.setChecked(True)
102 self.remoteCheckBox.setChecked(metadata.is_remote if metadata else False) 127 self.anacondaRadioButton.setChecked(metadata.is_conda if metadata else False)
128 self.remoteRadioButton.setChecked(metadata.is_remote if metadata else False)
129 self.serverRadioButton.setChecked(
130 metadata.is_eric_server if metadata else False
131 )
103 self.execPathEdit.setText(metadata.exec_path if metadata else "") 132 self.execPathEdit.setText(metadata.exec_path if metadata else "")
104 self.descriptionEdit.setPlainText(metadata.description if metadata else "") 133 self.descriptionEdit.setPlainText(metadata.description if metadata else "")
134 self.serverLineEdit.setText(metadata.eric_server if metadata else "")
105 135
106 self.__updateOk() 136 self.__updateOk()
107 137
108 self.nameEdit.setFocus(Qt.FocusReason.OtherFocusReason) 138 self.nameEdit.setFocus(Qt.FocusReason.OtherFocusReason)
109 139
125 and self.__manager.isUnique(self.nameEdit.text()) 155 and self.__manager.isUnique(self.nameEdit.text())
126 ) 156 )
127 ) 157 )
128 158
129 if not self.globalCheckBox.isChecked(): 159 if not self.globalCheckBox.isChecked():
130 enable &= self.remoteCheckBox.isChecked() or ( 160 enable &= self.remoteRadioButton.isChecked() or (
131 bool(self.targetDirectoryPicker.text()) 161 bool(self.targetDirectoryPicker.text())
132 and self.targetDirectoryPicker.text() != self.__envBaseDir 162 and self.targetDirectoryPicker.text() != self.__envBaseDir
133 and os.path.exists(self.targetDirectoryPicker.text()) 163 and (
134 ) 164 (
135 165 self.serverRadioButton.isChecked()
136 enable = ( 166 and self.__fsInterface.exists(self.targetDirectoryPicker.text())
137 enable 167 )
138 and bool(self.pythonExecPicker.text()) 168 or (
169 not self.serverRadioButton.isChecked()
170 and os.path.exists(self.targetDirectoryPicker.text())
171 )
172 )
173 )
174
175 enable &= self.remoteRadioButton.isChecked() or (
176 bool(self.pythonExecPicker.text())
139 and ( 177 and (
140 self.remoteCheckBox.isChecked() 178 (
141 or os.access(self.pythonExecPicker.text(), os.X_OK) 179 self.serverRadioButton.isChecked()
180 and self.__fsInterface.access(
181 self.pythonExecPicker.text(), "execute"
182 )
183 )
184 or (
185 not self.serverRadioButton.isChecked()
186 and os.access(self.pythonExecPicker.text(), os.X_OK)
187 )
142 ) 188 )
143 ) 189 )
144 190
145 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(enable) 191 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(enable)
146 192
218 @type bool 264 @type bool
219 """ 265 """
220 self.__updateOk() 266 self.__updateOk()
221 267
222 @pyqtSlot(bool) 268 @pyqtSlot(bool)
223 def on_remoteCheckBox_toggled(self, checked): 269 def on_remoteRadioButton_toggled(self, checked):
224 """ 270 """
225 Private slot handling a change of the remote check box state. 271 Private slot handling a change of the remote radio button state.
226 272
227 @param checked state of the check box 273 @param checked state of the radio button
228 @type bool 274 @type bool
229 """ 275 """
230 self.__updateOk() 276 self.__updateOk()
231 277
232 @pyqtSlot(bool) 278 @pyqtSlot(bool)
233 def on_anacondaCheckBox_clicked(self, checked): 279 def on_serverRadioButton_toggled(self, checked):
234 """ 280 """
235 Private slot handling a user click on this check box. 281 Private slot handling a change of the eric IDE server radio button state.
236 282
237 @param checked state of the check box 283 @param checked state of the radio button
284 @type bool
285 """
286 if self.__serverInterface.isServerConnected():
287 self.targetDirectoryPicker.setRemote(checked)
288 self.pythonExecPicker.setRemote(checked)
289 self.serverLineEdit.setText(
290 self.__serverInterface.getHost() if checked else ""
291 )
292
293 self.__updateOk()
294
295 @pyqtSlot(bool)
296 def on_anacondaRadioButton_clicked(self, checked):
297 """
298 Private slot handling a user click on this radio button.
299
300 @param checked state of the radio button
238 @type bool 301 @type bool
239 """ 302 """
240 if checked and not bool(self.execPathEdit.text()): 303 if checked and not bool(self.execPathEdit.text()):
241 # prepopulate the execPathEdit widget 304 # prepopulate the execPathEdit widget
242 if OSUtilities.isWindowsPlatform(): 305 if OSUtilities.isWindowsPlatform():
261 Public method to retrieve the entered metadata. 324 Public method to retrieve the entered metadata.
262 325
263 @return metadata for the virtual environment 326 @return metadata for the virtual environment
264 @rtype VirtualenvMetaData 327 @rtype VirtualenvMetaData
265 """ 328 """
266 nativePaths = not self.remoteCheckBox.isChecked() 329 nativePaths = (
330 not self.remoteRadioButton.isChecked()
331 and not self.serverRadioButton.isChecked()
332 )
333 is_eric_server = self.serverRadioButton.isChecked()
334 envPath = (
335 FileSystemUtilities.remoteFileName(self.targetDirectoryPicker.text())
336 if is_eric_server
337 else FileSystemUtilities.plainFileName(
338 self.targetDirectoryPicker.text(toNative=nativePaths)
339 )
340 )
341 interpreter = (
342 FileSystemUtilities.remoteFileName(self.pythonExecPicker.text())
343 if is_eric_server
344 else FileSystemUtilities.plainFileName(
345 self.pythonExecPicker.text(toNative=nativePaths)
346 )
347 )
267 return VirtualenvMetaData( 348 return VirtualenvMetaData(
268 name=self.nameEdit.text(), 349 name=self.nameEdit.text(),
269 path=self.targetDirectoryPicker.text(toNative=nativePaths), 350 path=envPath,
270 interpreter=self.pythonExecPicker.text(toNative=nativePaths), 351 interpreter=interpreter,
271 is_global=self.globalCheckBox.isChecked(), 352 is_global=self.globalCheckBox.isChecked(),
272 is_conda=self.anacondaCheckBox.isChecked(), 353 is_conda=self.anacondaRadioButton.isChecked(),
273 is_remote=self.remoteCheckBox.isChecked(), 354 is_remote=self.remoteRadioButton.isChecked(),
274 exec_path=self.execPathEdit.text(), 355 exec_path=self.execPathEdit.text(),
275 description=self.descriptionEdit.toPlainText(), 356 description=self.descriptionEdit.toPlainText(),
276 ) 357 is_eric_server=is_eric_server,
358 eric_server=self.serverLineEdit.text(),
359 )

eric ide

mercurial