ProjectFlask/RunServerDialog.py

branch
eric7
changeset 64
0ee58185b8df
parent 61
fe1e8783a95f
child 66
0d3168d0e310
equal deleted inserted replaced
63:7c05cbc8b3e5 64:0ee58185b8df
7 Module implementing a dialog to run the Flask server. 7 Module implementing a dialog to run the Flask server.
8 """ 8 """
9 9
10 import re 10 import re
11 11
12 from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer 12 from PyQt6.QtCore import pyqtSlot, Qt, QProcess, QTimer
13 from PyQt5.QtGui import QTextCharFormat 13 from PyQt6.QtGui import QTextCharFormat
14 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QMenu 14 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QMenu
15 15
16 from E5Gui import E5MessageBox 16 from EricWidgets import EricMessageBox
17 from E5Gui.E5Application import e5App 17 from EricWidgets.EricApplication import ericApp
18 18
19 from .Ui_RunServerDialog import Ui_RunServerDialog 19 from .Ui_RunServerDialog import Ui_RunServerDialog
20 20
21 from . import AnsiTools 21 from . import AnsiTools
22 from .ServerStartOptionsDialog import ServerStartOptionsDialog 22 from .ServerStartOptionsDialog import ServerStartOptionsDialog
55 55
56 self.__ansiRe = re.compile(r"(\x1b\[\d+m)") 56 self.__ansiRe = re.compile(r"(\x1b\[\d+m)")
57 57
58 self.__urlRe = re.compile(r" \* Running on ([^(]+) \(.*") 58 self.__urlRe = re.compile(r" \* Running on ([^(]+) \(.*")
59 59
60 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) 60 self.buttonBox.button(
61 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) 61 QDialogButtonBox.StandardButton.Close).setEnabled(True)
62 self.buttonBox.button(
63 QDialogButtonBox.StandardButton.Close).setDefault(True)
62 64
63 self.__defaultTextFormat = self.outputEdit.currentCharFormat() 65 self.__defaultTextFormat = self.outputEdit.currentCharFormat()
64 66
65 self.__initActionsMenu() 67 self.__initActionsMenu()
66 68
73 self.__actionsMenu.setToolTipsVisible(True) 75 self.__actionsMenu.setToolTipsVisible(True)
74 self.__actionsMenu.aboutToShow.connect(self.__showActionsMenu) 76 self.__actionsMenu.aboutToShow.connect(self.__showActionsMenu)
75 77
76 # re-start server 78 # re-start server
77 self.__actionsMenu.addAction( 79 self.__actionsMenu.addAction(
78 self.tr("Re-start Server"), self.__restartServer) 80 self.tr("Re-start Server"),
81 self.__restartServer)
79 self.__restartModeAct = self.__actionsMenu.addAction( 82 self.__restartModeAct = self.__actionsMenu.addAction(
80 self.tr("Re-start Server"), self.__restartServerDifferentMode) 83 self.tr("Re-start Server"),
84 self.__restartServerDifferentMode)
81 self.__actionsMenu.addSeparator() 85 self.__actionsMenu.addSeparator()
86 # re-start server with options
82 self.__actionsMenu.addAction( 87 self.__actionsMenu.addAction(
83 self.tr("Re-start Server with Options"), 88 self.tr("Re-start Server with Options"),
84 self.__restartServerWithOptions) 89 self.__restartServerWithOptions)
85 # start server with options
86 90
87 self.menuButton.setIcon(UI.PixmapCache.getIcon("actionsToolButton")) 91 self.menuButton.setIcon(UI.PixmapCache.getIcon("actionsToolButton"))
88 self.menuButton.setMenu(self.__actionsMenu) 92 self.menuButton.setMenu(self.__actionsMenu)
89 93
90 @pyqtSlot() 94 @pyqtSlot()
113 """ 117 """
114 self.__serverOptions["development"] = development 118 self.__serverOptions["development"] = development
115 119
116 if askForOptions: 120 if askForOptions:
117 dlg = ServerStartOptionsDialog(self.__serverOptions) 121 dlg = ServerStartOptionsDialog(self.__serverOptions)
118 if dlg.exec() != QDialog.Accepted: 122 if dlg.exec() != QDialog.DialogCode.Accepted:
119 return False 123 return False
120 124
121 self.__serverOptions.update(dlg.getDataDict()) 125 self.__serverOptions.update(dlg.getDataDict())
122 126
123 workdir, env = self.__project.prepareRuntimeEnvironment( 127 workdir, env = self.__project.prepareRuntimeEnvironment(
126 command = self.__project.getFlaskCommand() 130 command = self.__project.getFlaskCommand()
127 131
128 self.__process = QProcess() 132 self.__process = QProcess()
129 self.__process.setProcessEnvironment(env) 133 self.__process.setProcessEnvironment(env)
130 self.__process.setWorkingDirectory(workdir) 134 self.__process.setWorkingDirectory(workdir)
131 self.__process.setProcessChannelMode(QProcess.MergedChannels) 135 self.__process.setProcessChannelMode(
136 QProcess.ProcessChannelMode.MergedChannels)
132 137
133 self.__process.readyReadStandardOutput.connect(self.__readStdOut) 138 self.__process.readyReadStandardOutput.connect(self.__readStdOut)
134 self.__process.finished.connect(self.__processFinished) 139 self.__process.finished.connect(self.__processFinished)
135 140
136 self.outputEdit.clear() 141 self.outputEdit.clear()
146 args += ["--key", self.__serverOptions["key"]] 151 args += ["--key", self.__serverOptions["key"]]
147 152
148 self.__process.start(command, args) 153 self.__process.start(command, args)
149 ok = self.__process.waitForStarted(10000) 154 ok = self.__process.waitForStarted(10000)
150 if not ok: 155 if not ok:
151 E5MessageBox.critical( 156 EricMessageBox.critical(
152 None, 157 None,
153 self.tr("Run Flask Server"), 158 self.tr("Run Flask Server"),
154 self.tr("""The Flask server process could not be""" 159 self.tr("""The Flask server process could not be"""
155 """ started.""")) 160 """ started."""))
156 else: 161 else:
157 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) 162 self.buttonBox.button(
163 QDialogButtonBox.StandardButton.Close).setEnabled(False)
158 self.stopServerButton.setEnabled(True) 164 self.stopServerButton.setEnabled(True)
159 self.stopServerButton.setDefault(True) 165 self.stopServerButton.setDefault(True)
160 self.startBrowserButton.setEnabled(True) 166 self.startBrowserButton.setEnabled(True)
161 else: 167 else:
162 ok = False 168 ok = False
208 """ 214 """
209 Private slot handling the finishing of the server process. 215 Private slot handling the finishing of the server process.
210 """ 216 """
211 if ( 217 if (
212 self.__process is not None and 218 self.__process is not None and
213 self.__process.state() != QProcess.NotRunning 219 self.__process.state() != QProcess.ProcessState.NotRunning
214 ): 220 ):
215 self.__process.terminate() 221 self.__process.terminate()
216 QTimer.singleShot(2000, self.__process.kill) 222 QTimer.singleShot(2000, self.__process.kill)
217 self.__process.waitForFinished(3000) 223 self.__process.waitForFinished(3000)
218 224
219 self.__process = None 225 self.__process = None
220 226
221 self.startBrowserButton.setEnabled(False) 227 self.startBrowserButton.setEnabled(False)
222 self.stopServerButton.setEnabled(False) 228 self.stopServerButton.setEnabled(False)
223 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) 229 self.buttonBox.button(
224 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) 230 QDialogButtonBox.StandardButton.Close).setEnabled(True)
225 self.buttonBox.button(QDialogButtonBox.Close).setFocus( 231 self.buttonBox.button(
226 Qt.OtherFocusReason) 232 QDialogButtonBox.StandardButton.Close).setDefault(True)
233 self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setFocus(
234 Qt.FocusReason.OtherFocusReason)
227 235
228 @pyqtSlot() 236 @pyqtSlot()
229 def on_stopServerButton_clicked(self): 237 def on_stopServerButton_clicked(self):
230 """ 238 """
231 Private slot to stop the running server. 239 Private slot to stop the running server.
239 """ 247 """
240 if self.__plugin.getPreferences("UseExternalBrowser"): 248 if self.__plugin.getPreferences("UseExternalBrowser"):
241 import webbrowser 249 import webbrowser
242 webbrowser.open(self.__serverUrl) 250 webbrowser.open(self.__serverUrl)
243 else: 251 else:
244 e5App().getObject("UserInterface").launchHelpViewer( 252 ericApp().getObject("UserInterface").launchHelpViewer(
245 self.__serverUrl) 253 self.__serverUrl)
246 254
247 @pyqtSlot() 255 @pyqtSlot()
248 def __restartServer(self): 256 def __restartServer(self):
249 """ 257 """

eric ide

mercurial