Get rid of qute://spawn-output

This commit is contained in:
Florian Bruhin 2021-03-21 21:50:47 +01:00
parent a3adba81c7
commit ac52268a45
6 changed files with 15 additions and 34 deletions

View File

@ -1077,19 +1077,19 @@ class CommandDispatcher:
log.procs.debug("Executing {} with args {}, userscript={}".format(
cmd, args, userscript))
@pyqtSlot()
def _on_proc_finished():
def _on_proc_finished(proc):
if output:
tb = objreg.get('tabbed-browser', scope='window',
window='last-focused')
tb.load_url(QUrl('qute://spawn-output'), newtab=True)
tb.load_url(QUrl(f'qute://process/{proc.pid}'), newtab=True)
if userscript:
def _selection_callback(s):
try:
runner = self._run_userscript(
s, cmd, args, verbose, output_messages, count)
runner.finished.connect(_on_proc_finished)
runner.finished.connect(functools.partial(
_on_proc_finished, runner.proc))
except cmdutils.CommandError as e:
message.error(str(e))
@ -1112,7 +1112,7 @@ class CommandDispatcher:
"detailed error")
else:
proc.start(cmd, args)
proc.finished.connect(_on_proc_finished)
proc.finished.connect(functools.partial(_on_proc_finished, proc))
def _run_userscript(self, selection, cmd, args, verbose, output_messages,
count):

View File

@ -46,7 +46,6 @@ from qutebrowser.qt import sip
pyeval_output = ":pyeval was never called"
spawn_output = ":spawn was never called"
csrf_token = None
@ -284,13 +283,6 @@ def qute_pyeval(_url: QUrl) -> _HandlerRet:
return 'text/html', src
@add_handler('spawn-output')
def qute_spawn_output(_url: QUrl) -> _HandlerRet:
"""Handler for qute://spawn-output."""
src = jinja.render('pre.html', title='spawn output', content=spawn_output)
return 'text/html', src
@add_handler('process')
def qute_process(url: QUrl) -> _HandlerRet:
"""Handler for qute://process."""

View File

@ -117,7 +117,7 @@ class _BaseUserscriptRunner(QObject):
super().__init__(parent)
self._cleaned_up = False
self._filepath = None
self._proc = None
self.proc = None
self._env: MutableMapping[str, str] = {}
self._text_stored = False
self._html_stored = False
@ -168,12 +168,12 @@ class _BaseUserscriptRunner(QObject):
if env is not None:
self._env.update(env)
self._proc = guiprocess.GUIProcess(
self.proc = guiprocess.GUIProcess(
'userscript', additional_env=self._env,
output_messages=output_messages, verbose=verbose, parent=self)
self._proc.finished.connect(self.on_proc_finished)
self._proc.error.connect(self.on_proc_error)
self._proc.start(cmd, args)
self.proc.finished.connect(self.on_proc_finished)
self.proc.error.connect(self.on_proc_error)
self.proc.start(cmd, args)
def _cleanup(self):
"""Clean up temporary files."""
@ -199,7 +199,7 @@ class _BaseUserscriptRunner(QObject):
fn, e))
self._filepath = None
self._proc = None
self.proc = None
self._env = {}
self._text_stored = False
self._html_stored = False

View File

@ -201,8 +201,6 @@ class GUIProcess(QObject):
if self.stderr:
log.procs.error("Process stderr:\n" + self.stderr.strip())
qutescheme.spawn_output = self._spawn_format(exitinfo, self.stdout, self.stderr)
def _spawn_format(self, exitinfo, stdout, stderr):
"""Produce a formatted string for spawn output."""
stdout = (stdout or "(No output)").strip()

View File

@ -80,7 +80,6 @@ def whitelist_generator(): # noqa: C901
yield 'qutebrowser.utils.jinja.Loader.get_source'
yield 'qutebrowser.utils.log.QtWarningFilter.filter'
yield 'qutebrowser.browser.pdfjs.is_available'
yield 'qutebrowser.misc.guiprocess.spawn_output'
yield 'qutebrowser.utils.usertypes.ExitStatus.reserved'
yield 'QEvent.posted'
yield 'log_stack' # from message.py

View File

@ -59,10 +59,7 @@ def test_start(proc, qtbot, message_mock, py_proc):
argv = py_proc("import sys; print('test'); sys.exit(0)")
proc.start(*argv)
expected = proc._spawn_format(exitinfo="Testprocess exited successfully.",
stdout="test", stderr="")
assert not message_mock.messages
assert qutescheme.spawn_output == expected
assert proc.exit_status() == QProcess.NormalExit
@ -75,14 +72,11 @@ def test_start_verbose(proc, qtbot, message_mock, py_proc):
argv = py_proc("import sys; print('test'); sys.exit(0)")
proc.start(*argv)
expected = proc._spawn_format(exitinfo="Testprocess exited successfully.",
stdout="test", stderr="")
msgs = message_mock.messages
assert msgs[0].level == usertypes.MessageLevel.info
assert msgs[1].level == usertypes.MessageLevel.info
assert msgs[0].text.startswith("Executing:")
assert msgs[1].text == "Testprocess exited successfully."
assert qutescheme.spawn_output == expected
@pytest.mark.parametrize('stdout', [True, False])
@ -153,9 +147,8 @@ def test_start_env(monkeypatch, qtbot, py_proc):
order='strict'):
proc.start(*argv)
data = qutescheme.spawn_output
assert 'QUTEBROWSER_TEST_1' in data
assert 'QUTEBROWSER_TEST_2' in data
assert 'QUTEBROWSER_TEST_1' in proc.stdout
assert 'QUTEBROWSER_TEST_2' in proc.stdout
def test_start_detached(fake_proc):
@ -299,7 +292,6 @@ def test_stdout_not_decodable(proc, qtbot, message_mock, py_proc):
sys.exit(0)
""")
proc.start(*argv)
expected = proc._spawn_format(exitinfo="Testprocess exited successfully.",
stdout="A\ufffdB", stderr="")
assert not message_mock.messages
assert qutescheme.spawn_output == expected
assert proc.stdout == "A\ufffdB"