src/eric7/VirtualEnv/VirtualenvAddEditDialog.py

branch
eric7
changeset 11230
8a15b05eeee3
parent 11090
f5f5f5803935
equal deleted inserted replaced
11229:16a129d168f9 11230:8a15b05eeee3
63 if self.__editMode: 63 if self.__editMode:
64 self.setWindowTitle(self.tr("Edit Virtual Environment")) 64 self.setWindowTitle(self.tr("Edit Virtual Environment"))
65 else: 65 else:
66 self.setWindowTitle(self.tr("Add Virtual Environment")) 66 self.setWindowTitle(self.tr("Add Virtual Environment"))
67 67
68 for name, visualName in self.__manager.getEnvironmentTypeNames():
69 self.environmentTypeComboBox.addItem(visualName, name)
70
68 self.__envBaseDir = baseDir 71 self.__envBaseDir = baseDir
69 if not self.__envBaseDir: 72 if not self.__envBaseDir:
70 self.__envBaseDir = OSUtilities.getHomeDir() 73 self.__envBaseDir = OSUtilities.getHomeDir()
71 74
72 self.serverRadioButton.setEnabled(
73 self.__serverInterface is not None
74 and self.__serverInterface.isServerConnected()
75 )
76
77 self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) 75 self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE)
78 self.targetDirectoryPicker.setWindowTitle( 76 self.targetDirectoryPicker.setWindowTitle(
79 self.tr("Virtualenv Target Directory") 77 self.tr("Virtualenv Target Directory")
80 ) 78 )
81 if ( 79 if (
82 self.__serverInterface is not None 80 self.__serverInterface is not None
83 and self.__serverInterface.isServerConnected() 81 and self.__serverInterface.isServerConnected()
84 ): 82 ):
85 self.targetDirectoryPicker.setRemote( 83 self.targetDirectoryPicker.setRemote(
86 metadata.is_eric_server if metadata else False 84 metadata.environment_type == "eric_server" if metadata else False
87 ) 85 )
88 if metadata is None or (not metadata.is_eric_server and not metadata.is_remote): 86 if metadata is None or metadata.environment_type not in (
87 "eric_server",
88 "remote",
89 ):
89 self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir) 90 self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir)
90 91
91 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) 92 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
92 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter")) 93 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter"))
93 if ( 94 if (
94 self.__serverInterface is not None 95 self.__serverInterface is not None
95 and self.__serverInterface.isServerConnected() 96 and self.__serverInterface.isServerConnected()
96 ): 97 ):
97 self.pythonExecPicker.setRemote( 98 self.pythonExecPicker.setRemote(
98 metadata.is_eric_server if metadata else False 99 metadata.environment_type == "eric_server" if metadata else False
99 ) 100 )
100 if metadata is None or (not metadata.is_eric_server and not metadata.is_remote): 101 if metadata is None or metadata.environment_type not in (
102 "eric_server",
103 "remote",
104 ):
101 self.pythonExecPicker.setDefaultDirectory( 105 self.pythonExecPicker.setDefaultDirectory(
102 PythonUtilities.getPythonExecutable() 106 PythonUtilities.getPythonExecutable()
103 ) 107 )
104 108
105 self.execPathEdit.setToolTip( 109 self.execPathEdit.setToolTip(
112 self.nameEdit.setText(self.__venvName) 116 self.nameEdit.setText(self.__venvName)
113 if metadata: 117 if metadata:
114 if metadata.path: 118 if metadata.path:
115 self.targetDirectoryPicker.setText( 119 self.targetDirectoryPicker.setText(
116 metadata.path, 120 metadata.path,
117 toNative=not metadata.is_remote and not metadata.is_eric_server, 121 toNative=metadata.environment_type not in ("eric_server", "remote"),
118 ) 122 )
119 else: 123 else:
120 self.targetDirectoryPicker.setText( 124 self.targetDirectoryPicker.setText(
121 self.__envBaseDir, 125 self.__envBaseDir,
122 toNative=not metadata.is_remote and not metadata.is_eric_server, 126 toNative=metadata.environment_type not in ("eric_server", "remote"),
123 ) 127 )
124 if ( 128 if (
125 not metadata.interpreter 129 not metadata.interpreter
126 and metadata.path 130 and metadata.path
127 and not metadata.is_remote 131 and metadata.environment_type not in ("eric_server", "remote")
128 and not metadata.is_eric_server
129 ): 132 ):
130 py = self.__detectPythonInterpreter(metadata.path) 133 py = self.__detectPythonInterpreter(metadata.path)
131 self.pythonExecPicker.setText(py) 134 self.pythonExecPicker.setText(py)
132 else: 135 else:
133 self.pythonExecPicker.setText( 136 self.pythonExecPicker.setText(
134 metadata.interpreter, 137 metadata.interpreter,
135 toNative=not metadata.is_remote and not metadata.is_eric_server, 138 toNative=metadata.environment_type not in ("eric_server", "remote"),
136 ) 139 )
137 else: 140 else:
138 self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True) 141 self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True)
139 142
140 self.globalCheckBox.setChecked(metadata.is_global if metadata else False) 143 self.globalCheckBox.setChecked(metadata.is_global if metadata else False)
141 self.standardRadioButton.setChecked(True) 144 itemIndex = self.environmentTypeComboBox.findData(
142 self.anacondaRadioButton.setChecked(metadata.is_conda if metadata else False) 145 metadata.environment_type if metadata else "standard"
143 self.remoteRadioButton.setChecked(metadata.is_remote if metadata else False) 146 )
144 self.serverRadioButton.setChecked( 147 self.environmentTypeComboBox.setCurrentIndex(itemIndex)
145 metadata.is_eric_server if metadata else False
146 )
147 self.execPathEdit.setText(metadata.exec_path if metadata else "") 148 self.execPathEdit.setText(metadata.exec_path if metadata else "")
148 self.descriptionEdit.setPlainText(metadata.description if metadata else "") 149 self.descriptionEdit.setPlainText(metadata.description if metadata else "")
149 self.serverLineEdit.setText(metadata.eric_server if metadata else "") 150 self.serverLineEdit.setText(metadata.eric_server if metadata else "")
150 151
151 self.__updateOk() 152 self.__updateOk()
169 bool(self.nameEdit.text()) 170 bool(self.nameEdit.text())
170 and self.__manager.isUnique(self.nameEdit.text()) 171 and self.__manager.isUnique(self.nameEdit.text())
171 ) 172 )
172 ) 173 )
173 174
175 selectedVenvType = self.environmentTypeComboBox.currentData()
174 if not self.globalCheckBox.isChecked(): 176 if not self.globalCheckBox.isChecked():
175 enable &= self.remoteRadioButton.isChecked() or ( 177 enable &= selectedVenvType == "remote" or (
176 bool(self.targetDirectoryPicker.text()) 178 bool(self.targetDirectoryPicker.text())
177 and self.targetDirectoryPicker.text() != self.__envBaseDir 179 and self.targetDirectoryPicker.text() != self.__envBaseDir
178 and ( 180 and (
179 ( 181 (
180 self.serverRadioButton.isChecked() 182 selectedVenvType == "eric_server"
181 and self.__fsInterface is not None 183 and self.__fsInterface is not None
182 and self.__fsInterface.exists(self.targetDirectoryPicker.text()) 184 and self.__fsInterface.exists(self.targetDirectoryPicker.text())
183 ) 185 )
184 or ( 186 or (
185 not self.serverRadioButton.isChecked() 187 selectedVenvType != "eric_server"
186 and os.path.exists(self.targetDirectoryPicker.text()) 188 and os.path.exists(self.targetDirectoryPicker.text())
187 ) 189 )
188 ) 190 )
189 ) 191 )
190 192
191 enable &= self.remoteRadioButton.isChecked() or ( 193 enable &= selectedVenvType == "remote" or (
192 bool(self.pythonExecPicker.text()) 194 bool(self.pythonExecPicker.text())
193 and ( 195 and (
194 ( 196 (
195 self.serverRadioButton.isChecked() 197 selectedVenvType == "eric_server"
196 and self.__fsInterface is not None 198 and self.__fsInterface is not None
197 and self.__fsInterface.access( 199 and self.__fsInterface.access(
198 self.pythonExecPicker.text(), "execute" 200 self.pythonExecPicker.text(), "execute"
199 ) 201 )
200 ) 202 )
201 or ( 203 or (
202 not self.serverRadioButton.isChecked() 204 selectedVenvType != "eric_server"
203 and os.access(self.pythonExecPicker.text(), os.X_OK) 205 and os.access(self.pythonExecPicker.text(), os.X_OK)
204 ) 206 )
205 ) 207 )
206 ) 208 )
207 209
280 @param checked state of the check box 282 @param checked state of the check box
281 @type bool 283 @type bool
282 """ 284 """
283 self.__updateOk() 285 self.__updateOk()
284 286
285 @pyqtSlot(bool) 287 @pyqtSlot(int)
286 def on_remoteRadioButton_toggled(self, checked): 288 def on_environmentTypeComboBox_currentIndexChanged(self, index):
287 """ 289 """
288 Private slot handling a change of the remote radio button state. 290 Private slot handling the selection of a virtual environment type.
289 291
290 @param checked state of the radio button 292 @param index index of the selected virtual environment type
291 @type bool 293 @type int
292 """ 294 """
293 self.__updateOk() 295 # step 1: reset some configurations
294 296 self.pythonExecPicker.setRemote(False)
295 @pyqtSlot(bool) 297 self.targetDirectoryPicker.setRemote(False)
296 def on_serverRadioButton_toggled(self, checked): 298 self.serverLineEdit.clear()
297 """ 299 self.ericServerInfoLabel.clear()
298 Private slot handling a change of the eric-ide server radio button state. 300
299 301 # step 2: configure and set value iaw. selected environment type
300 @param checked state of the radio button 302 selectedVenvType = self.environmentTypeComboBox.itemData(index)
301 @type bool 303 if selectedVenvType == "eric_server":
302 """ 304 serverAvailable = (
303 if ( 305 self.__serverInterface is not None
304 self.__serverInterface is not None 306 and self.__serverInterface.isServerConnected()
305 and self.__serverInterface.isServerConnected() 307 )
306 ): 308 self.ericServerInfoLabel.setText(
307 self.targetDirectoryPicker.setRemote(checked) 309 "" if serverAvailable else self.tr("eric-ide Server is not available")
308 self.pythonExecPicker.setRemote(checked) 310 )
309 self.serverLineEdit.setText( 311 self.pythonExecPicker.setRemote(serverAvailable)
310 self.__serverInterface.getHost() if checked else "" 312 self.targetDirectoryPicker.setRemote(serverAvailable)
311 ) 313 if serverAvailable:
312 if checked:
313 self.targetDirectoryPicker.setText(self.__fsInterface.getcwd()) 314 self.targetDirectoryPicker.setText(self.__fsInterface.getcwd())
314 315 self.serverLineEdit.setText(self.__serverInterface.getHost())
315 self.__updateOk() 316
316 317 venvTypeData = self.__manager.getEnvironmentTypesRegistry().getEnvironmentType(
317 @pyqtSlot(bool) 318 selectedVenvType
318 def on_anacondaRadioButton_clicked(self, checked): 319 )
319 """ 320 if venvTypeData.defaultExecPathFunc is not None and not bool(
320 Private slot handling a user click on this radio button. 321 self.execPathEdit.text()
321 322 ):
322 @param checked state of the radio button 323 self.execPathEdit.setText(
323 @type bool 324 venvTypeData.defaultExecPathFunc(self.targetDirectoryPicker.text())
324 """ 325 )
325 if checked and not bool(self.execPathEdit.text()): 326
326 # prepopulate the execPathEdit widget 327 self.__updateOk()
327 if OSUtilities.isWindowsPlatform():
328 self.execPathEdit.setText(
329 os.pathsep.join(
330 [
331 self.targetDirectoryPicker.text(),
332 os.path.join(self.targetDirectoryPicker.text(), "Scripts"),
333 os.path.join(
334 self.targetDirectoryPicker.text(), "Library", "bin"
335 ),
336 ]
337 )
338 )
339 else:
340 self.execPathEdit.setText(
341 os.path.join(self.targetDirectoryPicker.text(), "bin"),
342 )
343 328
344 def getMetaData(self): 329 def getMetaData(self):
345 """ 330 """
346 Public method to retrieve the entered metadata. 331 Public method to retrieve the entered metadata.
347 332
348 @return metadata for the virtual environment 333 @return metadata for the virtual environment
349 @rtype VirtualenvMetaData 334 @rtype VirtualenvMetaData
350 """ 335 """
351 nativePaths = ( 336 selectedEnvironmentType = self.environmentTypeComboBox.currentData()
352 not self.remoteRadioButton.isChecked() 337 nativePaths = selectedEnvironmentType not in ("remote", "eric_server")
353 and not self.serverRadioButton.isChecked() 338 isEricServer = selectedEnvironmentType == "eric_server"
354 )
355 is_eric_server = self.serverRadioButton.isChecked()
356 envPath = ( 339 envPath = (
357 FileSystemUtilities.remoteFileName(self.targetDirectoryPicker.text()) 340 FileSystemUtilities.remoteFileName(self.targetDirectoryPicker.text())
358 if is_eric_server 341 if isEricServer
359 else FileSystemUtilities.plainFileName( 342 else FileSystemUtilities.plainFileName(
360 self.targetDirectoryPicker.text(toNative=nativePaths) 343 self.targetDirectoryPicker.text(toNative=nativePaths)
361 ) 344 )
362 ) 345 )
363 interpreter = ( 346 interpreter = (
364 FileSystemUtilities.remoteFileName(self.pythonExecPicker.text()) 347 FileSystemUtilities.remoteFileName(self.pythonExecPicker.text())
365 if is_eric_server 348 if isEricServer
366 else FileSystemUtilities.plainFileName( 349 else FileSystemUtilities.plainFileName(
367 self.pythonExecPicker.text(toNative=nativePaths) 350 self.pythonExecPicker.text(toNative=nativePaths)
368 ) 351 )
369 ) 352 )
353
370 return VirtualenvMetaData( 354 return VirtualenvMetaData(
371 name=self.nameEdit.text(), 355 name=self.nameEdit.text(),
372 path=envPath, 356 path=envPath,
373 interpreter=interpreter, 357 interpreter=interpreter,
374 is_global=self.globalCheckBox.isChecked(), 358 is_global=self.globalCheckBox.isChecked(),
375 is_conda=self.anacondaRadioButton.isChecked(), 359 environment_type=selectedEnvironmentType,
376 is_remote=self.remoteRadioButton.isChecked(),
377 exec_path=self.execPathEdit.text(), 360 exec_path=self.execPathEdit.text(),
378 description=self.descriptionEdit.toPlainText(), 361 description=self.descriptionEdit.toPlainText(),
379 is_eric_server=is_eric_server,
380 eric_server=self.serverLineEdit.text(), 362 eric_server=self.serverLineEdit.text(),
381 ) 363 )

eric ide

mercurial