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,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,37 +1,37 @@
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)
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,72 +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 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
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
@@ -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 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
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