urwid 3.0.2__py3-none-any.whl → 3.0.3__py3-none-any.whl

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.
urwid/canvas.py CHANGED
@@ -84,7 +84,7 @@ class CanvasCache:
84
84
  cleanups = 0
85
85
 
86
86
  @classmethod
87
- def store(cls, wcls, canvas: Canvas) -> None:
87
+ def store(cls, wcls: type[Widget], canvas: Canvas) -> None:
88
88
  """
89
89
  Store a weakref to canvas in the cache.
90
90
 
@@ -98,7 +98,7 @@ class CanvasCache:
98
98
  raise TypeError("Can't store canvas without widget_info")
99
99
  widget, size, focus = canvas.widget_info
100
100
 
101
- def walk_depends(canv):
101
+ def walk_depends(canv: Canvas) -> list[Widget]:
102
102
  """
103
103
  Collect all child widgets for determining who we
104
104
  depend on.
@@ -128,7 +128,7 @@ class CanvasCache:
128
128
  cls._widgets.setdefault(widget, {})[wcls, size, focus] = ref
129
129
 
130
130
  @classmethod
131
- def fetch(cls, widget, wcls, size, focus) -> Canvas | None:
131
+ def fetch(cls, widget: Widget, wcls: type[Widget], size, focus: bool) -> Canvas | None:
132
132
  """
133
133
  Return the cached canvas or None.
134
134
 
@@ -150,7 +150,7 @@ class CanvasCache:
150
150
  return canv
151
151
 
152
152
  @classmethod
153
- def invalidate(cls, widget):
153
+ def invalidate(cls, widget: Widget) -> None:
154
154
  """
155
155
  Remove all canvases cached for widget.
156
156
  """
@@ -214,7 +214,7 @@ class Canvas:
214
214
 
215
215
  def __init__(self) -> None:
216
216
  """Base Canvas class"""
217
- self._widget_info = None
217
+ self._widget_info: tuple[Widget, tuple[[]] | tuple[int] | tuple[int, int], bool] | None = None
218
218
  self.coords: dict[str, tuple[int, int, tuple[Widget, int, int]] | tuple[int, int, None]] = {}
219
219
  self.shortcuts: dict[str, str] = {}
220
220
 
@@ -240,7 +240,7 @@ class Canvas:
240
240
  self._widget_info = widget, size, focus
241
241
 
242
242
  @property
243
- def widget_info(self):
243
+ def widget_info(self) -> tuple[Widget, tuple[[]] | tuple[int] | tuple[int, int], bool] | None:
244
244
  return self._widget_info
245
245
 
246
246
  @property
@@ -154,7 +154,7 @@ class Screen(_raw_display_base.Screen):
154
154
  if not os.environ.get("TERM", "").lower().startswith("linux"):
155
155
  return
156
156
 
157
- m = Popen( # noqa: S603 # pylint: disable=consider-using-with
157
+ m = Popen( # pylint: disable=consider-using-with
158
158
  ["/usr/bin/mev", "-e", "158"],
159
159
  stdin=PIPE,
160
160
  stdout=PIPE,
@@ -175,7 +175,7 @@ class Screen(_raw_display_base.Screen):
175
175
  """
176
176
  Initialize the screen and input mode.
177
177
 
178
- alternate_buffer -- use alternate screen buffer
178
+ alternate_buffer -- use an alternate screen buffer
179
179
  """
180
180
  if alternate_buffer:
181
181
  self.write(escape.SWITCH_TO_ALTERNATE_BUFFER)
@@ -403,8 +403,8 @@ class Screen(_raw_display_base.Screen):
403
403
  y, x = super().get_cols_rows()
404
404
  with contextlib.suppress(OSError): # Term size could not be determined
405
405
  if hasattr(self._term_output_file, "fileno"):
406
- buf = fcntl.ioctl(self._term_output_file.fileno(), termios.TIOCGWINSZ, b" " * 4)
407
- y, x = struct.unpack("hh", buf)
406
+ buf = fcntl.ioctl(self._term_output_file.fileno(), termios.TIOCGWINSZ, b" " * 8)
407
+ y, x, _, _ = struct.unpack("hhhh", buf)
408
408
 
409
409
  # Provide some lightweight fallbacks in case the TIOCWINSZ doesn't
410
410
  # give sane answers
@@ -211,7 +211,7 @@ class Screen(BaseScreen, RealTerminal):
211
211
  Restore the screen.
212
212
  """
