micropython-stubber 1.23.1.post1__py3-none-any.whl → 1.23.2__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.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/LICENSE +30 -30
  2. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/METADATA +4 -4
  3. micropython_stubber-1.23.2.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 +284 -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 +210 -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 +43 -43
  44. mpflash/mpflash/mpremoteboard/__init__.py +266 -266
  45. mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -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 +1599 -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 +1004 -986
  59. stubber/board/createstubs_db.py +826 -825
  60. stubber/board/createstubs_db_min.py +332 -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 +767 -766
  65. stubber/board/createstubs_mem_min.py +307 -306
  66. stubber/board/createstubs_mem_mpy.mpy +0 -0
  67. stubber/board/createstubs_min.py +295 -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 +437 -437
  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 +151 -145
  83. stubber/codemod/merge_docstub.py +284 -284
  84. stubber/codemod/modify_list.py +54 -54
  85. stubber/codemod/utils.py +56 -56
  86. stubber/commands/build_cmd.py +94 -94
  87. stubber/commands/cli.py +49 -49
  88. stubber/commands/clone_cmd.py +78 -78
  89. stubber/commands/config_cmd.py +29 -29
  90. stubber/commands/enrich_folder_cmd.py +71 -71
  91. stubber/commands/get_core_cmd.py +71 -71
  92. stubber/commands/get_docstubs_cmd.py +92 -92
  93. stubber/commands/get_frozen_cmd.py +117 -117
  94. stubber/commands/get_mcu_cmd.py +102 -102
  95. stubber/commands/merge_cmd.py +66 -66
  96. stubber/commands/publish_cmd.py +118 -118
  97. stubber/commands/stub_cmd.py +31 -31
  98. stubber/commands/switch_cmd.py +62 -62
  99. stubber/commands/variants_cmd.py +48 -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 +37 -37
  107. stubber/freeze/common.py +72 -72
  108. stubber/freeze/freeze_folder.py +69 -69
  109. stubber/freeze/freeze_manifest_2.py +126 -126
  110. stubber/freeze/get_frozen.py +131 -131
  111. stubber/get_cpython.py +112 -112
  112. stubber/get_lobo.py +59 -59
  113. stubber/minify.py +423 -423
  114. stubber/publish/bump.py +86 -86
  115. stubber/publish/candidates.py +275 -275
  116. stubber/publish/database.py +18 -18
  117. stubber/publish/defaults.py +40 -40
  118. stubber/publish/enums.py +24 -24
  119. stubber/publish/helpers.py +29 -29
  120. stubber/publish/merge_docstubs.py +136 -132
  121. stubber/publish/missing_class_methods.py +51 -51
  122. stubber/publish/package.py +150 -150
  123. stubber/publish/pathnames.py +51 -51
  124. stubber/publish/publish.py +120 -120
  125. stubber/publish/pypi.py +42 -42
  126. stubber/publish/stubpackage.py +1055 -1051
  127. stubber/rst/__init__.py +9 -9
  128. stubber/rst/classsort.py +78 -78
  129. stubber/rst/lookup.py +533 -531
  130. stubber/rst/output_dict.py +401 -401
  131. stubber/rst/reader.py +814 -814
  132. stubber/rst/report_return.py +77 -77
  133. stubber/rst/rst_utils.py +541 -541
  134. stubber/stubber.py +38 -38
  135. stubber/stubs_from_docs.py +90 -90
  136. stubber/tools/manifestfile.py +654 -654
  137. stubber/tools/readme.md +6 -6
  138. stubber/update_fallback.py +117 -117
  139. stubber/update_module_list.py +123 -123
  140. stubber/utils/__init__.py +6 -6
  141. stubber/utils/config.py +137 -137
  142. stubber/utils/makeversionhdr.py +54 -54
  143. stubber/utils/manifest.py +90 -90
  144. stubber/utils/post.py +80 -80
  145. stubber/utils/repos.py +156 -156
  146. stubber/utils/stubmaker.py +139 -139
  147. stubber/utils/typed_config_toml.py +80 -80
  148. stubber/variants.py +106 -106
  149. micropython_stubber-1.23.1.post1.dist-info/RECORD +0 -159
  150. mpflash/basicgit.py +0 -288
  151. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/WHEEL +0 -0
  152. {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/entry_points.txt +0 -0
@@ -1,126 +1,126 @@
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 mpflash.logger import 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(
55
- manifest: Path, frozen_stub_path: Path, mpy_path: Path, mpy_lib_path: Path, version: str
56
- ):
57
- # apparently there can be multiple manifest files to a board ?
58
- # save cwd for 'misbehaving' older esp8266 manifest files
59
- cwd = Path.cwd()
60
- # so we need to get the port and board from the path
61
- log.debug(f"input_manifest: {manifest}")
62
- port, board = get_portboard(manifest)
63
-
64
- log.info("port-board: {}".format((port + "-" + board).rstrip("-")))
65
-
66
- path_vars = make_path_vars(
67
- port=port, board=board, mpy_path=mpy_path, mpy_lib_path=mpy_lib_path
68
- )
69
- upy_manifest = ManifestFile(MODE_FREEZE, path_vars)
70
- try:
71
- # assume manifestneeds to be run from the port's folder
72
- os.chdir(path_vars["PORT_DIR"])
73
- upy_manifest.execute(manifest.as_posix())
74
- except ManifestFileError as er:
75
- log.error('freeze error executing "{}": {}'.format(manifest, er.args[0]))
76
- raise er
77
- log.debug(f"total {len(upy_manifest.files())} files")
78
-
79
- # restore working directory
80
- os.chdir(cwd)
81
- # save the frozen files to the stubs
82
- copy_frozen_to_stubs(
83
- frozen_stub_path, port, board, upy_manifest.files(), version, mpy_path=mpy_path
84
- )
85
-
86
-
87
- def copy_frozen_to_stubs(
88
- stub_path: Path,
89
- port: str,
90
- board: str,
91
- files: List[ManifestOutput],
92
- version: str,
93
- mpy_path: Path,
94
- ):
95
- """
96
- copy the frozen files from the manifest to the stubs folder
97
-
98
- stubpath = the destination : # stubs/{family}-{version}-frozen
99
- """
100
- freeze_path, board = get_freeze_path(stub_path, port, board)
101
-
102
- log.debug(f"copy frozen: {port}-{board} to {freeze_path}")
103
- freeze_path.mkdir(parents=True, exist_ok=True)
104
- # clean target folder
105
- shutil.rmtree(freeze_path, ignore_errors=True)
106
-
107
- # print(tabulate(files))
108
- # copy the frozen files to the stubs
109
- for f in files:
110
- dest = freeze_path / f.target_path
111
- log.trace(f"copying {f.full_path} to {f.target_path}")
112
- dest.parent.mkdir(parents=True, exist_ok=True)
113
- try:
114
- shutil.copy(f.full_path, dest)
115
- except OSError as er:
116
- log.warning(f"error copying {f.full_path} to {dest}: {er}")
117
- raise er
118
- # try to continue
119
-
120
- apply_frozen_module_fixes(freeze_path, mpy_path=mpy_path)
121
-
122
- # make a module manifest
123
- FAMILY = "micropython"
124
- utils.make_manifest(
125
- freeze_path, FAMILY, port=port, board=board, version=version, stubtype="frozen"
126
- )
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 mpflash.logger import 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(
55
+ manifest: Path, frozen_stub_path: Path, mpy_path: Path, mpy_lib_path: Path, version: str
56
+ ):
57
+ # apparently there can be multiple manifest files to a board ?
58
+ # save cwd for 'misbehaving' older esp8266 manifest files
59
+ cwd = Path.cwd()
60
+ # so we need to get the port and board from the path
61
+ log.debug(f"input_manifest: {manifest}")
62
+ port, board = get_portboard(manifest)
63
+
64
+ log.info("port-board: {}".format((port + "-" + board).rstrip("-")))
65
+
66
+ path_vars = make_path_vars(
67
+ port=port, board=board, mpy_path=mpy_path, mpy_lib_path=mpy_lib_path
68
+ )
69
+ upy_manifest = ManifestFile(MODE_FREEZE, path_vars)
70
+ try:
71
+ # assume manifestneeds to be run from the port's folder
72
+ os.chdir(path_vars["PORT_DIR"])
73
+ upy_manifest.execute(manifest.as_posix())
74
+ except ManifestFileError as er:
75
+ log.error('freeze error executing "{}": {}'.format(manifest, er.args[0]))
76
+ raise er
77
+ log.debug(f"total {len(upy_manifest.files())} files")
78
+
79
+ # restore working directory
80
+ os.chdir(cwd)
81
+ # save the frozen files to the stubs
82
+ copy_frozen_to_stubs(
83
+ frozen_stub_path, port, board, upy_manifest.files(), version, mpy_path=mpy_path
84
+ )
85
+
86
+
87
+ def copy_frozen_to_stubs(
88
+ stub_path: Path,
89
+ port: str,
90
+ board: str,
91
+ files: List[ManifestOutput],
92
+ version: str,
93
+ mpy_path: Path,
94
+ ):
95
+ """
96
+ copy the frozen files from the manifest to the stubs folder
97
+
98
+ stubpath = the destination : # stubs/{family}-{version}-frozen
99
+ """
100
+ freeze_path, board = get_freeze_path(stub_path, port, board)
101
+
102
+ log.debug(f"copy frozen: {port}-{board} to {freeze_path}")
103
+ freeze_path.mkdir(parents=True, exist_ok=True)
104
+ # clean target folder
105
+ shutil.rmtree(freeze_path, ignore_errors=True)
106
+
107
+ # print(tabulate(files))
108
+ # copy the frozen files to the stubs
109
+ for f in files:
110
+ dest = freeze_path / f.target_path
111
+ log.trace(f"copying {f.full_path} to {f.target_path}")
112
+ dest.parent.mkdir(parents=True, exist_ok=True)
113
+ try:
114
+ shutil.copy(f.full_path, dest)
115
+ except OSError as er:
116
+ log.warning(f"error copying {f.full_path} to {dest}: {er}")
117
+ raise er
118
+ # try to continue
119
+
120
+ apply_frozen_module_fixes(freeze_path, mpy_path=mpy_path)
121
+
122
+ # make a module manifest
123
+ FAMILY = "micropython"
124
+ utils.make_manifest(
125
+ freeze_path, FAMILY, port=port, board=board, version=version, stubtype="frozen"
126
+ )
@@ -1,131 +1,131 @@
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 mpflash.logger import log
26
- from packaging.version import Version
27
-
28
- from mpflash.versions import SET_PREVIEW, V_PREVIEW
29
- from stubber import utils
30
- from stubber.freeze.freeze_folder import freeze_folders # Micropython < v1.12
31
- from stubber.freeze.freeze_manifest_2 import freeze_one_manifest_2
32
- from stubber.utils.config import CONFIG
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(
87
- frozen_stub_path.as_posix(), mpy_path.as_posix(), mpy_lib_path.as_posix(), version
88
- )
89
- count = len(modules)
90
- else:
91
- # get the current checked out version
92
- version = utils.checkedout_version(CONFIG.mpy_path)
93
-
94
- frozen_stub_path = get_fsp(version, stub_folder)
95
- # get the manifests of the different ports and boards
96
- all_manifests = get_manifests(mpy_path)
97
-
98
- # process all_manifests under the ports folder and update the frozen files in the stubs folder
99
- # we are going to jump around, avoid relative paths
100
- mpy_path = mpy_path.absolute()
101
- mpy_lib_path = mpy_lib_path.absolute()
102
-
103
- if len(all_manifests) > 0:
104
- log.info(f"manifests: {len(all_manifests)}")
105
- shutil.rmtree(frozen_stub_path, ignore_errors=True)
106
- else:
107
- log.warning("no manifests found")
108
- for manifest in all_manifests:
109
- try:
110
- freeze_one_manifest_2(manifest, frozen_stub_path, mpy_path, mpy_lib_path, version)
111
- count += 1
112
- except Exception as e:
113
- log.error(f"Error processing manifest {manifest} : {e}")
114
-
115
- # add comment line to each file with the micropython version it was generated from
116
- add_comment_to_path(frozen_stub_path, f"# Micropython {version} frozen stubs")
117
-
118
- # restore cwd
119
- os.chdir(current_dir)
120
- return frozen_stub_path
121
-
122
-
123
- def get_fsp(version: str, stub_folder: Optional[Path] = None) -> Path:
124
- if not stub_folder:
125
- frozen_stub_path = (
126
- CONFIG.stub_path / f"{FAMILY}-{utils.clean_version(version, flat=True)}-frozen"
127
- )
128
- frozen_stub_path = frozen_stub_path.absolute()
129
- else:
130
- frozen_stub_path: Path = Path(stub_folder).absolute()
131
- 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 mpflash.logger import log
26
+ from packaging.version import Version
27
+
28
+ from mpflash.versions import SET_PREVIEW, V_PREVIEW
29
+ from stubber import utils
30
+ from stubber.freeze.freeze_folder import freeze_folders # Micropython < v1.12
31
+ from stubber.freeze.freeze_manifest_2 import freeze_one_manifest_2
32
+ from stubber.utils.config import CONFIG
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(
87
+ frozen_stub_path.as_posix(), mpy_path.as_posix(), mpy_lib_path.as_posix(), version
88
+ )
89
+ count = len(modules)
90
+ else:
91
+ # get the current checked out version
92
+ version = utils.checkedout_version(CONFIG.mpy_path)
93
+
94
+ frozen_stub_path = get_fsp(version, stub_folder)
95
+ # get the manifests of the different ports and boards
96
+ all_manifests = get_manifests(mpy_path)
97
+
98
+ # process all_manifests under the ports folder and update the frozen files in the stubs folder
99
+ # we are going to jump around, avoid relative paths
100
+ mpy_path = mpy_path.absolute()
101
+ mpy_lib_path = mpy_lib_path.absolute()
102
+
103
+ if len(all_manifests) > 0:
104
+ log.info(f"manifests: {len(all_manifests)}")
105
+ shutil.rmtree(frozen_stub_path, ignore_errors=True)
106
+ else:
107
+ log.warning("no manifests found")
108
+ for manifest in all_manifests:
109
+ try:
110
+ freeze_one_manifest_2(manifest, frozen_stub_path, mpy_path, mpy_lib_path, version)
111
+ count += 1
112
+ except Exception as e:
113
+ log.error(f"Error processing manifest {manifest} : {e}")
114
+
115
+ # add comment line to each file with the micropython version it was generated from
116
+ add_comment_to_path(frozen_stub_path, f"# Micropython {version} frozen stubs")
117
+
118
+ # restore cwd
119
+ os.chdir(current_dir)
120
+ return frozen_stub_path
121
+
122
+
123
+ def get_fsp(version: str, stub_folder: Optional[Path] = None) -> Path:
124
+ if not stub_folder:
125
+ frozen_stub_path = (
126
+ CONFIG.stub_path / f"{FAMILY}-{utils.clean_version(version, flat=True)}-frozen"
127
+ )
128
+ frozen_stub_path = frozen_stub_path.absolute()
129
+ else:
130
+ frozen_stub_path: Path = Path(stub_folder).absolute()
131
+ return frozen_stub_path