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.
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/LICENSE +30 -30
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/METADATA +1 -1
- micropython_stubber-1.23.0.dist-info/RECORD +159 -0
- mpflash/README.md +184 -184
- mpflash/libusb_flash.ipynb +203 -203
- mpflash/mpflash/add_firmware.py +98 -98
- mpflash/mpflash/ask_input.py +236 -236
- mpflash/mpflash/bootloader/__init__.py +37 -36
- mpflash/mpflash/bootloader/manual.py +102 -102
- mpflash/mpflash/bootloader/micropython.py +10 -10
- mpflash/mpflash/bootloader/touch1200.py +45 -45
- mpflash/mpflash/cli_download.py +129 -129
- mpflash/mpflash/cli_flash.py +219 -219
- mpflash/mpflash/cli_group.py +98 -98
- mpflash/mpflash/cli_list.py +81 -81
- mpflash/mpflash/cli_main.py +41 -41
- mpflash/mpflash/common.py +164 -164
- mpflash/mpflash/config.py +43 -47
- mpflash/mpflash/connected.py +74 -74
- mpflash/mpflash/download.py +360 -360
- mpflash/mpflash/downloaded.py +130 -129
- mpflash/mpflash/errors.py +9 -9
- mpflash/mpflash/flash.py +55 -52
- mpflash/mpflash/flash_esp.py +59 -59
- mpflash/mpflash/flash_stm32.py +18 -24
- mpflash/mpflash/flash_stm32_cube.py +111 -111
- mpflash/mpflash/flash_stm32_dfu.py +104 -101
- mpflash/mpflash/flash_uf2.py +89 -67
- mpflash/mpflash/flash_uf2_boardid.py +15 -15
- mpflash/mpflash/flash_uf2_linux.py +129 -123
- mpflash/mpflash/flash_uf2_macos.py +37 -34
- mpflash/mpflash/flash_uf2_windows.py +38 -34
- mpflash/mpflash/list.py +89 -89
- mpflash/mpflash/logger.py +41 -41
- mpflash/mpflash/mpboard_id/__init__.py +93 -93
- mpflash/mpflash/mpboard_id/add_boards.py +255 -255
- mpflash/mpflash/mpboard_id/board.py +37 -37
- mpflash/mpflash/mpboard_id/board_id.py +86 -86
- mpflash/mpflash/mpboard_id/store.py +43 -43
- mpflash/mpflash/mpremoteboard/__init__.py +226 -221
- mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
- mpflash/mpflash/mpremoteboard/runner.py +140 -140
- mpflash/mpflash/uf2disk.py +12 -12
- mpflash/mpflash/vendor/basicgit.py +288 -288
- mpflash/mpflash/vendor/click_aliases.py +91 -91
- mpflash/mpflash/vendor/dfu.py +165 -165
- mpflash/mpflash/vendor/pydfu.py +605 -605
- mpflash/mpflash/vendor/readme.md +2 -2
- mpflash/mpflash/vendor/versions.py +119 -117
- mpflash/mpflash/worklist.py +171 -170
- mpflash/poetry.lock +1588 -1588
- mpflash/pyproject.toml +64 -60
- mpflash/stm32_udev_rules.md +62 -62
- stubber/__init__.py +3 -3
- stubber/basicgit.py +294 -288
- stubber/board/board_info.csv +193 -193
- stubber/board/boot.py +34 -34
- stubber/board/createstubs.py +986 -986
- stubber/board/createstubs_db.py +825 -825
- stubber/board/createstubs_db_min.py +331 -331
- stubber/board/createstubs_db_mpy.mpy +0 -0
- stubber/board/createstubs_lvgl.py +741 -741
- stubber/board/createstubs_lvgl_min.py +741 -741
- stubber/board/createstubs_mem.py +766 -766
- stubber/board/createstubs_mem_min.py +306 -306
- stubber/board/createstubs_mem_mpy.mpy +0 -0
- stubber/board/createstubs_min.py +294 -294
- stubber/board/createstubs_mpy.mpy +0 -0
- stubber/board/fw_info.py +141 -141
- stubber/board/info.py +183 -183
- stubber/board/main.py +19 -19
- stubber/board/modulelist.txt +247 -247
- stubber/board/pyrightconfig.json +34 -34
- stubber/bulk/mcu_stubber.py +454 -454
- stubber/codemod/_partials/__init__.py +48 -48
- stubber/codemod/_partials/db_main.py +147 -147
- stubber/codemod/_partials/lvgl_main.py +77 -77
- stubber/codemod/_partials/modules_reader.py +80 -80
- stubber/codemod/add_comment.py +53 -53
- stubber/codemod/add_method.py +65 -65
- stubber/codemod/board.py +317 -317
- stubber/codemod/enrich.py +145 -145
- stubber/codemod/merge_docstub.py +284 -284
- stubber/codemod/modify_list.py +54 -54
- stubber/codemod/utils.py +57 -57
- stubber/commands/build_cmd.py +94 -94
- stubber/commands/cli.py +55 -51
- stubber/commands/clone_cmd.py +77 -66
- stubber/commands/config_cmd.py +29 -29
- stubber/commands/enrich_folder_cmd.py +71 -70
- stubber/commands/get_core_cmd.py +71 -69
- stubber/commands/get_docstubs_cmd.py +89 -87
- stubber/commands/get_frozen_cmd.py +114 -112
- stubber/commands/get_mcu_cmd.py +61 -56
- stubber/commands/merge_cmd.py +67 -66
- stubber/commands/publish_cmd.py +119 -119
- stubber/commands/stub_cmd.py +31 -30
- stubber/commands/switch_cmd.py +62 -54
- stubber/commands/variants_cmd.py +49 -48
- stubber/cst_transformer.py +178 -178
- stubber/data/board_info.csv +193 -193
- stubber/data/board_info.json +1729 -1729
- stubber/data/micropython_tags.csv +15 -15
- stubber/data/requirements-core-micropython.txt +38 -38
- stubber/data/requirements-core-pycopy.txt +39 -39
- stubber/downloader.py +36 -36
- stubber/freeze/common.py +68 -68
- stubber/freeze/freeze_folder.py +69 -69
- stubber/freeze/freeze_manifest_2.py +113 -113
- stubber/freeze/get_frozen.py +127 -127
- stubber/get_cpython.py +101 -101
- stubber/get_lobo.py +59 -59
- stubber/minify.py +418 -418
- stubber/publish/bump.py +86 -86
- stubber/publish/candidates.py +262 -262
- stubber/publish/database.py +18 -18
- stubber/publish/defaults.py +45 -45
- stubber/publish/enums.py +24 -24
- stubber/publish/helpers.py +29 -29
- stubber/publish/merge_docstubs.py +130 -130
- stubber/publish/missing_class_methods.py +49 -49
- stubber/publish/package.py +146 -146
- stubber/publish/pathnames.py +51 -51
- stubber/publish/publish.py +120 -120
- stubber/publish/pypi.py +38 -38
- stubber/publish/stubpackage.py +1029 -1029
- stubber/rst/__init__.py +9 -9
- stubber/rst/classsort.py +77 -77
- stubber/rst/lookup.py +530 -530
- stubber/rst/output_dict.py +401 -401
- stubber/rst/reader.py +822 -822
- stubber/rst/report_return.py +69 -69
- stubber/rst/rst_utils.py +540 -540
- stubber/stubber.py +38 -38
- stubber/stubs_from_docs.py +90 -90
- stubber/tools/manifestfile.py +655 -610
- stubber/tools/readme.md +7 -6
- stubber/update_fallback.py +117 -117
- stubber/update_module_list.py +123 -123
- stubber/utils/__init__.py +5 -5
- stubber/utils/config.py +127 -127
- stubber/utils/makeversionhdr.py +54 -54
- stubber/utils/manifest.py +92 -92
- stubber/utils/post.py +79 -79
- stubber/utils/repos.py +157 -154
- stubber/utils/stubmaker.py +139 -139
- stubber/utils/typed_config_toml.py +77 -77
- stubber/utils/versions.py +128 -120
- stubber/variants.py +106 -106
- micropython_stubber-1.20.5.dist-info/RECORD +0 -159
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/WHEEL +0 -0
- {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/entry_points.txt +0 -0
@@ -1,113 +1,113 @@
|
|
1
|
-
"""
|
2
|
-
Freeze manifest files for micropython 1.16 and later
|
3
|
-
uses the manifest file to generate frozen stubs
|
4
|
-
|
5
|
-
"""
|
6
|
-
|
7
|
-
import os
|
8
|
-
import shutil
|
9
|
-
from pathlib import Path
|
10
|
-
from typing import List, Optional
|
11
|
-
|
12
|
-
from loguru import logger as log
|
13
|
-
|
14
|
-
from stubber import utils
|
15
|
-
from stubber.tools.manifestfile import MODE_FREEZE, ManifestFile, ManifestFileError, ManifestOutput
|
16
|
-
from stubber.utils.config import CONFIG
|
17
|
-
|
18
|
-
from .common import apply_frozen_module_fixes, get_freeze_path, get_portboard
|
19
|
-
|
20
|
-
|
21
|
-
def make_path_vars(
|
22
|
-
*,
|
23
|
-
mpy_path: Path = CONFIG.mpy_path,
|
24
|
-
mpy_lib_path: Path = CONFIG.mpy_lib_path, # ? if <= 1.19.1
|
25
|
-
port: Optional[str] = None,
|
26
|
-
board: Optional[str] = None,
|
27
|
-
):
|
28
|
-
if port is None or port == "": # pragma: no cover
|
29
|
-
port_path = mpy_path
|
30
|
-
else:
|
31
|
-
port_path = mpy_path / "ports" / port
|
32
|
-
|
33
|
-
if board is None or board == "": # pragma: no cover
|
34
|
-
board_path = port_path
|
35
|
-
else:
|
36
|
-
board_path = port_path / "boards" / board
|
37
|
-
|
38
|
-
log.trace(f"port_path : {port_path}")
|
39
|
-
log.trace(f"board_path: {board_path}")
|
40
|
-
if not port_path.exists(): # pragma: no cover
|
41
|
-
raise ValueError("port board path not found")
|
42
|
-
if not board_path.exists(): # pragma: no cover
|
43
|
-
raise ValueError("board path not found")
|
44
|
-
|
45
|
-
# VARS must be absolute paths
|
46
|
-
return {
|
47
|
-
"MPY_DIR": mpy_path.absolute().as_posix(),
|
48
|
-
"MPY_LIB_DIR": mpy_lib_path.absolute().as_posix(),
|
49
|
-
"PORT_DIR": port_path.absolute().as_posix(),
|
50
|
-
"BOARD_DIR": board_path.absolute().as_posix(),
|
51
|
-
}
|
52
|
-
|
53
|
-
|
54
|
-
def freeze_one_manifest_2(manifest: Path, frozen_stub_path: Path, mpy_path: Path, mpy_lib_path: Path, version: str):
|
55
|
-
# apparently there can be multiple manifest files to a board ?
|
56
|
-
# save cwd for 'misbehaving' older esp8266 manifest files
|
57
|
-
cwd = Path.cwd()
|
58
|
-
# so we need to get the port and board from the path
|
59
|
-
log.debug(f"input_manifest: {manifest}")
|
60
|
-
port, board = get_portboard(manifest)
|
61
|
-
|
62
|
-
log.info("port-board: {}".format((port + "-" + board).rstrip("-")))
|
63
|
-
|
64
|
-
path_vars = make_path_vars(port=port, board=board, mpy_path=mpy_path, mpy_lib_path=mpy_lib_path)
|
65
|
-
upy_manifest = ManifestFile(MODE_FREEZE, path_vars)
|
66
|
-
try:
|
67
|
-
# assume manifestneeds to be run from the port's folder
|
68
|
-
os.chdir(path_vars["PORT_DIR"])
|
69
|
-
upy_manifest.execute(manifest.as_posix())
|
70
|
-
except ManifestFileError as er:
|
71
|
-
log.error('freeze error executing "{}": {}'.format(manifest, er.args[0]))
|
72
|
-
raise er
|
73
|
-
log.debug(f"total {len(upy_manifest.files())} files")
|
74
|
-
|
75
|
-
# restore working directory
|
76
|
-
os.chdir(cwd)
|
77
|
-
# save the frozen files to the stubs
|
78
|
-
copy_frozen_to_stubs(frozen_stub_path, port, board, upy_manifest.files(), version, mpy_path=mpy_path)
|
79
|
-
|
80
|
-
|
81
|
-
def copy_frozen_to_stubs(
|
82
|
-
stub_path: Path, port: str, board: str, files: List[ManifestOutput], version: str, mpy_path: Path
|
83
|
-
):
|
84
|
-
"""
|
85
|
-
copy the frozen files from the manifest to the stubs folder
|
86
|
-
|
87
|
-
stubpath = the destination : # stubs/{family}-{version}-frozen
|
88
|
-
"""
|
89
|
-
freeze_path, board = get_freeze_path(stub_path, port, board)
|
90
|
-
|
91
|
-
log.debug(f"copy frozen: {port}-{board} to {freeze_path}")
|
92
|
-
freeze_path.mkdir(parents=True, exist_ok=True)
|
93
|
-
# clean target folder
|
94
|
-
shutil.rmtree(freeze_path, ignore_errors=True)
|
95
|
-
|
96
|
-
# print(tabulate(files))
|
97
|
-
# copy the frozen files to the stubs
|
98
|
-
for f in files:
|
99
|
-
dest = freeze_path / f.target_path
|
100
|
-
log.trace(f"copying {f.full_path} to {f.target_path}")
|
101
|
-
dest.parent.mkdir(parents=True, exist_ok=True)
|
102
|
-
try:
|
103
|
-
shutil.copy(f.full_path, dest)
|
104
|
-
except OSError as er:
|
105
|
-
log.warning(f"error copying {f.full_path} to {dest}: {er}")
|
106
|
-
raise er
|
107
|
-
# try to continue
|
108
|
-
|
109
|
-
apply_frozen_module_fixes(freeze_path, mpy_path=mpy_path)
|
110
|
-
|
111
|
-
# make a module manifest
|
112
|
-
FAMILY = "micropython"
|
113
|
-
utils.make_manifest(freeze_path, FAMILY, port=port, board=board, version=version, stubtype="frozen")
|
1
|
+
"""
|
2
|
+
Freeze manifest files for micropython 1.16 and later
|
3
|
+
uses the manifest file to generate frozen stubs
|
4
|
+
|
5
|
+
"""
|
6
|
+
|
7
|
+
import os
|
8
|
+
import shutil
|
9
|
+
from pathlib import Path
|
10
|
+
from typing import List, Optional
|
11
|
+
|
12
|
+
from loguru import logger as log
|
13
|
+
|
14
|
+
from stubber import utils
|
15
|
+
from stubber.tools.manifestfile import MODE_FREEZE, ManifestFile, ManifestFileError, ManifestOutput
|
16
|
+
from stubber.utils.config import CONFIG
|
17
|
+
|
18
|
+
from .common import apply_frozen_module_fixes, get_freeze_path, get_portboard
|
19
|
+
|
20
|
+
|
21
|
+
def make_path_vars(
|
22
|
+
*,
|
23
|
+
mpy_path: Path = CONFIG.mpy_path,
|
24
|
+
mpy_lib_path: Path = CONFIG.mpy_lib_path, # ? if <= 1.19.1
|
25
|
+
port: Optional[str] = None,
|
26
|
+
board: Optional[str] = None,
|
27
|
+
):
|
28
|
+
if port is None or port == "": # pragma: no cover
|
29
|
+
port_path = mpy_path
|
30
|
+
else:
|
31
|
+
port_path = mpy_path / "ports" / port
|
32
|
+
|
33
|
+
if board is None or board == "": # pragma: no cover
|
34
|
+
board_path = port_path
|
35
|
+
else:
|
36
|
+
board_path = port_path / "boards" / board
|
37
|
+
|
38
|
+
log.trace(f"port_path : {port_path}")
|
39
|
+
log.trace(f"board_path: {board_path}")
|
40
|
+
if not port_path.exists(): # pragma: no cover
|
41
|
+
raise ValueError("port board path not found")
|
42
|
+
if not board_path.exists(): # pragma: no cover
|
43
|
+
raise ValueError("board path not found")
|
44
|
+
|
45
|
+
# VARS must be absolute paths
|
46
|
+
return {
|
47
|
+
"MPY_DIR": mpy_path.absolute().as_posix(),
|
48
|
+
"MPY_LIB_DIR": mpy_lib_path.absolute().as_posix(),
|
49
|
+
"PORT_DIR": port_path.absolute().as_posix(),
|
50
|
+
"BOARD_DIR": board_path.absolute().as_posix(),
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
def freeze_one_manifest_2(manifest: Path, frozen_stub_path: Path, mpy_path: Path, mpy_lib_path: Path, version: str):
|
55
|
+
# apparently there can be multiple manifest files to a board ?
|
56
|
+
# save cwd for 'misbehaving' older esp8266 manifest files
|
57
|
+
cwd = Path.cwd()
|
58
|
+
# so we need to get the port and board from the path
|
59
|
+
log.debug(f"input_manifest: {manifest}")
|
60
|
+
port, board = get_portboard(manifest)
|
61
|
+
|
62
|
+
log.info("port-board: {}".format((port + "-" + board).rstrip("-")))
|
63
|
+
|
64
|
+
path_vars = make_path_vars(port=port, board=board, mpy_path=mpy_path, mpy_lib_path=mpy_lib_path)
|
65
|
+
upy_manifest = ManifestFile(MODE_FREEZE, path_vars)
|
66
|
+
try:
|
67
|
+
# assume manifestneeds to be run from the port's folder
|
68
|
+
os.chdir(path_vars["PORT_DIR"])
|
69
|
+
upy_manifest.execute(manifest.as_posix())
|
70
|
+
except ManifestFileError as er:
|
71
|
+
log.error('freeze error executing "{}": {}'.format(manifest, er.args[0]))
|
72
|
+
raise er
|
73
|
+
log.debug(f"total {len(upy_manifest.files())} files")
|
74
|
+
|
75
|
+
# restore working directory
|
76
|
+
os.chdir(cwd)
|
77
|
+
# save the frozen files to the stubs
|
78
|
+
copy_frozen_to_stubs(frozen_stub_path, port, board, upy_manifest.files(), version, mpy_path=mpy_path)
|
79
|
+
|
80
|
+
|
81
|
+
def copy_frozen_to_stubs(
|
82
|
+
stub_path: Path, port: str, board: str, files: List[ManifestOutput], version: str, mpy_path: Path
|
83
|
+
):
|
84
|
+
"""
|
85
|
+
copy the frozen files from the manifest to the stubs folder
|
86
|
+
|
87
|
+
stubpath = the destination : # stubs/{family}-{version}-frozen
|
88
|
+
"""
|
89
|
+
freeze_path, board = get_freeze_path(stub_path, port, board)
|
90
|
+
|
91
|
+
log.debug(f"copy frozen: {port}-{board} to {freeze_path}")
|
92
|
+
freeze_path.mkdir(parents=True, exist_ok=True)
|
93
|
+
# clean target folder
|
94
|
+
shutil.rmtree(freeze_path, ignore_errors=True)
|
95
|
+
|
96
|
+
# print(tabulate(files))
|
97
|
+
# copy the frozen files to the stubs
|
98
|
+
for f in files:
|
99
|
+
dest = freeze_path / f.target_path
|
100
|
+
log.trace(f"copying {f.full_path} to {f.target_path}")
|
101
|
+
dest.parent.mkdir(parents=True, exist_ok=True)
|
102
|
+
try:
|
103
|
+
shutil.copy(f.full_path, dest)
|
104
|
+
except OSError as er:
|
105
|
+
log.warning(f"error copying {f.full_path} to {dest}: {er}")
|
106
|
+
raise er
|
107
|
+
# try to continue
|
108
|
+
|
109
|
+
apply_frozen_module_fixes(freeze_path, mpy_path=mpy_path)
|
110
|
+
|
111
|
+
# make a module manifest
|
112
|
+
FAMILY = "micropython"
|
113
|
+
utils.make_manifest(freeze_path, FAMILY, port=port, board=board, version=version, stubtype="frozen")
|
stubber/freeze/get_frozen.py
CHANGED
@@ -1,127 +1,127 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
Collect modules and python stubs from MicroPython source projects (v1.12 +) and stores them in the all_stubs folder
|
4
|
-
The all_stubs folder should be mapped/symlinked to the micropython_stubs/stubs repo/folder
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
# Copyright (c) 2020 Jos Verlinde
|
9
|
-
# MIT license
|
10
|
-
# some functions used from micropython/micropython/tools/makemanifest.py,
|
11
|
-
# part of the MicroPython project, http://micropython.org/
|
12
|
-
# Copyright (c) 2019 Damien P. George
|
13
|
-
|
14
|
-
# locating frozen modules :
|
15
|
-
# tested on MicroPython v1.12 - v1.13
|
16
|
-
# - 1.16 - using manifests.py, include can specify kwargs
|
17
|
-
# - 1.13 - using manifests.py, and support for variant
|
18
|
-
# - 1.12 - using manifests.py, possible also include content of /port/modules folder ?
|
19
|
-
# - 1.11 and older - include content of /port/modules folder if it exists
|
20
|
-
import os
|
21
|
-
import shutil # start moving from os & glob to pathlib
|
22
|
-
from pathlib import Path
|
23
|
-
from typing import List, Optional
|
24
|
-
|
25
|
-
from loguru import logger as log
|
26
|
-
from packaging.version import Version
|
27
|
-
|
28
|
-
from stubber import utils
|
29
|
-
from stubber.freeze.freeze_folder import freeze_folders # Micropython < v1.12
|
30
|
-
from stubber.freeze.freeze_manifest_2 import freeze_one_manifest_2
|
31
|
-
from stubber.utils.config import CONFIG
|
32
|
-
from stubber.utils.versions import SET_PREVIEW, V_PREVIEW
|
33
|
-
|
34
|
-
FAMILY = "micropython"
|
35
|
-
|
36
|
-
|
37
|
-
def get_manifests(mpy_path: Path) -> List[Path]:
|
38
|
-
"""
|
39
|
-
Returns a list of all manifests.py files found in the ports folder of the MicroPython repo
|
40
|
-
"""
|
41
|
-
log.info(f"looking for manifests in {mpy_path}")
|
42
|
-
all_manifests = [
|
43
|
-
m.absolute()
|
44
|
-
for m in (mpy_path / "ports").rglob("manifest.py")
|
45
|
-
if Path(m).parent.name != "coverage" and "venv" not in m.parts and ".venv" not in m.parts
|
46
|
-
]
|
47
|
-
log.info(f"manifests found: {len(all_manifests)}")
|
48
|
-
return all_manifests
|
49
|
-
|
50
|
-
|
51
|
-
def add_comment_to_path(path: Path, comment: str) -> None:
|
52
|
-
"""
|
53
|
-
Add a comment to the top of each file in the path
|
54
|
-
using a codemod
|
55
|
-
"""
|
56
|
-
# TODO: #305 add comment line to each file with the micropython version it was generated from
|
57
|
-
# frozen_stub_path
|
58
|
-
# python -m libcst.tool codemod --include-stubs --no-format add_comment.AddComment .\repos\micropython-stubs\stubs\micropython-v1_19_1-frozen\ --comment "# Micropython 1.19.1 frozen stubs"
|
59
|
-
pass
|
60
|
-
|
61
|
-
|
62
|
-
def freeze_any(
|
63
|
-
stub_folder: Optional[Path] = None,
|
64
|
-
version: str = V_PREVIEW,
|
65
|
-
mpy_path: Optional[Path] = None,
|
66
|
-
mpy_lib_path: Optional[Path] = None,
|
67
|
-
) -> Path:
|
68
|
-
"""
|
69
|
-
Get and parse the to-be-frozen .py modules for micropython to extract the static type information
|
70
|
-
- requires that the MicroPython and Micropython-lib repos are checked out and available on a local path
|
71
|
-
- repos should be cloned side-by-side as some of the manifests refer to micropython-lib scripts using a relative path
|
72
|
-
|
73
|
-
The micropython-* repos must be checked out to the required version/tag.
|
74
|
-
|
75
|
-
"""
|
76
|
-
count = 0
|
77
|
-
current_dir = os.getcwd()
|
78
|
-
mpy_path = Path(mpy_path).absolute() if mpy_path else CONFIG.mpy_path.absolute()
|
79
|
-
mpy_lib_path = Path(mpy_lib_path).absolute() if mpy_lib_path else CONFIG.mpy_path.absolute()
|
80
|
-
|
81
|
-
# if old version of micropython, use the old freeze method
|
82
|
-
if version not in SET_PREVIEW and Version(version) <= Version("1.11"):
|
83
|
-
frozen_stub_path = get_fsp(version, stub_folder)
|
84
|
-
log.debug("MicroPython v1.11, older or other")
|
85
|
-
# others
|
86
|
-
modules = freeze_folders(frozen_stub_path.as_posix(), mpy_path.as_posix(), mpy_lib_path.as_posix(), version)
|
87
|
-
count = len(modules)
|
88
|
-
else:
|
89
|
-
# get the current checked out version
|
90
|
-
version = utils.checkedout_version(CONFIG.mpy_path)
|
91
|
-
|
92
|
-
frozen_stub_path = get_fsp(version, stub_folder)
|
93
|
-
# get the manifests of the different ports and boards
|
94
|
-
all_manifests = get_manifests(mpy_path)
|
95
|
-
|
96
|
-
# process all_manifests under the ports folder and update the frozen files in the stubs folder
|
97
|
-
# we are going to jump around, avoid relative paths
|
98
|
-
mpy_path = mpy_path.absolute()
|
99
|
-
mpy_lib_path = mpy_lib_path.absolute()
|
100
|
-
|
101
|
-
if len(all_manifests) > 0:
|
102
|
-
log.info(f"manifests: {len(all_manifests)}")
|
103
|
-
shutil.rmtree(frozen_stub_path, ignore_errors=True)
|
104
|
-
else:
|
105
|
-
log.warning("no manifests found")
|
106
|
-
for manifest in all_manifests:
|
107
|
-
try:
|
108
|
-
freeze_one_manifest_2(manifest, frozen_stub_path, mpy_path, mpy_lib_path, version)
|
109
|
-
count += 1
|
110
|
-
except Exception as e:
|
111
|
-
log.error(f"Error processing manifest {manifest} : {e}")
|
112
|
-
|
113
|
-
# add comment line to each file with the micropython version it was generated from
|
114
|
-
add_comment_to_path(frozen_stub_path, f"# Micropython {version} frozen stubs")
|
115
|
-
|
116
|
-
# restore cwd
|
117
|
-
os.chdir(current_dir)
|
118
|
-
return frozen_stub_path
|
119
|
-
|
120
|
-
|
121
|
-
def get_fsp(version: str, stub_folder: Optional[Path] = None) -> Path:
|
122
|
-
if not stub_folder:
|
123
|
-
frozen_stub_path = CONFIG.stub_path / f"{FAMILY}-{utils.clean_version(version, flat=True)}-frozen"
|
124
|
-
frozen_stub_path = frozen_stub_path.absolute()
|
125
|
-
else:
|
126
|
-
frozen_stub_path: Path = Path(stub_folder).absolute()
|
127
|
-
return frozen_stub_path
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Collect modules and python stubs from MicroPython source projects (v1.12 +) and stores them in the all_stubs folder
|
4
|
+
The all_stubs folder should be mapped/symlinked to the micropython_stubs/stubs repo/folder
|
5
|
+
|
6
|
+
"""
|
7
|
+
|
8
|
+
# Copyright (c) 2020 Jos Verlinde
|
9
|
+
# MIT license
|
10
|
+
# some functions used from micropython/micropython/tools/makemanifest.py,
|
11
|
+
# part of the MicroPython project, http://micropython.org/
|
12
|
+
# Copyright (c) 2019 Damien P. George
|
13
|
+
|
14
|
+
# locating frozen modules :
|
15
|
+
# tested on MicroPython v1.12 - v1.13
|
16
|
+
# - 1.16 - using manifests.py, include can specify kwargs
|
17
|
+
# - 1.13 - using manifests.py, and support for variant
|
18
|
+
# - 1.12 - using manifests.py, possible also include content of /port/modules folder ?
|
19
|
+
# - 1.11 and older - include content of /port/modules folder if it exists
|
20
|
+
import os
|
21
|
+
import shutil # start moving from os & glob to pathlib
|
22
|
+
from pathlib import Path
|
23
|
+
from typing import List, Optional
|
24
|
+
|
25
|
+
from loguru import logger as log
|
26
|
+
from packaging.version import Version
|
27
|
+
|
28
|
+
from stubber import utils
|
29
|
+
from stubber.freeze.freeze_folder import freeze_folders # Micropython < v1.12
|
30
|
+
from stubber.freeze.freeze_manifest_2 import freeze_one_manifest_2
|
31
|
+
from stubber.utils.config import CONFIG
|
32
|
+
from stubber.utils.versions import SET_PREVIEW, V_PREVIEW
|
33
|
+
|
34
|
+
FAMILY = "micropython"
|
35
|
+
|
36
|
+
|
37
|
+
def get_manifests(mpy_path: Path) -> List[Path]:
|
38
|
+
"""
|
39
|
+
Returns a list of all manifests.py files found in the ports folder of the MicroPython repo
|
40
|
+
"""
|
41
|
+
log.info(f"looking for manifests in {mpy_path}")
|
42
|
+
all_manifests = [
|
43
|
+
m.absolute()
|
44
|
+
for m in (mpy_path / "ports").rglob("manifest.py")
|
45
|
+
if Path(m).parent.name != "coverage" and "venv" not in m.parts and ".venv" not in m.parts
|
46
|
+
]
|
47
|
+
log.info(f"manifests found: {len(all_manifests)}")
|
48
|
+
return all_manifests
|
49
|
+
|
50
|
+
|
51
|
+
def add_comment_to_path(path: Path, comment: str) -> None:
|
52
|
+
"""
|
53
|
+
Add a comment to the top of each file in the path
|
54
|
+
using a codemod
|
55
|
+
"""
|
56
|
+
# TODO: #305 add comment line to each file with the micropython version it was generated from
|
57
|
+
# frozen_stub_path
|
58
|
+
# python -m libcst.tool codemod --include-stubs --no-format add_comment.AddComment .\repos\micropython-stubs\stubs\micropython-v1_19_1-frozen\ --comment "# Micropython 1.19.1 frozen stubs"
|
59
|
+
pass
|
60
|
+
|
61
|
+
|
62
|
+
def freeze_any(
|
63
|
+
stub_folder: Optional[Path] = None,
|
64
|
+
version: str = V_PREVIEW,
|
65
|
+
mpy_path: Optional[Path] = None,
|
66
|
+
mpy_lib_path: Optional[Path] = None,
|
67
|
+
) -> Path:
|
68
|
+
"""
|
69
|
+
Get and parse the to-be-frozen .py modules for micropython to extract the static type information
|
70
|
+
- requires that the MicroPython and Micropython-lib repos are checked out and available on a local path
|
71
|
+
- repos should be cloned side-by-side as some of the manifests refer to micropython-lib scripts using a relative path
|
72
|
+
|
73
|
+
The micropython-* repos must be checked out to the required version/tag.
|
74
|
+
|
75
|
+
"""
|
76
|
+
count = 0
|
77
|
+
current_dir = os.getcwd()
|
78
|
+
mpy_path = Path(mpy_path).absolute() if mpy_path else CONFIG.mpy_path.absolute()
|
79
|
+
mpy_lib_path = Path(mpy_lib_path).absolute() if mpy_lib_path else CONFIG.mpy_path.absolute()
|
80
|
+
|
81
|
+
# if old version of micropython, use the old freeze method
|
82
|
+
if version not in SET_PREVIEW and Version(version) <= Version("1.11"):
|
83
|
+
frozen_stub_path = get_fsp(version, stub_folder)
|
84
|
+
log.debug("MicroPython v1.11, older or other")
|
85
|
+
# others
|
86
|
+
modules = freeze_folders(frozen_stub_path.as_posix(), mpy_path.as_posix(), mpy_lib_path.as_posix(), version)
|
87
|
+
count = len(modules)
|
88
|
+
else:
|
89
|
+
# get the current checked out version
|
90
|
+
version = utils.checkedout_version(CONFIG.mpy_path)
|
91
|
+
|
92
|
+
frozen_stub_path = get_fsp(version, stub_folder)
|
93
|
+
# get the manifests of the different ports and boards
|
94
|
+
all_manifests = get_manifests(mpy_path)
|
95
|
+
|
96
|
+
# process all_manifests under the ports folder and update the frozen files in the stubs folder
|
97
|
+
# we are going to jump around, avoid relative paths
|
98
|
+
mpy_path = mpy_path.absolute()
|
99
|
+
mpy_lib_path = mpy_lib_path.absolute()
|
100
|
+
|
101
|
+
if len(all_manifests) > 0:
|
102
|
+
log.info(f"manifests: {len(all_manifests)}")
|
103
|
+
shutil.rmtree(frozen_stub_path, ignore_errors=True)
|
104
|
+
else:
|
105
|
+
log.warning("no manifests found")
|
106
|
+
for manifest in all_manifests:
|
107
|
+
try:
|
108
|
+
freeze_one_manifest_2(manifest, frozen_stub_path, mpy_path, mpy_lib_path, version)
|
109
|
+
count += 1
|
110
|
+
except Exception as e:
|
111
|
+
log.error(f"Error processing manifest {manifest} : {e}")
|
112
|
+
|
113
|
+
# add comment line to each file with the micropython version it was generated from
|
114
|
+
add_comment_to_path(frozen_stub_path, f"# Micropython {version} frozen stubs")
|
115
|
+
|
116
|
+
# restore cwd
|
117
|
+
os.chdir(current_dir)
|
118
|
+
return frozen_stub_path
|
119
|
+
|
120
|
+
|
121
|
+
def get_fsp(version: str, stub_folder: Optional[Path] = None) -> Path:
|
122
|
+
if not stub_folder:
|
123
|
+
frozen_stub_path = CONFIG.stub_path / f"{FAMILY}-{utils.clean_version(version, flat=True)}-frozen"
|
124
|
+
frozen_stub_path = frozen_stub_path.absolute()
|
125
|
+
else:
|
126
|
+
frozen_stub_path: Path = Path(stub_folder).absolute()
|
127
|
+
return frozen_stub_path
|