micropython-stubber 1.19.0__py3-none-any.whl → 1.20.1__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.
Files changed (41) hide show
  1. {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/METADATA +4 -4
  2. {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/RECORD +37 -41
  3. mpflash/README.md +41 -33
  4. mpflash/libusb_flash.ipynb +203 -203
  5. mpflash/mpflash/ask_input.py +18 -3
  6. mpflash/mpflash/cli_download.py +16 -12
  7. mpflash/mpflash/cli_flash.py +16 -7
  8. mpflash/mpflash/cli_group.py +1 -1
  9. mpflash/mpflash/cli_list.py +2 -2
  10. mpflash/mpflash/cli_main.py +4 -3
  11. mpflash/mpflash/download.py +11 -8
  12. mpflash/mpflash/flash_uf2.py +1 -1
  13. mpflash/mpflash/list.py +29 -12
  14. mpflash/mpflash/mpboard_id/board_id.py +14 -11
  15. mpflash/mpflash/mpremoteboard/__init__.py +6 -5
  16. mpflash/mpflash/mpremoteboard/runner.py +12 -12
  17. mpflash/mpflash/worklist.py +1 -1
  18. mpflash/poetry.lock +85 -84
  19. mpflash/pyproject.toml +2 -2
  20. stubber/__init__.py +1 -1
  21. stubber/board/createstubs.py +4 -3
  22. stubber/board/createstubs_db.py +4 -4
  23. stubber/board/createstubs_db_min.py +825 -329
  24. stubber/board/createstubs_db_mpy.mpy +0 -0
  25. stubber/board/createstubs_mem.py +4 -4
  26. stubber/board/createstubs_mem_min.py +765 -304
  27. stubber/board/createstubs_mem_mpy.mpy +0 -0
  28. stubber/board/createstubs_min.py +975 -293
  29. stubber/board/createstubs_mpy.mpy +0 -0
  30. stubber/board/modulelist.txt +1 -0
  31. stubber/commands/{mcu_cmd.py → get_mcu_cmd.py} +20 -3
  32. stubber/stubber.py +1 -9
  33. stubber/update_fallback.py +104 -104
  34. stubber/utils/config.py +6 -0
  35. stubber/commands/get_lobo_cmd.py +0 -58
  36. stubber/commands/minify_cmd.py +0 -60
  37. stubber/commands/upd_fallback_cmd.py +0 -36
  38. stubber/commands/upd_module_list_cmd.py +0 -18
  39. {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/LICENSE +0 -0
  40. {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/WHEEL +0 -0
  41. {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/entry_points.txt +0 -0
@@ -19,6 +19,7 @@ from loguru import logger as log
19
19
  from rich.progress import track
20
20
 
21
21
  from mpflash.common import PORT_FWTYPES
22
+ from mpflash.errors import MPFlashError
22
23
 
23
24
  jsonlines.ujson = None # type: ignore
24
25
  # #########################################################################################################
@@ -165,7 +166,7 @@ def download_firmwares(
165
166
  *,
166
167
  force: bool = False,
167
168
  clean: bool = True,
168
- ):
169
+ ) -> int:
169
170
  skipped = downloaded = 0
170
171
  if versions is None:
171
172
  versions = []
@@ -200,6 +201,7 @@ def download_firmwares(
200
201
  writer.write(board)
201
202
  downloaded += 1
202
203
  log.info(f"Downloaded {downloaded} firmwares, skipped {skipped} existing files.")
204
+ return downloaded + skipped
203
205
 
204
206
 
205
207
  def get_firmware_list(ports: List[str], boards: List[str], versions: List[str], clean: bool):
@@ -246,7 +248,7 @@ def download(
246
248
  versions: List[str],
247
249
  force: bool,
248
250
  clean: bool,
249
- ):
251
+ ) -> int:
250
252
  """
251
253
  Downloads firmware files based on the specified destination, ports, boards, versions, force flag, and clean flag.
252
254
 
@@ -259,19 +261,20 @@ def download(
259
261
  clean : A flag indicating whether to perform a clean download.
260
262
 
261
263
  Returns:
262
- None
264
+ int: The number of downloaded firmware files.
263
265
 
264
266
  Raises:
265
- SystemExit: If no boards are found or specified.
267
+ MPFlashError : If no boards are found or specified.
266
268
 
267
269
  """
268
270
  if not boards:
269
271
  log.critical("No boards found, please connect a board or specify boards to download firmware for.")
270
- exit(1)
272
+ raise MPFlashError("No boards found")
271
273
  # versions = [clean_version(v, drop_v=True) for v in versions] # remove leading v from version
272
274
  try:
273
275
  destination.mkdir(exist_ok=True, parents=True)
274
276
  except (PermissionError, FileNotFoundError) as e:
275
- log.critical(f"Could not create folder {destination}\n{e}")
276
- exit(1)
277
- download_firmwares(destination, ports, boards, versions, force=force, clean=clean)
277
+ log.critical(f"Could not create folder {destination}")
278
+ raise MPFlashError(f"Could not create folder {destination}") from e
279
+
280
+ return download_firmwares(destination, ports, boards, versions, force=force, clean=clean)
@@ -56,6 +56,6 @@ def flash_uf2(mcu: MPRemoteBoard, fw_file: Path, erase: bool) -> Optional[MPRemo
56
56
  log.success("Done copying, resetting the board and wait for it to restart")
57
57
  if sys.platform in ["linux", "darwin"]:
58
58
  dismount_uf2()
59
- for _ in track(range(5 + 2)):
59
+ for _ in track(range(5 + 2), description="Waiting for the board to restart", transient=True):
60
60
  time.sleep(1) # 5 secs to short on linux
61
61
  return mcu
mpflash/mpflash/list.py CHANGED
@@ -1,14 +1,19 @@
1
1
  from typing import List
2
2
 
3
3
  from rich import print
4
- from rich.progress import track
5
- from rich.table import Table
4
+ from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn, TimeElapsedColumn, track
5
+ from rich.table import Column, Table
6
6
 
7
7
  from mpflash.mpremoteboard import MPRemoteBoard
8
+ from mpflash.vendor.versions import clean_version
8
9
 
9
10
  from .config import config
10
11
  from .logger import console
11
12
 
13
+ rp_spinner = SpinnerColumn(finished_text="✅")
14
+ rp_text = TextColumn("{task.description} {task.fields[device]}", table_column=Column())
15
+ rp_bar = BarColumn(bar_width=None, table_column=Column())
16
+
12
17
 
13
18
  def list_mcus(bluetooth: bool = False):
14
19
  """
@@ -21,12 +26,24 @@ def list_mcus(bluetooth: bool = False):
21
26
  """
22
27
  conn_mcus = [MPRemoteBoard(sp) for sp in MPRemoteBoard.connected_boards(bluetooth) if sp not in config.ignore_ports]
23
28
 
24
- for mcu in track(conn_mcus, description="Getting board info", transient=True, update_period=0.1):
29
+ # a lot of boilerplate to show a progress bar with the comport currenlty scanned
30
+ with Progress(rp_spinner, rp_text, rp_bar, TimeElapsedColumn()) as progress:
31
+ tsk_scan = progress.add_task("[green]Scanning", visible=False, total=None)
32
+ progress.tasks[tsk_scan].fields["device"] = "..."
33
+ progress.tasks[tsk_scan].visible = True
34
+ progress.start_task(tsk_scan)
25
35
  try:
26
- mcu.get_mcu_info()
27
- except ConnectionError as e:
28
- print(f"Error: {e}")
29
- continue
36
+ for mcu in conn_mcus:
37
+ progress.update(tsk_scan, device=mcu.serialport.replace("/dev/", ""))
38
+ try:
39
+ mcu.get_mcu_info()
40
+ except ConnectionError as e:
41
+ print(f"Error: {e}")
42
+ continue
43
+ finally:
44
+ # transient
45
+ progress.stop_task(tsk_scan)
46
+ progress.tasks[tsk_scan].visible = False
30
47
  return conn_mcus
31
48
 
32
49
 
@@ -38,11 +55,10 @@ def show_mcus(
38
55
  """Show the list of connected boards in a nice table"""
39
56
  table = Table(
40
57
  title=title,
41
- title_style="bold",
42
- header_style="bold blue",
58
+ title_style="magenta",
59
+ header_style="bold magenta",
43
60
  collapse_padding=True,
44
61
  width=110,
45
- row_styles=["blue", "yellow"],
46
62
  )
47
63
  table.add_column("Serial", overflow="fold")
48
64
  table.add_column("Family")
@@ -59,14 +75,15 @@ def show_mcus(
59
75
  mcu.get_mcu_info()
60
76
  except ConnectionError:
61
77
  continue
78
+ description = f"[italic bright_cyan]{mcu.description}" if mcu.description else ""
62
79
  table.add_row(
63
80
  mcu.serialport.replace("/dev/", ""),
64
81
  mcu.family,
65
82
  mcu.port,
66
- f"{mcu.board}\n{mcu.description}".strip(),
83
+ f"{mcu.board}\n{description}".strip(),
67
84
  # mcu.variant,
68
85
  mcu.cpu,
69
- mcu.version,
86
+ clean_version(mcu.version),
70
87
  mcu.build,
71
88
  )
72
89
  console.print(table)
@@ -18,20 +18,23 @@ HERE = Path(__file__).parent
18
18
  def find_board_id(
19
19
  descr: str, short_descr: str, board_info: Optional[Path] = None, version: str = "stable"
20
20
  ) -> Optional[str]:
21
- # TODO: use the json file instead of the csv and get the cpu
22
- boards = find_board_by_description(
23
- descr=descr,
24
- short_descr=short_descr,
25
- board_info=board_info,
26
- version=clean_version(version),
27
- )
28
- return boards[-1]["board"]
21
+ """Find the MicroPython BOARD_ID based on the description in the firmware"""
22
+ try:
23
+ boards = find_board_id_by_description(
24
+ descr=descr,
25
+ short_descr=short_descr,
26
+ board_info=board_info,
27
+ version=clean_version(version),
28
+ )
29
+ return boards[-1]["board"]
30
+ except MPFlashError:
31
+ return "UNKNOWN_BOARD"
29
32
 
30
33
 
31
34
  @functools.lru_cache(maxsize=20)
32
- def find_board_by_description(*, descr: str, short_descr: str, version="v1.21.0", board_info: Optional[Path] = None):
35
+ def find_board_id_by_description(*, descr: str, short_descr: str, version="v1.21.0", board_info: Optional[Path] = None):
33
36
  """
34
- Find the MicroPython BOARD designator based on the description in the firmware
37
+ Find the MicroPython BOARD_ID based on the description in the firmware
35
38
  using the pre-built board_info.json file
36
39
  """
37
40
  if not board_info:
@@ -52,7 +55,7 @@ def find_board_by_description(*, descr: str, short_descr: str, version="v1.21.0"
52
55
  if not matches and short_descr:
53
56
  matches = [b for b in version_matches if b["description"] == short_descr]
54
57
  if not matches:
55
- raise MPFlashError(f"No board info found for description {descr}")
58
+ raise MPFlashError(f"No board info found for description '{descr}' or '{short_descr}'")
56
59
  return sorted(matches, key=lambda x: x["version"])
57
60
 
58
61
 
@@ -65,8 +65,9 @@ class MPRemoteBoard:
65
65
 
66
66
  @staticmethod
67
67
  def connected_boards(bluetooth: bool = False) -> List[str]:
68
+ # TODO: rename to connected_comports
68
69
  """
69
- Get a list of connected boards.
70
+ Get a list of connected comports.
70
71
 
71
72
  Parameters:
72
73
  - bluetooth (bool): Whether to include Bluetooth ports. Default is False.
@@ -74,14 +75,14 @@ class MPRemoteBoard:
74
75
  Returns:
75
76
  - List[str]: A list of connected board ports.
76
77
  """
77
- ports = serial.tools.list_ports.comports()
78
+ comports = serial.tools.list_ports.comports()
78
79
 
79
80
  if not bluetooth:
80
81
  # filter out bluetooth ports
81
- ports = [p for p in ports if "bluetooth" not in p.description.lower()]
82
- ports = [p for p in ports if "BTHENUM" not in p.hwid]
82
+ comports = [p for p in comports if "bluetooth" not in p.description.lower()]
83
+ comports = [p for p in comports if "BTHENUM" not in p.hwid]
83
84
 
84
- return sorted([p.device for p in ports])
85
+ return sorted([p.device for p in comports])
85
86
 
86
87
  @retry(stop=stop_after_attempt(RETRIES), wait=wait_fixed(1), reraise=True) # type: ignore ## retry_error_cls=ConnectionError,
87
88
  def get_mcu_info(self, timeout: int = 2):
@@ -21,6 +21,17 @@ class LogTags:
21
21
  ignore_tags: LogTagList
22
22
 
23
23
 
24
+ DEFAULT_RESET_TAGS = [
25
+ # ESP32 reset causes
26
+ "rst cause:1, boot mode:", # 1 -> hardware watch dog reset
27
+ "rst cause:2, boot mode:", # 2 -> software watch dog reset (From an exception)
28
+ "rst cause:3, boot mode:", # 3 -> software watch dog reset system_restart (Possibly unfed watchdog got angry)
29
+ "rst cause:4, boot mode:", # 4 -> soft restart (Possibly with a restart command)
30
+ "boot.esp32: PRO CPU has been reset by WDT.",
31
+ "rst:0x10 (RTCWDT_RTC_RESET)",
32
+ ]
33
+
34
+
24
35
  def run(
25
36
  cmd: List[str],
26
37
  timeout: int = 60,
@@ -57,18 +68,7 @@ def run(
57
68
  The return code and the output as a list of strings
58
69
  """
59
70
  if not reset_tags:
60
- reset_tags = [
61
- "rst cause:1, boot mode:",
62
- "rst cause:2, boot mode:",
63
- "rst cause:3, boot mode:",
64
- "rst cause:4, boot mode:",
65
- ]
66
- # 0 -> normal startup by power on
67
- # 1 -> hardware watch dog reset
68
- # 2 -> software watch dog reset (From an exception)
69
- # 3 -> software watch dog reset system_restart (Possibly unfed watchdog got angry)
70
- # 4 -> soft restart (Possibly with a restart command)
71
- # 5 -> wake up from deep-sleep
71
+ reset_tags = DEFAULT_RESET_TAGS
72
72
  if not error_tags:
73
73
  error_tags = ["Traceback ", "Error: ", "Exception: ", "ERROR :", "CRIT :"]
74
74
  if not warning_tags:
@@ -24,7 +24,7 @@ def auto_update(
24
24
  *,
25
25
  selector: Optional[Dict[str, str]] = None,
26
26
  ) -> WorkList:
27
- """Builds a list of boards to update based on the connected boards and the firmware available
27
+ """Builds a list of boards to update based on the connected boards and the firmwares available locally in the firmware folder.
28
28
 
29
29
  Args:
30
30
  conn_boards (List[MPRemoteBoard]): List of connected boards
mpflash/poetry.lock CHANGED
@@ -1,4 +1,4 @@
1
- # This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
1
+ # This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
2
2
 
3
3
  [[package]]
4
4
  name = "ansicon"
@@ -211,17 +211,17 @@ files = [
211
211
 
212
212
  [[package]]
213
213
  name = "bitstring"
214
- version = "4.1.4"
214
+ version = "4.2.1"
215
215
  description = "Simple construction, analysis and modification of binary data."
216
216
  optional = false
217
- python-versions = ">=3.7"
217
+ python-versions = ">=3.8"
218
218
  files = [
219
- {file = "bitstring-4.1.4-py3-none-any.whl", hash = "sha256:da46c4d6f8f3fb75a85566fdd33d5083ba8b8f268ed76f34eefe5a00da426192"},
220
- {file = "bitstring-4.1.4.tar.gz", hash = "sha256:94f3f1c45383ebe8fd4a359424ffeb75c2f290760ae8fcac421b44f89ac85213"},
219
+ {file = "bitstring-4.2.1-py3-none-any.whl", hash = "sha256:9ae5d89072b065d640d645d37c0efcd27284b2f79f1c48cc1cd38b54e1932b4f"},
220
+ {file = "bitstring-4.2.1.tar.gz", hash = "sha256:8abb5a661588c764bacf1a23d64c7bb57517d2841e3e6f54fb8c057119e0540d"},
221
221
  ]
222
222
 
223
223
  [package.dependencies]
224
- bitarray = ">=2.8.0,<3.0.0"
224
+ bitarray = ">=2.9.0,<3.0.0"
225
225
 
226
226
  [[package]]
227
227
  name = "blessed"
@@ -450,63 +450,63 @@ files = [
450
450
 
451
451
  [[package]]
452
452
  name = "coverage"
453
- version = "7.4.4"
453
+ version = "7.5.0"
454
454
  description = "Code coverage measurement for Python"
455
455
  optional = false
456
456
  python-versions = ">=3.8"
457
457
  files = [
458
- {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"},
459
- {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"},
460
- {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"},
461
- {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"},
462
- {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"},
463
- {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"},
464
- {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"},
465
- {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"},
466
- {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"},
467
- {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"},
468
- {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"},
469
- {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"},
470
- {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"},
471
- {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"},
472
- {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"},
473
- {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"},
474
- {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"},
475
- {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"},
476
- {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"},
477
- {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"},
478
- {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"},
479
- {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"},
480
- {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"},
481
- {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"},
482
- {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"},
483
- {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"},
484
- {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"},
485
- {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"},
486
- {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"},
487
- {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"},
488
- {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"},
489
- {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"},
490
- {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"},
491
- {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"},
492
- {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"},
493
- {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"},
494
- {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"},
495
- {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"},
496
- {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"},
497
- {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"},
498
- {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"},
499
- {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"},
500
- {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"},
501
- {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"},
502
- {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"},
503
- {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"},
504
- {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"},
505
- {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"},
506
- {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"},
507
- {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"},
508
- {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"},
509
- {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"},
458
+ {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"},
459
+ {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"},
460
+ {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"},
461
+ {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"},
462
+ {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"},
463
+ {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"},
464
+ {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"},
465
+ {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"},
466
+ {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"},
467
+ {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"},
468
+ {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"},
469
+ {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"},
470
+ {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"},
471
+ {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"},
472
+ {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"},
473
+ {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"},
474
+ {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"},
475
+ {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"},
476
+ {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"},
477
+ {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"},
478
+ {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"},
479
+ {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"},
480
+ {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"},
481
+ {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"},
482
+ {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"},
483
+ {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"},
484
+ {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"},
485
+ {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"},
486
+ {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"},
487
+ {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"},
488
+ {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"},
489
+ {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"},
490
+ {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"},
491
+ {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"},
492
+ {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"},
493
+ {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"},
494
+ {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"},
495
+ {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"},
496
+ {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"},
497
+ {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"},
498
+ {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"},
499
+ {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"},
500
+ {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"},
501
+ {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"},
502
+ {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"},
503
+ {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"},
504
+ {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"},
505
+ {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"},
506
+ {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"},
507
+ {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"},
508
+ {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"},
509
+ {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"},
510
510
  ]
511
511
 
512
512
  [package.extras]
@@ -596,13 +596,13 @@ files = [
596
596
 
597
597
  [[package]]
598
598
  name = "ecdsa"
599
- version = "0.18.0"
599
+ version = "0.19.0"
600
600
  description = "ECDSA cryptographic signature library (pure python)"
601
601
  optional = false
602
- python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
602
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6"
603
603
  files = [
604
- {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"},
605
- {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"},
604
+ {file = "ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a"},
605
+ {file = "ecdsa-0.19.0.tar.gz", hash = "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8"},
606
606
  ]
607
607
 
608
608
  [package.dependencies]
@@ -652,13 +652,13 @@ hsm = ["python-pkcs11"]
652
652
 
653
653
  [[package]]
654
654
  name = "exceptiongroup"
655
- version = "1.2.0"
655
+ version = "1.2.1"
656
656
  description = "Backport of PEP 654 (exception groups)"
657
657
  optional = false
658
658
  python-versions = ">=3.7"
659
659
  files = [
660
- {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"},
661
- {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"},
660
+ {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"},
661
+ {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"},
662
662
  ]
663
663
 
664
664
  [package.extras]
@@ -691,13 +691,13 @@ pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_ve
691
691
 
692
692
  [[package]]
693
693
  name = "idna"
694
- version = "3.6"
694
+ version = "3.7"
695
695
  description = "Internationalized Domain Names in Applications (IDNA)"
696
696
  optional = false
697
697
  python-versions = ">=3.5"
698
698
  files = [
699
- {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
700
- {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
699
+ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
700
+ {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
701
701
  ]
702
702
 
703
703
  [[package]]
@@ -921,28 +921,29 @@ test = ["deepdiff (>=6.7.1)", "rich (>=13.7.0)"]
921
921
 
922
922
  [[package]]
923
923
  name = "platformdirs"
924
- version = "4.2.0"
925
- description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
924
+ version = "4.2.1"
925
+ description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
926
926
  optional = false
927
927
  python-versions = ">=3.8"
928
928
  files = [
929
- {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"},
930
- {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"},
929
+ {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"},
930
+ {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"},
931
931
  ]
932
932
 
933
933
  [package.extras]
934
934
  docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
935
935
  test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
936
+ type = ["mypy (>=1.8)"]
936
937
 
937
938
  [[package]]
938
939
  name = "pluggy"
939
- version = "1.4.0"
940
+ version = "1.5.0"
940
941
  description = "plugin and hook calling mechanisms for python"
941
942
  optional = false
942
943
  python-versions = ">=3.8"
943
944
  files = [
944
- {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"},
945
- {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"},
945
+ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
946
+ {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
946
947
  ]
947
948
 
948
949
  [package.extras]
@@ -1360,18 +1361,18 @@ xmod = "*"
1360
1361
 
1361
1362
  [[package]]
1362
1363
  name = "setuptools"
1363
- version = "69.2.0"
1364
+ version = "69.5.1"
1364
1365
  description = "Easily download, build, install, upgrade, and uninstall Python packages"
1365
1366
  optional = false
1366
1367
  python-versions = ">=3.8"
1367
1368
  files = [
1368
- {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"},
1369
- {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"},
1369
+ {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"},
1370
+ {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"},
1370
1371
  ]
1371
1372
 
1372
1373
  [package.extras]
1373
- docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
1374
- testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
1374
+ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
1375
+ testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
1375
1376
  testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
1376
1377
 
1377
1378
  [[package]]
@@ -1434,13 +1435,13 @@ files = [
1434
1435
 
1435
1436
  [[package]]
1436
1437
  name = "typing-extensions"
1437
- version = "4.10.0"
1438
+ version = "4.11.0"
1438
1439
  description = "Backported and Experimental Type Hints for Python 3.8+"
1439
1440
  optional = false
1440
1441
  python-versions = ">=3.8"
1441
1442
  files = [
1442
- {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"},
1443
- {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"},
1443
+ {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"},
1444
+ {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
1444
1445
  ]
1445
1446
 
1446
1447
  [[package]]
mpflash/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "mpflash"
3
- version = "0.6.0"
3
+ version = "0.7.4"
4
4
  description = "Flash and download tool for MicroPython firmwares"
5
5
  authors = ["Jos Verlinde <jos_verlinde@hotmail.com>"]
6
6
  license = "MIT"
@@ -25,7 +25,7 @@ loguru = "^0.7.2"
25
25
  esptool = "^4.7.0"
26
26
  jsonlines = "^4.0.0"
27
27
  bincopy = "^20.0.0"
28
- strip-ansi = "^0.1.1"
28
+ # strip-ansi = "^0.1.1"
29
29
  rich-click = "^1.7.3"
30
30
  psutil = "^5.9.8"
31
31
  blkinfo = "^0.2.0"
stubber/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """get the version"""
2
2
 
3
- __version__ = "1.19.0"
3
+ __version__ = "1.20.1"
@@ -24,7 +24,7 @@ try:
24
24
  except ImportError:
25
25
  from ucollections import OrderedDict # type: ignore
26
26
 
27
- __version__ = "v1.19.0"
27
+ __version__ = "v1.20.1"
28
28
  ENOENT = 2
29
29
  _MAX_CLASS_LEVEL = 2 # Max class nesting
30
30
  LIBS = ["lib", "/lib", "/sd/lib", "/flash/lib", "."]
@@ -596,10 +596,10 @@ def _info(): # type:() -> dict[str, str]
596
596
  if (
597
597
  info["version"]
598
598
  and info["version"].endswith(".0")
599
- and info["version"] >= "1.10.0" # versions from 1.10.0 to 1.20.0 do not have a micro .0
599
+ and info["version"] >= "1.10.0" # versions from 1.10.0 to 1.20.1 do not have a micro .0
600
600
  and info["version"] <= "1.19.9"
601
601
  ):
602
- # versions from 1.10.0 to 1.20.0 do not have a micro .0
602
+ # versions from 1.10.0 to 1.20.1 do not have a micro .0
603
603
  info["version"] = info["version"][:-2]
604
604
 
605
605
  # spell-checker: disable
@@ -951,6 +951,7 @@ def main():
951
951
  "uwebsocket",
952
952
  "uzlib",
953
953
  "version",
954
+ "vfs",
954
955
  "websocket",
955
956
  "websocket_helper",
956
957
  "wipy",