Bump textual to the latest version
Merge request reports
Activity
added Topic::TUI label
assigned to @mzebrak
- Resolved by Mateusz Żebrak
Known issue about align not working: https://github.com/Textualize/textual/issues/5608
Edited by Mateusz Żebrak
- Resolved by Mateusz Żebrak
Known issue about focus: https://github.com/Textualize/textual/issues/5605
Workaround: !591 (664326b0)
Edited by Mateusz Żebrak
added 10 commits
- 426a8e4f - Fix crash on alarm info by escaping markup in RecoveryAccountWarningListed.FIX_ALARM_INFO
- 9b6120f6 - Bump textual to 2.0.1
- 720af337 - Bump textual to 2.0.2
- 46ea6c1e - Bump textual to 2.0.3
- 89b1d0bd - Bump textual to 2.0.4
- 6aeb4c64 - Bump textual to 2.1.0
- 3aed9426 - Bump textual to 2.1.1
- 11931ddb - Bump textual to 2.1.2
- 930938c4 - Add workaround for CanFocusWithScrollbarsOnly missing focus
- 8d455036 - Fix CanFocusWithScrollbarsOnly
Toggle commit listadded 10 commits
- bddc4313 - Fix crash in cart by disabling markup for operation details table cell
- dd798dcc - Bump textual to 2.0.1
- f907f1de - Bump textual to 2.0.2
- 7b48c061 - Bump textual to 2.0.3
- bc3e9c4e - Bump textual to 2.0.4
- 4d277102 - Bump textual to 2.1.0
- 7c64e5b7 - Bump textual to 2.1.1
- 83907f22 - Bump textual to 2.1.2
- bda6d2b1 - Add workaround for CanFocusWithScrollbarsOnly missing focus
- c6581647 - Fix CanFocusWithScrollbarsOnly
Toggle commit listadded 60 commits
- 4ccd3f58...127f5c42 - 50 earlier commits
- dc23c896 - Fix crash on alarm info by escaping markup in RecoveryAccountWarningListed.FIX_ALARM_INFO
- b3e2c85b - Fix crash in cart by disabling markup for operation details table cell
- e0db29b6 - Bump textual to 2.0.1
- db4cecbd - Bump textual to 2.0.2
- d2c48a67 - Bump textual to 2.0.3
- 5db72f45 - Bump textual to 2.0.4
- c51b7329 - Bump textual to 2.1.0
- a47f7356 - Bump textual to 2.1.1
- e3a13a3a - Bump textual to 2.1.2
- 469200a9 - Fix CanFocusWithScrollbarsOnly
Toggle commit listchanged milestone to %Release v1.27.5.21
requested review from @jziebinski
added Review label
mentioned in issue #395
mentioned in issue #397
added 53 commits
-
b91adf81 - 1 commit from branch
develop
- b91adf81...9ed94bd7 - 42 earlier commits
- 3d17feca - Fix crash on alarm info by escaping markup in RecoveryAccountWarningListed.FIX_ALARM_INFO
- cff7f3d6 - Fix crash in cart by disabling markup for operation details table cell
- 2d232a3d - Bump textual to 2.0.1
- cb9013ab - Bump textual to 2.0.2
- df4a4e24 - Bump textual to 2.0.3
- ad1af86c - Bump textual to 2.0.4
- 06b4bc4a - Bump textual to 2.1.0
- beb2f594 - Bump textual to 2.1.1
- ad9ec807 - Bump textual to 2.1.2
- 4dd31544 - Fix CanFocusWithScrollbarsOnly
Toggle commit list-
b91adf81 - 1 commit from branch
- Resolved by Jakub Ziebinski
crash when trying to switch operations in the cart (when trying to remove operation also):
╭─────────────────────────────────────────────── Traceback (most recent call last) ────────────────────────────────────────────────╮ │ /home/dev/workspace/clive/clive/__private/ui/screens/transaction_summary/cart_table.py:336 in move_item │ │ │ │ 333 │ │ assert to_index < len(self.profile.transaction), "Item cannot be moved to id gre ╭───────── locals ─────────╮ │ │ 334 │ │ │ event = Move() │ │ │ 335 │ │ with self.app.batch_update(): │ from_index = 1 │ │ │ ❱ 336 │ │ │ self._update_values_of_swapped_rows(from_index=from_index, to_index=to_index │ self = CartTable() │ │ │ 337 │ │ │ self._focus_item_on_move(to_index) │ to_index = 2 │ │ │ 338 │ │ ╰──────────────────────────╯ │ │ 339 │ │ self.profile.transaction.swap_operations(from_index, to_index) │ │ │ │ /home/dev/workspace/clive/clive/__private/ui/screens/transaction_summary/cart_table.py:405 in _update_values_of_swapped_rows │ │ │ │ 402 │ │ │ for cell, value in zip(source_cells, target_data): │ │ 403 │ │ │ │ cell.update_content(value) │ │ 404 │ │ │ │ ❱ 405 │ │ from_cells, from_data = extract_cells_and_data(from_index) │ │ 406 │ │ to_cells, to_data = extract_cells_and_data(to_index) │ │ 407 │ │ │ │ 408 │ │ swap_cell_data(to_cells, from_data) │ │ │ │ ╭─────────────────────────────────────────────────────────── locals ───────────────────────────────────────────────────────────╮ │ │ │ extract_cells_and_data = <function CartTable._update_values_of_swapped_rows.<locals>.extract_cells_and_data at │ │ │ │ 0x7663c4de9480> │ │ │ │ from_index = 1 │ │ │ │ self = CartTable() │ │ │ │ swap_cell_data = <function CartTable._update_values_of_swapped_rows.<locals>.swap_cell_data at 0x7663c4de9ea0> │ │ │ │ to_index = 2 │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/workspace/clive/clive/__private/ui/screens/transaction_summary/cart_table.py:397 in extract_cells_and_data │ │ │ │ 394 │ │ │ data: list[str] = [] │ │ 395 │ │ │ for cell in cells: │ │ 396 │ │ │ │ content = cell.content │ │ ❱ 397 │ │ │ │ assert isinstance(content, str), f"Cell content is not a string: {conten │ │ 398 │ │ │ │ data.append(content) │ │ 399 │ │ │ return list(cells), data │ │ 400 │ │ │ │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │ │ │ cell = CliveCheckerBoardTableCell() │ │ │ │ cells = [CliveCheckerBoardTableCell(), CliveCheckerBoardTableCell()] │ │ │ │ content = Static() │ │ │ │ data = ['Transfer to vesting'] │ │ │ │ row = CartItem() │ │ │ │ row_index = 1 │ │ │ │ self = CartTable() │ │ │ ╰──────────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ AssertionError: Cell content is not a string: Static()
Edited by Jakub Ziebinski
- Resolved by Jakub Ziebinski
crash when trying to remove known account:
╭─────────────────────────────────────────────── Traceback (most recent call last) ────────────────────────────────────────────────╮ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/app.py:3748 in on_event │ │ │ │ 3745 │ │ │ │ │ │ # Shouldn't occur, since at the very least this will find the Sc │ │ 3746 │ │ │ │ │ │ self._mouse_down_widget = None │ │ 3747 │ │ │ │ │ │ ❱ 3748 │ │ │ │ self.screen._forward_event(event) │ │ 3749 │ │ │ │ │ │ 3750 │ │ │ │ # If a MouseUp occurs at the same widget as a MouseDown, then we should │ │ 3751 │ │ │ │ # consider it a click, and produce a Click event. │ │ │ │ ╭────────────────────────────────────────────────── locals ──────────────────────────────────────────────────╮ │ │ │ _ = Region(x=66, y=22, width=32, height=1) │ │ │ │ event = MouseDown(None, x=90, y=22, pointer_x=90.0, pointer_y=22.0, button=1) │ │ │ │ self = Clive(title='Clive (AccountManagement)', classes={'-dark-mode'}, pseudo_classes={'focus', 'dark'}) │ │ │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/screen.py:1533 in _forward_event │ │ │ │ 1530 │ │ │ elif isinstance(event, events.MouseDown) and not self.app.mouse_captured: │ │ 1531 │ │ │ │ self._box_select = event.shift │ │ 1532 │ │ │ │ self._mouse_down_offset = event.screen_offset │ │ ❱ 1533 │ │ │ │ select_widget, select_offset = self.get_widget_and_offset_at( │ │ 1534 │ │ │ │ │ event.screen_x, event.screen_y │ │ 1535 │ │ │ │ ) │ │ 1536 │ │ │ │ if ( │ │ │ │ ╭─────────────────────────────────── locals ────────────────────────────────────╮ │ │ │ event = MouseDown(None, x=90, y=22, pointer_x=90.0, pointer_y=22.0, button=1) │ │ │ │ self = AccountManagement() │ │ │ ╰───────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/screen.py:634 in get_widget_and_offset_at │ │ │ │ 631 │ │ Returns: ╭────────── locals ──────────╮ │ │ 632 │ │ │ Tuple of Widget and Offset, both of which may be None. │ self = AccountManagement() │ │ │ 633 │ │ """ │ x = 90 │ │ │ ❱ 634 │ │ return self._compositor.get_widget_and_offset_at(x, y) │ y = 22 │ │ │ 635 │ ╰────────────────────────────╯ │ │ 636 │ def find_widget(self, widget: Widget) -> MapGeometry: │ │ 637 │ │ """Get the screen region of a Widget. │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/_compositor.py:904 in get_widget_and_offset_at │ │ │ │ 901 │ │ y -= region.y + gutter_right │ │ 902 │ │ │ │ 903 │ │ visible_screen_stack.set(widget.app._background_screens) │ │ ❱ 904 │ │ line = widget.render_line(y) │ │ 905 │ │ │ │ 906 │ │ end = 0 │ │ 907 │ │ start = 0 │ │ │ │ ╭────────────────────────────────── locals ──────────────────────────────────╮ │ │ │ gutter_left = 0 │ │ │ │ gutter_right = 0 │ │ │ │ region = Region(x=66, y=22, width=32, height=1) │ │ │ │ self = <Compositor │ │ │ │ │ size=Size(width=132, height=48) │ │ │ │ │ widgets={ │ │ │ │ │ │ CliveCheckerBoardTableCell(), │ │ │ │ │ │ CliveCheckerBoardTableCell(), │ │ │ │ │ │ Label(), │ │ │ │ │ │ DynamicLabel(id='value'), │ │ │ │ │ │ WorkingAccountButton(), │ │ │ │ │ │ Horizontal(), │ │ │ │ │ │ Label(), │ │ │ │ │ │ AddAccountContainer(), │ │ │ │ │ │ DynamicLabel(id='profile-name'), │ │ │ │ │ │ OneLineButton(variant='success'), │ │ │ │ │ │ ... +70 │ │ │ │ │ } │ │ │ │ > │ │ │ │ widget = OneLineButton(id='discard-account-button', variant='error') │ │ │ │ x = -67 │ │ │ │ y = -23 │ │ │ ╰────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/widget.py:3902 in render_line │ │ │ │ 3899 │ │ │ A rendered line. │ │ 3900 │ │ """ │ │ 3901 │ │ if self._dirty_regions: │ │ ❱ 3902 │ │ │ self._render_content() │ │ 3903 │ │ try: │ │ 3904 │ │ │ line = self._render_cache.lines[y] │ │ 3905 │ │ except IndexError: │ │ │ │ ╭────────────────────────────── locals ──────────────────────────────╮ │ │ │ self = OneLineButton(id='discard-account-button', variant='error') │ │ │ │ y = -23 │ │ │ ╰────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/widget.py:3888 in _render_content │ │ │ │ 3885 │ │ """Render all lines.""" │ │ 3886 │ │ width, height = self.size │ │ 3887 │ │ visual = self._render() │ │ ❱ 3888 │ │ strips = Visual.to_strips(self, visual, width, height, self.visual_style) │ │ 3889 │ │ self._render_cache = _RenderCache(self.size, strips) │ │ 3890 │ │ self._dirty_regions.clear() │ │ 3891 │ │ │ │ ╭───────────────────────────────── locals ──────────────────────────────────╮ │ │ │ height = 0 │ │ │ │ self = OneLineButton(id='discard-account-button', variant='error') │ │ │ │ visual = RichVisual( │ │ │ │ │ OneLineButton( │ │ │ │ │ │ id='discard-account-button', │ │ │ │ │ │ variant='error' │ │ │ │ │ ), │ │ │ │ │ <textual.pad.HorizontalPad object at 0x7084b3995810> │ │ │ │ ) │ │ │ │ width = 0 │ │ │ ╰───────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/visual.py:191 in to_strips │ │ │ │ 188 │ │ │ A list of Strips containing the render. │ │ 189 │ │ """ │ │ 190 │ │ │ │ ❱ 191 │ │ selection = widget.text_selection │ │ 192 │ │ if selection is not None: │ │ 193 │ │ │ selection_style: Style | None = Style.from_rich_style( │ │ 194 │ │ │ │ widget.screen.get_component_rich_style("screen--selection") │ │ │ │ ╭───────────────────────────────────────────── locals ─────────────────────────────────────────────╮ │ │ │ cls = <class 'textual.visual.Visual'> │ │ │ │ height = 0 │ │ │ │ pad = False │ │ │ │ style = <Style background=Color(172, 55, 84) foreground=Color(255, 255, 255, a=0.87) bold=True> │ │ │ │ visual = RichVisual( │ │ │ │ │ OneLineButton(id='discard-account-button', variant='error'), │ │ │ │ │ <textual.pad.HorizontalPad object at 0x7084b3995810> │ │ │ │ ) │ │ │ │ widget = OneLineButton(id='discard-account-button', variant='error') │ │ │ │ width = 0 │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/widget.py:652 in text_selection │ │ │ │ 649 │ @property │ │ 650 │ def text_selection(self) -> Selection | None: │ │ 651 │ │ """Text selection information, or `None` if no text is selected in this widget." │ │ ❱ 652 │ │ return self.screen.selections.get(self, None) │ │ 653 │ │ │ 654 │ def _cover(self, widget: Widget) -> None: │ │ 655 │ │ """Set a widget used to replace the visuals of this widget (used for loading ind │ │ │ │ ╭────────────────────────────── locals ──────────────────────────────╮ │ │ │ self = OneLineButton(id='discard-account-button', variant='error') │ │ │ ╰────────────────────────────────────────────────────────────────────╯ │ │ │ │ /home/dev/.pyenv/versions/clive/lib/python3.10/site-packages/textual/dom.py:757 in screen │ │ │ │ 754 │ │ │ │ "Widget is missing attributes; have you called the constructor in your w │ │ 755 │ │ │ ) from None │ │ 756 │ │ if not isinstance(node, Screen): │ │ ❱ 757 │ │ │ raise NoScreen("node has no screen") │ │ 758 │ │ return node │ │ 759 │ │ │ 760 │ @property │ │ │ │ ╭─────────────────────────────── locals ───────────────────────────────╮ │ │ │ node = None │ │ │ │ Screen = <class 'textual.screen.Screen'> │ │ │ │ self = OneLineButton(id='discard-account-button', variant='error') │ │ │ ╰──────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ NoScreen: node has no screen
Please register or sign in to reply