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.
Files changed (152) hide show
  1. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/LICENSE +30 -30
  2. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/METADATA +1 -1
  3. micropython_stubber-1.23.0.dist-info/RECORD +159 -0
  4. mpflash/README.md +184 -184
  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/bootloader/__init__.py +37 -36
  9. mpflash/mpflash/bootloader/manual.py +102 -102
  10. mpflash/mpflash/bootloader/micropython.py +10 -10
  11. mpflash/mpflash/bootloader/touch1200.py +45 -45
  12. mpflash/mpflash/cli_download.py +129 -129
  13. mpflash/mpflash/cli_flash.py +219 -219
  14. mpflash/mpflash/cli_group.py +98 -98
  15. mpflash/mpflash/cli_list.py +81 -81
  16. mpflash/mpflash/cli_main.py +41 -41
  17. mpflash/mpflash/common.py +164 -164
  18. mpflash/mpflash/config.py +43 -47
  19. mpflash/mpflash/connected.py +74 -74
  20. mpflash/mpflash/download.py +360 -360
  21. mpflash/mpflash/downloaded.py +130 -129
  22. mpflash/mpflash/errors.py +9 -9
  23. mpflash/mpflash/flash.py +55 -52
  24. mpflash/mpflash/flash_esp.py +59 -59
  25. mpflash/mpflash/flash_stm32.py +18 -24
  26. mpflash/mpflash/flash_stm32_cube.py +111 -111
  27. mpflash/mpflash/flash_stm32_dfu.py +104 -101
  28. mpflash/mpflash/flash_uf2.py +89 -67
  29. mpflash/mpflash/flash_uf2_boardid.py +15 -15
  30. mpflash/mpflash/flash_uf2_linux.py +129 -123
  31. mpflash/mpflash/flash_uf2_macos.py +37 -34
  32. mpflash/mpflash/flash_uf2_windows.py +38 -34
  33. mpflash/mpflash/list.py +89 -89
  34. mpflash/mpflash/logger.py +41 -41
  35. mpflash/mpflash/mpboard_id/__init__.py +93 -93
  36. mpflash/mpflash/mpboard_id/add_boards.py +255 -255
  37. mpflash/mpflash/mpboard_id/board.py +37 -37
  38. mpflash/mpflash/mpboard_id/board_id.py +86 -86
  39. mpflash/mpflash/mpboard_id/store.py +43 -43
  40. mpflash/mpflash/mpremoteboard/__init__.py +226 -221
  41. mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
  42. mpflash/mpflash/mpremoteboard/runner.py +140 -140
  43. mpflash/mpflash/uf2disk.py +12 -12
  44. mpflash/mpflash/vendor/basicgit.py +288 -288
  45. mpflash/mpflash/vendor/click_aliases.py +91 -91
  46. mpflash/mpflash/vendor/dfu.py +165 -165
  47. mpflash/mpflash/vendor/pydfu.py +605 -605
  48. mpflash/mpflash/vendor/readme.md +2 -2
  49. mpflash/mpflash/vendor/versions.py +119 -117
  50. mpflash/mpflash/worklist.py +171 -170
  51. mpflash/poetry.lock +1588 -1588
  52. mpflash/pyproject.toml +64 -60
  53. mpflash/stm32_udev_rules.md +62 -62
  54. stubber/__init__.py +3 -3
  55. stubber/basicgit.py +294 -288
  56. stubber/board/board_info.csv +193 -193
  57. stubber/board/boot.py +34 -34
  58. stubber/board/createstubs.py +986 -986
  59. stubber/board/createstubs_db.py +825 -825
  60. stubber/board/createstubs_db_min.py +331 -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 +766 -766
  65. stubber/board/createstubs_mem_min.py +306 -306
  66. stubber/board/createstubs_mem_mpy.mpy +0 -0
  67. stubber/board/createstubs_min.py +294 -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 +454 -454
  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 +145 -145
  83. stubber/codemod/merge_docstub.py +284 -284
  84. stubber/codemod/modify_list.py +54 -54
  85. stubber/codemod/utils.py +57 -57
  86. stubber/commands/build_cmd.py +94 -94
  87. stubber/commands/cli.py +55 -51
  88. stubber/commands/clone_cmd.py +77 -66
  89. stubber/commands/config_cmd.py +29 -29
  90. stubber/commands/enrich_folder_cmd.py +71 -70
  91. stubber/commands/get_core_cmd.py +71 -69
  92. stubber/commands/get_docstubs_cmd.py +89 -87
  93. stubber/commands/get_frozen_cmd.py +114 -112
  94. stubber/commands/get_mcu_cmd.py +61 -56
  95. stubber/commands/merge_cmd.py +67 -66
  96. stubber/commands/publish_cmd.py +119 -119
  97. stubber/commands/stub_cmd.py +31 -30
  98. stubber/commands/switch_cmd.py +62 -54
  99. stubber/commands/variants_cmd.py +49 -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 +36 -36
  107. stubber/freeze/common.py +68 -68
  108. stubber/freeze/freeze_folder.py +69 -69
  109. stubber/freeze/freeze_manifest_2.py +113 -113
  110. stubber/freeze/get_frozen.py +127 -127
  111. stubber/get_cpython.py +101 -101
  112. stubber/get_lobo.py +59 -59
  113. stubber/minify.py +418 -418
  114. stubber/publish/bump.py +86 -86
  115. stubber/publish/candidates.py +262 -262
  116. stubber/publish/database.py +18 -18
  117. stubber/publish/defaults.py +45 -45
  118. stubber/publish/enums.py +24 -24
  119. stubber/publish/helpers.py +29 -29
  120. stubber/publish/merge_docstubs.py +130 -130
  121. stubber/publish/missing_class_methods.py +49 -49
  122. stubber/publish/package.py +146 -146
  123. stubber/publish/pathnames.py +51 -51
  124. stubber/publish/publish.py +120 -120
  125. stubber/publish/pypi.py +38 -38
  126. stubber/publish/stubpackage.py +1029 -1029
  127. stubber/rst/__init__.py +9 -9
  128. stubber/rst/classsort.py +77 -77
  129. stubber/rst/lookup.py +530 -530
  130. stubber/rst/output_dict.py +401 -401
  131. stubber/rst/reader.py +822 -822
  132. stubber/rst/report_return.py +69 -69
  133. stubber/rst/rst_utils.py +540 -540
  134. stubber/stubber.py +38 -38
  135. stubber/stubs_from_docs.py +90 -90
  136. stubber/tools/manifestfile.py +655 -610
  137. stubber/tools/readme.md +7 -6
  138. stubber/update_fallback.py +117 -117
  139. stubber/update_module_list.py +123 -123
  140. stubber/utils/__init__.py +5 -5
  141. stubber/utils/config.py +127 -127
  142. stubber/utils/makeversionhdr.py +54 -54
  143. stubber/utils/manifest.py +92 -92
  144. stubber/utils/post.py +79 -79
  145. stubber/utils/repos.py +157 -154
  146. stubber/utils/stubmaker.py +139 -139
  147. stubber/utils/typed_config_toml.py +77 -77
  148. stubber/utils/versions.py +128 -120
  149. stubber/variants.py +106 -106
  150. micropython_stubber-1.20.5.dist-info/RECORD +0 -159
  151. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.dist-info}/WHEEL +0 -0
  152. {micropython_stubber-1.20.5.dist-info → micropython_stubber-1.23.0.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,36 +1,36 @@
1
- """Download files from a public github repo"""
2
- # Copyright (c) 2020 Jos Verlinde
3
- # MIT license
4
- # pylint: disable= invalid-name
5
- import os
6
-
7
- import requests
8
- from loguru import logger as log
9
-
10
- # # log = logging.getLogger(__name__)
11
- # log.setLevel(level=logging.INFO)
12
-
13
-
14
- def download_file(url: str, module: str, folder: str = "./"):
15
- "dowload a file from a public github repo"
16
- local_filename = os.path.abspath(os.path.join(folder, module))
17
- log.debug("Downloading {:<20} to {}".format(module, local_filename))
18
- # NOTE the stream=True parameter below
19
- with requests.get(url, stream=True) as r:
20
- r.raise_for_status()
21
- with open(local_filename, "wb") as f:
22
- for chunk in r.iter_content(chunk_size=8192):
23
- if chunk: # filter out keep-alive new chunks
24
- f.write(chunk)
25
- # f.flush()
26
- return local_filename
27
-
28
-
29
- def download_files(repo, frozen_modules, savepath):
30
- "dowload multiple files from a public github repo"
31
- if not os.path.exists(savepath):
32
- os.makedirs(savepath)
33
-
34
- for mod in frozen_modules:
35
- url = repo.format(mod)
36
- download_file(url, mod, savepath)
1
+ """Download files from a public github repo"""
2
+ # Copyright (c) 2020 Jos Verlinde
3
+ # MIT license
4
+ # pylint: disable= invalid-name
5
+ import os
6
+
7
+ import requests
8
+ from loguru import logger as log
9
+
10
+ # # log = logging.getLogger(__name__)
11
+ # log.setLevel(level=logging.INFO)
12
+
13
+
14
+ def download_file(url: str, module: str, folder: str = "./"):
15
+ "dowload a file from a public github repo"
16
+ local_filename = os.path.abspath(os.path.join(folder, module))
17
+ log.debug("Downloading {:<20} to {}".format(module, local_filename))
18
+ # NOTE the stream=True parameter below
19
+ with requests.get(url, stream=True) as r:
20
+ r.raise_for_status()
21
+ with open(local_filename, "wb") as f:
22
+ for chunk in r.iter_content(chunk_size=8192):
23
+ if chunk: # filter out keep-alive new chunks
24
+ f.write(chunk)
25
+ # f.flush()
26
+ return local_filename
27
+
28
+
29
+ def download_files(repo, frozen_modules, savepath):
30
+ "dowload multiple files from a public github repo"
31
+ if not os.path.exists(savepath):
32
+ os.makedirs(savepath)
33
+
34
+ for mod in frozen_modules:
35
+ url = repo.format(mod)
36
+ download_file(url, mod, savepath)
stubber/freeze/common.py CHANGED
@@ -1,68 +1,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 loguru import logger as 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 = r".*micropython[\/\\]ports[\/\\](?P<port>[\w_-]*)([\/\\]boards[\/\\](?P<board>\w*))?[\/\\]"
21
- mpy_port = mpy_board = ""
22
- if matches := re.search(re_pb, manifest_path.absolute().as_posix()):
23
- # port and board
24
- mpy_port = str(matches["port"] or "")
25
- mpy_board = str(matches["board"] or "")
26
- return mpy_port, mpy_board
27
- log.error(f"no port or board found in {manifest_path}")
28
- raise (ValueError("Neither port or board found in path"))
29
-
30
-
31
- def get_freeze_path(stub_path: Path, port: str, board: str) -> Tuple[Path, str]:
32
- """
33
- get path to a folder to store the frozen stubs for the given port/board
34
- """
35
- if not port:
36
- raise ValueError("port must be provided")
37
-
38
- if not board:
39
- board = GENERIC_U
40
-
41
- if board == "manifest_release":
42
- board = "RELEASE"
43
- # set global for later use - must be an absolute path.
44
- freeze_path = (stub_path / port / board.upper()).absolute()
45
- return freeze_path, board.upper()
46
-
47
-
48
- def apply_frozen_module_fixes(freeze_path: Path, mpy_path: Path):
49
- """
50
- apply common fixes to the fozen modules to improve stub generation
51
- """
52
- # NOTE: FIX 1 add __init__.py to umqtt
53
- if (freeze_path / "umqtt/robust.py").exists(): # and not (freeze_path / "umqtt" / "__init__.py").exists():
54
- log.debug("add missing : umqtt/__init__.py")
55
- with open(freeze_path / "umqtt" / "__init__.py", "a") as f:
56
- f.write("")
57
-
58
- # NOTE: FIX 2 compensate for expicitly omited task.py from freeze manifest
59
- # this is normally implemented as a C module, let's use the .py version to generate a stub for this
60
- if (freeze_path / "uasyncio").exists() and not (freeze_path / "uasyncio" / "task.py").exists():
61
- # copy task.py from micropython\extmod\uasyncio\task.py to stub_folder
62
- log.debug("add missing : uasyncio/task.py")
63
- task_py = mpy_path / "extmod" / "uasyncio" / "task.py"
64
- try:
65
- shutil.copy(str(task_py), str(freeze_path / "uasyncio"))
66
- except OSError as er:
67
- log.warning(f"error copying {task_py} : {er}")
68
- # 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 loguru import logger as 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 = r".*micropython[\/\\]ports[\/\\](?P<port>[\w_-]*)([\/\\]boards[\/\\](?P<board>\w*))?[\/\\]"
21
+ mpy_port = mpy_board = ""
22
+ if matches := re.search(re_pb, manifest_path.absolute().as_posix()):
23
+ # port and board
24
+ mpy_port = str(matches["port"] or "")
25
+ mpy_board = str(matches["board"] or "")
26
+ return mpy_port, mpy_board
27
+ log.error(f"no port or board found in {manifest_path}")
28
+ raise (ValueError("Neither port or board found in path"))
29
+
30
+
31
+ def get_freeze_path(stub_path: Path, port: str, board: str) -> Tuple[Path, str]:
32
+ """
33
+ get path to a folder to store the frozen stubs for the given port/board
34
+ """
35
+ if not port:
36
+ raise ValueError("port must be provided")
37
+
38
+ if not board:
39
+ board = GENERIC_U
40
+
41
+ if board == "manifest_release":
42
+ board = "RELEASE"
43
+ # set global for later use - must be an absolute path.
44
+ freeze_path = (stub_path / port / board.upper()).absolute()
45
+ return freeze_path, board.upper()
46
+
47
+
48
+ def apply_frozen_module_fixes(freeze_path: Path, mpy_path: Path):
49
+ """
50
+ apply common fixes to the fozen modules to improve stub generation
51
+ """
52
+ # NOTE: FIX 1 add __init__.py to umqtt
53
+ if (freeze_path / "umqtt/robust.py").exists(): # and not (freeze_path / "umqtt" / "__init__.py").exists():
54
+ log.debug("add missing : umqtt/__init__.py")
55
+ with open(freeze_path / "umqtt" / "__init__.py", "a") as f:
56
+ f.write("")
57
+
58
+ # NOTE: FIX 2 compensate for expicitly omited task.py from freeze manifest
59
+ # this is normally implemented as a C module, let's use the .py version to generate a stub for this
60
+ if (freeze_path / "uasyncio").exists() and not (freeze_path / "uasyncio" / "task.py").exists():
61
+ # copy task.py from micropython\extmod\uasyncio\task.py to stub_folder
62
+ log.debug("add missing : uasyncio/task.py")
63
+ task_py = mpy_path / "extmod" / "uasyncio" / "task.py"
64
+ try:
65
+ shutil.copy(str(task_py), str(freeze_path / "uasyncio"))
66
+ except OSError as er:
67
+ log.warning(f"error copying {task_py} : {er}")
68
+ # 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 loguru import logger as 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 loguru import logger as 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