[Bug 2144555] Re: subiquity CI broken with urwid 3.0.4-1

Olivier Gayot 2144555 at bugs.launchpad.net
Mon Mar 16 12:13:18 UTC 2026


** Description changed:

  urwid 3.0.4-1 just migrated in resolute and broke Subiquity's CI.
  
  There is an upstream bug report (opened by someone else)
  https://github.com/urwid/urwid/issues/1086
  
  which resulted in a fix and a new upstream release of urwid (3.0.5).
  https://github.com/urwid/urwid/pull/1092
  https://github.com/urwid/urwid/releases/tag/3.0.5
  
+ To reproduce on noble:
+ $ git clone https://github.com/urwid/urwid ~/dev/urwid
+ $ cd ~/dev/urwid
+ $ git checkout 3.0.4
+ $ python3 -m build
+ $ cd dist
+ $ tar xvf urwid-3.0.4.tar.gz
+ $ cd ~/dev/subiquity
+ $ cat > GNUmakefile
+ include Makefile
+ PYTHONPATH := $(HOME)/dev/urwid/dist/urwid-3.0.4:$(PYTHONPATH)
+ $ make unit
  
-     def test_create_vg(self):
-         model, disk = make_model_and_disk()
-         part1 = model.add_partition(disk, size=10 * (2**30), offset=0)
-         part2 = model.add_partition(disk, size=10 * (2**30), offset=10 * (2**30))
-         view, stretchy = make_view(model)
-         form_data = {
-             "name": "vg1",
-             "devices": {part1: "active", part2: "active"},
-         }
-         expected_data = {
-             "name": "vg1",
-             "devices": {part1, part2},
-             "encrypt": False,
-         }
+ I confirmed that 3.0.5 fixes the CI failure:
+ 
+ $ cd ~/dev/urwid
+ $ git checkout 3.0.5
+ $ python3 -m build
+ $ cd dist
+ $ tar xvf urwid-3.0.5.tar.gz
+ $ cd ~/dev/subiquity
+ $ sed s/3.0.4/3.0.5/ -i GNUmakefile
+ $ make unit
+ OK
+ 
+ Failure
+ -------
+     def test_create_vg(self):
+         model, disk = make_model_and_disk()
+         part1 = model.add_partition(disk, size=10 * (2**30), offset=0)
+         part2 = model.add_partition(disk, size=10 * (2**30), offset=10 * (2**30))
+         view, stretchy = make_view(model)
+         form_data = {
+             "name": "vg1",
+             "devices": {part1: "active", part2: "active"},
+         }
+         expected_data = {
+             "name": "vg1",
+             "devices": {part1, part2},
+             "encrypt": False,
+         }
  >       view_helpers.enter_data(stretchy.form, form_data)
  
- subiquity/ui/views/filesystem/tests/test_lvm.py:57: 
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+ subiquity/ui/views/filesystem/tests/test_lvm.py:57:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  subiquitycore/testing/view_helpers.py:91: in enter_data
-     bf.value = v
-     ^^^^^^^^
+     bf.value = v
+     ^^^^^^^^
  subiquitycore/ui/form.py:226: in value
-     self.widget.value = val
-     ^^^^^^^^^^^^^^^^^
+     self.widget.value = val
+     ^^^^^^^^^^^^^^^^^
  subiquity/ui/views/filesystem/compound.py:65: in value
-     b.set_state(d in self.devices)
+     b.set_state(d in self.devices)
  /usr/lib/python3/dist-packages/urwid/widget/wimp.py:381: in set_state
-     self._emit("change", state)
+     self._emit("change", state)
  /usr/lib/python3/dist-packages/urwid/widget/widget.py:310: in _emit
-     signals.emit_signal(self, name, self, *args)
+     signals.emit_signal(self, name, self, *args)
  /usr/lib/python3/dist-packages/urwid/signals.py:299: in emit
-     result |= self._call_callback(callback, user_arg, weak_args, user_args, args)
-               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+     result |= self._call_callback(callback, user_arg, weak_args, user_args, args)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  /usr/lib/python3/dist-packages/urwid/signals.py:323: in _call_callback
-     return bool(callback(*args))
-                 ^^^^^^^^^^^^^^^
- _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
+     return bool(callback(*args))
+                 ^^^^^^^^^^^^^^^
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  
  self = <MultiDeviceChooser selectable box/flow widget>
  sender = Partition(device=disk-0, size=10737418240, flag='', number=1, grub_device=None, offset=0, id='partition-0')
  state = <CheckBox selectable fixed/flow widget '  partition 1' state=False>
  device = True
  
