micropython-stubber 1.20.5__py3-none-any.whl → 1.23.0__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 (152) hide show
  1. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/LICENSE +30 -30
  2. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/METADATA +1 -1
  3. micropython_stubber-1.23.0.dist-info/RECORD +159 -0
  4. mpflash/README.md +184 -184
  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/bootloader/__init__.py +37 -36
  9. mpflash/mpflash/bootloader/manual.py +102 -102
  10. mpflash/mpflash/bootloader/micropython.py +10 -10
  11. mpflash/mpflash/bootloader/touch1200.py +45 -45
  12. mpflash/mpflash/cli_download.py +129 -129
  13. mpflash/mpflash/cli_flash.py +219 -219
  14. mpflash/mpflash/cli_group.py +98 -98
  15. mpflash/mpflash/cli_list.py +81 -81
  16. mpflash/mpflash/cli_main.py +41 -41
  17. mpflash/mpflash/common.py +164 -164
  18. mpflash/mpflash/config.py +43 -47
  19. mpflash/mpflash/connected.py +74 -74
  20. mpflash/mpflash/download.py +360 -360
  21. mpflash/mpflash/downloaded.py +130 -129
  22. mpflash/mpflash/errors.py +9 -9
  23. mpflash/mpflash/flash.py +55 -52
  24. mpflash/mpflash/flash_esp.py +59 -59
  25. mpflash/mpflash/flash_stm32.py +18 -24
  26. mpflash/mpflash/flash_stm32_cube.py +111 -111
  27. mpflash/mpflash/flash_stm32_dfu.py +104 -101
  28. mpflash/mpflash/flash_uf2.py +89 -67
  29. mpflash/mpflash/flash_uf2_boardid.py +15 -15
  30. mpflash/mpflash/flash_uf2_linux.py +129 -123
  31. mpflash/mpflash/flash_uf2_macos.py +37 -34
  32. mpflash/mpflash/flash_uf2_windows.py +38 -34
  33. mpflash/mpflash/list.py +89 -89
  34. mpflash/mpflash/logger.py +41 -41
  35. mpflash/mpflash/mpboard_id/__init__.py +93 -93
  36. mpflash/mpflash/mpboard_id/add_boards.py +255 -255
  37. mpflash/mpflash/mpboard_id/board.py +37 -37
  38. mpflash/mpflash/mpboard_id/board_id.py +86 -86
  39. mpflash/mpflash/mpboard_id/store.py +43 -43
  40. mpflash/mpflash/mpremoteboard/__init__.py +226 -221
  41. mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
  42. mpflash/mpflash/mpremoteboard/runner.py +140 -140
  43. mpflash/mpflash/uf2disk.py +12 -12
  44. mpflash/mpflash/vendor/basicgit.py +288 -288
  45. mpflash/mpflash/vendor/click_aliases.py +91 -91
  46. mpflash/mpflash/vendor/dfu.py +165 -165
  47. mpflash/mpflash/vendor/pydfu.py +605 -605
  48. mpflash/mpflash/vendor/readme.md +2 -2
  49. mpflash/mpflash/vendor/versions.py +119 -117
  50. mpflash/mpflash/worklist.py +171 -170
  51. mpflash/poetry.lock +1588 -1588
  52. mpflash/pyproject.toml +64 -60
  53. mpflash/stm32_udev_rules.md +62 -62
  54. stubber/__init__.py +3 -3
  55. stubber/basicgit.py +294 -288
  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_db_mpy.mpy +0 -0
  62. stubber/board/createstubs_lvgl.py +741 -741
  63. stubber/board/createstubs_lvgl_min.py +741 -741
  64. stubber/board/createstubs_mem.py +766 -766
  65. stubber/board/createstubs_mem_min.py +306 -306
  66. stubber/board/createstubs_mem_mpy.mpy +0 -0
  67. stubber/board/createstubs_min.py +294 -294
  68. stubber/board/createstubs_mpy.mpy +0 -0
  69. stubber/board/fw_info.py +141 -141
  70. stubber/board/info.py +183 -183
  71. stubber/board/main.py +19 -19
  72. stubber/board/modulelist.txt +247 -247
  73. stubber/board/pyrightconfig.json +34 -34
  74. stubber/bulk/mcu_stubber.py +454 -454
  75. stubber/codemod/_partials/__init__.py +48 -48
  76. stubber/codemod/_partials/db_main.py +147 -147
  77. stubber/codemod/_partials/lvgl_main.py +77 -77
  78. stubber/codemod/_partials/modules_reader.py +80 -80
  79. stubber/codemod/add_comment.py +53 -53
  80. stubber/codemod/add_method.py +65 -65
  81. stubber/codemod/board.py +317 -317
  82. stubber/codemod/enrich.py +145 -145
  83. stubber/codemod/merge_docstub.py +284 -284
  84. stubber/codemod/modify_list.py +54 -54
  85. stubber/codemod/utils.py +57 -57
  86. stubber/commands/build_cmd.py +94 -94
  87. stubber/commands/cli.py +55 -51
  88. stubber/commands/clone_cmd.py +77 -66
  89. stubber/commands/config_cmd.py +29 -29
  90. stubber/commands/enrich_folder_cmd.py +71 -70
  91. stubber/commands/get_core_cmd.py +71 -69
  92. stubber/commands/get_docstubs_cmd.py +89 -87
  93. stubber/commands/get_frozen_cmd.py +114 -112
  94. stubber/commands/get_mcu_cmd.py +61 -56
  95. stubber/commands/merge_cmd.py +67 -66
  96. stubber/commands/publish_cmd.py +119 -119
  97. stubber/commands/stub_cmd.py +31 -30
  98. stubber/commands/switch_cmd.py +62 -54
  99. stubber/commands/variants_cmd.py +49 -48
  100. stubber/cst_transformer.py +178 -178
  101. stubber/data/board_info.csv +193 -193
  102. stubber/data/board_info.json +1729 -1729
  103. stubber/data/micropython_tags.csv +15 -15
  104. stubber/data/requirements-core-micropython.txt +38 -38
  105. stubber/data/requirements-core-pycopy.txt +39 -39
  106. stubber/downloader.py +36 -36
  107. stubber/freeze/common.py +68 -68
  108. stubber/freeze/freeze_folder.py +69 -69
  109. stubber/freeze/freeze_manifest_2.py +113 -113
  110. stubber/freeze/get_frozen.py +127 -127
  111. stubber/get_cpython.py +101 -101
  112. stubber/get_lobo.py +59 -59
  113. stubber/minify.py +418 -418
  114. stubber/publish/bump.py +86 -86
  115. stubber/publish/candidates.py +262 -262
  116. stubber/publish/database.py +18 -18
  117. stubber/publish/defaults.py +45 -45
  118. stubber/publish/enums.py +24 -24
  119. stubber/publish/helpers.py +29 -29
  120. stubber/publish/merge_docstubs.py +130 -130
  121. stubber/publish/missing_class_methods.py +49 -49
  122. stubber/publish/package.py +146 -146
  123. stubber/publish/pathnames.py +51 -51
  124. stubber/publish/publish.py +120 -120
  125. stubber/publish/pypi.py +38 -38
  126. stubber/publish/stubpackage.py +1029 -1029
  127. stubber/rst/__init__.py +9 -9
  128. stubber/rst/classsort.py +77 -77
  129. stubber/rst/lookup.py +530 -530
  130. stubber/rst/output_dict.py +401 -401
  131. stubber/rst/reader.py +822 -822
  132. stubber/rst/report_return.py +69 -69
  133. stubber/rst/rst_utils.py +540 -540
  134. stubber/stubber.py +38 -38
  135. stubber/stubs_from_docs.py +90 -90
  136. stubber/tools/manifestfile.py +655 -610
  137. stubber/tools/readme.md +7 -6
  138. stubber/update_fallback.py +117 -117
  139. stubber/update_module_list.py +123 -123
  140. stubber/utils/__init__.py +5 -5
  141. stubber/utils/config.py +127 -127
  142. stubber/utils/makeversionhdr.py +54 -54
  143. stubber/utils/manifest.py +92 -92
  144. stubber/utils/post.py +79 -79
  145. stubber/utils/repos.py +157 -154
  146. stubber/utils/stubmaker.py +139 -139
  147. stubber/utils/typed_config_toml.py +77 -77
  148. stubber/utils/versions.py +128 -120
  149. stubber/variants.py +106 -106
  150. micropython_stubber-1.20.5.dist-info/RECORD +0 -159
  151. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/WHEEL +0 -0
  152. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/entry_points.txt +0 -0