213
213
 
214
- def write(self, data):
214
+ def write(self, data: str) -> None:
215
215
  """Write some data to the terminal.
216
216
 
217
217
  You may wish to override this if you're using something other than
@@ -219,7 +219,7 @@ class Screen(BaseScreen, RealTerminal):
219
219
  """
220
220
  self._term_output_file.write(data)
221
221
 
222
- def flush(self):
222
+ def flush(self) -> None:
223
223
  """Flush the output buffer.
224
224
 
225
225
  You may wish to override this if you're using something other than
@@ -352,7 +352,11 @@ class Screen(BaseScreen, RealTerminal):
352
352
 
353
353
  _input_timeout = None
354
354
 
355
- def _make_legacy_input_wrapper(self, event_loop, callback):
355
+ def _make_legacy_input_wrapper(
356
+ self,
357
+ event_loop: EventLoop,
358
+ callback: Callable[[list[str], list[int]], typing.Any],
359
+ ) -> Callable[[], None]:
356
360
  """
357
361
  Support old Screen classes that still have a get_input_nonblocking and expect it to work.
358
362
  """
@@ -873,9 +877,8 @@ class Screen(BaseScreen, RealTerminal):
873
877
 
874
878
  def reset_default_terminal_palette(self) -> None:
875
879
  """
876
- Attempt to set the terminal palette to default values as taken
877
- from xterm. Uses number of colors from current
878
- set_terminal_properties() screen setting.
880
+ Attempt to set the terminal palette to default values as taken from xterm.
881
+ Uses a number of colors from the current set_terminal_properties() screen setting.
879
882
  """
880
883
  if self.colors == 1:
881
884
  return
@@ -898,9 +901,8 @@ class Screen(BaseScreen, RealTerminal):
898
901
  """
899
902
  entries - list of (index, red, green, blue) tuples.
900
903
 
901
- Attempt to set part of the terminal palette (this does not work
902
- on all terminals.) The changes are sent as a single escape
903
- sequence so they should all take effect at the same time.
904
+ Attempt to set part of the terminal palette (this does not work on all terminals.)
905
+ The changes are sent as a single escape sequence so they should all take effect at the same time.
904
906
 
905
907
  0 <= index < 256 (some terminals will only have 16 or 88 colors)
906
908
  0 <= red, green, blue < 256
urwid/display/common.py CHANGED
@@ -768,7 +768,7 @@ class AttrSpec:
768
768
  else:
769
769
  scolor = _parse_color_256(_true_to_256(part) or part)
770
770
  flags |= _FG_HIGH_COLOR
771
- # _parse_color_*() return None for unrecognised colors
771
+ # _parse_color_*() return None for unrecognized colors
772
772
  if scolor is None:
773
773
  raise AttrSpecError(f"Unrecognised color specification {part!r} in foreground ({foreground!r})")
774
774
  if color is not None:
@@ -1011,7 +1011,7 @@ class BaseScreen(abc.ABC, metaclass=signals.MetaSignals):
1011
1011
  def _stop(self) -> None:
1012
1012
  pass
1013
1013
 
