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
stubber/codemod/enrich.py
CHANGED
@@ -1,145 +1,145 @@
|
|
1
|
-
"""
|
2
|
-
Enrich MCU stubs by copying docstrings and parameter information from doc-stubs or python source code.
|
3
|
-
Both (.py or .pyi) files are supported.
|
4
|
-
"""
|
5
|
-
|
6
|
-
from pathlib import Path
|
7
|
-
from typing import Any, Dict, Optional
|
8
|
-
|
9
|
-
from libcst.codemod import CodemodContext, diff_code, exec_transform_with_prettyprint
|
10
|
-
from libcst.tool import _default_config # type: ignore
|
11
|
-
from loguru import logger as log
|
12
|
-
|
13
|
-
import stubber.codemod.merge_docstub as merge_docstub
|
14
|
-
from stubber.utils.post import run_black
|
15
|
-
|
16
|
-
##########################################################################################
|
17
|
-
# # log = logging.getLogger(__name__)
|
18
|
-
# logging.basicConfig(level=logging.INFO)
|
19
|
-
#########################################################################################
|
20
|
-
|
21
|
-
|
22
|
-
def enrich_file(
|
23
|
-
target_path: Path,
|
24
|
-
docstub_path: Path,
|
25
|
-
diff: bool = False,
|
26
|
-
write_back: bool = False,
|
27
|
-
package_name="",
|
28
|
-
) -> Optional[str]:
|
29
|
-
"""
|
30
|
-
Enrich a MCU stubs using the doc-stubs in another folder.
|
31
|
-
Both (.py or .pyi) files are supported.
|
32
|
-
|
33
|
-
Parameters:
|
34
|
-
source_path: the path to the firmware stub to enrich
|
35
|
-
docstub_path: the path to the folder containing the doc-stubs
|
36
|
-
diff: if True, return the diff between the original and the enriched source file
|
37
|
-
write_back: if True, write the enriched source file back to the source_path
|
38
|
-
|
39
|
-
Returns:
|
40
|
-
- None or a string containing the diff between the original and the enriched source file
|
41
|
-
"""
|
42
|
-
config: Dict[str, Any] = _default_config()
|
43
|
-
context = CodemodContext()
|
44
|
-
if not package_name:
|
45
|
-
package_name = (
|
46
|
-
target_path.stem if target_path.stem != "__init__" else target_path.parent.stem
|
47
|
-
)
|
48
|
-
|
49
|
-
# find a matching doc-stub file in the docstub_path
|
50
|
-
docstub_file = None
|
51
|
-
if docstub_path.is_file():
|
52
|
-
candidates = [docstub_path]
|
53
|
-
else:
|
54
|
-
candidates = []
|
55
|
-
for ext in [".py", ".pyi"]:
|
56
|
-
candidates = list(docstub_path.rglob(package_name + ext))
|
57
|
-
if package_name[0].lower() == "u":
|
58
|
-
# also look for candidates without leading u ( usys.py <- sys.py)
|
59
|
-
candidates += list(docstub_path.rglob(package_name[1:] + ext))
|
60
|
-
elif package_name[0] == "_":
|
61
|
-
# also look for candidates without leading _ ( _rp2.py <- rp2.py )
|
62
|
-
candidates += list(docstub_path.rglob(package_name[1:] + ext))
|
63
|
-
else:
|
64
|
-
# also look for candidates with leading u ( sys.py <- usys.py)
|
65
|
-
candidates += list(docstub_path.rglob("u" + package_name + ext))
|
66
|
-
|
67
|
-
for docstub_file in candidates:
|
68
|
-
if docstub_file.exists():
|
69
|
-
break
|
70
|
-
else:
|
71
|
-
docstub_file = None
|
72
|
-
if not docstub_file:
|
73
|
-
raise FileNotFoundError(f"No doc-stub file found for {target_path}")
|
74
|
-
|
75
|
-
log.debug(f"Merge {target_path} from {docstub_file}")
|
76
|
-
# read source file
|
77
|
-
old_code = target_path.read_text(encoding="utf-8")
|
78
|
-
|
79
|
-
codemod_instance = merge_docstub.MergeCommand(context, docstub_file=docstub_file)
|
80
|
-
if not (
|
81
|
-
new_code := exec_transform_with_prettyprint(
|
82
|
-
codemod_instance,
|
83
|
-
old_code,
|
84
|
-
# include_generated=False,
|
85
|
-
generated_code_marker=config["generated_code_marker"],
|
86
|
-
# format_code=not args.no_format,
|
87
|
-
formatter_args=config["formatter"],
|
88
|
-
# python_version=args.python_version,
|
89
|
-
)
|
90
|
-
):
|
91
|
-
return None
|
92
|
-
if write_back:
|
93
|
-
log.trace(f"Write back enriched file {target_path}")
|
94
|
-
# write updated code to file
|
95
|
-
target_path.write_text(new_code, encoding="utf-8")
|
96
|
-
return diff_code(old_code, new_code, 5, filename=target_path.name) if diff else new_code
|
97
|
-
|
98
|
-
|
99
|
-
def enrich_folder(
|
100
|
-
source_path: Path,
|
101
|
-
docstub_path: Path,
|
102
|
-
show_diff: bool = False,
|
103
|
-
write_back: bool = False,
|
104
|
-
require_docstub: bool = False,
|
105
|
-
package_name: str = "",
|
106
|
-
) -> int:
|
107
|
-
"""\
|
108
|
-
Enrich a folder with containing MCU stubs using the doc-stubs in another folder.
|
109
|
-
|
110
|
-
Returns the number of files enriched.
|
111
|
-
"""
|
112
|
-
if not source_path.exists():
|
113
|
-
raise FileNotFoundError(f"Source {source_path} does not exist")
|
114
|
-
if not docstub_path.exists():
|
115
|
-
raise FileNotFoundError(f"Docstub {docstub_path} does not exist")
|
116
|
-
count = 0
|
117
|
-
# list all the .py and .pyi files in the source folder
|
118
|
-
if source_path.is_file():
|
119
|
-
source_files = [source_path]
|
120
|
-
else:
|
121
|
-
source_files = sorted(
|
122
|
-
list(source_path.rglob("**/*.py")) + list(source_path.rglob("**/*.pyi"))
|
123
|
-
)
|
124
|
-
for source_file in source_files:
|
125
|
-
try:
|
126
|
-
diff = enrich_file(
|
127
|
-
source_file,
|
128
|
-
docstub_path,
|
129
|
-
diff=True,
|
130
|
-
write_back=write_back,
|
131
|
-
package_name=package_name,
|
132
|
-
)
|
133
|
-
if diff:
|
134
|
-
count += 1
|
135
|
-
if show_diff:
|
136
|
-
print(diff)
|
137
|
-
except FileNotFoundError as e:
|
138
|
-
# no docstub to enrich with
|
139
|
-
if require_docstub:
|
140
|
-
raise (FileNotFoundError(f"No doc-stub file found for {source_file}")) from e
|
141
|
-
# run black on the destination folder
|
142
|
-
run_black(source_path)
|
143
|
-
# DO NOT run Autoflake as this removes some relevant (unused) imports
|
144
|
-
|
145
|
-
return count
|
1
|
+
"""
|
2
|
+
Enrich MCU stubs by copying docstrings and parameter information from doc-stubs or python source code.
|
3
|
+
Both (.py or .pyi) files are supported.
|
4
|
+
"""
|
5
|
+
|
6
|
+
from pathlib import Path
|
7
|
+
from typing import Any, Dict, Optional
|
8
|
+
|
9
|
+
from libcst.codemod import CodemodContext, diff_code, exec_transform_with_prettyprint
|
10
|
+
from libcst.tool import _default_config # type: ignore
|
11
|
+
from loguru import logger as log
|
12
|
+
|
13
|
+
import stubber.codemod.merge_docstub as merge_docstub
|
14
|
+
from stubber.utils.post import run_black
|
15
|
+
|
16
|
+
##########################################################################################
|
17
|
+
# # log = logging.getLogger(__name__)
|
18
|
+
# logging.basicConfig(level=logging.INFO)
|
19
|
+
#########################################################################################
|
20
|
+
|
21
|
+
|
22
|
+
def enrich_file(
|
23
|
+
target_path: Path,
|
24
|
+
docstub_path: Path,
|
25
|
+
diff: bool = False,
|
26
|
+
write_back: bool = False,
|
27
|
+
package_name="",
|
28
|
+
) -> Optional[str]:
|
29
|
+
"""
|
30
|
+
Enrich a MCU stubs using the doc-stubs in another folder.
|
31
|
+
Both (.py or .pyi) files are supported.
|
32
|
+
|
33
|
+
Parameters:
|
34
|
+
source_path: the path to the firmware stub to enrich
|
35
|
+
docstub_path: the path to the folder containing the doc-stubs
|
36
|
+
diff: if True, return the diff between the original and the enriched source file
|
37
|
+
write_back: if True, write the enriched source file back to the source_path
|
38
|
+
|
39
|
+
Returns:
|
40
|
+
- None or a string containing the diff between the original and the enriched source file
|
41
|
+
"""
|
42
|
+
config: Dict[str, Any] = _default_config()
|
43
|
+
context = CodemodContext()
|
44
|
+
if not package_name:
|
45
|
+
package_name = (
|
46
|
+
target_path.stem if target_path.stem != "__init__" else target_path.parent.stem
|
47
|
+
)
|
48
|
+
|
49
|
+
# find a matching doc-stub file in the docstub_path
|
50
|
+
docstub_file = None
|
51
|
+
if docstub_path.is_file():
|
52
|
+
candidates = [docstub_path]
|
53
|
+
else:
|
54
|
+
candidates = []
|
55
|
+
for ext in [".py", ".pyi"]:
|
56
|
+
candidates = list(docstub_path.rglob(package_name + ext))
|
57
|
+
if package_name[0].lower() == "u":
|
58
|
+
# also look for candidates without leading u ( usys.py <- sys.py)
|
59
|
+
candidates += list(docstub_path.rglob(package_name[1:] + ext))
|
60
|
+
elif package_name[0] == "_":
|
61
|
+
# also look for candidates without leading _ ( _rp2.py <- rp2.py )
|
62
|
+
candidates += list(docstub_path.rglob(package_name[1:] + ext))
|
63
|
+
else:
|
64
|
+
# also look for candidates with leading u ( sys.py <- usys.py)
|
65
|
+
candidates += list(docstub_path.rglob("u" + package_name + ext))
|
66
|
+
|
67
|
+
for docstub_file in candidates:
|
68
|
+
if docstub_file.exists():
|
69
|
+
break
|
70
|
+
else:
|
71
|
+
docstub_file = None
|
72
|
+
if not docstub_file:
|
73
|
+
raise FileNotFoundError(f"No doc-stub file found for {target_path}")
|
74
|
+
|
75
|
+
log.debug(f"Merge {target_path} from {docstub_file}")
|
76
|
+
# read source file
|
77
|
+
old_code = target_path.read_text(encoding="utf-8")
|
78
|
+
|
79
|
+
codemod_instance = merge_docstub.MergeCommand(context, docstub_file=docstub_file)
|
80
|
+
if not (
|
81
|
+
new_code := exec_transform_with_prettyprint(
|
82
|
+
codemod_instance,
|
83
|
+
old_code,
|
84
|
+
# include_generated=False,
|
85
|
+
generated_code_marker=config["generated_code_marker"],
|
86
|
+
# format_code=not args.no_format,
|
87
|
+
formatter_args=config["formatter"],
|
88
|
+
# python_version=args.python_version,
|
89
|
+
)
|
90
|
+
):
|
91
|
+
return None
|
92
|
+
if write_back:
|
93
|
+
log.trace(f"Write back enriched file {target_path}")
|
94
|
+
# write updated code to file
|
95
|
+
target_path.write_text(new_code, encoding="utf-8")
|
96
|
+
return diff_code(old_code, new_code, 5, filename=target_path.name) if diff else new_code
|
97
|
+
|
98
|
+
|
99
|
+
def enrich_folder(
|
100
|
+
source_path: Path,
|
101
|
+
docstub_path: Path,
|
102
|
+
show_diff: bool = False,
|
103
|
+
write_back: bool = False,
|
104
|
+
require_docstub: bool = False,
|
105
|
+
package_name: str = "",
|
106
|
+
) -> int:
|
107
|
+
"""\
|
108
|
+
Enrich a folder with containing MCU stubs using the doc-stubs in another folder.
|
109
|
+
|
110
|
+
Returns the number of files enriched.
|
111
|
+
"""
|
112
|
+
if not source_path.exists():
|
113
|
+
raise FileNotFoundError(f"Source {source_path} does not exist")
|
114
|
+
if not docstub_path.exists():
|
115
|
+
raise FileNotFoundError(f"Docstub {docstub_path} does not exist")
|
116
|
+
count = 0
|
117
|
+
# list all the .py and .pyi files in the source folder
|
118
|
+
if source_path.is_file():
|
119
|
+
source_files = [source_path]
|
120
|
+
else:
|
121
|
+
source_files = sorted(
|
122
|
+
list(source_path.rglob("**/*.py")) + list(source_path.rglob("**/*.pyi"))
|
123
|
+
)
|
124
|
+
for source_file in source_files:
|
125
|
+
try:
|
126
|
+
diff = enrich_file(
|
127
|
+
source_file,
|
128
|
+
docstub_path,
|
129
|
+
diff=True,
|
130
|
+
write_back=write_back,
|
131
|
+
package_name=package_name,
|
132
|
+
)
|
133
|
+
if diff:
|
134
|
+
count += 1
|
135
|
+
if show_diff:
|
136
|
+
print(diff)
|
137
|
+
except FileNotFoundError as e:
|
138
|
+
# no docstub to enrich with
|
139
|
+
if require_docstub:
|
140
|
+
raise (FileNotFoundError(f"No doc-stub file found for {source_file}")) from e
|
141
|
+
# run black on the destination folder
|
142
|
+
run_black(source_path)
|
143
|
+
# DO NOT run Autoflake as this removes some relevant (unused) imports
|
144
|
+
|
145
|
+
return count
|