micropython-stubber 1.23.1.post1__py3-none-any.whl → 1.23.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.
Files changed (149) hide show
  1. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.3.dist-info}/LICENSE +30 -30
  2. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.3.dist-info}/METADATA +5 -5
  3. micropython_stubber-1.23.3.dist-info/RECORD +158 -0
  4. mpflash/README.md +220 -220
  5. mpflash/libusb_flash.ipynb +203 -203
  6. mpflash/mpflash/add_firmware.py +98 -98
  7. mpflash/mpflash/ask_input.py +236 -236
  8. mpflash/mpflash/basicgit.py +304 -284
  9. mpflash/mpflash/bootloader/__init__.py +2 -2
  10. mpflash/mpflash/bootloader/activate.py +60 -60
  11. mpflash/mpflash/bootloader/detect.py +82 -82
  12. mpflash/mpflash/bootloader/manual.py +101 -101
  13. mpflash/mpflash/bootloader/micropython.py +12 -12
  14. mpflash/mpflash/bootloader/touch1200.py +36 -36
  15. mpflash/mpflash/cli_download.py +129 -129
  16. mpflash/mpflash/cli_flash.py +224 -216
  17. mpflash/mpflash/cli_group.py +111 -111
  18. mpflash/mpflash/cli_list.py +87 -87
  19. mpflash/mpflash/cli_main.py +39 -39
  20. mpflash/mpflash/common.py +207 -166
  21. mpflash/mpflash/config.py +44 -44
  22. mpflash/mpflash/connected.py +96 -77
  23. mpflash/mpflash/download.py +364 -364
  24. mpflash/mpflash/downloaded.py +130 -130
  25. mpflash/mpflash/errors.py +9 -9
  26. mpflash/mpflash/flash/__init__.py +55 -55
  27. mpflash/mpflash/flash/esp.py +59 -59
  28. mpflash/mpflash/flash/stm32.py +19 -19
  29. mpflash/mpflash/flash/stm32_dfu.py +104 -104
  30. mpflash/mpflash/flash/uf2/__init__.py +88 -88
  31. mpflash/mpflash/flash/uf2/boardid.py +15 -15
  32. mpflash/mpflash/flash/uf2/linux.py +136 -130
  33. mpflash/mpflash/flash/uf2/macos.py +42 -42
  34. mpflash/mpflash/flash/uf2/uf2disk.py +12 -12
  35. mpflash/mpflash/flash/uf2/windows.py +43 -43
  36. mpflash/mpflash/flash/worklist.py +170 -170
  37. mpflash/mpflash/list.py +106 -106
  38. mpflash/mpflash/logger.py +41 -41
  39. mpflash/mpflash/mpboard_id/__init__.py +93 -93
  40. mpflash/mpflash/mpboard_id/add_boards.py +251 -251
  41. mpflash/mpflash/mpboard_id/board.py +37 -37
  42. mpflash/mpflash/mpboard_id/board_id.py +86 -86
  43. mpflash/mpflash/mpboard_id/store.py +48 -43
  44. mpflash/mpflash/mpremoteboard/__init__.py +266 -266
  45. mpflash/mpflash/mpremoteboard/mpy_fw_info.py +152 -141
  46. mpflash/mpflash/mpremoteboard/runner.py +140 -140
  47. mpflash/mpflash/vendor/click_aliases.py +91 -91
  48. mpflash/mpflash/vendor/dfu.py +165 -165
  49. mpflash/mpflash/vendor/pydfu.py +605 -605
  50. mpflash/mpflash/vendor/readme.md +2 -2
  51. mpflash/mpflash/versions.py +135 -135
  52. mpflash/poetry.lock +1687 -1599
  53. mpflash/pyproject.toml +65 -65
  54. mpflash/stm32_udev_rules.md +62 -62
  55. stubber/__init__.py +3 -3
  56. stubber/board/board_info.csv +193 -193
  57. stubber/board/boot.py +34 -34
  58. stubber/board/createstubs.py +986 -986
  59. stubber/board/createstubs_db.py +825 -825
  60. stubber/board/createstubs_db_min.py +331 -331
  61. stubber/board/createstubs_lvgl.py +741 -741
  62. stubber/board/createstubs_lvgl_min.py +741 -741
  63. stubber/board/createstubs_mem.py +766 -766
  64. stubber/board/createstubs_mem_min.py +306 -306
  65. stubber/board/createstubs_min.py +294 -294
  66. stubber/board/fw_info.py +141 -141
  67. stubber/board/info.py +183 -183
  68. stubber/board/main.py +19 -19
  69. stubber/board/modulelist.txt +247 -247
  70. stubber/board/pyrightconfig.json +34 -34
  71. stubber/bulk/mcu_stubber.py +437 -437
  72. stubber/codemod/_partials/__init__.py +48 -48
  73. stubber/codemod/_partials/db_main.py +147 -147
  74. stubber/codemod/_partials/lvgl_main.py +77 -77
  75. stubber/codemod/_partials/modules_reader.py +80 -80
  76. stubber/codemod/add_comment.py +53 -53
  77. stubber/codemod/add_method.py +65 -65
  78. stubber/codemod/board.py +317 -317
  79. stubber/codemod/enrich.py +145 -145
  80. stubber/codemod/merge_docstub.py +284 -284
  81. stubber/codemod/modify_list.py +54 -54
  82. stubber/codemod/utils.py +56 -56
  83. stubber/commands/build_cmd.py +94 -94
  84. stubber/commands/cli.py +49 -49
  85. stubber/commands/clone_cmd.py +78 -78
  86. stubber/commands/config_cmd.py +29 -29
  87. stubber/commands/enrich_folder_cmd.py +71 -71
  88. stubber/commands/get_core_cmd.py +71 -71
  89. stubber/commands/get_docstubs_cmd.py +92 -92
  90. stubber/commands/get_frozen_cmd.py +117 -117
  91. stubber/commands/get_mcu_cmd.py +102 -102
  92. stubber/commands/merge_cmd.py +66 -66
  93. stubber/commands/publish_cmd.py +118 -118
  94. stubber/commands/stub_cmd.py +31 -31
  95. stubber/commands/switch_cmd.py +62 -62
  96. stubber/commands/variants_cmd.py +48 -48
  97. stubber/cst_transformer.py +178 -178
  98. stubber/data/board_info.csv +193 -193
  99. stubber/data/board_info.json +1729 -1729
  100. stubber/data/micropython_tags.csv +15 -15
  101. stubber/data/requirements-core-micropython.txt +38 -38
  102. stubber/data/requirements-core-pycopy.txt +39 -39
  103. stubber/downloader.py +37 -37
  104. stubber/freeze/common.py +72 -72
  105. stubber/freeze/freeze_folder.py +69 -69
  106. stubber/freeze/freeze_manifest_2.py +126 -126
  107. stubber/freeze/get_frozen.py +131 -131
  108. stubber/get_cpython.py +112 -112
  109. stubber/get_lobo.py +59 -59
  110. stubber/minify.py +423 -423
  111. stubber/publish/bump.py +86 -86
  112. stubber/publish/candidates.py +275 -275
  113. stubber/publish/database.py +18 -18
  114. stubber/publish/defaults.py +40 -40
  115. stubber/publish/enums.py +24 -24
  116. stubber/publish/helpers.py +29 -29
  117. stubber/publish/merge_docstubs.py +132 -132
  118. stubber/publish/missing_class_methods.py +51 -51
  119. stubber/publish/package.py +150 -150
  120. stubber/publish/pathnames.py +51 -51
  121. stubber/publish/publish.py +120 -120
  122. stubber/publish/pypi.py +42 -42
  123. stubber/publish/stubpackage.py +1051 -1051
  124. stubber/rst/__init__.py +9 -9
  125. stubber/rst/classsort.py +78 -78
  126. stubber/rst/lookup.py +531 -531
  127. stubber/rst/output_dict.py +401 -401
  128. stubber/rst/reader.py +814 -814
  129. stubber/rst/report_return.py +77 -77
  130. stubber/rst/rst_utils.py +541 -541
  131. stubber/stubber.py +38 -38
  132. stubber/stubs_from_docs.py +90 -90
  133. stubber/tools/manifestfile.py +654 -654
  134. stubber/tools/readme.md +6 -6
  135. stubber/update_fallback.py +117 -117
  136. stubber/update_module_list.py +123 -123
  137. stubber/utils/__init__.py +6 -6
  138. stubber/utils/config.py +137 -137
  139. stubber/utils/makeversionhdr.py +54 -54
  140. stubber/utils/manifest.py +90 -90
  141. stubber/utils/post.py +80 -80
  142. stubber/utils/repos.py +156 -156
  143. stubber/utils/stubmaker.py +139 -139
  144. stubber/utils/typed_config_toml.py +80 -80
  145. stubber/variants.py +106 -106
  146. micropython_stubber-1.23.1.post1.dist-info/RECORD +0 -159
  147. mpflash/basicgit.py +0 -288
  148. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.3.dist-info}/WHEEL +0 -0
  149. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.3.dist-info}/entry_points.txt +0 -0