1014
- def run_wrapper(self, fn, *args, **kwargs):
1014
+ def run_wrapper(self, fn, *args, **kwargs) -> None:
1015
1015
  """Start the screen, call a function, then stop the screen. Extra
1016
1016
  arguments are passed to `start`.
1017
1017
 
urwid/display/curses.py CHANGED
@@ -596,7 +596,7 @@ class Screen(BaseScreen, RealTerminal):
596
596
  raise TypeError(seg)
597
597
  self.s.addstr(seg.decode(util.get_encoding()))
598
598
  except curses.error:
599
- # it's ok to get out of the
599
+ # it's OK to get out of the
600
600
  # screen on the lower right
601
601
  if y != rows - 1 or nr != len(row) - 1:
602
602
  # perhaps screen size changed
urwid/display/escape.py CHANGED
@@ -247,7 +247,11 @@ class KeyqueueTrie:
247
247
  return None
248
248
  return self.get_recurse(root[keys[0]], keys[1:], more_available)
249
249
 
250
- def read_mouse_info(self, keys: Sequence[int], more_available: bool):
250
+ def read_mouse_info(
251
+ self,
252
+ keys: Sequence[int],
253
+ more_available: bool,
254
+ ) -> tuple[tuple[str, int, int, int], Sequence[int]] | None:
251
255
  if len(keys) < 3:
252
256
  if more_available:
253
257
  raise MoreInputRequired()
@@ -286,7 +290,11 @@ class KeyqueueTrie:
286
290
 
287
291
  return ((f"{prefix}mouse {action}", button, x, y), keys[3:])
288
292
 
289
- def read_sgrmouse_info(self, keys: Sequence[int], more_available: bool):
293
+ def read_sgrmouse_info(
294
+ self,
295
+ keys: Sequence[int],
296
+ more_available: bool,
297
+ ) -> tuple[tuple[str, int, int, int], Sequence[int]] | None:
290
298
  # Helpful links:
291
299
  # https://stackoverflow.com/questions/5966903/how-to-get-mousemove-and-mouseclick-in-bash
292
300
  # http://invisible-island.net/xterm/ctlseqs/ctlseqs.pdf
@@ -345,7 +353,11 @@ class KeyqueueTrie:
345
353
 
346
354
  return ((f"{prefix}mouse {action}", button, x, y), keys[pos_m + 1 :])
347
355
 
348
- def read_cursor_position(self, keys, more_available: bool):
356
+ def read_cursor_position(
357
+ self,
358
+ keys: Sequence[int],
359
+ more_available: bool,
360
+ ) -> tuple[tuple[str, int, int], Sequence[int]] | None:
349
361
  """
350
362
  Interpret cursor position information being sent by the
351
363
  user's terminal. Returned as ('cursor position', x, y)
urwid/display/lcd.py CHANGED
@@ -125,8 +125,8 @@ class CFLCDScreen(LCDScreen, abc.ABC):
125
125
 
126
126
  @classmethod
127
127
  def get_crc(cls, buf: Iterable[int]) -> bytes:
128
- # This seed makes the output of this shift based algorithm match
129
- # the table based algorithm. The center 16 bits of the 32-bit
128
+ # This seed makes the output of this shift-based algorithm match
129
+ # the table-based algorithm. The center 16 bits of the 32-bit
130
130
  # "newCRC" are used for the CRC. The MSB of the lower byte is used
131
131
  # to see what bit was shifted out of the center 16 bit CRC
132
132
  # accumulator ("carry flag analog");
@@ -229,7 +229,7 @@ class KeyRepeatSimulator:
229
229
  Provide simulated repeat key events when given press and
230
230
  release events.
231
231
 
232
- If two or more keys are pressed disable repeating until all
232
+ If two or more keys are pressed, disable repeating until all
233
233
  keys are released.
234
234
  """
235
235
 
@@ -286,7 +286,7 @@ class CF635Screen(CFLCDScreen):
286
286
  20x4 character display + cursor
287
287
  no foreground/background colors or settings supported
288
288
 
289
- see CGROM for list of close unicode matches to characters available
289
+ see CGROM for a list of close Unicode matches to characters available
290
290
 
291
291
  6 button input
292
292
  up, down, left, right, enter (check mark), exit (cross)
urwid/display/web.py CHANGED
@@ -456,7 +456,7 @@ class Screen(BaseScreen):
456
456
  return pending_input
457
457
 
458
458
 
459
- def code_span(s, fg, bg, cursor=-1) -> str:
459
+ def code_span(s: str, fg: str, bg: str, cursor: int = -1) -> str:
460
460
  code_fg = _code_colours[fg]
461
461
  code_bg = _code_colours[bg]
462
462
 
@@ -492,8 +492,8 @@ def is_web_request() -> bool:
492
492
  def handle_short_request() -> bool:
493
493
  """
