src/eric7/VirtualEnv/VirtualenvUpgradeExecDialog.py

Thu, 07 Jul 2022 11:23:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 07 Jul 2022 11:23:56 +0200
branch
eric7
changeset 9209
b99e7fd55fd3
parent 9144
eric7/VirtualEnv/VirtualenvUpgradeExecDialog.py@135240382a3e
child 9221
bf71ee032bb4
permissions
-rw-r--r--

Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".

9144
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the virtualenv upgrade execution dialog.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QProcess, QTimer
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from .Ui_VirtualenvExecDialog import Ui_VirtualenvExecDialog
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from Globals import getPythonExecutable
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 import Preferences
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 class VirtualenvUpgradeExecDialog(QDialog, Ui_VirtualenvExecDialog):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing the virtualenv upgrade execution dialog.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, venvName, interpreter, createLog, venvManager,
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 parent=None):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param venvName name of the virtual environment to be upgraded
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type str
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param interpreter interpreter to be used for the upgrade
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type str
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param createLog flag indicating to create a log file for the upgrade
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @type bool
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @param venvManager reference to the virtual environment manager
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @type VirtualenvManager
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param parent reference to the parent widget
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type QWidget
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 super().__init__(parent)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.setupUi(self)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 QDialogButtonBox.StandardButton.Close).setEnabled(False)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 QDialogButtonBox.StandardButton.Cancel).setDefault(True)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.__process = None
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.__cmd = ""
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__progs = []
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 if interpreter:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__progs.append(interpreter)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__progs.extend([
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 getPythonExecutable(),
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 "python3",
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 "python",
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 ])
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 self.__callIndex = 0
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.__callArgs = []
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__venvName = venvName
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.__venvDirectory = ""
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.__createLog = createLog
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__manager = venvManager
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 def start(self, arguments):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 Public slot to start the virtualenv command.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @param arguments commandline arguments for virtualenv/pyvenv program
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 (list of strings)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 if self.__callIndex == 0:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 # first attempt, add a given python interpreter and do
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 # some other setup
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.errorGroup.hide()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.contents.clear()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.errors.clear()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.__process = QProcess()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__process.readyReadStandardOutput.connect(self.__readStdout)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.__process.readyReadStandardError.connect(self.__readStderr)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__process.finished.connect(self.__finish)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.__callArgs = arguments
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__venvDirectory = arguments[-1]
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 prog = self.__progs[self.__callIndex]
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 self.__cmd = "{0} {1}".format(prog, " ".join(arguments))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.__logOutput(self.tr("Executing: {0}\n").format(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__cmd))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.__process.start(prog, arguments)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 procStarted = self.__process.waitForStarted(5000)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 if not procStarted:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.__logOutput(self.tr("Failed\n\n"))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__nextAttempt()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 def on_buttonBox_clicked(self, button):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 Private slot called by a button of the button box clicked.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 @param button button that was clicked (QAbstractButton)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 if button == self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 QDialogButtonBox.StandardButton.Close
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 ):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.accept()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 elif button == self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 QDialogButtonBox.StandardButton.Cancel
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 ):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.__finish(0, 0, giveUp=True)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 def __finish(self, exitCode, exitStatus, giveUp=False):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 Private slot called when the process finished.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 It is called when the process finished or
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 the user pressed the button.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 @param exitCode exit code of the process (integer)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 @param exitStatus exit status of the process (QProcess.ExitStatus)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @param giveUp flag indicating to not start another attempt (boolean)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 if (
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.__process is not None and
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 self.__process.state() != QProcess.ProcessState.NotRunning
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 ):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.__process.terminate()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 QTimer.singleShot(2000, self.__process.kill)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.__process.waitForFinished(3000)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 QDialogButtonBox.StandardButton.Close).setEnabled(True)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 self.buttonBox.button(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 QDialogButtonBox.StandardButton.Close).setDefault(True)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if not giveUp:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 if exitCode != 0:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.__logOutput(self.tr("Failed\n\n"))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 if len(self.errors.toPlainText().splitlines()) == 1:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 self.errors.clear()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.errorGroup.hide()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 self.__nextAttempt()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 return
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 self.__process = None
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.__logOutput(self.tr('\npyvenv finished.\n'))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 if self.__createLog:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 self.__writeLogFile()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 self.__changeVirtualEnvironmentInterpreter()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def __nextAttempt(self):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 Private method to start another attempt.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.__callIndex += 1
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 if self.__callIndex < len(self.__progs):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.start(self.__callArgs)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 else:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.__logError(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.tr('No suitable pyvenv program could be'
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 ' started.\n'))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 self.__cmd = ""
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 self.__finish(0, 0, giveUp=True)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 def __readStdout(self):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 Private slot to handle the readyReadStandardOutput signal.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 It reads the output of the process, formats it and inserts it into
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 the contents pane.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.__process.setReadChannel(QProcess.ProcessChannel.StandardOutput)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 while self.__process.canReadLine():
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 s = str(self.__process.readLine(),
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 Preferences.getSystem("IOEncoding"),
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 'replace')
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 self.__logOutput(s)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 def __readStderr(self):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 Private slot to handle the readyReadStandardError signal.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 It reads the error output of the process and inserts it into the
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 error pane.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 self.__process.setReadChannel(QProcess.ProcessChannel.StandardError)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 while self.__process.canReadLine():
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 s = str(self.__process.readLine(),
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 Preferences.getSystem("IOEncoding"),
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 'replace')
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 self.__logError(s)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 def __logOutput(self, s):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 Private method to log some output.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @param s output string to log (string)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 self.contents.insertPlainText(s)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 self.contents.ensureCursorVisible()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 def __logError(self, s):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 Private method to log an error.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 @param s error string to log (string)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 self.errorGroup.show()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 self.errors.insertPlainText(s)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 self.errors.ensureCursorVisible()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 def __writeLogFile(self):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 Private method to write a log file to the virtualenv directory.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 outtxt = self.contents.toPlainText()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 logFile = os.path.join(self.__venvDirectory, "pyvenv_upgrade.log")
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self.__logOutput(self.tr("\nWriting log file '{0}'.\n")
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 .format(logFile))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 try:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 with open(logFile, "w", encoding="utf-8") as f:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 f.write(self.tr("Output:\n"))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 f.write(outtxt)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 errtxt = self.errors.toPlainText()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 if errtxt:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 f.write("\n")
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 f.write(self.tr("Errors:\n"))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 f.write(errtxt)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 except OSError as err:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 self.__logError(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 self.tr("""The logfile '{0}' could not be written.\n"""
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 """Reason: {1}\n""").format(logFile, str(err)))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 self.__logOutput(self.tr("Done.\n"))
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 def __changeVirtualEnvironmentInterpreter(self):
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 Private method to change the interpreter of the upgraded virtual
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 environment.
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 """
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 from .VirtualenvInterpreterSelectionDialog import (
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 VirtualenvInterpreterSelectionDialog
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 )
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 venvInterpreter = ""
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 dlg = VirtualenvInterpreterSelectionDialog(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 self.__venvName, self.__venvDirectory)
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 if dlg.exec() == QDialog.DialogCode.Accepted:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 venvInterpreter = dlg.getData()
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 if venvInterpreter:
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 self.__manager.setVirtualEnvInterpreter(
135240382a3e Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 self.__venvName, venvInterpreter)

eric ide

mercurial