From 045dda0f2795b7d7cfb69f30bfbab7dceaeb9eb9 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 20 Mar 2021 16:03:48 +0100 Subject: Add basic live output for :spawn -m --- scripts/dev/run_vulture.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/dev/run_vulture.py b/scripts/dev/run_vulture.py index 612b88637..d2b551689 100755 --- a/scripts/dev/run_vulture.py +++ b/scripts/dev/run_vulture.py @@ -61,7 +61,7 @@ def whitelist_generator(): # noqa: C901 yield 'scripts.utils.bg_colors' yield 'qutebrowser.misc.sql.SqliteErrorCode.CONSTRAINT' yield 'qutebrowser.misc.throttle.Throttle.set_delay' - yield 'qutebrowser.misc.guiprocess.GUIProcess.final_stderr' + yield 'qutebrowser.misc.guiprocess.GUIProcess.stderr' # Qt attributes yield 'PyQt5.QtWebKit.QWebPage.ErrorPageExtensionReturn().baseUrl' -- cgit v1.2.3-54-g00ecf From ac52268a4599cf6bfc32885bb4eb6586288ffded Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 21 Mar 2021 21:50:47 +0100 Subject: Get rid of qute://spawn-output --- qutebrowser/browser/commands.py | 10 +++++----- qutebrowser/browser/qutescheme.py | 8 -------- qutebrowser/commands/userscripts.py | 12 ++++++------ qutebrowser/misc/guiprocess.py | 2 -- scripts/dev/run_vulture.py | 1 - tests/unit/misc/test_guiprocess.py | 16 ++++------------ 6 files changed, 15 insertions(+), 34 deletions(-) (limited to 'scripts') diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 527d90184..eb9f17e8f 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -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): diff --git a/qutebrowser/browser/qutescheme.py b/qutebrowser/browser/qutescheme.py index 07f38c46d..c894cc4d7 100644 --- a/qutebrowser/browser/qutescheme.py +++ b/qutebrowser/browser/qutescheme.py @@ -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.""" diff --git a/qutebrowser/commands/userscripts.py b/qutebrowser/commands/userscripts.py index 2ab29a2fd..f74d3ef59 100644 --- a/qutebrowser/commands/userscripts.py +++ b/qutebrowser/commands/userscripts.py @@ -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 diff --git a/qutebrowser/misc/guiprocess.py b/qutebrowser/misc/guiprocess.py index 6b1c369ac..765321bc8 100644 --- a/qutebrowser/misc/guiprocess.py +++ b/qutebrowser/misc/guiprocess.py @@ -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() diff --git a/scripts/dev/run_vulture.py b/scripts/dev/run_vulture.py index d2b551689..1f0018488 100755 --- a/scripts/dev/run_vulture.py +++ b/scripts/dev/run_vulture.py @@ -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 diff --git a/tests/unit/misc/test_guiprocess.py b/tests/unit/misc/test_guiprocess.py index 178ac3d12..4d38c530d 100644 --- a/tests/unit/misc/test_guiprocess.py +++ b/tests/unit/misc/test_guiprocess.py @@ -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" -- cgit v1.2.3-54-g00ecf