494
494
  Handle short requests such as passing keystrokes to the application
495
- or sending the initial html page. If returns True, then this
496
- function recognised and handled a short request, and the calling
495
+ or sending the initial HTML page. If returns True, then this
496
+ function recognized and handled a short request, and the calling
497
497
  script should immediately exit.
498
498
 
499
499
  web_display.set_preferences(..) should be called before calling this
urwid/version.py CHANGED
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '3.0.2'
21
- __version_tuple__ = version_tuple = (3, 0, 2)
31
+ __version__ = version = '3.0.3'
32
+ __version_tuple__ = version_tuple = (3, 0, 3)
33
+
34
+ __commit_id__ = commit_id = None
urwid/widget/listbox.py CHANGED
@@ -1017,6 +1017,9 @@ class ListBox(Widget, WidgetContainerMixin):
1017
1017
  self._body.set_focus(focus_pos)
1018
1018
 
1019
1019
  middle, top, bottom = self.calculate_visible((maxcol, maxrow), focus)
1020
+ if middle is None:
1021
+ return None
1022
+
1020
1023
  focus_offset, _focus_widget, focus_pos, focus_rows, _cursor = middle # pylint: disable=unpacking-non-sequence
1021
1024
  _trim_top, fill_above = top # pylint: disable=unpacking-non-sequence
1022
1025
  _trim_bottom, fill_below = bottom # pylint: disable=unpacking-non-sequence
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: urwid
3
- Version: 3.0.2
3
+ Version: 3.0.3
4
4
  Summary: A full-featured console (xterm et al.) user interface library
5
5
  Author-email: Ian Ward <ian@excess.org>
6
6
  License: LGPL-2.1-only
@@ -104,6 +104,8 @@ Alternatively if you are on Debian or Ubuntu
104
104
  Windows support notes
105
105
  =====================
106
106
 
107
+ Windows support is limited to the Windows 10+ due to ANSI support requirement.
108
+
107
109
  * Not supported:
108
110
 
109
111
  1. Terminal widget and all related render API (TermCanvas, TermCharset, TermModes, TermScroller)
@@ -1,5 +1,5 @@
1
1
  urwid/__init__.py,sha256=t5n8QWni3FbasOyKIulm_7-Go3A0puBKiie_79rxifU,7979
2
- urwid/canvas.py,sha256=mHwPJ494ivdhm_06d5rJzTR9cB_aYLDCz6RAzzHl8L0,46092
2
+ urwid/canvas.py,sha256=W6gVxeuC2PiLo8U5suNPZ7BpamfC_Y_-1HU2_PKWGA0,46316
3
3
  urwid/command_map.py,sha256=UUOC11O0SlNhMiBoYqNaSAfGcg0RmjjGEgz6Xt96iA4,4369
4
4
  urwid/container.py,sha256=WOodISzyS4NSs3arijXuXLsDvF1GVIn4ufcPzfxSkdA,1594
5
5
  urwid/decoration.py,sha256=dwoYY0tiZS4toGgrxEAALKeVvnoDV9W-LadkV9G4CZg,1777
@@ -11,23 +11,23 @@ urwid/split_repr.py,sha256=pXzuddzQ4RnfIl537Gvoe8PVaBRHCPnxgdYvKK0qm8k,3899
11
11
  urwid/str_util.py,sha256=oQVTyDWAIRuCsNl_jeAxX1zbldWgU58MMU3YPWKlFbA,10823
12
12
  urwid/text_layout.py,sha256=EqsT64CUfP_QPTnhyVy4erEhXaCShxGqynBm6xS5qpI,22792
13
13
  urwid/util.py,sha256=cZ2qtutEThZSq4FGu3DMX2Tds0CXXRghn8b8QQasR7w,15337
