socx-cli 0.13.9__tar.gz → 0.13.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {socx_cli-0.13.9 → socx_cli-0.13.10}/PKG-INFO +1 -1
- {socx_cli-0.13.9 → socx_cli-0.13.10}/pyproject.toml +1 -1
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/regression.yaml +51 -13
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/app.py +1 -1
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/vim/mode.py +18 -12
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/dialog.py +18 -20
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/static/tcss/regression/app.tcss +1 -2
- {socx_cli-0.13.9 → socx_cli-0.13.10}/.gitignore +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/LICENSE +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/README.md +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/__main__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/_cli.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/_jinja.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/callbacks.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/cfg.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/cli.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/params.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/types.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/_config.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/_settings.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/converters.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/encoders.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/formatters.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/serializers.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/validators.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/_paths.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/encoder.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/enums.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/funcs.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/metadata.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/paths.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/git/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/git/git.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/git/manifest.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/plugin.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/types.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/serializer.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/_git.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/_manifest.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/_ssh.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/console.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/decorators.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/log.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/mixins/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/mixins/proxy.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/mixins/uid.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/singleton/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/singleton/singleton.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/visitor/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/visitor/protocol.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/visitor/traversal.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/progress.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/regression.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/status.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/test.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/validator.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/visitor.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/cli.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/console.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/git.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/logging.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/plugins.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/rich_click.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/settings.yaml +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/sql/socx.sql +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/utils/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/utils/decorators.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/config/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/config/_config.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/config/edit.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/arguments.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/callbacks.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/cli.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/manifest.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/renderables.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/summary.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/utils.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/plugin/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/plugin/example.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/plugin/schema.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/_run.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/callbacks.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/cli.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/run.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/serve.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/tui.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/version/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/version/__main__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/__main__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/vim/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/vim/vim.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/containers.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/details.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/mixins/__init__.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/mixins/composable.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/mixins/configurable.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/preview.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/table.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/tree.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/widget.py +0 -0
- {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/static/tcss/regression/preview.tcss +0 -0
|
@@ -29,7 +29,7 @@ socx = 'socx.__main__:main'
|
|
|
29
29
|
[project]
|
|
30
30
|
name = "socx-cli"
|
|
31
31
|
readme = "README.md"
|
|
32
|
-
version = "0.13.
|
|
32
|
+
version = "0.13.10"
|
|
33
33
|
license = "Apache-2.0"
|
|
34
34
|
authors = [{ name = "Sagi Kimhi", email = "sagi.kim5@gmail.com" }]
|
|
35
35
|
maintainers = [{ name = "Sagi Kimhi", email = "sagi.kim5@gmail.com" }]
|
|
@@ -94,22 +94,18 @@ regression:
|
|
|
94
94
|
# TUI application per-widget keybindings
|
|
95
95
|
keybinds:
|
|
96
96
|
SoCX:
|
|
97
|
-
- key:
|
|
97
|
+
- key: f1,?
|
|
98
98
|
show: true
|
|
99
99
|
action: toggle_help_panel()
|
|
100
100
|
description: Toggle help
|
|
101
|
-
- key: f1
|
|
102
|
-
show: false
|
|
103
|
-
action: toggle_help_panel()
|
|
104
|
-
description: Toggle help
|
|
105
101
|
- key: f2
|
|
106
102
|
show: false
|
|
107
|
-
action:
|
|
108
|
-
description:
|
|
103
|
+
action: change_theme()
|
|
104
|
+
description: Change theme
|
|
109
105
|
- key: "!"
|
|
110
106
|
show: false
|
|
111
107
|
action: toggle_maximize()
|
|
112
|
-
description: Maxmimize/minimize
|
|
108
|
+
description: Maxmimize/minimize widget
|
|
113
109
|
|
|
114
110
|
RegressionWidget:
|
|
115
111
|
# Hidden Keys
|
|
@@ -152,12 +148,54 @@ regression:
|
|
|
152
148
|
action: start_selected
|
|
153
149
|
description: Start
|
|
154
150
|
|
|
151
|
+
ReadOnlyOutputArea:
|
|
152
|
+
- key: k
|
|
153
|
+
show: false
|
|
154
|
+
action: cursor_up
|
|
155
|
+
description: Cursor up
|
|
156
|
+
- key: j
|
|
157
|
+
show: false
|
|
158
|
+
action: cursor_down
|
|
159
|
+
description: Cursor down
|
|
160
|
+
- key: h
|
|
161
|
+
show: false
|
|
162
|
+
action: cursor_left
|
|
163
|
+
description: Cursor left
|
|
164
|
+
- key: l
|
|
165
|
+
show: false
|
|
166
|
+
action: cursor_right
|
|
167
|
+
description: Cursor right
|
|
168
|
+
- key: w
|
|
169
|
+
show: false
|
|
170
|
+
action: cursor_word_right
|
|
171
|
+
description: Cursor word right
|
|
172
|
+
- key: b
|
|
173
|
+
show: false
|
|
174
|
+
action: cursor_word_left
|
|
175
|
+
description: Cursor word left
|
|
176
|
+
- key: ctrl+d
|
|
177
|
+
show: false
|
|
178
|
+
action: cursor_page_down
|
|
179
|
+
description: Cursor page down
|
|
180
|
+
- key: ctrl+u
|
|
181
|
+
show: false
|
|
182
|
+
action: cursor_page_up
|
|
183
|
+
description: Cursor page up
|
|
184
|
+
|
|
155
185
|
TestOutputDialog:
|
|
156
|
-
- key: escape
|
|
186
|
+
- key: q,escape
|
|
157
187
|
show: true
|
|
158
188
|
action: dismiss(None)
|
|
159
|
-
description: Dismiss the dialog
|
|
160
|
-
- key:
|
|
189
|
+
description: Dismiss the dialog
|
|
190
|
+
- key: "!"
|
|
161
191
|
show: true
|
|
162
|
-
action:
|
|
163
|
-
description:
|
|
192
|
+
action: app.toggle_maximize()
|
|
193
|
+
description: Maxmimize/minimize widget
|
|
194
|
+
- key: f1,?
|
|
195
|
+
show: false
|
|
196
|
+
action: app.toggle_help_panel()
|
|
197
|
+
description: Toggle help
|
|
198
|
+
- key: f2
|
|
199
|
+
show: true
|
|
200
|
+
action: app.change_theme()
|
|
201
|
+
description: Change theme
|
|
@@ -68,7 +68,7 @@ class SoCX(App[int]):
|
|
|
68
68
|
) -> Iterable[SystemCommand]:
|
|
69
69
|
"""Expose extra debug commands alongside Textual's defaults."""
|
|
70
70
|
yield from super().get_system_commands(screen)
|
|
71
|
-
if settings.
|
|
71
|
+
if settings.debug or self.app.debug:
|
|
72
72
|
yield from self.get_debug_system_commands(screen)
|
|
73
73
|
|
|
74
74
|
def get_debug_system_commands(
|
|
@@ -19,26 +19,32 @@ class Normal(_Mode):
|
|
|
19
19
|
"""Normal mode key bindings."""
|
|
20
20
|
|
|
21
21
|
BINDINGS: ClassVar[list[BindingType]] = [
|
|
22
|
-
Binding("k", "cursor_up", "Cursor
|
|
23
|
-
Binding("j", "cursor_down", "Cursor
|
|
24
|
-
Binding("h", "cursor_left", "Cursor
|
|
25
|
-
Binding("l", "cursor_right", "Cursor
|
|
26
|
-
Binding("ctrl+u", "
|
|
27
|
-
Binding("ctrl+d", "
|
|
28
|
-
Binding("
|
|
29
|
-
Binding("
|
|
30
|
-
Binding("
|
|
31
|
-
Binding("G", "
|
|
22
|
+
Binding("k", "cursor_up", "Cursor up", show=False),
|
|
23
|
+
Binding("j", "cursor_down", "Cursor down", show=False),
|
|
24
|
+
Binding("h", "cursor_left", "Cursor left", show=False),
|
|
25
|
+
Binding("l", "cursor_right", "Cursor right", show=False),
|
|
26
|
+
Binding("ctrl+u", "cursor_page_up", "Cursor page up", show=False),
|
|
27
|
+
Binding("ctrl+d", "cursor_page_down", "Cursor page down", show=False),
|
|
28
|
+
Binding("ctrl+u", "page_up", "Page up", show=False),
|
|
29
|
+
Binding("ctrl+d", "page_down", "Page down", show=False),
|
|
30
|
+
Binding("g", "cursor_top", "Cursor top", show=False),
|
|
31
|
+
Binding("G", "cursor_end", "Cursor end", show=False),
|
|
32
|
+
Binding("g", "cursor_home", "Cursor home", show=False),
|
|
33
|
+
Binding("G", "cursor_bottom", "Cursor bottom", show=False),
|
|
34
|
+
Binding("g", "scroll_top", "Scroll top", show=False),
|
|
35
|
+
Binding("G", "scroll_end", "Scroll end", show=False),
|
|
36
|
+
Binding("g", "scroll_home", "Scroll home", show=False),
|
|
37
|
+
Binding("G", "scroll_bottom", "Scroll bottom", show=False),
|
|
32
38
|
Binding(
|
|
33
39
|
"dollar_sign",
|
|
34
40
|
"scroll_end",
|
|
35
|
-
"
|
|
41
|
+
"Scroll end",
|
|
36
42
|
show=False,
|
|
37
43
|
),
|
|
38
44
|
Binding(
|
|
39
45
|
"circumflex_accent",
|
|
40
46
|
"scroll_home",
|
|
41
|
-
"
|
|
47
|
+
"Scroll home",
|
|
42
48
|
show=False,
|
|
43
49
|
),
|
|
44
50
|
]
|
|
@@ -12,6 +12,7 @@ from textual.containers import Container
|
|
|
12
12
|
from textual.screen import ModalScreen, ScreenResultType
|
|
13
13
|
from textual.widgets import (
|
|
14
14
|
Static,
|
|
15
|
+
Footer,
|
|
15
16
|
TextArea,
|
|
16
17
|
Button,
|
|
17
18
|
TabbedContent,
|
|
@@ -30,12 +31,16 @@ class Dialog(Container):
|
|
|
30
31
|
class ReadOnlyOutputArea(TextArea, can_focus=True, inherit_bindings=True):
|
|
31
32
|
"""Read-only output viewer with keyboard navigation."""
|
|
32
33
|
|
|
33
|
-
BINDINGS: ClassVar[list[Binding]] =
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
BINDINGS: ClassVar[list[Binding]] = (
|
|
35
|
+
VimModes.Normal
|
|
36
|
+
+ TextArea.BINDINGS
|
|
37
|
+
+ [
|
|
38
|
+
Binding(**binding)
|
|
39
|
+
for binding in settings.regression.tui.keybinds.get(
|
|
40
|
+
"ReadOnlyOutputArea", []
|
|
41
|
+
)
|
|
42
|
+
]
|
|
43
|
+
)
|
|
39
44
|
|
|
40
45
|
|
|
41
46
|
@rich.repr.auto
|
|
@@ -56,24 +61,22 @@ class TestOutputDialog(ModalScreen[ScreenResultType]):
|
|
|
56
61
|
name="details-content",
|
|
57
62
|
model=model,
|
|
58
63
|
)
|
|
59
|
-
self._stdout_view = ReadOnlyOutputArea(
|
|
64
|
+
self._stdout_view = ReadOnlyOutputArea.code_editor(
|
|
60
65
|
self._format_stdout(),
|
|
61
66
|
id="stdout-content",
|
|
62
67
|
name="stdout-content",
|
|
63
68
|
compact=True,
|
|
64
|
-
language="console",
|
|
65
69
|
read_only=True,
|
|
66
70
|
soft_wrap=False,
|
|
67
71
|
show_cursor=True,
|
|
68
72
|
show_line_numbers=True,
|
|
69
73
|
highlight_cursor_line=True,
|
|
70
74
|
)
|
|
71
|
-
self._stderr_view = ReadOnlyOutputArea(
|
|
75
|
+
self._stderr_view = ReadOnlyOutputArea.code_editor(
|
|
72
76
|
self._format_stderr(),
|
|
73
77
|
id="stderr-content",
|
|
74
78
|
name="stderr-content",
|
|
75
79
|
compact=True,
|
|
76
|
-
language="console",
|
|
77
80
|
read_only=True,
|
|
78
81
|
soft_wrap=False,
|
|
79
82
|
show_cursor=True,
|
|
@@ -108,6 +111,7 @@ class TestOutputDialog(ModalScreen[ScreenResultType]):
|
|
|
108
111
|
"stderr", id="stderr-pane", name="stderr-pane"
|
|
109
112
|
):
|
|
110
113
|
yield self._stderr_view
|
|
114
|
+
yield Footer(compact=True)
|
|
111
115
|
|
|
112
116
|
@work(
|
|
113
117
|
name="refresh_details",
|
|
@@ -115,7 +119,7 @@ class TestOutputDialog(ModalScreen[ScreenResultType]):
|
|
|
115
119
|
exclusive=True,
|
|
116
120
|
exit_on_error=True,
|
|
117
121
|
)
|
|
118
|
-
async def
|
|
122
|
+
async def automatic_refresh(self) -> None:
|
|
119
123
|
if self._tabbed_content.active == "details-pane":
|
|
120
124
|
model = self._model
|
|
121
125
|
if model is not self._details_view.model:
|
|
@@ -123,17 +127,11 @@ class TestOutputDialog(ModalScreen[ScreenResultType]):
|
|
|
123
127
|
elif model is not None:
|
|
124
128
|
self._details_view.mutate_reactive(RegressionDetails.model)
|
|
125
129
|
|
|
126
|
-
def connect_refresh_signals(self, model: TestBase) -> None:
|
|
127
|
-
if isinstance(model, Regression):
|
|
128
|
-
for test in model.tests:
|
|
129
|
-
self.connect_refresh_signals(test)
|
|
130
|
-
model.status_changed.connect(self._refresh_details)
|
|
131
|
-
model.result_changed.connect(self._refresh_details)
|
|
132
|
-
|
|
133
130
|
def on_mount(self) -> None:
|
|
134
|
-
self._refresh_details()
|
|
135
131
|
self._details_view.model = self._model
|
|
136
|
-
|
|
132
|
+
if isinstance(self._model, Regression):
|
|
133
|
+
self.auto_refresh = 1
|
|
134
|
+
self.refresh()
|
|
137
135
|
|
|
138
136
|
def _format_stdout(self) -> str:
|
|
139
137
|
return (
|
|
@@ -128,12 +128,11 @@ TestOutputDialog {
|
|
|
128
128
|
|
|
129
129
|
ReadOnlyOutputArea {
|
|
130
130
|
width: 1fr;
|
|
131
|
-
height:
|
|
131
|
+
height: 1fr;
|
|
132
132
|
border: blank;
|
|
133
133
|
overflow: auto auto;
|
|
134
134
|
scrollbar-size: 1 1;
|
|
135
135
|
scrollbar-gutter: stable;
|
|
136
|
-
background: $background;
|
|
137
136
|
|
|
138
137
|
&:hover,
|
|
139
138
|
&:focus {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|