diff -r 0d7392e49c48 -r 2c26b4fe25db src/eric7/VirtualEnv/VirtualenvAddEditDialog.py --- a/src/eric7/VirtualEnv/VirtualenvAddEditDialog.py Tue Sep 05 14:17:29 2023 +0200 +++ b/src/eric7/VirtualEnv/VirtualenvAddEditDialog.py Wed Sep 06 10:28:50 2023 +0200 @@ -16,6 +16,7 @@ from eric7.SystemUtilities import OSUtilities, PythonUtilities from .Ui_VirtualenvAddEditDialog import Ui_VirtualenvAddEditDialog +from .VirtualenvMeta import VirtualenvMetaData class VirtualenvAddEditDialog(QDialog, Ui_VirtualenvAddEditDialog): @@ -26,14 +27,7 @@ def __init__( self, manager, - venvName="", - venvDirectory="", - venvInterpreter="", - isGlobal=False, - isConda=False, - isRemote=False, - execPath="", - description="", + metadata=None, baseDir="", parent=None, ): @@ -42,34 +36,20 @@ @param manager reference to the virtual environment manager @type VirtualenvManager - @param venvName logical name of a virtual environment for editing - @type str - @param venvDirectory directory of the virtual environment - @type str - @param venvInterpreter Python interpreter of the virtual environment - @type str - @param isGlobal flag indicating a global environment - @type bool - @param isConda flag indicating an Anaconda virtual environment - @type bool - @param isRemote flag indicating a remotely accessed environment - @type bool - @param execPath search path string to be prepended to the PATH - environment variable - @type str - @param description descriptive text for the environment - @type str - @param baseDir base directory for the virtual environments - @type str - @param parent reference to the parent widget - @type QWidget + @param metadata object containing the metadata of the virtual environment + (defaults to None) + @type VirtualenvMetaData (optional) + @param baseDir base directory for the virtual environments (defaults to "") + @type str (optional) + @param parent reference to the parent widget (defaults to None) + @type QWidget (optional) """ super().__init__(parent) self.setupUi(self) - self.__venvName = venvName + self.__venvName = "" if metadata is None else metadata.name self.__manager = manager - self.__editMode = bool(venvName) + self.__editMode = bool(self.__venvName) if self.__editMode: self.setWindowTitle(self.tr("Edit Virtual Environment")) @@ -97,22 +77,31 @@ ).format(os.pathsep) ) - self.nameEdit.setText(venvName) - if venvDirectory: - self.targetDirectoryPicker.setText(venvDirectory, toNative=not isRemote) + self.nameEdit.setText(self.__venvName) + if metadata: + if metadata.path: + self.targetDirectoryPicker.setText( + metadata.path, toNative=not metadata.is_remote + ) + else: + self.targetDirectoryPicker.setText( + self.__envBaseDir, toNative=not metadata.is_remote + ) + if not metadata.interpreter and metadata.path and not metadata.is_remote: + py = self.__detectPythonInterpreter(metadata.path) + self.pythonExecPicker.setText(py) + else: + self.pythonExecPicker.setText( + metadata.interpreter, toNative=not metadata.is_remote + ) else: - self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=not isRemote) - if not venvInterpreter and venvDirectory and not isRemote: - py = self.__detectPythonInterpreter(venvDirectory) - self.pythonExecPicker.setText(py) - else: - self.pythonExecPicker.setText(venvInterpreter, toNative=not isRemote) + self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True) - self.globalCheckBox.setChecked(isGlobal) - self.anacondaCheckBox.setChecked(isConda) - self.remoteCheckBox.setChecked(isRemote) - self.execPathEdit.setText(execPath) - self.descriptionEdit.setPlainText(description) + 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.execPathEdit.setText(metadata.exec_path if metadata else "") + self.descriptionEdit.setPlainText(metadata.description if metadata else "") self.__updateOk() @@ -267,25 +256,21 @@ os.path.join(self.targetDirectoryPicker.text(), "bin"), ) - def getData(self): + def getMetaData(self): """ - Public method to retrieve the entered data. + Public method to retrieve the entered metadata. - @return tuple containing the logical name, the directory, the interpreter of the - virtual environment, a flag indicating a global environment, a flag - indicating an Anaconda environment, a flag indicating a remotely accessed - environment, a string to be prepended to the PATH environment variable and - a descriptive text - @rtype tuple of (str, str, str, bool, bool, bool, str, str) + @return metadata for the virtual environment + @rtype VirtualenvMetaData """ nativePaths = not self.remoteCheckBox.isChecked() - return ( - self.nameEdit.text(), - self.targetDirectoryPicker.text(toNative=nativePaths), - self.pythonExecPicker.text(toNative=nativePaths), - self.globalCheckBox.isChecked(), - self.anacondaCheckBox.isChecked(), - self.remoteCheckBox.isChecked(), - self.execPathEdit.text(), - self.descriptionEdit.toPlainText(), + return VirtualenvMetaData( + name=self.nameEdit.text(), + path=self.targetDirectoryPicker.text(toNative=nativePaths), + interpreter=self.pythonExecPicker.text(toNative=nativePaths), + is_global=self.globalCheckBox.isChecked(), + is_conda=self.anacondaCheckBox.isChecked(), + is_remote=self.remoteCheckBox.isChecked(), + exec_path=self.execPathEdit.text(), + description=self.descriptionEdit.toPlainText(), )