14
- urwid/version.py,sha256=NpXuePaG57YwfLkFhnPEM1yLuLWOsEkvJLB1sQvObCw,511
14
+ urwid/version.py,sha256=BweWx3tNj_D6SQCX10T_zF5lEo_PhYQvGgQyCBC4gHM,704
15
15
  urwid/vterm.py,sha256=vzzgf1P8M5j6uEePSEMVhQVMzqGeVnJc1L6DZCH9kRg,57744
16
16
  urwid/wimp.py,sha256=CRpUWYsrCSrnTX1AH7FnBI_8EvLHHy6eypg8-zno5MI,572
17
17
  urwid/display/__init__.py,sha256=y90WbHPNRHlimPrXhzsSfFsBbBHy8QErmB1y4Xza-xo,1732
18
- urwid/display/_posix_raw_display.py,sha256=ExZHAzuJg34VNrWWVKXPZGFSApLJvJxrNh4detTEdCY,15053
19
- urwid/display/_raw_display_base.py,sha256=IVkgFhooYFZxuzXoP4OK1J_Uo3R9rxj7pUscrtz8UJM,33586
18
+ urwid/display/_posix_raw_display.py,sha256=PcrTvzCsOkxnNJaNPBCn9ETjETPCIv3SWHLDauyVyb0,15050
19
+ urwid/display/_raw_display_base.py,sha256=lHAgl51Ydd6Qkfs2-lXsNDIj8SXwxoYU6C0T90BfW1s,33705
20
20
  urwid/display/_web.css,sha256=6HarEsIspH2egt51HSrgI8Yl2lGi-DbziWOdS4RHNlk,359
21
21
  urwid/display/_web.js,sha256=aWEOQ4EsADsiNgdw-zHEUMCRD2bnfR8M1mu4dOc2Tqk,12947
22
22
  urwid/display/_win32.py,sha256=hD4hytElpfIv5qxGNTMSa2QeBNByqJDNVpmiiQSj6CM,5401
23
23
  urwid/display/_win32_raw_display.py,sha256=VL6TiUId1bI5jszxAyqrso2XBnyVIWM_GWMKvV5kbOw,9176
24
- urwid/display/common.py,sha256=w3w5qrxMV-2pBC1_SinluMWlmRzxm82GfDf_hrz0AF4,38564
25
- urwid/display/curses.py,sha256=Ba-CC-qC-K81ZHWyNhMm_2P4fJVbFI0kQFs0gp-SCc4,22748
26
- urwid/display/escape.py,sha256=DRFKs9rzfzk3aGsc8S3j_BJvNdETpQZyJN8cItetoaE,17913
24
+ urwid/display/common.py,sha256=0qP5o2DoxfMt8OTs1HWLUgxxLV_YvWc6GPkNn0TlJ4M,38572
25
+ urwid/display/curses.py,sha256=99JTuRlJt1bKt6b_1XK0hxJ88z0C8RDeXTWvdaqL3YE,22748
26
+ urwid/display/escape.py,sha256=G8oImGhqW_Ye-woR8rxSMfqmX1D2nP2RugKKGLTbSHM,18190
27
27
  urwid/display/html_fragment.py,sha256=lQRqr-hTrknQyZTtzPDp9zr-TWOT4NcuSsusS-LXIOU,8547
28
- urwid/display/lcd.py,sha256=CB-CXS6clkbNCNTwSKSnssbSK794TL59nsRA82WbR4w,17601
28
+ urwid/display/lcd.py,sha256=XwBmdtzegbSTk68VoaYloo4T5vgrs-vZBFOFjObp6oE,17604
29
29
  urwid/display/raw.py,sha256=TSkIEM6KnQHPmmpBkWKdirZOwVXhSV67k7hWmuuR2OY,1125
30
- urwid/display/web.py,sha256=pd8PjKskTomdSSuYFRxvJo_9oefdXuN0R2UA3UpIwpg,19129
30
+ urwid/display/web.py,sha256=QvCfKxIrtlv2fTc95BSdFLCM2ny4OPX2UE16H83TQSs,19151
31
31
  urwid/event_loop/__init__.py,sha256=6di4AYD6HbCf6v5p0rZOoteKnM9U5tfk4NKcWMH4FV4,1199
