src/eric7/Project/ProjectVenvConfigurationDialog.py

Fri, 04 Nov 2022 13:52:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Nov 2022 13:52:26 +0100
branch
eric7
changeset 9473
3f23dbf37dbe
parent 9413
80c06d472826
child 9624
b47dfa7a137d
permissions
-rw-r--r--

Resorted the import statements using isort.

9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to enter the configuration for the embedded environment
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 of the project.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import glob
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import os
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtCore import pyqtSlot
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
17 from eric7 import Globals
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9389
diff changeset
18 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from .Ui_ProjectVenvConfigurationDialog import Ui_ProjectVenvConfigurationDialog
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 class ProjectVenvConfigurationDialog(QDialog, Ui_ProjectVenvConfigurationDialog):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Class implementing a dialog to enter the configuration for the embedded
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 environment of the project.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 def __init__(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 self,
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 venvName="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 venvDirectory="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 venvInterpreter="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 execPath="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 parent=None,
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 ):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Constructor
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param venvName logical name of a virtual environment for editing
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param venvDirectory directory of the virtual environment
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param venvInterpreter Python interpreter of the virtual environment
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @param execPath search path string to be prepended to the PATH
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 environment variable
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @param parent reference to the parent widget (defaults to None)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @type QWidget (optional)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 super().__init__(parent)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.setupUi(self)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__venvName = venvName
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter"))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.pythonExecPicker.setDefaultDirectory(venvDirectory)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.execPathEdit.setToolTip(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.tr(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 "Enter the executable search path to be prepended to the PATH"
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 " environment variable. Use '{0}' as the separator."
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 ).format(os.pathsep)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 )
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.nameEdit.setText(venvName)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.execPathEdit.setText(execPath)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 if venvDirectory:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 # try to determine a Python interpreter name
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 if Globals.isWindowsPlatform():
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 candidates = glob.glob(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 os.path.join(venvDirectory, "Scripts", "python*.exe")
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 ) + glob.glob(os.path.join(venvDirectory, "python*.exe"))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 else:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 candidates = glob.glob(os.path.join(venvDirectory, "bin", "python*"))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.pythonExecPicker.addItems(sorted(candidates))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if venvInterpreter:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.pythonExecPicker.setText(venvInterpreter)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 else:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.pythonExecPicker.setText(venvDirectory)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
9389
7b2344009d7a Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9323
diff changeset
86 self.__updateOK()
7b2344009d7a Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9323
diff changeset
87
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @pyqtSlot(str)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 def __updateOK(self):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 Private method to update the enabled status of the OK button.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 interpreterPath = self.pythonExecPicker.text()
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 bool(interpreterPath)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 and os.path.isfile(interpreterPath)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 and os.access(interpreterPath, os.X_OK)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 )
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @pyqtSlot(str)
9389
7b2344009d7a Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9323
diff changeset
101 def on_pythonExecPicker_editTextChanged(self, txt):
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 Private slot to handle changes of the entered Python interpreter path.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @param txt entered Python interpreter path
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.__updateOK()
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 def getData(self):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 Public method to get the entered data.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @return tuple containing the path of the selected Python interpreter and
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 a string to be prepended to the PATH environment variable
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @rtype tuple of (str, str)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 return self.pythonExecPicker.text(), self.execPathEdit.text()

eric ide

mercurial