-     def _state_change_device(self, sender, state, device):
-         if state:
-             if self.supports_spares:
-                 self.device_to_selector[device].enabled = True
+     def _state_change_device(self, sender, state, device):
+         if state:
+             if self.supports_spares:
+                 self.device_to_selector[device].enabled = True
  >           selector = self.device_to_selector[device]
-                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  E           KeyError: True
  
  subiquity/ui/views/filesystem/compound.py:95: KeyError

-- 
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to urwid in Ubuntu.
https://bugs.launchpad.net/bugs/2144555

Title:
  subiquity CI broken with urwid 3.0.4-1

Status in subiquity:
  New
Status in urwid package in Ubuntu:
  New

Bug description:
  urwid 3.0.4-1 just migrated in resolute and broke Subiquity's CI.

  There is an upstream bug report (opened by someone else)
  https://github.com/urwid/urwid/issues/1086

  which resulted in a fix and a new upstream release of urwid (3.0.5).
  https://github.com/urwid/urwid/pull/1092
  https://github.com/urwid/urwid/releases/tag/3.0.5

  To reproduce on noble:
  $ git clone https://github.com/urwid/urwid ~/dev/urwid
  $ cd ~/dev/urwid
  $ git checkout 3.0.4
  $ python3 -m build
  $ cd dist
  $ tar xvf urwid-3.0.4.tar.gz
  $ cd ~/dev/subiquity
  $ cat > GNUmakefile
  include Makefile
  PYTHONPATH := $(HOME)/dev/urwid/dist/urwid-3.0.4:$(PYTHONPATH)
  $ make unit

  I confirmed that 3.0.5 fixes the CI failure:

  $ cd ~/dev/urwid
  $ git checkout 3.0.5
  $ python3 -m build
  $ cd dist
  $ tar xvf urwid-3.0.5.tar.gz
  $ cd ~/dev/subiquity
  $ sed s/3.0.4/3.0.5/ -i GNUmakefile
  $ make unit
  OK

  Failure
  -------
      def test_create_vg(self):
          model, disk = make_model_and_disk()
          part1 = model.add_partition(disk, size=10 * (2**30), offset=0)
          part2 = model.add_partition(disk, size=10 * (2**30), offset=10 * (2**30))
          view, stretchy = make_view(model)
          form_data = {
              "name": "vg1",
              "devices": {part1: "active", part2: "active"},
          }
          expected_data = {
              "name": "vg1",
              "devices": {part1, part2},
              "encrypt": False,
          }
  >       view_helpers.enter_data(stretchy.form, form_data)

  subiquity/ui/views/filesystem/tests/test_lvm.py:57:
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  subiquitycore/testing/view_helpers.py:91: in enter_data
      bf.value = v
      ^^^^^^^^
  subiquitycore/ui/form.py:226: in value
      self.widget.value = val
      ^^^^^^^^^^^^^^^^^
  subiquity/ui/views/filesystem/compound.py:65: in value
      b.set_state(d in self.devices)
  /usr/lib/python3/dist-packages/urwid/widget/wimp.py:381: in set_state
      self._emit("change", state)
  /usr/lib/python3/dist-packages/urwid/widget/widget.py:310: in _emit
      signals.emit_signal(self, name, self, *args)
  /usr/lib/python3/dist-packages/urwid/signals.py:299: in emit
      result |= self._call_callback(callback, user_arg, weak_args, user_args, args)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  /usr/lib/python3/dist-packages/urwid/signals.py:323: in _call_callback
      return bool(callback(*args))
                  ^^^^^^^^^^^^^^^
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

  self = <MultiDeviceChooser selectable box/flow widget>
  sender = Partition(device=disk-0, size=10737418240, flag='', number=1, grub_device=None, offset=0, id='partition-0')
  state = <CheckBox selectable fixed/flow widget '  partition 1' state=False>
  device = True

      def _state_change_device(self, sender, state, device):
          if state:
              if self.supports_spares:
                  self.device_to_selector[device].enabled = True
  >           selector = self.device_to_selector[device]
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  E           KeyError: True

  subiquity/ui/views/filesystem/compound.py:95: KeyError

To manage notifications about this bug go to:
https://bugs.launchpad.net/subiquity/+bug/2144555/+subscriptions




More information about the Ubuntu-openstack-bugs mailing list