@@ -1,216 +1,224 @@
1
- from pathlib import Path
2
- from typing import List
3
-
4
- import rich_click as click
5
- from loguru import logger as log
6
-
7
- from mpflash.ask_input import ask_missing_params
8
- from mpflash.cli_download import connected_ports_boards
9
- from mpflash.cli_group import cli
10
- from mpflash.cli_list import show_mcus
11
- from mpflash.common import BootloaderMethod, FlashParams, Params
12
- from mpflash.config import config
13
- from mpflash.errors import MPFlashError
14
- from mpflash.flash import flash_list
15
- from mpflash.flash.worklist import WorkList, full_auto_worklist, manual_worklist, single_auto_worklist
16
- from mpflash.mpboard_id import find_known_board
17
- from mpflash.mpremoteboard import MPRemoteBoard
18
- from mpflash.versions import clean_version
19
-
20
- # #########################################################################################################
21
- # CLI
22
- # #########################################################################################################
23
-
24
-
25
- @cli.command(
26
- "flash",
27
- short_help="Flash one or all connected MicroPython boards with a specific firmware and version.",
28
- )
29
- @click.option(
30
- "--firmware",
31
- "-f",
32
- "fw_folder",
33
- type=click.Path(file_okay=False, dir_okay=True, path_type=Path),
34
- default=config.firmware_folder,
35
- show_default=True,
36
- help="The folder to retrieve the firmware from.",
37
- )
38
- @click.option(
39
- "--version",
40
- "-v",
41
- "version", # single version
42
- default="stable",
43
- multiple=False,
44
- show_default=True,
45
- help="The version of MicroPython to flash.",
46
- metavar="SEMVER, 'stable', 'preview' or '?'",
47
- )
48
- @click.option(
49
- "--serial",
50
- "--serial-port",
51
- "-s",
52
- "serial",
53
- default=["*"],
54
- multiple=True,
55
- show_default=True,
56
- help="Which serial port(s) (or globs) to flash",
57
- metavar="SERIALPORT",
58
- )
59
- @click.option(
60
- "--ignore",
61
- "-i",
62
- is_eager=True,
63
- help="Serial port(s) to ignore. Defaults to MPFLASH_IGNORE.",
64
- multiple=True,
65
- default=[],
66
- envvar="MPFLASH_IGNORE",
67
- show_default=True,
68
- metavar="SERIALPORT",
69
- )
70
- @click.option(
71
- "--port",
72
- "-p",
73
- "ports",
74
- help="The MicroPython port to flash",
75
- metavar="PORT",
76
- default=[],
77
- multiple=True,
78
- )
79
- @click.option(
80
- "--board",
81
- "-b",
82
- "board", # single board
83
- multiple=False,
84
- help="The MicroPython board ID to flash. If not specified will try to read the BOARD_ID from the connected MCU.",
85
- metavar="BOARD_ID or ?",
86
- )
87
- @click.option(
88
- "--cpu",
89
- "--chip",
90
- "-c",
91
- "cpu",
92
- help="The CPU type to flash. If not specified will try to read the CPU from the connected MCU.",
93
- metavar="CPU",
94
- )
95
- @click.option(
96
- "--erase/--no-erase",
97
- default=True,
98
- show_default=True,
99
- help="""Erase flash before writing new firmware. (Not supported on UF2 boards)""",
100
- )
101
- @click.option(
102
- "--bootloader",
103
- "-bl",
104
- "bootloader",
105
- type=click.Choice([e.value for e in BootloaderMethod]),
106
- default="auto",
107
- show_default=True,
108
- help="""How to enter the (MicroPython) bootloader before flashing.""",
109
- )
110
- def cli_flash_board(**kwargs) -> int:
111
- # version to versions, board to boards
112
- kwargs["versions"] = [kwargs.pop("version")] if kwargs["version"] != None else []
113
- if kwargs["board"] is None:
114
- kwargs["boards"] = []
115
- kwargs.pop("board")
116
- else:
117
- kwargs["boards"] = [kwargs.pop("board")]
118
-
119
- params = FlashParams(**kwargs)
120
- params.versions = list(params.versions)
121
- params.ports = list(params.ports)
122
- params.boards = list(params.boards)
123
- params.serial = list(params.serial)
124
- params.ignore = list(params.ignore)
125
- params.bootloader = BootloaderMethod(params.bootloader)
126
-
127
- # make it simple for the user to flash one board by asking for the serial port if not specified
128
- if params.boards == ["?"] and params.serial == "*":
129
- params.serial = ["?"]
130
-
131
- # Detect connected boards if not specified,
132
- # and ask for input if boards cannot be detected
133
- all_boards: List[MPRemoteBoard] = []
134
- if not params.boards:
135
- # nothing specified - detect connected boards
136
- params.ports, params.boards, all_boards = connected_ports_boards(include=params.ports, ignore=params.ignore)
137
- if params.boards == []:
138
- # No MicroPython boards detected, but it could be unflashed or in bootloader mode
139
- # Ask for serial port and board_id to flash
140
- params.serial = ["?"]
141
- params.boards = ["?"]
142
- # assume manual mode if no board is detected
143
- params.bootloader = BootloaderMethod("manual")
144
- else:
145
- resolve_board_ids(params)
146
-
147
- # Ask for missing input if needed
148
- params = ask_missing_params(params)
149
- if not params: # Cancelled by user
150
- return 2
151
- # TODO: Just in time Download of firmware
152
-
153
- assert isinstance(params, FlashParams)
154
-
155
- if len(params.versions) > 1:
156
- log.error(f"Only one version can be flashed at a time, not {params.versions}")
157
- raise MPFlashError("Only one version can be flashed at a time")
158
-
159
- params.versions = [clean_version(v) for v in params.versions]
160
- worklist: WorkList = []
161
- # if serial port == auto and there are one or more specified/detected boards
162
- if params.serial == ["*"] and params.boards:
163
- if not all_boards:
164
- log.trace("No boards detected yet, scanning for connected boards")
165
- _, _, all_boards = connected_ports_boards(include=params.ports, ignore=params.ignore)
166
- worklist = full_auto_worklist(
167
- all_boards=all_boards,
168
- version=params.versions[0],
169
- fw_folder=params.fw_folder,
170
- include=params.serial,
171
- ignore=params.ignore,
172
- )
173
- elif params.versions[0] and params.boards[0] and params.serial:
174
- # A one or more serial port including the board / variant
175
- worklist = manual_worklist(
176
- params.serial[0],
177
- board_id=params.boards[0],
178
- version=params.versions[0],
179
- fw_folder=params.fw_folder,
180
- )
181
- else:
182
- # just this serial port on auto
183
- worklist = single_auto_worklist(
184
- serial=params.serial[0],
185
- version=params.versions[0],
186
- fw_folder=params.fw_folder,
187
- )
188
-
189
- if flashed := flash_list(
190
- worklist,
191
- params.fw_folder,
192
- params.erase,
193
- params.bootloader,
194
- ):
195
- log.info(f"Flashed {len(flashed)} boards")
196
- show_mcus(flashed, title="Updated boards after flashing")
197
- return 0
198
- else:
199
- log.error("No boards were flashed")
200
- return 1
201
-
202
-
203
- def resolve_board_ids(params: Params):
204
- """Resolve board descriptions to board_id, and remove empty strings from list of boards"""
205
- for board_id in params.boards:
206
- if board_id == "":
207
- params.boards.remove(board_id)
208
- continue
209
- if " " in board_id:
210
- try:
211
- if info := find_known_board(board_id):
212
- log.info(f"Resolved board description: {info.board_id}")
213
- params.boards.remove(board_id)
214
- params.boards.append(info.board_id)
215
- except Exception as e:
216
- log.warning(f"Unable to resolve board description: {e}")
1
+ from pathlib import Path
2
+ from typing import List
3
+
4
+ import rich_click as click
5
+ from loguru import logger as log
6
+
7
+ from mpflash.ask_input import ask_missing_params
8
+ from mpflash.cli_download import connected_ports_boards
9
+ from mpflash.cli_group import cli
10
+ from mpflash.cli_list import show_mcus
11
+ from mpflash.common import BootloaderMethod, FlashParams, Params
12
+ from mpflash.config import config
13
+ from mpflash.errors import MPFlashError
14
+ from mpflash.flash import flash_list
15
+ from mpflash.flash.worklist import WorkList, full_auto_worklist, manual_worklist, single_auto_worklist
16
+ from mpflash.mpboard_id import find_known_board
17
+ from mpflash.mpremoteboard import MPRemoteBoard
18
+ from mpflash.versions import clean_version
19
+
20
+ # #########################################################################################################
21
+ # CLI
22
+ # #########################################################################################################
23
+
24
+
25
+ @cli.command(
26
+ "flash",
27
+ short_help="Flash one or all connected MicroPython boards with a specific firmware and version.",
28
+ )
29
+ @click.option(
30
+ "--firmware",
31
+ "-f",
32
+ "fw_folder",
33
+ type=click.Path(file_okay=False, dir_okay=True, path_type=Path),
34
+ default=config.firmware_folder,
35
+ show_default=True,
36
+ help="The folder to retrieve the firmware from.",
37
+ )
38
+ @click.option(
39
+ "--version",
40
+ "-v",
41
+ "version", # single version
42
+ default="stable",
43
+ multiple=False,
44
+ show_default=True,
45
+ help="The version of MicroPython to flash.",
46
+ metavar="SEMVER, 'stable', 'preview' or '?'",
47
+ )
48
+ @click.option(
49
+ "--serial",
50
+ "--serial-port",
51
+ "-s",
52
+ "serial",
53
+ default=["*"],
54
+ multiple=True,
55
+ show_default=True,
56
+ help="Which serial port(s) (or globs) to flash",
57
+ metavar="SERIALPORT",
58
+ )
59
+ @click.option(
60
+ "--ignore",
61
+ "-i",
62
+ is_eager=True,
63
+ help="Serial port(s) to ignore. Defaults to MPFLASH_IGNORE.",
64
+ multiple=True,
65
+ default=[],
66
+ envvar="MPFLASH_IGNORE",
67
+ show_default=True,
68
+ metavar="SERIALPORT",
69
+ )
70
+ @click.option(
71
+ "--bluetooth/--no-bluetooth",
72
+ "-b/-nb",
73
+ is_flag=True,
74
+ default=False,
75
+ show_default=True,
76
+ help="""Include bluetooth ports in the list""",
77
+ )
78
+ @click.option(
79
+ "--port",
80
+ "-p",
81
+ "ports",
82
+ help="The MicroPython port to flash",
83
+ metavar="PORT",
84
+ default=[],
85
+ multiple=True,
86
+ )
87
+ @click.option(
88
+ "--board",
89
+ "-b",
90
+ "board", # single board
91
+ multiple=False,
92
+ help="The MicroPython board ID to flash. If not specified will try to read the BOARD_ID from the connected MCU.",
93
+ metavar="BOARD_ID or ?",
94
+ )
95
+ @click.option(
96
+ "--cpu",
97
+ "--chip",
98
+ "-c",
99
+ "cpu",
100
+ help="The CPU type to flash. If not specified will try to read the CPU from the connected MCU.",
101
+ metavar="CPU",
102
+ )
103
+ @click.option(
104
+ "--erase/--no-erase",
105
+ default=True,
106
+ show_default=True,
107
+ help="""Erase flash before writing new firmware. (Not supported on UF2 boards)""",
108
+ )
109
+ @click.option(
110
+ "--bootloader",
111
+ "-bl",
112
+ "bootloader",
113
+ type=click.Choice([e.value for e in BootloaderMethod]),
114
+ default="auto",
115
+ show_default=True,
116
+ help="""How to enter the (MicroPython) bootloader before flashing.""",
117
+ )
118
+ def cli_flash_board(**kwargs) -> int:
119
+ # version to versions, board to boards
120
+ kwargs["versions"] = [kwargs.pop("version")] if kwargs["version"] != None else []
121
+ if kwargs["board"] is None:
122
+ kwargs["boards"] = []
123
+ kwargs.pop("board")
124
+ else:
125
+ kwargs["boards"] = [kwargs.pop("board")]
126
+
127
+ params = FlashParams(**kwargs)
128
+ params.versions = list(params.versions)
129
+ params.ports = list(params.ports)
130
+ params.boards = list(params.boards)
131
+ params.serial = list(params.serial)
132
+ params.ignore = list(params.ignore)
133
+ params.bootloader = BootloaderMethod(params.bootloader)
134
+
135
+ # make it simple for the user to flash one board by asking for the serial port if not specified
136
+ if params.boards == ["?"] and params.serial == "*":
137
+ params.serial = ["?"]
138
+
139
+ # Detect connected boards if not specified,
140
+ # and ask for input if boards cannot be detected
141
+ all_boards: List[MPRemoteBoard] = []
142
+ if not params.boards:
143
+ # nothing specified - detect connected boards
144
+ params.ports, params.boards, all_boards = connected_ports_boards(include=params.ports, ignore=params.ignore, bluetooth=params.bluetooth)
145
+ if params.boards == []:
146
+ # No MicroPython boards detected, but it could be unflashed or in bootloader mode
147
+ # Ask for serial port and board_id to flash
148
+ params.serial = ["?"]
149
+ params.boards = ["?"]
150
+ # assume manual mode if no board is detected
151
+ params.bootloader = BootloaderMethod("manual")
152
+ else:
153
+ resolve_board_ids(params)
154
+
155
+ # Ask for missing input if needed
156
+ params = ask_missing_params(params)
157
+ if not params: # Cancelled by user
158
+ return 2
159
+ # TODO: Just in time Download of firmware
160
+
161
+ assert isinstance(params, FlashParams)
162
+
163
+ if len(params.versions) > 1:
164
+ log.error(f"Only one version can be flashed at a time, not {params.versions}")
165
+ raise MPFlashError("Only one version can be flashed at a time")
166
+
167
+ params.versions = [clean_version(v) for v in params.versions]
168
+ worklist: WorkList = []
169
+ # if serial port == auto and there are one or more specified/detected boards
170
+ if params.serial == ["*"] and params.boards:
171
+ if not all_boards:
172
+ log.trace("No boards detected yet, scanning for connected boards")
173
+ _, _, all_boards = connected_ports_boards(include=params.ports, ignore=params.ignore)
174
+ worklist = full_auto_worklist(
175
+ all_boards=all_boards,
176
+ version=params.versions[0],
177
+ fw_folder=params.fw_folder,
178
+ include=params.serial,
179
+ ignore=params.ignore,
180
+ )
181
+ elif params.versions[0] and params.boards[0] and params.serial:
182
+ # A one or more serial port including the board / variant
183
+ worklist = manual_worklist(
184
+ params.serial[0],
185
+ board_id=params.boards[0],
186
+ version=params.versions[0],
187
+ fw_folder=params.fw_folder,
188
+ )
189
+ else:
190
+ # just this serial port on auto
191
+ worklist = single_auto_worklist(
192
+ serial=params.serial[0],
193
+ version=params.versions[0],
194
+ fw_folder=params.fw_folder,
195
+ )
196
+
197
+ if flashed := flash_list(
198
+ worklist,
199
+ params.fw_folder,
200
+ params.erase,
201
+ params.bootloader,
202
+ ):
203
+ log.info(f"Flashed {len(flashed)} boards")
204
+ show_mcus(flashed, title="Updated boards after flashing")
205
+ return 0
206
+ else:
207
+ log.error("No boards were flashed")
208
+ return 1
209
+
210
+
211
+ def resolve_board_ids(params: Params):
212
+ """Resolve board descriptions to board_id, and remove empty strings from list of boards"""
213
+ for board_id in params.boards:
214
+ if board_id == "":
215
+ params.boards.remove(board_id)
216
+ continue
217
+ if " " in board_id:
218
+ try:
219
+ if info := find_known_board(board_id):
220
+ log.info(f"Resolved board description: {info.board_id}")
221
+ params.boards.remove(board_id)
222
+ params.boards.append(info.board_id)
223
+ except Exception as e:
224
+ log.warning(f"Unable to resolve board description: {e}")
@@ -1,111 +1,111 @@
1
- """
2
- Main entry point for the CLI group.
3
- Additional comands are added in the submodules.
4
- """
5
-
6
- import rich_click as click
7
-
8
- from mpflash.vendor.click_aliases import ClickAliasedGroup
9
-
10
- from .config import __version__, config
11
- from .logger import log, make_quiet, set_loglevel
12
-
13
-
14
- def cb_verbose(ctx, param, value):
15
- """Callback to set the log level to DEBUG if verbose is set"""
16
- if value and not config.quiet:
17
- # log.debug(f"Setting verbose mode to {value}")
18
- config.verbose = True
19
- if value > 1:
20
- set_loglevel("TRACE")
21
- else:
22
- set_loglevel("DEBUG")
23
- log.debug(f"version: {__version__}")
24
- else:
25
- set_loglevel("INFO")
26
- config.verbose = False
27
- return value
28
-
29
-
30
- def cb_interactive(ctx, param, value: bool):
31
- log.trace(f"Setting interactive mode to {value}")
32
- config.interactive = value
33
- return value
34
-
35
-
36
- def cb_test(ctx, param, value):
37
- if value:
38
- log.trace(f"Setting tests to {value}")
39
- config.tests = value
40
- return value
41
-
42
- def cb_usb(ctx, param, value: bool):
43
- config.usb = bool(value)
44
- return value
45
-
46
-
47
- def cb_quiet(ctx, param, value):
48
- log.trace(f"Setting quiet mode to {value}")
49
- if value:
50
- make_quiet()
51
- return value
52
-
53
-
54
- @click.group(cls=ClickAliasedGroup)
55
- # @click.group()
56
- @click.version_option(package_name="mpflash")
57
- @click.option(
58
- "--quiet",
59
- "-q",
60
- is_eager=True,
61
- is_flag=True,
62
- help="Suppresses all output.",
63
- callback=cb_quiet,
64
- envvar="MPFLASH_QUIET",
65
- show_default=True,
66
- )
67
- @click.option(
68
- "--interactive/--no-interactive",
69
- "-i/-x",
70
- is_eager=True,
71
- help="Suppresses all request for Input.",
72
- callback=cb_interactive,
73
- # envvar="MPFLASH_QUIET",
74
- default=True,
75
- show_default=True,
76
- )
77
- @click.option(
78
- "-V",
79
- "--verbose",
80
- is_eager=True,
81
- count=True,
82
- help="Enables verbose mode.",
83
- callback=cb_verbose,
84
- )
85
- @click.option(
86
- "--usb",
87
- "-u",
88
- is_eager=True,
89
- is_flag=True,
90
- default=False,
91
- help="Shows USB location of the connected boards.",
92
- callback=cb_usb,
93
- show_default=True,
94
- )
95
- @click.option(
96
- "--test",
97
- is_eager=True,
98
- help="Test a specific feature.",
99
- callback=cb_test,
100
- multiple=True,
101
- default=[],
102
- envvar="MPFLASH_TEST",
103
- metavar="FLAG",
104
- )
105
- def cli(**kwargs):
106
- """mpflash - MicroPython flashing tool.
107
-
108
- A CLI to download and flash MicroPython firmware to different ports and boards.
109
- """
110
- # all functionality is added in the submodules
111
- pass
1
+ """
2
+ Main entry point for the CLI group.
3
+ Additional comands are added in the submodules.
4
+ """
5
+
6
+ import rich_click as click
7
+
8
+ from mpflash.vendor.click_aliases import ClickAliasedGroup
9
+
10
+ from .config import __version__, config
11
+ from .logger import log, make_quiet, set_loglevel
12
+
13
+
14
+ def cb_verbose(ctx, param, value):
15
+ """Callback to set the log level to DEBUG if verbose is set"""
16
+ if value and not config.quiet:
17
+ # log.debug(f"Setting verbose mode to {value}")
18
+ config.verbose = True
19
+ if value > 1:
20
+ set_loglevel("TRACE")
21
+ else:
22
+ set_loglevel("DEBUG")
23
+ log.debug(f"version: {__version__}")
24
+ else:
25
+ set_loglevel("INFO")
26
+ config.verbose = False
27
+ return value
28
+
29
+
30
+ def cb_interactive(ctx, param, value: bool):
31
+ log.trace(f"Setting interactive mode to {value}")
32
+ config.interactive = value
33
+ return value
34
+
35
+
36
+ def cb_test(ctx, param, value):
37
+ if value:
38
+ log.trace(f"Setting tests to {value}")
39
+ config.tests = value
40
+ return value
41
+
42
+ def cb_usb(ctx, param, value: bool):
43
+ config.usb = bool(value)
44
+ return value
45
+
46
+
47
+ def cb_quiet(ctx, param, value):
48
+ log.trace(f"Setting quiet mode to {value}")
49
+ if value:
50
+ make_quiet()
51
+ return value
52
+
53
+
54
+ @click.group(cls=ClickAliasedGroup)
55
+ # @click.group()
56
+ @click.version_option(package_name="mpflash")
57
+ @click.option(
58
+ "--quiet",
59
+ "-q",
60
+ is_eager=True,
61
+ is_flag=True,
62
+ help="Suppresses all output.",
63
+ callback=cb_quiet,
64
+ envvar="MPFLASH_QUIET",
65
+ show_default=True,
66
+ )
67
+ @click.option(
68
+ "--interactive/--no-interactive",
69
+ "-i/-x",
70
+ is_eager=True,
71
+ help="Suppresses all request for Input.",
72
+ callback=cb_interactive,
73
+ # envvar="MPFLASH_QUIET",
74
+ default=True,
75
+ show_default=True,
76
+ )
77
+ @click.option(
78
+ "-V",
79
+ "--verbose",
80
+ is_eager=True,
81
+ count=True,
82
+ help="Enables verbose mode.",
83
+ callback=cb_verbose,
84
+ )
85
+ @click.option(
86
+ "--usb",
87
+ "-u",
88
+ is_eager=True,
89
+ is_flag=True,
90
+ default=False,
91
+ help="Shows USB location of the connected boards.",
92
+ callback=cb_usb,
93
+ show_default=True,
94
+ )
95
+ @click.option(
96
+ "--test",
97
+ is_eager=True,
98
+ help="Test a specific feature.",
99
+ callback=cb_test,
100
+ multiple=True,
101
+ default=[],
102
+ envvar="MPFLASH_TEST",
103
+ metavar="FLAG",
104
+ )
105
+ def cli(**kwargs):
106
+ """mpflash - MicroPython flashing tool.
107
+
108
+ A CLI to download and flash MicroPython firmware to different ports and boards.
109
+ """
110
+ # all functionality is added in the submodules
111
+ pass