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.
- {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/METADATA +4 -4
- {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/RECORD +37 -41
- mpflash/README.md +41 -33
- mpflash/libusb_flash.ipynb +203 -203
- mpflash/mpflash/ask_input.py +18 -3
- mpflash/mpflash/cli_download.py +16 -12
- mpflash/mpflash/cli_flash.py +16 -7
- mpflash/mpflash/cli_group.py +1 -1
- mpflash/mpflash/cli_list.py +2 -2
- mpflash/mpflash/cli_main.py +4 -3
- mpflash/mpflash/download.py +11 -8
- mpflash/mpflash/flash_uf2.py +1 -1
- mpflash/mpflash/list.py +29 -12
- mpflash/mpflash/mpboard_id/board_id.py +14 -11
- mpflash/mpflash/mpremoteboard/__init__.py +6 -5
- mpflash/mpflash/mpremoteboard/runner.py +12 -12
- mpflash/mpflash/worklist.py +1 -1
- mpflash/poetry.lock +85 -84
- mpflash/pyproject.toml +2 -2
- stubber/__init__.py +1 -1
- stubber/board/createstubs.py +4 -3
- stubber/board/createstubs_db.py +4 -4
- stubber/board/createstubs_db_min.py +825 -329
- stubber/board/createstubs_db_mpy.mpy +0 -0
- stubber/board/createstubs_mem.py +4 -4
- stubber/board/createstubs_mem_min.py +765 -304
- stubber/board/createstubs_mem_mpy.mpy +0 -0
- stubber/board/createstubs_min.py +975 -293
- stubber/board/createstubs_mpy.mpy +0 -0
- stubber/board/modulelist.txt +1 -0
- stubber/commands/{mcu_cmd.py → get_mcu_cmd.py} +20 -3
- stubber/stubber.py +1 -9
- stubber/update_fallback.py +104 -104
- stubber/utils/config.py +6 -0
- stubber/commands/get_lobo_cmd.py +0 -58
- stubber/commands/minify_cmd.py +0 -60
- stubber/commands/upd_fallback_cmd.py +0 -36
- stubber/commands/upd_module_list_cmd.py +0 -18
- {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/LICENSE +0 -0
- {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/WHEEL +0 -0
- {micropython_stubber-1.19.0.dist-info → micropython_stubber-1.20.1.dist-info}/entry_points.txt +0 -0
mpflash/mpflash/download.py
CHANGED
@@ -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
|
-
|
264
|
+
int: The number of downloaded firmware files.
|
263
265
|
|
264
266
|
Raises:
|
265
|
-
|
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
|
-
|
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}
|
276
|
-
|
277
|
-
|
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)
|
mpflash/mpflash/flash_uf2.py
CHANGED
@@ -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
|
-
|
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
|
27
|
-
|
28
|
-
|
29
|
-
|
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="
|
42
|
-
header_style="bold
|
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{
|
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
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
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
|
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
|
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
|
-
|
78
|
+
comports = serial.tools.list_ports.comports()
|
78
79
|
|
79
80
|
if not bluetooth:
|
80
81
|
# filter out bluetooth ports
|
81
|
-
|
82
|
-
|
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
|
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:
|
mpflash/mpflash/worklist.py
CHANGED
@@ -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
|
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.
|
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
|
214
|
+
version = "4.2.1"
|
215
215
|
description = "Simple construction, analysis and modification of binary data."
|
216
216
|
optional = false
|
217
|
-
python-versions = ">=3.
|
217
|
+
python-versions = ">=3.8"
|
218
218
|
files = [
|
219
|
-
{file = "bitstring-4.1
|
220
|
-
{file = "bitstring-4.1.
|
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.
|
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.
|
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.
|
459
|
-
{file = "coverage-7.
|
460
|
-
{file = "coverage-7.
|
461
|
-
{file = "coverage-7.
|
462
|
-
{file = "coverage-7.
|
463
|
-
{file = "coverage-7.
|
464
|
-
{file = "coverage-7.
|
465
|
-
{file = "coverage-7.
|
466
|
-
{file = "coverage-7.
|
467
|
-
{file = "coverage-7.
|
468
|
-
{file = "coverage-7.
|
469
|
-
{file = "coverage-7.
|
470
|
-
{file = "coverage-7.
|
471
|
-
{file = "coverage-7.
|
472
|
-
{file = "coverage-7.
|
473
|
-
{file = "coverage-7.
|
474
|
-
{file = "coverage-7.
|
475
|
-
{file = "coverage-7.
|
476
|
-
{file = "coverage-7.
|
477
|
-
{file = "coverage-7.
|
478
|
-
{file = "coverage-7.
|
479
|
-
{file = "coverage-7.
|
480
|
-
{file = "coverage-7.
|
481
|
-
{file = "coverage-7.
|
482
|
-
{file = "coverage-7.
|
483
|
-
{file = "coverage-7.
|
484
|
-
{file = "coverage-7.
|
485
|
-
{file = "coverage-7.
|
486
|
-
{file = "coverage-7.
|
487
|
-
{file = "coverage-7.
|
488
|
-
{file = "coverage-7.
|
489
|
-
{file = "coverage-7.
|
490
|
-
{file = "coverage-7.
|
491
|
-
{file = "coverage-7.
|
492
|
-
{file = "coverage-7.
|
493
|
-
{file = "coverage-7.
|
494
|
-
{file = "coverage-7.
|
495
|
-
{file = "coverage-7.
|
496
|
-
{file = "coverage-7.
|
497
|
-
{file = "coverage-7.
|
498
|
-
{file = "coverage-7.
|
499
|
-
{file = "coverage-7.
|
500
|
-
{file = "coverage-7.
|
501
|
-
{file = "coverage-7.
|
502
|
-
{file = "coverage-7.
|
503
|
-
{file = "coverage-7.
|
504
|
-
{file = "coverage-7.
|
505
|
-
{file = "coverage-7.
|
506
|
-
{file = "coverage-7.
|
507
|
-
{file = "coverage-7.
|
508
|
-
{file = "coverage-7.
|
509
|
-
{file = "coverage-7.
|
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.
|
599
|
+
version = "0.19.0"
|
600
600
|
description = "ECDSA cryptographic signature library (pure python)"
|
601
601
|
optional = false
|
602
|
-
python-versions = "
|
602
|
+
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6"
|
603
603
|
files = [
|
604
|
-
{file = "ecdsa-0.
|
605
|
-
{file = "ecdsa-0.
|
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.
|
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.
|
661
|
-
{file = "exceptiongroup-1.2.
|
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.
|
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.
|
700
|
-
{file = "idna-3.
|
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.
|
925
|
-
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a
|
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.
|
930
|
-
{file = "platformdirs-4.2.
|
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.
|
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.
|
945
|
-
{file = "pluggy-1.
|
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.
|
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.
|
1369
|
-
{file = "setuptools-69.
|
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 (
|
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
|
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.
|
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.
|
1443
|
-
{file = "typing_extensions-4.
|
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.
|
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
stubber/board/createstubs.py
CHANGED
@@ -24,7 +24,7 @@ try:
|
|
24
24
|
except ImportError:
|
25
25
|
from ucollections import OrderedDict # type: ignore
|
26
26
|
|
27
|
-
__version__ = "v1.
|
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.
|
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.
|
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",
|