@@ -1,262 +1,262 @@
1
- """
2
- In order to generate stups for all ports and boars and versions of micropython we need to know
3
- what versions are available. This module provides functions to :
4
- - get a list of all ports for a given version of micropython ( list micropython ports)
5
- - get a list of all ports and board for a given version of micropython (list micropython ports boards)
6
-
7
- - get a list of versions for micropython ( version candidates)
8
- - get the frozen stubs for a given version of micropython ( frozen candidates)
9
- - get a list of all the docstubs (docstub candidates)
10
- - get a list of the firmware/MCU stubs (firmware candidates)
11
- """
12
-
13
- import re
14
- from pathlib import Path
15
- from typing import Any, Dict, Generator, List, Optional, Union
16
-
17
- from loguru import logger as log
18
- from packaging.version import parse
19
-
20
- import stubber.basicgit as git
21
- from stubber import utils
22
- from stubber.publish.defaults import GENERIC, GENERIC_L, GENERIC_U
23
-
24
- # from stubber.publish.enums import COMBO_STUBS
25
- from stubber.utils.config import CONFIG
26
- from stubber.utils.versions import OLDEST_VERSION, SET_PREVIEW, V_PREVIEW, clean_version, micropython_versions
27
-
28
-
29
- def subfolder_names(path: Path):
30
- "returns a list of names of the sub folders of the given path"
31
- if path.exists():
32
- for child in path.iterdir():
33
- if child.is_dir():
34
- yield child.name
35
-
36
-
37
- def version_candidates(
38
- suffix: str,
39
- prefix: str = r".*",
40
- *,
41
- path: Path = CONFIG.stub_path,
42
- oldest: str = OLDEST_VERSION,
43
- ) -> Generator[str, None, None]:
44
- "get a list of versions for the given family and suffix"
45
- if path.exists():
46
- folder_re = prefix + "-(.*)-" + suffix
47
- for name in subfolder_names(path):
48
- if match := re.match(folder_re, name):
49
- folder_ver = clean_version(match[1])
50
- if folder_ver == V_PREVIEW or parse(folder_ver) >= parse(oldest):
51
- yield folder_ver
52
-
53
-
54
- def list_frozen_ports(
55
- family: str = "micropython",
56
- version: str = V_PREVIEW,
57
- path: Path = CONFIG.stub_path,
58
- ):
59
- "get list of ports with frozen stubs for a given family and version"
60
- ports_path = path / f"{family}-{version}-frozen"
61
- return list(subfolder_names(ports_path))
62
-
63
-
64
- def list_micropython_ports(
65
- family: str = "micropython",
66
- mpy_path: Path = CONFIG.mpy_path,
67
- ):
68
- "get list of micropython ports for a given family and version"
69
- if family != "micropython":
70
- # todo: add support for other families
71
- return []
72
- mpy_path = Path("./repos/micropython")
73
-
74
- ports_path = mpy_path / "ports"
75
- return [p for p in list(subfolder_names(ports_path)) if p not in CONFIG.BLOCKED_PORTS]
76
-
77
-
78
- def list_micropython_port_boards(
79
- port: str,
80
- family: str = "micropython",
81
- mpy_path: Path = CONFIG.mpy_path,
82
- ):
83
- "get list of micropython boards for a given family version and board"
84
- if family != "micropython":
85
- # todo: add support for other families
86
- return []
87
- mpy_path = Path("./repos/micropython")
88
- boards_path = mpy_path / "ports" / port / "boards"
89
- return list(subfolder_names(boards_path))
90
-
91
-
92
- def frozen_candidates(
93
- family: str = "micropython",
94
- versions: Union[str, List[str]] = V_PREVIEW,
95
- ports: Union[str, List[str]] = "all",
96
- boards: Union[str, List[str]] = "all",
97
- *,
98
- path: Path = CONFIG.stub_path,
99
- ) -> Generator[Dict[str, Any], None, None]:
100
- """
101
- generate a list of possible MCU stubs for the given family (, version port and board) ?
102
- - family = micropython
103
- board and port are ignored, they are looked up from the available frozen stubs
104
- - versions = 'latest' , 'auto' or a list of versions
105
- - port = 'auto' or a specific port
106
- - board = 'auto' or a specific board, 'generic' must be specified in lowercare
107
- """
108
- auto_port = is_auto(ports)
109
- auto_board = is_auto(boards)
110
- if is_auto(versions):
111
- versions = list(version_candidates(suffix="frozen", prefix=family, path=path)) + [V_PREVIEW]
112
- else:
113
- versions = [versions] if isinstance(versions, str) else versions
114
-
115
- versions = [clean_version(v, flat=True) for v in versions]
116
-
117
- if isinstance(ports, str):
118
- ports = [ports]
119
- if isinstance(boards, str):
120
- boards = [boards]
121
- # ---------------------------------------------------------------------------
122
- # ---------------------------------------------------------------------------
123
- for version in versions:
124
- if auto_port:
125
- if family == "micropython":
126
- # lookup the (frozen) micropython ports
127
- ports = list_frozen_ports(family, version, path=path)
128
- else:
129
- raise NotImplementedError(f"auto ports not implemented for family {family}") # pragma: no cover
130
- # elif family == "pycom":
131
- # ports = ["esp32"]
132
- # elif family == "lobo":
133
- # ports = ["esp32"]
134
- # ---------------------------------------------------------------------------
135
- for port in ports:
136
- port_path = path / f"{family}-{version}-frozen" / port
137
- if port_path.exists():
138
- yield {
139
- "family": family,
140
- "version": version,
141
- "port": port,
142
- "board": GENERIC_L,
143
- # "pkg_type": COMBO_STUBS,
144
- }
145
- # if not auto_board:
146
- # for board in boards:
147
- # port_path = board_path/ "board" / board
148
- # if port_path.exists():
149
- # yield {"family": family, "version": version, "port": port, "board": board, "pkg_type": COMBO_STUBS}
150
- # else: # auto board
151
- if auto_board:
152
- if family == "micropython":
153
- # lookup the (frozen) micropython ports
154
- boards = list(subfolder_names(port_path))
155
- # TODO: remove non-relevant boards
156
- # - release - used in release testing
157
- # generic_512 - small memory footprint
158
- #
159
-
160
- else:
161
- # raise NotImplementedError(f"auto boards not implemented for family {family}") # pragma: no cover
162
- raise NotImplementedError(f"auto boards not implemented for family {family}") # pragma: no cover
163
- # elif family == "pycom":
164
- # boards = ["wipy", "lopy", "gpy", "fipy"]
165
- # ---------------------------------------------------------------------------
166
- for board in boards:
167
- assert isinstance(board, str)
168
- # frozen stubs found, and not excluded, generic is already explicitly included, test builds excluded
169
- # Micropython repo uses CAPS for board names, but micropython-stubs are lowercase
170
- board_found = (path / f"{family}-{version}-frozen" / port / board.upper()).exists()
171
- if board_found and board.upper() not in [
172
- GENERIC_L.upper(),
173
- "RELEASE",
174
- "GENERIC_512K",
175
- ]:
176
- yield {
177
- "family": family,
178
- "version": version,
179
- "port": port,
180
- "board": board,
181
- # "pkg_type": COMBO_STUBS,
182
- }
183
-
184
-
185
- def is_auto(thing: Union[None, str, List[str]]):
186
- "Is this version/port/board specified as 'auto' ?"
187
- if isinstance(thing, str):
188
- return thing in ["auto", "all"]
189
- if isinstance(thing, list):
190
- return any(i in ["auto", "all"] for i in thing)
191
-
192
-
193
- def board_candidates(
194
- family: str = "micropython",
195
- versions: Union[str, List[str]] = V_PREVIEW,
196
- *,
197
- mpy_path: Path = CONFIG.mpy_path,
198
- ):
199
- """
200
- generate a list of possible board stub candidates for the given family and version.
201
- list is based on the micropython repo: /ports/<list of ports>/boards/<list of boards>
202
- """
203
- if is_auto(versions):
204
- versions = list(micropython_versions(minver=OLDEST_VERSION))
205
- elif isinstance(versions, str):
206
- versions = [versions]
207
- versions = [clean_version(v, flat=False) for v in versions]
208
-
209
- for version in versions:
210
- # check out the micropython repo for this version
211
- if version in SET_PREVIEW:
212
- r = git.switch_branch(repo=mpy_path, branch="master")
213
- # get the current checked out version
214
- version = utils.checkedout_version(mpy_path)
215
- else:
216
- r = git.checkout_tag(repo=mpy_path, tag=version)
217
- if not r:
218
- log.warning(
219
- f"Incorrect version: {version} or did you forget to run `stubber clone` to get the micropython repo?"
220
- )
221
- return []
222
- ports = list_micropython_ports(family=family, mpy_path=mpy_path)
223
- for port in ports:
224
- # Yield the generic port exactly one time
225
- yield {
226
- "family": family,
227
- "version": version,
228
- "port": port,
229
- "board": GENERIC_U,
230
- }
231
- for board in list_micropython_port_boards(family=family, mpy_path=mpy_path, port=port):
232
- if board not in GENERIC:
233
- yield {
234
- "family": family,
235
- "version": version,
236
- "port": port,
237
- "board": board,
238
- }
239
-
240
-
241
- def filter_list(
242
- worklist: List[Dict[str, str]],
243
- ports: Optional[Union[List[str], str]] = None,
244
- boards: Optional[Union[List[str], str]] = None,
245
- # versions: Optional[Union[List[str], str]] = None,
246
- ):
247
- """
248
- filter a list of candidates down to the ones we want, based on the ports and boards specified (case insensitive)
249
- for board also match using a 'GENERIC_' prefix, so board 's3' will match candidate 'GENERIC_S3'
250
- """
251
- worklist = [i for i in worklist if i["board"] != ""]
252
- if ports and not is_auto(ports):
253
- ports_ = [i.lower() for i in ports]
254
- worklist = [i for i in worklist if i["port"].lower() in ports_]
255
- if boards and not is_auto(boards):
256
- boards_ = [i.lower() for i in boards]
257
- worklist = [
258
- i
259
- for i in worklist
260
- if i["board"].lower() in boards_ or i["board"].lower().replace("generic_", "") in boards_
261
- ]
262
- return worklist
1
+ """
2
+ In order to generate stups for all ports and boars and versions of micropython we need to know
3
+ what versions are available. This module provides functions to :
4
+ - get a list of all ports for a given version of micropython ( list micropython ports)
5
+ - get a list of all ports and board for a given version of micropython (list micropython ports boards)
6
+
7
+ - get a list of versions for micropython ( version candidates)
8
+ - get the frozen stubs for a given version of micropython ( frozen candidates)
9
+ - get a list of all the docstubs (docstub candidates)
10
+ - get a list of the firmware/MCU stubs (firmware candidates)
11
+ """
12
+
13
+ import re
14
+ from pathlib import Path
15
+ from typing import Any, Dict, Generator, List, Optional, Union
16
+
17
+ from loguru import logger as log
18
+ from packaging.version import parse
19
+
20
+ import stubber.basicgit as git
21
+ from stubber import utils
22
+ from stubber.publish.defaults import GENERIC, GENERIC_L, GENERIC_U
23
+
24
+ # from stubber.publish.enums import COMBO_STUBS
25
+ from stubber.utils.config import CONFIG
26
+ from stubber.utils.versions import OLDEST_VERSION, SET_PREVIEW, V_PREVIEW, clean_version, micropython_versions
27
+
28
+
29
+ def subfolder_names(path: Path):
30
+ "returns a list of names of the sub folders of the given path"
31
+ if path.exists():
32
+ for child in path.iterdir():
33
+ if child.is_dir():
34
+ yield child.name
35
+
36
+
37
+ def version_candidates(
38
+ suffix: str,
39
+ prefix: str = r".*",
40
+ *,
41
+ path: Path = CONFIG.stub_path,
42
+ oldest: str = OLDEST_VERSION,
43
+ ) -> Generator[str, None, None]:
44
+ "get a list of versions for the given family and suffix"
45
+ if path.exists():
46
+ folder_re = prefix + "-(.*)-" + suffix
47
+ for name in subfolder_names(path):
48
+ if match := re.match(folder_re, name):
49
+ folder_ver = clean_version(match[1])
50
+ if folder_ver == V_PREVIEW or parse(folder_ver) >= parse(oldest):
51
+ yield folder_ver
52
+
53
+
54
+ def list_frozen_ports(
55
+ family: str = "micropython",
56
+ version: str = V_PREVIEW,
57
+ path: Path = CONFIG.stub_path,
58
+ ):
59
+ "get list of ports with frozen stubs for a given family and version"
60
+ ports_path = path / f"{family}-{version}-frozen"
61
+ return list(subfolder_names(ports_path))
62
+
63
+
64
+ def list_micropython_ports(
65
+ family: str = "micropython",
66
+ mpy_path: Path = CONFIG.mpy_path,
67
+ ):
68
+ "get list of micropython ports for a given family and version"
69
+ if family != "micropython":
70
+ # todo: add support for other families
71
+ return []
72
+ mpy_path = Path("./repos/micropython")
73
+
74
+ ports_path = mpy_path / "ports"
75
+ return [p for p in list(subfolder_names(ports_path)) if p not in CONFIG.BLOCKED_PORTS]
76
+
77
+
78
+ def list_micropython_port_boards(
79
+ port: str,
80
+ family: str = "micropython",
81
+ mpy_path: Path = CONFIG.mpy_path,
82
+ ):
83
+ "get list of micropython boards for a given family version and board"
84
+ if family != "micropython":
85
+ # todo: add support for other families
86
+ return []
87
+ mpy_path = Path("./repos/micropython")
88
+ boards_path = mpy_path / "ports" / port / "boards"
89
+ return list(subfolder_names(boards_path))
90
+
91
+
92
+ def frozen_candidates(
93
+ family: str = "micropython",
94
+ versions: Union[str, List[str]] = V_PREVIEW,
95
+ ports: Union[str, List[str]] = "all",
96
+ boards: Union[str, List[str]] = "all",
97
+ *,
98
+ path: Path = CONFIG.stub_path,
99
+ ) -> Generator[Dict[str, Any], None, None]:
100
+ """
101
+ generate a list of possible MCU stubs for the given family (, version port and board) ?
102
+ - family = micropython
103
+ board and port are ignored, they are looked up from the available frozen stubs
104
+ - versions = 'latest' , 'auto' or a list of versions
105
+ - port = 'auto' or a specific port
106
+ - board = 'auto' or a specific board, 'generic' must be specified in lowercare
107
+ """
108
+ auto_port = is_auto(ports)
109
+ auto_board = is_auto(boards)
110
+ if is_auto(versions):
111
+ versions = list(version_candidates(suffix="frozen", prefix=family, path=path)) + [V_PREVIEW]
112
+ else:
113
+ versions = [versions] if isinstance(versions, str) else versions
114
+
115
+ versions = [clean_version(v, flat=True) for v in versions]
116
+
117
+ if isinstance(ports, str):
118
+ ports = [ports]
119
+ if isinstance(boards, str):
120
+ boards = [boards]
121
+ # ---------------------------------------------------------------------------
122
+ # ---------------------------------------------------------------------------
123
+ for version in versions:
124
+ if auto_port:
125
+ if family == "micropython":
126
+ # lookup the (frozen) micropython ports
127
+ ports = list_frozen_ports(family, version, path=path)
128
+ else:
129
+ raise NotImplementedError(f"auto ports not implemented for family {family}") # pragma: no cover
130
+ # elif family == "pycom":
131
+ # ports = ["esp32"]
132
+ # elif family == "lobo":
133
+ # ports = ["esp32"]
134
+ # ---------------------------------------------------------------------------
135
+ for port in ports:
136
+ port_path = path / f"{family}-{version}-frozen" / port
137
+ if port_path.exists():
138
+ yield {
139
+ "family": family,
140
+ "version": version,
141
+ "port": port,
142
+ "board": GENERIC_L,
143
+ # "pkg_type": COMBO_STUBS,
144
+ }
145
+ # if not auto_board:
146
+ # for board in boards:
147
+ # port_path = board_path/ "board" / board
148
+ # if port_path.exists():
149
+ # yield {"family": family, "version": version, "port": port, "board": board, "pkg_type": COMBO_STUBS}
150
+ # else: # auto board
151
+ if auto_board:
152
+ if family == "micropython":
153
+ # lookup the (frozen) micropython ports
154
+ boards = list(subfolder_names(port_path))
155
+ # TODO: remove non-relevant boards
156
+ # - release - used in release testing
157
+ # generic_512 - small memory footprint
158
+ #
159
+
160
+ else:
161
+ # raise NotImplementedError(f"auto boards not implemented for family {family}") # pragma: no cover
162
+ raise NotImplementedError(f"auto boards not implemented for family {family}") # pragma: no cover
163
+ # elif family == "pycom":
164
+ # boards = ["wipy", "lopy", "gpy", "fipy"]
165
+ # ---------------------------------------------------------------------------
166
+ for board in boards:
167
+ assert isinstance(board, str)
168
+ # frozen stubs found, and not excluded, generic is already explicitly included, test builds excluded
169
+ # Micropython repo uses CAPS for board names, but micropython-stubs are lowercase
170
+ board_found = (path / f"{family}-{version}-frozen" / port / board.upper()).exists()
171
+ if board_found and board.upper() not in [
172
+ GENERIC_L.upper(),
173
+ "RELEASE",
174
+ "GENERIC_512K",
175
+ ]:
176
+ yield {
177
+ "family": family,
178
+ "version": version,
179
+ "port": port,
180
+ "board": board,
181
+ # "pkg_type": COMBO_STUBS,
182
+ }
183
+
184
+
185
+ def is_auto(thing: Union[None, str, List[str]]):
186
+ "Is this version/port/board specified as 'auto' ?"
187
+ if isinstance(thing, str):
188
+ return thing in ["auto", "all"]
189
+ if isinstance(thing, list):
190
+ return any(i in ["auto", "all"] for i in thing)
191
+
192
+
193
+ def board_candidates(
194
+ family: str = "micropython",
195
+ versions: Union[str, List[str]] = V_PREVIEW,
196
+ *,
197
+ mpy_path: Path = CONFIG.mpy_path,
198
+ ):
199
+ """
200
+ generate a list of possible board stub candidates for the given family and version.
201
+ list is based on the micropython repo: /ports/<list of ports>/boards/<list of boards>
202
+ """
203
+ if is_auto(versions):
204
+ versions = list(micropython_versions(minver=OLDEST_VERSION))
205
+ elif isinstance(versions, str):
206
+ versions = [versions]
207
+ versions = [clean_version(v, flat=False) for v in versions]
208
+
209
+ for version in versions:
210
+ # check out the micropython repo for this version
211
+ if version in SET_PREVIEW:
212
+ r = git.switch_branch(repo=mpy_path, branch="master")
213
+ # get the current checked out version
214
+ version = utils.checkedout_version(mpy_path)
215
+ else:
216
+ r = git.checkout_tag(repo=mpy_path, tag=version)
217
+ if not r:
218
+ log.warning(
219
+ f"Incorrect version: {version} or did you forget to run `stubber clone` to get the micropython repo?"
220
+ )
221
+ return []
222
+ ports = list_micropython_ports(family=family, mpy_path=mpy_path)
223
+ for port in ports:
224
+ # Yield the generic port exactly one time
225
+ yield {
226
+ "family": family,
227
+ "version": version,
228
+ "port": port,
229
+ "board": GENERIC_U,
230
+ }
231
+ for board in list_micropython_port_boards(family=family, mpy_path=mpy_path, port=port):
232
+ if board not in GENERIC:
233
+ yield {
234
+ "family": family,
235
+ "version": version,
236
+ "port": port,
237
+ "board": board,
238
+ }
239
+
240
+
241
+ def filter_list(
242
+ worklist: List[Dict[str, str]],
243
+ ports: Optional[Union[List[str], str]] = None,
244
+ boards: Optional[Union[List[str], str]] = None,
245
+ # versions: Optional[Union[List[str], str]] = None,
246
+ ):
247
+ """
248
+ filter a list of candidates down to the ones we want, based on the ports and boards specified (case insensitive)
249
+ for board also match using a 'GENERIC_' prefix, so board 's3' will match candidate 'GENERIC_S3'
250
+ """
251
+ worklist = [i for i in worklist if i["board"] != ""]
252
+ if ports and not is_auto(ports):
253
+ ports_ = [i.lower() for i in ports]
254
+ worklist = [i for i in worklist if i["port"].lower() in ports_]
255
+ if boards and not is_auto(boards):
256
+ boards_ = [i.lower() for i in boards]
257
+ worklist = [
258
+ i
259
+ for i in worklist
260
+ if i["board"].lower() in boards_ or i["board"].lower().replace("generic_", "") in boards_
261
+ ]
262
+ return worklist
@@ -1,18 +1,18 @@
1
- """basic interface to the json database"""
2
-
3
- from pathlib import Path
4
- from typing import Union
5
-
6
- from pysondb import PysonDB
7
-
8
-
9
- def get_database(publish_path: Union[Path, str], production: bool = False) -> PysonDB:
10
- """
11
- Open the json database at the given path.
12
-
13
- The database should be located in a subfolder `/publish` of the root path.
14
- The database name is determined by the production flag as `package_data[_test].jsondb`
15
- """
16
- publish_path = Path(publish_path)
17
- db_path = publish_path / f"package_data{'' if production else '_test'}.jsondb"
18
- return PysonDB(db_path.as_posix())
1
+ """basic interface to the json database"""
2
+
3
+ from pathlib import Path
4
+ from typing import Union
5
+
6
+ from pysondb import PysonDB
7
+
8
+
9
+ def get_database(publish_path: Union[Path, str], production: bool = False) -> PysonDB:
10
+ """
11
+ Open the json database at the given path.
12
+
13
+ The database should be located in a subfolder `/publish` of the root path.
14
+ The database name is determined by the production flag as `package_data[_test].jsondb`
15
+ """
16
+ publish_path = Path(publish_path)
17
+ db_path = publish_path / f"package_data{'' if production else '_test'}.jsondb"
18
+ return PysonDB(db_path.as_posix())
@@ -1,45 +1,45 @@
1
- """Build and packaging defaults for stubber"""
2
- from typing import Dict, List
3
-
4
- from stubber.utils.config import CONFIG
5
- from stubber.utils.versions import V_PREVIEW, clean_version
6
-
7
- # The default board for the ports modules documented with base name only
8
- # as the MicroPython BOARD naming convention has changed over time there are different options to try
9
- # (newer to older)
10
-
11
- DEFAULT_BOARDS: Dict[str, List[str]] = {
12
- "stm32": ["PYBV11", ""],
13
- "esp32": ["ESP32_GENERIC", "GENERIC", ""], # "GENERIC_SPIRAM",
14
- "esp8266": ["ESP8266_GENERIC", "GENERIC", ""],
15
- "rp2": ["RPI_PICO", "PICO", ""],
16
- "samd": ["SEEED_WIO_TERMINAL", ""],
17
- }
18
-
19
- GENERIC_L = "generic"
20
- "generic lowercase"
21
- GENERIC_U = "GENERIC"
22
- "GENERIC uppercase"
23
- GENERIC = {GENERIC_L, GENERIC_U}
24
- "GENERIC eithercase"
25
-
26
-
27
- def default_board(port: str, version=V_PREVIEW) -> str: # sourcery skip: assign-if-exp
28
- """Return the default board for the given version and port"""
29
- ver_flat = clean_version(version, flat=True)
30
- if port in DEFAULT_BOARDS:
31
- for board in DEFAULT_BOARDS[port]:
32
- base = (
33
- f"micropython-{ver_flat}-{port}-{board}"
34
- if board
35
- else f"micropython-{ver_flat}-{port}"
36
- )
37
- # check if we have a (merged)stub for this version and port
38
- if (CONFIG.stub_path / f"{base}-merged").exists() or (
39
- CONFIG.stub_path / base
40
- ).exists():
41
- return board
42
- # fallback to first listed board
43
- return DEFAULT_BOARDS[port][0]
44
- # fallback to generic
45
- return GENERIC_U
1
+ """Build and packaging defaults for stubber"""
2
+ from typing import Dict, List
3
+
4
+ from stubber.utils.config import CONFIG
5
+ from stubber.utils.versions import V_PREVIEW, clean_version
6
+
7
+ # The default board for the ports modules documented with base name only
8
+ # as the MicroPython BOARD naming convention has changed over time there are different options to try
9
+ # (newer to older)
10
+
11
+ DEFAULT_BOARDS: Dict[str, List[str]] = {
12
+ "stm32": ["PYBV11", ""],
13
+ "esp32": ["ESP32_GENERIC", "GENERIC", ""], # "GENERIC_SPIRAM",
14
+ "esp8266": ["ESP8266_GENERIC", "GENERIC", ""],
15
+ "rp2": ["RPI_PICO", "PICO", ""],
16
+ "samd": ["SEEED_WIO_TERMINAL", ""],
17
+ }
18
+
19
+ GENERIC_L = "generic"
20
+ "generic lowercase"
21
+ GENERIC_U = "GENERIC"
22
+ "GENERIC uppercase"
23
+ GENERIC = {GENERIC_L, GENERIC_U}
24
+ "GENERIC eithercase"
25
+
26
+
27
+ def default_board(port: str, version=V_PREVIEW) -> str: # sourcery skip: assign-if-exp
28
+ """Return the default board for the given version and port"""
29
+ ver_flat = clean_version(version, flat=True)
30
+ if port in DEFAULT_BOARDS:
31
+ for board in DEFAULT_BOARDS[port]:
32
+ base = (
33
+ f"micropython-{ver_flat}-{port}-{board}"
34
+ if board
35
+ else f"micropython-{ver_flat}-{port}"
36
+ )
37
+ # check if we have a (merged)stub for this version and port
38
+ if (CONFIG.stub_path / f"{base}-merged").exists() or (
39
+ CONFIG.stub_path / base
40
+ ).exists():
41
+ return board
42
+ # fallback to first listed board
43
+ return DEFAULT_BOARDS[port][0]
44
+ # fallback to generic
45
+ return GENERIC_U