32
32
  urwid/event_loop/abstract_loop.py,sha256=6Kkw3KCJ4ndiI2I1P8fPdtHzjuekRxUuvzFOiR0Myok,5494
33
33
  urwid/event_loop/asyncio_loop.py,sha256=V86z4ezyLOXh0c3rgJPr4P1W3jfN6gvTKowe8PqmcwI,9122
@@ -53,7 +53,7 @@ urwid/widget/filler.py,sha256=l8FzT6gitp7xK9cPN0f1fW1NxxAo43L_GEx1abh-LHc,14799
53
53
  urwid/widget/frame.py,sha256=yVwsImuPhOuL99-9q5tTU7_x3kZ5YyRtqBOgUOyAjAw,21492
54
54
  urwid/widget/grid_flow.py,sha256=sAKZv9l-a9B-9vjjqq5Z8iuoCRC1MFyRrZzUOXqzA_o,18549
55
55
  urwid/widget/line_box.py,sha256=oefB0GRfDafZAOUn1t193gBYdzc6Pz2T8whYfeq5TYA,7458
56
- urwid/widget/listbox.py,sha256=Sfp1Y6HZGDziknE-wn7eZ3GsGIgINKft8E_MINLnHuQ,73220
56
+ urwid/widget/listbox.py,sha256=mKey9zeck9FZ6rHPy92kR9GOmsGrJU-ASW6WG0_4o20,73272
57
57
  urwid/widget/monitored_list.py,sha256=pMhWGqt0Du97wQwuOydN-tfoba3rvnTi56BDRskUD6M,19360
58
58
  urwid/widget/overlay.py,sha256=A0ypqnCtOSR_axmE0zHiUZfonY1-aRMbTiymYulYQNc,33319
59
59
  urwid/widget/padding.py,sha256=zz1fy4b0hWTpEjR4uDlJnzAbm-TuiUcDWM9IusubvN0,19853
@@ -67,8 +67,8 @@ urwid/widget/treetools.py,sha256=NehR7ELL2vvBHIlwtRCGyTfPLdx0Uis5opufC3xNkcE,170
67
67
  urwid/widget/widget.py,sha256=uWHGpOueiDa8wJykFhR38wHV9Wg59E2lENDrWZZm9xI,26432
68
68
  urwid/widget/widget_decoration.py,sha256=zqB41ytmZo8-kSp4iurx06ax-t_IEI9GLbEzn7ZdqsU,4621
69
69
  urwid/widget/wimp.py,sha256=4wfzTQBLMbhicSlL64hBPb-1W5FAFrIKfb43i10MKSY,27305
70
- urwid-3.0.2.dist-info/licenses/COPYING,sha256=NrbT-keRaUP9X-wxPFhHhJRgR-wTN6eLRA5ZkstZX4k,26434
71
- urwid-3.0.2.dist-info/METADATA,sha256=UywRFdnHl-6jpdUO8zwoScmkYQE5rV7Lt10xoUjYLCs,10965
72
- urwid-3.0.2.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
73
- urwid-3.0.2.dist-info/top_level.txt,sha256=AwxQA43kNkjHbhYELXHBKrQ01X5CR2KnDzU07cVqilY,6
74
- urwid-3.0.2.dist-info/RECORD,,
70
+ urwid-3.0.3.dist-info/licenses/COPYING,sha256=NrbT-keRaUP9X-wxPFhHhJRgR-wTN6eLRA5ZkstZX4k,26434
71
+ urwid-3.0.3.dist-info/METADATA,sha256=YbyXgmjzUvsmXqnsa0EE_hRsmiagNm_tEz-pU07Slyw,11045
72
+ urwid-3.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
73
+ urwid-3.0.3.dist-info/top_level.txt,sha256=AwxQA43kNkjHbhYELXHBKrQ01X5CR2KnDzU07cVqilY,6
74
+ urwid-3.0.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5