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.
Files changed (153) hide show
  1. {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/LICENSE +30 -30
  2. {micropython_stubber-1.23.1.dist-info → micropython_stubber-1.23.2.dist-info}/METADATA +32 -15
  3. micropython_stubber-1.23.2.dist-info/RECORD +158 -0
  4. micropython_stubber-1.23.2.dist-info/entry_points.txt +5 -0
  5. mpflash/README.md +220 -194
  6. mpflash/libusb_flash.ipynb +203 -203
  7. mpflash/mpflash/add_firmware.py +98 -98
  8. mpflash/mpflash/ask_input.py +236 -236
  9. mpflash/mpflash/basicgit.py +284 -284
  10. mpflash/mpflash/bootloader/__init__.py +2 -2
  11. mpflash/mpflash/bootloader/activate.py +60 -60
  12. mpflash/mpflash/bootloader/detect.py +82 -82
  13. mpflash/mpflash/bootloader/manual.py +101 -101
  14. mpflash/mpflash/bootloader/micropython.py +12 -12
  15. mpflash/mpflash/bootloader/touch1200.py +36 -36
  16. mpflash/mpflash/cli_download.py +129 -129
  17. mpflash/mpflash/cli_flash.py +224 -219
  18. mpflash/mpflash/cli_group.py +111 -111
  19. mpflash/mpflash/cli_list.py +87 -81
  20. mpflash/mpflash/cli_main.py +39 -39
  21. mpflash/mpflash/common.py +210 -165
  22. mpflash/mpflash/config.py +44 -44
  23. mpflash/mpflash/connected.py +96 -78
  24. mpflash/mpflash/download.py +364 -364
  25. mpflash/mpflash/downloaded.py +130 -130
  26. mpflash/mpflash/errors.py +9 -9
  27. mpflash/mpflash/flash/__init__.py +55 -55
  28. mpflash/mpflash/flash/esp.py +59 -59
  29. mpflash/mpflash/flash/stm32.py +19 -19
  30. mpflash/mpflash/flash/stm32_dfu.py +104 -104
  31. mpflash/mpflash/flash/uf2/__init__.py +88 -88
  32. mpflash/mpflash/flash/uf2/boardid.py +15 -15
  33. mpflash/mpflash/flash/uf2/linux.py +136 -130
  34. mpflash/mpflash/flash/uf2/macos.py +42 -42
  35. mpflash/mpflash/flash/uf2/uf2disk.py +12 -12
  36. mpflash/mpflash/flash/uf2/windows.py +43 -43
  37. mpflash/mpflash/flash/worklist.py +170 -170
  38. mpflash/mpflash/list.py +106 -99
  39. mpflash/mpflash/logger.py +41 -41
  40. mpflash/mpflash/mpboard_id/__init__.py +93 -93
  41. mpflash/mpflash/mpboard_id/add_boards.py +251 -251
  42. mpflash/mpflash/mpboard_id/board.py +37 -37
  43. mpflash/mpflash/mpboard_id/board_id.py +86 -86
  44. mpflash/mpflash/mpboard_id/store.py +43 -43
  45. mpflash/mpflash/mpremoteboard/__init__.py +266 -222
  46. mpflash/mpflash/mpremoteboard/mpy_fw_info.py +141 -141
  47. mpflash/mpflash/mpremoteboard/runner.py +140 -140
  48. mpflash/mpflash/vendor/click_aliases.py +91 -91
  49. mpflash/mpflash/vendor/dfu.py +165 -165
  50. mpflash/mpflash/vendor/pydfu.py +605 -605
  51. mpflash/mpflash/vendor/readme.md +2 -2
  52. mpflash/mpflash/versions.py +135 -135
  53. mpflash/poetry.lock +1599 -1599
  54. mpflash/pyproject.toml +65 -65
  55. mpflash/stm32_udev_rules.md +62 -62
  56. stubber/__init__.py +3 -3
  57. stubber/board/board_info.csv +193 -193
  58. stubber/board/boot.py +34 -34
  59. stubber/board/createstubs.py +1004 -986
  60. stubber/board/createstubs_db.py +826 -825
  61. stubber/board/createstubs_db_min.py +332 -331
  62. stubber/board/createstubs_db_mpy.mpy +0 -0
  63. stubber/board/createstubs_lvgl.py +741 -741
  64. stubber/board/createstubs_lvgl_min.py +741 -741
  65. stubber/board/createstubs_mem.py +767 -766
  66. stubber/board/createstubs_mem_min.py +307 -306
  67. stubber/board/createstubs_mem_mpy.mpy +0 -0
  68. stubber/board/createstubs_min.py +295 -294
  69. stubber/board/createstubs_mpy.mpy +0 -0
  70. stubber/board/fw_info.py +141 -141
  71. stubber/board/info.py +183 -183
  72. stubber/board/main.py +19 -19
  73. stubber/board/modulelist.txt +247 -247
  74. stubber/board/pyrightconfig.json +34 -34
  75. stubber/bulk/mcu_stubber.py +437 -454
  76. stubber/codemod/_partials/__init__.py +48 -48
  77. stubber/codemod/_partials/db_main.py +147 -147
  78. stubber/codemod/_partials/lvgl_main.py +77 -77
  79. stubber/codemod/_partials/modules_reader.py +80 -80
  80. stubber/codemod/add_comment.py +53 -53
  81. stubber/codemod/add_method.py +65 -65
  82. stubber/codemod/board.py +317 -317
  83. stubber/codemod/enrich.py +151 -145
  84. stubber/codemod/merge_docstub.py +284 -284
  85. stubber/codemod/modify_list.py +54 -54
  86. stubber/codemod/utils.py +56 -56
  87. stubber/commands/build_cmd.py +94 -94
  88. stubber/commands/cli.py +49 -55
  89. stubber/commands/clone_cmd.py +78 -78
  90. stubber/commands/config_cmd.py +29 -29
  91. stubber/commands/enrich_folder_cmd.py +71 -71
  92. stubber/commands/get_core_cmd.py +71 -71
  93. stubber/commands/get_docstubs_cmd.py +92 -89
  94. stubber/commands/get_frozen_cmd.py +117 -114
  95. stubber/commands/get_mcu_cmd.py +102 -61
  96. stubber/commands/merge_cmd.py +66 -66
  97. stubber/commands/publish_cmd.py +118 -118
  98. stubber/commands/stub_cmd.py +31 -31
  99. stubber/commands/switch_cmd.py +62 -62
  100. stubber/commands/variants_cmd.py +48 -48
  101. stubber/cst_transformer.py +178 -178
  102. stubber/data/board_info.csv +193 -193
  103. stubber/data/board_info.json +1729 -1729
  104. stubber/data/micropython_tags.csv +15 -15
  105. stubber/data/requirements-core-micropython.txt +38 -38
  106. stubber/data/requirements-core-pycopy.txt +39 -39
  107. stubber/downloader.py +37 -36
  108. stubber/freeze/common.py +72 -68
  109. stubber/freeze/freeze_folder.py +69 -69
  110. stubber/freeze/freeze_manifest_2.py +126 -113
  111. stubber/freeze/get_frozen.py +131 -127
  112. stubber/get_cpython.py +112 -101
  113. stubber/get_lobo.py +59 -59
  114. stubber/minify.py +423 -419
  115. stubber/publish/bump.py +86 -86
  116. stubber/publish/candidates.py +275 -256
  117. stubber/publish/database.py +18 -18
  118. stubber/publish/defaults.py +40 -40
  119. stubber/publish/enums.py +24 -24
  120. stubber/publish/helpers.py +29 -29
  121. stubber/publish/merge_docstubs.py +136 -130
  122. stubber/publish/missing_class_methods.py +51 -49
  123. stubber/publish/package.py +150 -146
  124. stubber/publish/pathnames.py +51 -51
  125. stubber/publish/publish.py +120 -120
  126. stubber/publish/pypi.py +42 -38
  127. stubber/publish/stubpackage.py +1055 -1027
  128. stubber/rst/__init__.py +9 -9
  129. stubber/rst/classsort.py +78 -77
  130. stubber/rst/lookup.py +533 -530
  131. stubber/rst/output_dict.py +401 -401
  132. stubber/rst/reader.py +814 -814
  133. stubber/rst/report_return.py +77 -69
  134. stubber/rst/rst_utils.py +541 -540
  135. stubber/stubber.py +38 -38
  136. stubber/stubs_from_docs.py +90 -90
  137. stubber/tools/manifestfile.py +654 -654
  138. stubber/tools/readme.md +6 -6
  139. stubber/update_fallback.py +117 -117
  140. stubber/update_module_list.py +123 -123
  141. stubber/utils/__init__.py +6 -6
  142. stubber/utils/config.py +137 -125
  143. stubber/utils/makeversionhdr.py +54 -54
  144. stubber/utils/manifest.py +90 -90
  145. stubber/utils/post.py +80 -79
  146. stubber/utils/repos.py +156 -150
  147. stubber/utils/stubmaker.py +139 -139
  148. stubber/utils/typed_config_toml.py +80 -77
  149. stubber/variants.py +106 -106
  150. micropython_stubber-1.23.1.dist-info/RECORD +0 -159
  151. micropython_stubber-1.23.1.dist-info/entry_points.txt +0 -3
  152. mpflash/basicgit.py +0 -288
  153. {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
- # 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
+
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 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 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 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 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