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.
Files changed (115) hide show
  1. {socx_cli-0.13.9 → socx_cli-0.13.10}/PKG-INFO +1 -1
  2. {socx_cli-0.13.9 → socx_cli-0.13.10}/pyproject.toml +1 -1
  3. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/regression.yaml +51 -13
  4. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/app.py +1 -1
  5. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/vim/mode.py +18 -12
  6. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/dialog.py +18 -20
  7. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/static/tcss/regression/app.tcss +1 -2
  8. {socx_cli-0.13.9 → socx_cli-0.13.10}/.gitignore +0 -0
  9. {socx_cli-0.13.9 → socx_cli-0.13.10}/LICENSE +0 -0
  10. {socx_cli-0.13.9 → socx_cli-0.13.10}/README.md +0 -0
  11. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/__init__.py +0 -0
  12. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/__main__.py +0 -0
  13. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/__init__.py +0 -0
  14. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/_cli.py +0 -0
  15. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/_jinja.py +0 -0
  16. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/callbacks.py +0 -0
  17. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/cfg.py +0 -0
  18. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/cli.py +0 -0
  19. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/params.py +0 -0
  20. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/cli/types.py +0 -0
  21. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/__init__.py +0 -0
  22. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/_config.py +0 -0
  23. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/_settings.py +0 -0
  24. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/converters.py +0 -0
  25. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/encoders.py +0 -0
  26. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/formatters.py +0 -0
  27. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/serializers.py +0 -0
  28. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/config/validators.py +0 -0
  29. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/__init__.py +0 -0
  30. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/_paths.py +0 -0
  31. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/encoder.py +0 -0
  32. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/enums.py +0 -0
  33. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/funcs.py +0 -0
  34. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/metadata.py +0 -0
  35. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/paths.py +0 -0
  36. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/__init__.py +0 -0
  37. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/git/__init__.py +0 -0
  38. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/git/git.py +0 -0
  39. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/git/manifest.py +0 -0
  40. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/plugin.py +0 -0
  41. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/schema/types.py +0 -0
  42. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/core/serializer.py +0 -0
  43. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/__init__.py +0 -0
  44. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/_git.py +0 -0
  45. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/_manifest.py +0 -0
  46. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/git/_ssh.py +0 -0
  47. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/__init__.py +0 -0
  48. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/console.py +0 -0
  49. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/decorators.py +0 -0
  50. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/io/log.py +0 -0
  51. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/__init__.py +0 -0
  52. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/mixins/__init__.py +0 -0
  53. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/mixins/proxy.py +0 -0
  54. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/mixins/uid.py +0 -0
  55. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/singleton/__init__.py +0 -0
  56. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/singleton/singleton.py +0 -0
  57. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/visitor/__init__.py +0 -0
  58. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/visitor/protocol.py +0 -0
  59. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/patterns/visitor/traversal.py +0 -0
  60. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/__init__.py +0 -0
  61. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/progress.py +0 -0
  62. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/regression.py +0 -0
  63. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/status.py +0 -0
  64. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/test.py +0 -0
  65. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/validator.py +0 -0
  66. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/regression/visitor.py +0 -0
  67. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/cli.yaml +0 -0
  68. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/console.yaml +0 -0
  69. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/git.yaml +0 -0
  70. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/logging.yaml +0 -0
  71. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/plugins.yaml +0 -0
  72. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/rich_click.yaml +0 -0
  73. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/settings/settings.yaml +0 -0
  74. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/static/sql/socx.sql +0 -0
  75. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/utils/__init__.py +0 -0
  76. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx/utils/decorators.py +0 -0
  77. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/config/__init__.py +0 -0
  78. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/config/_config.py +0 -0
  79. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/config/edit.py +0 -0
  80. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/__init__.py +0 -0
  81. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/arguments.py +0 -0
  82. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/callbacks.py +0 -0
  83. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/cli.py +0 -0
  84. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/manifest.py +0 -0
  85. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/renderables.py +0 -0
  86. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/summary.py +0 -0
  87. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/git/utils.py +0 -0
  88. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/plugin/__init__.py +0 -0
  89. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/plugin/example.py +0 -0
  90. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/plugin/schema.py +0 -0
  91. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/__init__.py +0 -0
  92. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/_run.py +0 -0
  93. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/callbacks.py +0 -0
  94. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/cli.py +0 -0
  95. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/run.py +0 -0
  96. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/serve.py +0 -0
  97. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/regression/tui.py +0 -0
  98. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/version/__init__.py +0 -0
  99. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_plugins/version/__main__.py +0 -0
  100. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/__init__.py +0 -0
  101. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/__init__.py +0 -0
  102. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/__main__.py +0 -0
  103. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/__init__.py +0 -0
  104. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/vim/__init__.py +0 -0
  105. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/bindings/vim/vim.py +0 -0
  106. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/containers.py +0 -0
  107. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/details.py +0 -0
  108. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/mixins/__init__.py +0 -0
  109. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/mixins/composable.py +0 -0
  110. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/mixins/configurable.py +0 -0
  111. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/preview.py +0 -0
  112. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/table.py +0 -0
  113. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/tree.py +0 -0
  114. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/regression/widget.py +0 -0
  115. {socx_cli-0.13.9 → socx_cli-0.13.10}/socx_tui/static/tcss/regression/preview.tcss +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: socx-cli
3
- Version: 0.13.9
3
+ Version: 0.13.10
4
4
  Summary: System on chip verification and tooling infrastructure.
5
5
  Project-URL: Issues, https://github.com/sagikimhi/socx-cli/issues
6
6
  Project-URL: Homepage, https://sagikimhi.dev/socx-cli
@@ -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.9"
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: toggle_dark()
108
- description: Switch between light/dark theme modes
103
+ action: change_theme()
104
+ description: Change theme
109
105
  - key: "!"
110
106
  show: false
111
107
  action: toggle_maximize()
112
- description: Maxmimize/minimize the focused widget
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: q
189
+ description: Dismiss the dialog
190
+ - key: "!"
161
191
  show: true
162
- action: dismiss(None)
163
- description: Dismiss the dialog.
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.cli.params.debug or self.app.debug:
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 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", "page_up", "Page Up", show=False),
27
- Binding("ctrl+d", "page_down", "Page Down", show=False),
28
- Binding("g", "scroll_top", "Cursor Bottom", show=False),
29
- Binding("g", "scroll_home", "Cursor Bottom", show=False),
30
- Binding("G", "scroll_bottom", "Cursor Top", show=False),
31
- Binding("G", "scroll_end", "Cursor Top", show=False),
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
- "End",
41
+ "Scroll end",
36
42
  show=False,
37
43
  ),
38
44
  Binding(
39
45
  "circumflex_accent",
40
46
  "scroll_home",
41
- "Home",
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]] = VimModes.Normal + [
34
- Binding(**binding)
35
- for binding in settings.regression.tui.keybinds.get(
36
- "ReadOnlyOutputArea", []
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 _refresh_details(self, *args, **kwargs) -> None:
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
- self.connect_refresh_signals(self._model)
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: auto;
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