micropython-stubber 1.23.1__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.
- {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/LICENSE +30 -30
- {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/METADATA +32 -15
- micropython_stubber-1.23.2.dist-info/RECORD +158 -0
- micropython_stubber-1.23.2.dist-info/entry_points.txt +5 -0
- mpflash/README.md +220 -194
- mpflash/libusb_flash.ipynb +203 -203
- mpflash/mpflash/add_firmware.py +98 -98
- mpflash/mpflash/ask_input.py +236 -236
- mpflash/mpflash/basicgit.py +284 -284
- mpflash/mpflash/bootloader/__init__.py +2 -2
- mpflash/mpflash/bootloader/activate.py +60 -60
- mpflash/mpflash/bootloader/detect.py +82 -82
- mpflash/mpflash/bootloader/manual.py +101 -101
- mpflash/mpflash/bootloader/micropython.py +12 -12
- mpflash/mpflash/bootloader/touch1200.py +36 -36
- mpflash/mpflash/cli_download.py +129 -129
- mpflash/mpflash/cli_flash.py +224 -219
- mpflash/mpflash/cli_group.py +111 -111
- mpflash/mpflash/cli_list.py +87 -81
- mpflash/mpflash/cli_main.py +39 -39
- mpflash/mpflash/common.py +210 -165
- mpflash/mpflash/config.py +44 -44
- mpflash/mpflash/connected.py +96 -78
- mpflash/mpflash/download.py +364 -364
- mpflash/mpflash/downloaded.py +130 -130
- mpflash/mpflash/errors.py +9 -9
- mpflash/mpflash/flash/__init__.py +55 -55
- mpflash/mpflash/flash/esp.py +59 -59
- mpflash/mpflash/flash/stm32.py +19 -19
- mpflash/mpflash/flash/stm32_dfu.py +104 -104
- mpflash/mpflash/flash/uf2/__init__.py +88 -88
- mpflash/mpflash/flash/uf2/boardid.py +15 -15
- mpflash/mpflash/flash/uf2/linux.py +136 -130
- mpflash/mpflash/flash/uf2/macos.py +42 -42
- mpflash/mpflash/flash/uf2/uf2disk.py +12 -12
- mpflash/mpflash/flash/uf2/windows.py +43 -43
- mpflash/mpflash/flash/worklist.py +170 -170
- mpflash/mpflash/list.py +106 -99
- mpflash/mpflash/logger.py +41 -41
- mpflash/mpflash/mpboard_id/__init__.py +93 -93
- mpflash/mpflash/mpboard_id/add_boards.py +251 -251
- 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 +266 -222
- mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
- mpflash/mpflash/mpremoteboard/runner.py +140 -140
- 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/versions.py +135 -135
- mpflash/poetry.lock +1599 -1599
- mpflash/pyproject.toml +65 -65
- mpflash/stm32_udev_rules.md +62 -62
- stubber/__init__.py +3 -3
- stubber/board/board_info.csv +193 -193
- stubber/board/boot.py +34 -34
- stubber/board/createstubs.py +1004 -986
- stubber/board/createstubs_db.py +826 -825
- stubber/board/createstubs_db_min.py +332 -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 +767 -766
- stubber/board/createstubs_mem_min.py +307 -306
- stubber/board/createstubs_mem_mpy.mpy +0 -0
- stubber/board/createstubs_min.py +295 -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 +437 -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 +151 -145
- stubber/codemod/merge_docstub.py +284 -284
- stubber/codemod/modify_list.py +54 -54
- stubber/codemod/utils.py +56 -56
- stubber/commands/build_cmd.py +94 -94
- stubber/commands/cli.py +49 -55
- stubber/commands/clone_cmd.py +78 -78
- stubber/commands/config_cmd.py +29 -29
- stubber/commands/enrich_folder_cmd.py +71 -71
- stubber/commands/get_core_cmd.py +71 -71
- stubber/commands/get_docstubs_cmd.py +92 -89
- stubber/commands/get_frozen_cmd.py +117 -114
- stubber/commands/get_mcu_cmd.py +102 -61
- stubber/commands/merge_cmd.py +66 -66
- stubber/commands/publish_cmd.py +118 -118
- stubber/commands/stub_cmd.py +31 -31
- stubber/commands/switch_cmd.py +62 -62
- stubber/commands/variants_cmd.py +48 -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 +37 -36
- stubber/freeze/common.py +72 -68
- stubber/freeze/freeze_folder.py +69 -69
- stubber/freeze/freeze_manifest_2.py +126 -113
- stubber/freeze/get_frozen.py +131 -127
- stubber/get_cpython.py +112 -101
- stubber/get_lobo.py +59 -59
- stubber/minify.py +423 -419
- stubber/publish/bump.py +86 -86
- stubber/publish/candidates.py +275 -256
- stubber/publish/database.py +18 -18
- stubber/publish/defaults.py +40 -40
- stubber/publish/enums.py +24 -24
- stubber/publish/helpers.py +29 -29
- stubber/publish/merge_docstubs.py +136 -130
- stubber/publish/missing_class_methods.py +51 -49
- stubber/publish/package.py +150 -146
- stubber/publish/pathnames.py +51 -51
- stubber/publish/publish.py +120 -120
- stubber/publish/pypi.py +42 -38
- stubber/publish/stubpackage.py +1055 -1027
- stubber/rst/__init__.py +9 -9
- stubber/rst/classsort.py +78 -77
- stubber/rst/lookup.py +533 -530
- stubber/rst/output_dict.py +401 -401
- stubber/rst/reader.py +814 -814
- stubber/rst/report_return.py +77 -69
- stubber/rst/rst_utils.py +541 -540
- stubber/stubber.py +38 -38
- stubber/stubs_from_docs.py +90 -90
- stubber/tools/manifestfile.py +654 -654
- stubber/tools/readme.md +6 -6
- stubber/update_fallback.py +117 -117
- stubber/update_module_list.py +123 -123
- stubber/utils/__init__.py +6 -6
- stubber/utils/config.py +137 -125
- stubber/utils/makeversionhdr.py +54 -54
- stubber/utils/manifest.py +90 -90
- stubber/utils/post.py +80 -79
- stubber/utils/repos.py +156 -150
- stubber/utils/stubmaker.py +139 -139
- stubber/utils/typed_config_toml.py +80 -77
- stubber/variants.py +106 -106
- micropython_stubber-1.23.1.dist-info/RECORD +0 -159
- micropython_stubber-1.23.1.dist-info/entry_points.txt +0 -3
- mpflash/basicgit.py +0 -288
- {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/WHEEL +0 -0
@@ -1,15 +1,15 @@
|
|
1
|
-
version, mpy_date, lib_date, lib_commit_hash, lib_commit_info
|
2
|
-
"refs/tags/v1.9.3", "Nov 1 2017", "Nov 1, 2017", "2829d4adc968a7208d96fa762a9ab4c1b744f73d", "threading: Release 0.1"
|
3
|
-
"refs/tags/v1.9.4", "May 11 2018", "May 11 2018", "f20d89c6aad9443a696561ca2a01f7ef0c8fb302", "logging: Release 0.3"
|
4
|
-
"refs/tags/v1.10", "Jan 26 2019", "May 11 2018", "f20d89c6aad9443a696561ca2a01f7ef0c8fb302", "logging: Release 0.3"
|
5
|
-
"refs/tags/v1.11", "May 29 2019", "Feb 25 2019", "b89114c8345e15d360c3707493450805c114bc8c", "Revert README: Add note that repository is unmaintained."
|
6
|
-
"refs/tags/v1.12", "Dec 20 2019", "Feb 25 2019", "b89114c8345e15d360c3707493450805c114bc8c", "Revert README: Add note that repository is unmaintained."
|
7
|
-
"refs/tags/v1.13", "Sep 2 2020", "Jul 8 2020", "7b1161dd1b07e870f09b75a4befc84a95d93e3b3", "logging: Add support for custom handlers"
|
8
|
-
"refs/tags/v1.14", "Feb 3 2021", "Sep 3 2020", "eae01bd4e4cd1b22d9ccfedbd6bf9d879f64d9bd", "logging: Add levelno entry to log record object/dict. …"
|
9
|
-
"refs/tags/v1.15", "Apr 19 2021", "Sep 3 2020", "eae01bd4e4cd1b22d9ccfedbd6bf9d879f64d9bd", "logging: Add levelno entry to log record object/dict. …"
|
10
|
-
"refs/tags/v1.16", "Jun 18 2021", "Jul 12 2020", "3c383f6d2864a4b39bbe4ceb2ae8f29b519c9afe", "aioble: Fix docs for subscribe (needs await)."
|
11
|
-
"refs/tags/v1.17", "Sep 2 2021", "Jul 12 2020", "3c383f6d2864a4b39bbe4ceb2ae8f29b519c9afe", "aioble: Fix docs for subscribe (needs await)."
|
12
|
-
"refs/tags/v1.18", "Jan 16 2022", "Nov 11 2021", "cdd260f0792d04a1ded99171b4c7a2582b7856b4", "aioble/multitests: Add multitest for shutdown handlers."
|
13
|
-
"refs/tags/v1.19", "Jun 16 2022", "Jun 16 2022", "db4c739863e49fc874bdaae8aa8c316c7ed4276a", "unittest: Version 0.9.0"
|
14
|
-
"refs/tags/v1.19.1","Jun 16 2022", "Jun 16 2022", "db4c739863e49fc874bdaae8aa8c316c7ed4276a", "unittest: Version 0.9.0"
|
15
|
-
|
1
|
+
version, mpy_date, lib_date, lib_commit_hash, lib_commit_info
|
2
|
+
"refs/tags/v1.9.3", "Nov 1 2017", "Nov 1, 2017", "2829d4adc968a7208d96fa762a9ab4c1b744f73d", "threading: Release 0.1"
|
3
|
+
"refs/tags/v1.9.4", "May 11 2018", "May 11 2018", "f20d89c6aad9443a696561ca2a01f7ef0c8fb302", "logging: Release 0.3"
|
4
|
+
"refs/tags/v1.10", "Jan 26 2019", "May 11 2018", "f20d89c6aad9443a696561ca2a01f7ef0c8fb302", "logging: Release 0.3"
|
5
|
+
"refs/tags/v1.11", "May 29 2019", "Feb 25 2019", "b89114c8345e15d360c3707493450805c114bc8c", "Revert README: Add note that repository is unmaintained."
|
6
|
+
"refs/tags/v1.12", "Dec 20 2019", "Feb 25 2019", "b89114c8345e15d360c3707493450805c114bc8c", "Revert README: Add note that repository is unmaintained."
|
7
|
+
"refs/tags/v1.13", "Sep 2 2020", "Jul 8 2020", "7b1161dd1b07e870f09b75a4befc84a95d93e3b3", "logging: Add support for custom handlers"
|
8
|
+
"refs/tags/v1.14", "Feb 3 2021", "Sep 3 2020", "eae01bd4e4cd1b22d9ccfedbd6bf9d879f64d9bd", "logging: Add levelno entry to log record object/dict. …"
|
9
|
+
"refs/tags/v1.15", "Apr 19 2021", "Sep 3 2020", "eae01bd4e4cd1b22d9ccfedbd6bf9d879f64d9bd", "logging: Add levelno entry to log record object/dict. …"
|
10
|
+
"refs/tags/v1.16", "Jun 18 2021", "Jul 12 2020", "3c383f6d2864a4b39bbe4ceb2ae8f29b519c9afe", "aioble: Fix docs for subscribe (needs await)."
|
11
|
+
"refs/tags/v1.17", "Sep 2 2021", "Jul 12 2020", "3c383f6d2864a4b39bbe4ceb2ae8f29b519c9afe", "aioble: Fix docs for subscribe (needs await)."
|
12
|
+
"refs/tags/v1.18", "Jan 16 2022", "Nov 11 2021", "cdd260f0792d04a1ded99171b4c7a2582b7856b4", "aioble/multitests: Add multitest for shutdown handlers."
|
13
|
+
"refs/tags/v1.19", "Jun 16 2022", "Jun 16 2022", "db4c739863e49fc874bdaae8aa8c316c7ed4276a", "unittest: Version 0.9.0"
|
14
|
+
"refs/tags/v1.19.1","Jun 16 2022", "Jun 16 2022", "db4c739863e49fc874bdaae8aa8c316c7ed4276a", "unittest: Version 0.9.0"
|
15
|
+
|
@@ -1,38 +1,38 @@
|
|
1
|
-
# list of modules to mimic micropython on CPython
|
2
|
-
# micropython generally has more and more complete stubs
|
3
|
-
|
4
|
-
micropython-cpython-ffi
|
5
|
-
micropython-cpython-micropython
|
6
|
-
micropython-cpython-array # difference pcopy - micropython
|
7
|
-
# micropython-cpython-uasyncio # the uasyncIO stub has errors and does not fit Asyncio v3
|
8
|
-
micropython-cpython-ucollections
|
9
|
-
micropython-cpython-uctypes
|
10
|
-
micropython-cpython-uerrno
|
11
|
-
micropython-cpython-uhashlib
|
12
|
-
# micropython-cpython-uio # does not have the IOBase abstract class
|
13
|
-
micropython-cpython-ujson
|
14
|
-
# micropython-cpython-ulogging
|
15
|
-
micropython-cpython-uos
|
16
|
-
# micropython-cpython-upip # not really part of the core
|
17
|
-
micropython-cpython-ure
|
18
|
-
micropython-cpython-uselect
|
19
|
-
micropython-cpython-usocket
|
20
|
-
micropython-cpython-ussl
|
21
|
-
micropython-cpython-utime
|
22
|
-
micropython-cpython-utimeq
|
23
|
-
# micropython-cpython-utokenize # not on micropython
|
24
|
-
micropython-cpython-uzlib
|
25
|
-
|
26
|
-
# below are on pypi ,but seem to be empty
|
27
|
-
# micropython-cpython-array
|
28
|
-
# micropython-cpython-btree
|
29
|
-
# micropython-cpython-builtins
|
30
|
-
# micropython-cpython-framebuf
|
31
|
-
# micropython-cpython-gc
|
32
|
-
# micropython-cpython-machine
|
33
|
-
# micropython-cpython-network
|
34
|
-
# micropython-cpython-micropython
|
35
|
-
# micropython-cpython-sys
|
36
|
-
# micropython-cpython-ucryptolib
|
37
|
-
# micropython-cpython-uheapq
|
38
|
-
# micropython-cpython-ustruct
|
1
|
+
# list of modules to mimic micropython on CPython
|
2
|
+
# micropython generally has more and more complete stubs
|
3
|
+
|
4
|
+
micropython-cpython-ffi
|
5
|
+
micropython-cpython-micropython
|
6
|
+
micropython-cpython-array # difference pcopy - micropython
|
7
|
+
# micropython-cpython-uasyncio # the uasyncIO stub has errors and does not fit Asyncio v3
|
8
|
+
micropython-cpython-ucollections
|
9
|
+
micropython-cpython-uctypes
|
10
|
+
micropython-cpython-uerrno
|
11
|
+
micropython-cpython-uhashlib
|
12
|
+
# micropython-cpython-uio # does not have the IOBase abstract class
|
13
|
+
micropython-cpython-ujson
|
14
|
+
# micropython-cpython-ulogging
|
15
|
+
micropython-cpython-uos
|
16
|
+
# micropython-cpython-upip # not really part of the core
|
17
|
+
micropython-cpython-ure
|
18
|
+
micropython-cpython-uselect
|
19
|
+
micropython-cpython-usocket
|
20
|
+
micropython-cpython-ussl
|
21
|
+
micropython-cpython-utime
|
22
|
+
micropython-cpython-utimeq
|
23
|
+
# micropython-cpython-utokenize # not on micropython
|
24
|
+
micropython-cpython-uzlib
|
25
|
+
|
26
|
+
# below are on pypi ,but seem to be empty
|
27
|
+
# micropython-cpython-array
|
28
|
+
# micropython-cpython-btree
|
29
|
+
# micropython-cpython-builtins
|
30
|
+
# micropython-cpython-framebuf
|
31
|
+
# micropython-cpython-gc
|
32
|
+
# micropython-cpython-machine
|
33
|
+
# micropython-cpython-network
|
34
|
+
# micropython-cpython-micropython
|
35
|
+
# micropython-cpython-sys
|
36
|
+
# micropython-cpython-ucryptolib
|
37
|
+
# micropython-cpython-uheapq
|
38
|
+
# micropython-cpython-ustruct
|
@@ -1,39 +1,39 @@
|
|
1
|
-
# list of modules to mimic micropython on CPython
|
2
|
-
# pycopy generally has more and more complete stubs
|
3
|
-
|
4
|
-
pycopy-cpython-ffi
|
5
|
-
pycopy-cpython-micropython
|
6
|
-
pycopy-cpython-uarray
|
7
|
-
# pycopy-cpython-uasyncio # too many changes
|
8
|
-
pycopy-cpython-ucollections
|
9
|
-
pycopy-cpython-uctypes
|
10
|
-
pycopy-cpython-uerrno
|
11
|
-
pycopy-cpython-uhashlib
|
12
|
-
# pycopy-cpython-uio # does not have the IOBase abstract class
|
13
|
-
pycopy-cpython-ujson
|
14
|
-
# pycopy-cpython-ulogging
|
15
|
-
pycopy-cpython-uos
|
16
|
-
pycopy-cpython-ure
|
17
|
-
pycopy-cpython-uselect
|
18
|
-
pycopy-cpython-usocket
|
19
|
-
pycopy-cpython-ussl
|
20
|
-
pycopy-cpython-utime
|
21
|
-
pycopy-cpython-utimeq
|
22
|
-
pycopy-cpython-utokenize
|
23
|
-
pycopy-cpython-uzlib
|
24
|
-
|
25
|
-
# pycopy-cpython-upip # this is a tool , not a core library
|
26
|
-
|
27
|
-
# below are on pypi ,but seem to be empty
|
28
|
-
# pycopy-cpython-array
|
29
|
-
# pycopy-cpython-btree
|
30
|
-
# pycopy-cpython-builtins
|
31
|
-
# pycopy-cpython-framebuf
|
32
|
-
# pycopy-cpython-gc
|
33
|
-
# pycopy-cpython-machine
|
34
|
-
# pycopy-cpython-network
|
35
|
-
# pycopy-cpython-pycopy
|
36
|
-
# pycopy-cpython-sys
|
37
|
-
# pycopy-cpython-ucryptolib
|
38
|
-
# pycopy-cpython-uheapq
|
39
|
-
# pycopy-cpython-ustruct
|
1
|
+
# list of modules to mimic micropython on CPython
|
2
|
+
# pycopy generally has more and more complete stubs
|
3
|
+
|
4
|
+
pycopy-cpython-ffi
|
5
|
+
pycopy-cpython-micropython
|
6
|
+
pycopy-cpython-uarray
|
7
|
+
# pycopy-cpython-uasyncio # too many changes
|
8
|
+
pycopy-cpython-ucollections
|
9
|
+
pycopy-cpython-uctypes
|
10
|
+
pycopy-cpython-uerrno
|
11
|
+
pycopy-cpython-uhashlib
|
12
|
+
# pycopy-cpython-uio # does not have the IOBase abstract class
|
13
|
+
pycopy-cpython-ujson
|
14
|
+
# pycopy-cpython-ulogging
|
15
|
+
pycopy-cpython-uos
|
16
|
+
pycopy-cpython-ure
|
17
|
+
pycopy-cpython-uselect
|
18
|
+
pycopy-cpython-usocket
|
19
|
+
pycopy-cpython-ussl
|
20
|
+
pycopy-cpython-utime
|
21
|
+
pycopy-cpython-utimeq
|
22
|
+
pycopy-cpython-utokenize
|
23
|
+
pycopy-cpython-uzlib
|
24
|
+
|
25
|
+
# pycopy-cpython-upip # this is a tool , not a core library
|
26
|
+
|
27
|
+
# below are on pypi ,but seem to be empty
|
28
|
+
# pycopy-cpython-array
|
29
|
+
# pycopy-cpython-btree
|
30
|
+
# pycopy-cpython-builtins
|
31
|
+
# pycopy-cpython-framebuf
|
32
|
+
# pycopy-cpython-gc
|
33
|
+
# pycopy-cpython-machine
|
34
|
+
# pycopy-cpython-network
|
35
|
+
# pycopy-cpython-pycopy
|
36
|
+
# pycopy-cpython-sys
|
37
|
+
# pycopy-cpython-ucryptolib
|
38
|
+
# pycopy-cpython-uheapq
|
39
|
+
# pycopy-cpython-ustruct
|
stubber/downloader.py
CHANGED
@@ -1,36 +1,37 @@
|
|
1
|
-
"""Download files from a public github repo"""
|
2
|
-
|
3
|
-
#
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# log
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
1
|
+
"""Download files from a public github repo"""
|
2
|
+
|
3
|
+
# Copyright (c) 2020 Jos Verlinde
|
4
|
+
# MIT license
|
5
|
+
# pylint: disable= invalid-name
|
6
|
+
import os
|
7
|
+
|
8
|
+
import requests
|
9
|
+
from mpflash.logger import log
|
10
|
+
|
11
|
+
# # log = logging.getLogger(__name__)
|
12
|
+
# log.setLevel(level=logging.INFO)
|
13
|
+
|
14
|
+
|
15
|
+
def download_file(url: str, module: str, folder: str = "./"):
|
16
|
+
"dowload a file from a public github repo"
|
17
|
+
local_filename = os.path.abspath(os.path.join(folder, module))
|
18
|
+
log.debug("Downloading {:<20} to {}".format(module, local_filename))
|
19
|
+
# NOTE the stream=True parameter below
|
20
|
+
with requests.get(url, stream=True) as r:
|
21
|
+
r.raise_for_status()
|
22
|
+
with open(local_filename, "wb") as f:
|
23
|
+
for chunk in r.iter_content(chunk_size=8192):
|
24
|
+
if chunk: # filter out keep-alive new chunks
|
25
|
+
f.write(chunk)
|
26
|
+
# f.flush()
|
27
|
+
return local_filename
|
28
|
+
|
29
|
+
|
30
|
+
def download_files(repo, frozen_modules, savepath):
|
31
|
+
"dowload multiple files from a public github repo"
|
32
|
+
if not os.path.exists(savepath):
|
33
|
+
os.makedirs(savepath)
|
34
|
+
|
35
|
+
for mod in frozen_modules:
|
36
|
+
url = repo.format(mod)
|
37
|
+
download_file(url, mod, savepath)
|
stubber/freeze/common.py
CHANGED
@@ -1,68 +1,72 @@
|
|
1
|
-
"""common functions for frozen stub generation"""
|
2
|
-
|
3
|
-
import re
|
4
|
-
import shutil
|
5
|
-
from pathlib import Path
|
6
|
-
from typing import Tuple
|
7
|
-
|
8
|
-
from
|
9
|
-
|
10
|
-
from stubber.publish.defaults import GENERIC_U
|
11
|
-
|
12
|
-
|
13
|
-
def get_portboard(manifest_path: Path):
|
14
|
-
"""
|
15
|
-
returns a 2-tuple of the port and board in the provided manifest path
|
16
|
-
|
17
|
-
raises an ValueError if neither a port or board can be found
|
18
|
-
"""
|
19
|
-
# https://regex101.com/r/tv7JX4/1
|
20
|
-
re_pb =
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
"""
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
"""
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
1
|
+
"""common functions for frozen stub generation"""
|
2
|
+
|
3
|
+
import re
|
4
|
+
import shutil
|
5
|
+
from pathlib import Path
|
6
|
+
from typing import Tuple
|
7
|
+
|
8
|
+
from mpflash.logger import log
|
9
|
+
|
10
|
+
from stubber.publish.defaults import GENERIC_U
|
11
|
+
|
12
|
+
|
13
|
+
def get_portboard(manifest_path: Path):
|
14
|
+
"""
|
15
|
+
returns a 2-tuple of the port and board in the provided manifest path
|
16
|
+
|
17
|
+
raises an ValueError if neither a port or board can be found
|
18
|
+
"""
|
19
|
+
# https://regex101.com/r/tv7JX4/1
|
20
|
+
re_pb = (
|
21
|
+
r".*micropython[\/\\]ports[\/\\](?P<port>[\w_-]*)([\/\\]boards[\/\\](?P<board>\w*))?[\/\\]"
|
22
|
+
)
|
23
|
+
mpy_port = mpy_board = ""
|
24
|
+
if matches := re.search(re_pb, manifest_path.absolute().as_posix()):
|
25
|
+
# port and board
|
26
|
+
mpy_port = str(matches["port"] or "")
|
27
|
+
mpy_board = str(matches["board"] or "")
|
28
|
+
return mpy_port, mpy_board
|
29
|
+
log.error(f"no port or board found in {manifest_path}")
|
30
|
+
raise (ValueError("Neither port or board found in path"))
|
31
|
+
|
32
|
+
|
33
|
+
def get_freeze_path(stub_path: Path, port: str, board: str) -> Tuple[Path, str]:
|
34
|
+
"""
|
35
|
+
get path to a folder to store the frozen stubs for the given port/board
|
36
|
+
"""
|
37
|
+
if not port:
|
38
|
+
raise ValueError("port must be provided")
|
39
|
+
|
40
|
+
if not board:
|
41
|
+
board = GENERIC_U
|
42
|
+
|
43
|
+
if board == "manifest_release":
|
44
|
+
board = "RELEASE"
|
45
|
+
# set global for later use - must be an absolute path.
|
46
|
+
freeze_path = (stub_path / port / board.upper()).absolute()
|
47
|
+
return freeze_path, board.upper()
|
48
|
+
|
49
|
+
|
50
|
+
def apply_frozen_module_fixes(freeze_path: Path, mpy_path: Path):
|
51
|
+
"""
|
52
|
+
apply common fixes to the fozen modules to improve stub generation
|
53
|
+
"""
|
54
|
+
# NOTE: FIX 1 add __init__.py to umqtt
|
55
|
+
if (
|
56
|
+
freeze_path / "umqtt/robust.py"
|
57
|
+
).exists(): # and not (freeze_path / "umqtt" / "__init__.py").exists():
|
58
|
+
log.debug("add missing : umqtt/__init__.py")
|
59
|
+
with open(freeze_path / "umqtt" / "__init__.py", "a") as f:
|
60
|
+
f.write("")
|
61
|
+
|
62
|
+
# NOTE: FIX 2 compensate for expicitly omited task.py from freeze manifest
|
63
|
+
# this is normally implemented as a C module, let's use the .py version to generate a stub for this
|
64
|
+
if (freeze_path / "uasyncio").exists() and not (freeze_path / "uasyncio" / "task.py").exists():
|
65
|
+
# copy task.py from micropython\extmod\uasyncio\task.py to stub_folder
|
66
|
+
log.debug("add missing : uasyncio/task.py")
|
67
|
+
task_py = mpy_path / "extmod" / "uasyncio" / "task.py"
|
68
|
+
try:
|
69
|
+
shutil.copy(str(task_py), str(freeze_path / "uasyncio"))
|
70
|
+
except OSError as er:
|
71
|
+
log.warning(f"error copying {task_py} : {er}")
|
72
|
+
# try to continue
|
stubber/freeze/freeze_folder.py
CHANGED
@@ -1,69 +1,69 @@
|
|
1
|
-
"""get and parse the to-be-frozen .py modules for micropython to extract the static type information."""
|
2
|
-
|
3
|
-
import glob
|
4
|
-
import os
|
5
|
-
import shutil
|
6
|
-
import warnings
|
7
|
-
from pathlib import Path # start moving from os & glob to pathlib
|
8
|
-
|
9
|
-
from
|
10
|
-
from stubber.utils.repos import match_lib_with_mpy
|
11
|
-
|
12
|
-
from .. import utils
|
13
|
-
|
14
|
-
# Classes and functions from makemanifest to ensure that the manifest.py files can be processed
|
15
|
-
from .common import get_freeze_path, get_portboard
|
16
|
-
|
17
|
-
# globals
|
18
|
-
FAMILY = "micropython"
|
19
|
-
|
20
|
-
|
21
|
-
def freeze_folders(stub_folder: str, mpy_folder: str, lib_folder: str, version: str):
|
22
|
-
"""
|
23
|
-
get and parse the to-be-frozen .py modules for micropython to extract the static type information
|
24
|
-
locates the to-be-frozen files in modules folders
|
25
|
-
- 'ports/<port>/modules/*.py'
|
26
|
-
- 'ports/<port>/boards/<board>/modules/*.py'
|
27
|
-
"""
|
28
|
-
match_lib_with_mpy(version_tag=version, mpy_path=Path(mpy_folder),lib_path=Path(lib_folder))
|
29
|
-
|
30
|
-
targets = []
|
31
|
-
scripts = glob.glob(mpy_folder + "/ports/**/modules/*.py", recursive=True)
|
32
|
-
if len(scripts) > 0:
|
33
|
-
# clean target folder
|
34
|
-
shutil.rmtree(stub_folder, ignore_errors=True)
|
35
|
-
for script in scripts:
|
36
|
-
port, board = get_portboard(Path(script))
|
37
|
-
|
38
|
-
freeze_path, board = get_freeze_path(Path(stub_folder), port, board)
|
39
|
-
dest_path = freeze_path.as_posix()
|
40
|
-
# if board == "":
|
41
|
-
# board = GENERIC
|
42
|
-
|
43
|
-
# dest_path = os.path.join(stub_folder, port, board)
|
44
|
-
|
45
|
-
log.debug("freeze_internal : {:<30} to {}".format(script, dest_path))
|
46
|
-
# ensure folder, including possible path prefix for script
|
47
|
-
os.makedirs(dest_path, exist_ok=True)
|
48
|
-
# copy file
|
49
|
-
try:
|
50
|
-
shutil.copy2(script, dest_path)
|
51
|
-
if dest_path not in targets:
|
52
|
-
targets.append(dest_path)
|
53
|
-
except OSError as e:
|
54
|
-
## Ignore errors that are caused by reorganisation of Micropython-lib
|
55
|
-
# log.exception(e)
|
56
|
-
warnings.warn("unable to freeze {} due to error {}".format(e.filename, str(e)))
|
57
|
-
|
58
|
-
for dest_path in targets:
|
59
|
-
# make a module manifest
|
60
|
-
port = dest_path.split("/")[-2]
|
61
|
-
# todo: add board / variant into manifest files ?
|
62
|
-
utils.make_manifest(
|
63
|
-
Path(dest_path),
|
64
|
-
family=FAMILY,
|
65
|
-
port=port,
|
66
|
-
version=version,
|
67
|
-
stubtype="frozen",
|
68
|
-
)
|
69
|
-
return targets
|
1
|
+
"""get and parse the to-be-frozen .py modules for micropython to extract the static type information."""
|
2
|
+
|
3
|
+
import glob
|
4
|
+
import os
|
5
|
+
import shutil
|
6
|
+
import warnings
|
7
|
+
from pathlib import Path # start moving from os & glob to pathlib
|
8
|
+
|
9
|
+
from mpflash.logger import log
|
10
|
+
from stubber.utils.repos import match_lib_with_mpy
|
11
|
+
|
12
|
+
from .. import utils
|
13
|
+
|
14
|
+
# Classes and functions from makemanifest to ensure that the manifest.py files can be processed
|
15
|
+
from .common import get_freeze_path, get_portboard
|
16
|
+
|
17
|
+
# globals
|
18
|
+
FAMILY = "micropython"
|
19
|
+
|
20
|
+
|
21
|
+
def freeze_folders(stub_folder: str, mpy_folder: str, lib_folder: str, version: str):
|
22
|
+
"""
|
23
|
+
get and parse the to-be-frozen .py modules for micropython to extract the static type information
|
24
|
+
locates the to-be-frozen files in modules folders
|
25
|
+
- 'ports/<port>/modules/*.py'
|
26
|
+
- 'ports/<port>/boards/<board>/modules/*.py'
|
27
|
+
"""
|
28
|
+
match_lib_with_mpy(version_tag=version, mpy_path=Path(mpy_folder), lib_path=Path(lib_folder))
|
29
|
+
|
30
|
+
targets = []
|
31
|
+
scripts = glob.glob(mpy_folder + "/ports/**/modules/*.py", recursive=True)
|
32
|
+
if len(scripts) > 0:
|
33
|
+
# clean target folder
|
34
|
+
shutil.rmtree(stub_folder, ignore_errors=True)
|
35
|
+
for script in scripts:
|
36
|
+
port, board = get_portboard(Path(script))
|
37
|
+
|
38
|
+
freeze_path, board = get_freeze_path(Path(stub_folder), port, board)
|
39
|
+
dest_path = freeze_path.as_posix()
|
40
|
+
# if board == "":
|
41
|
+
# board = GENERIC
|
42
|
+
|
43
|
+
# dest_path = os.path.join(stub_folder, port, board)
|
44
|
+
|
45
|
+
log.debug("freeze_internal : {:<30} to {}".format(script, dest_path))
|
46
|
+
# ensure folder, including possible path prefix for script
|
47
|
+
os.makedirs(dest_path, exist_ok=True)
|
48
|
+
# copy file
|
49
|
+
try:
|
50
|
+
shutil.copy2(script, dest_path)
|
51
|
+
if dest_path not in targets:
|
52
|
+
targets.append(dest_path)
|
53
|
+
except OSError as e:
|
54
|
+
## Ignore errors that are caused by reorganisation of Micropython-lib
|
55
|
+
# log.exception(e)
|
56
|
+
warnings.warn("unable to freeze {} due to error {}".format(e.filename, str(e)))
|
57
|
+
|
58
|
+
for dest_path in targets:
|
59
|
+
# make a module manifest
|
60
|
+
port = dest_path.split("/")[-2]
|
61
|
+
# todo: add board / variant into manifest files ?
|
62
|
+
utils.make_manifest(
|
63
|
+
Path(dest_path),
|
64
|
+
family=FAMILY,
|
65
|
+
port=port,
|
66
|
+
version=version,
|
67
|
+
stubtype="frozen",
|
68
|
+
)
|
69
|
+
return targets
|