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.
- {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/LICENSE +30 -30
- {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/METADATA +4 -4
- micropython_stubber-1.23.2.dist-info/RECORD +158 -0
- mpflash/README.md +220 -220
- 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 -216
- mpflash/mpflash/cli_group.py +111 -111
- mpflash/mpflash/cli_list.py +87 -87
- mpflash/mpflash/cli_main.py +39 -39
- mpflash/mpflash/common.py +210 -166
- mpflash/mpflash/config.py +44 -44
- mpflash/mpflash/connected.py +96 -77
- 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 -106
- 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 -266
- 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 -437
- 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 -49
- 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 -92
- stubber/commands/get_frozen_cmd.py +117 -117
- stubber/commands/get_mcu_cmd.py +102 -102
- 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 -37
- stubber/freeze/common.py +72 -72
- stubber/freeze/freeze_folder.py +69 -69
- stubber/freeze/freeze_manifest_2.py +126 -126
- stubber/freeze/get_frozen.py +131 -131
- stubber/get_cpython.py +112 -112
- stubber/get_lobo.py +59 -59
- stubber/minify.py +423 -423
- stubber/publish/bump.py +86 -86
- stubber/publish/candidates.py +275 -275
- 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 -132
- stubber/publish/missing_class_methods.py +51 -51
- stubber/publish/package.py +150 -150
- stubber/publish/pathnames.py +51 -51
- stubber/publish/publish.py +120 -120
- stubber/publish/pypi.py +42 -42
- stubber/publish/stubpackage.py +1055 -1051
- stubber/rst/__init__.py +9 -9
- stubber/rst/classsort.py +78 -78
- stubber/rst/lookup.py +533 -531
- stubber/rst/output_dict.py +401 -401
- stubber/rst/reader.py +814 -814
- stubber/rst/report_return.py +77 -77
- stubber/rst/rst_utils.py +541 -541
- 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 -137
- stubber/utils/makeversionhdr.py +54 -54
- stubber/utils/manifest.py +90 -90
- stubber/utils/post.py +80 -80
- stubber/utils/repos.py +156 -156
- stubber/utils/stubmaker.py +139 -139
- stubber/utils/typed_config_toml.py +80 -80
- stubber/variants.py +106 -106
- micropython_stubber-1.23.1.post1.dist-info/RECORD +0 -159
- mpflash/basicgit.py +0 -288
- {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/WHEEL +0 -0
- {micropython_stubber-1.23.1.post1.dist-info → micropython_stubber-1.23.2.dist-info}/entry_points.txt +0 -0
stubber/utils/config.py
CHANGED
@@ -1,137 +1,137 @@
|
|
1
|
-
"""stubber configuration"""
|
2
|
-
|
3
|
-
from pathlib import Path
|
4
|
-
from typing import List
|
5
|
-
|
6
|
-
from mpflash.logger import log
|
7
|
-
from typedconfig.config import Config, key, section
|
8
|
-
from typedconfig.source import EnvironmentConfigSource
|
9
|
-
|
10
|
-
import mpflash.basicgit as git
|
11
|
-
from mpflash.versions import V_PREVIEW
|
12
|
-
|
13
|
-
from .typed_config_toml import TomlConfigSource
|
14
|
-
|
15
|
-
|
16
|
-
@section("micropython-stubber")
|
17
|
-
class StubberConfig(Config):
|
18
|
-
"stubber configuration class"
|
19
|
-
# relative to stubs folder
|
20
|
-
fallback_path: Path = key(
|
21
|
-
key_name="fallback-path", cast=Path, required=False, default=Path("typings/fallback")
|
22
|
-
)
|
23
|
-
"a Path to the fallback stubs directory"
|
24
|
-
|
25
|
-
# ------------------------------------------------------------------------------------------
|
26
|
-
# micropython and micropython-lib are relative to ./repo folder
|
27
|
-
repo_path: Path = key(key_name="repo-path", cast=Path, required=False, default=Path("./repos"))
|
28
|
-
"a Path to the repo directory"
|
29
|
-
|
30
|
-
mpy_path: Path = key(
|
31
|
-
key_name="mpy-path", cast=Path, required=False, default=Path("micropython")
|
32
|
-
)
|
33
|
-
"a Path to the micropython folder in the repos directory"
|
34
|
-
|
35
|
-
mpy_lib_path: Path = key(
|
36
|
-
key_name="mpy-lib-path", cast=Path, required=False, default=Path("micropython-lib")
|
37
|
-
)
|
38
|
-
"a Path to the micropython-lib folder in the repos directory"
|
39
|
-
|
40
|
-
mpy_stubs_path: Path = key(
|
41
|
-
key_name="mpy-stubs-path", cast=Path, required=False, default=Path("micropython-stubs")
|
42
|
-
)
|
43
|
-
"a Path to the micropython-stubs folder in the repos directory (or current directory)"
|
44
|
-
|
45
|
-
stable_version: str = key(
|
46
|
-
key_name="stable-version", cast=str, required=False, default="1.20.0"
|
47
|
-
)
|
48
|
-
|
49
|
-
"last published stable"
|
50
|
-
|
51
|
-
all_versions = key(
|
52
|
-
key_name="all-versions",
|
53
|
-
cast=list,
|
54
|
-
required=False,
|
55
|
-
default=["1.17", "1.18", "1.19", "1.19.1", "1.20.0"],
|
56
|
-
)
|
57
|
-
"list of recent versions"
|
58
|
-
|
59
|
-
BLOCKED_PORTS = ["minimal", "bare-arm"]
|
60
|
-
"ports that should be ignored as a source of stubs"
|
61
|
-
|
62
|
-
@property
|
63
|
-
def repos(self) -> List[Path]:
|
64
|
-
"return the repo paths"
|
65
|
-
return [self.mpy_path, self.mpy_lib_path, self.mpy_stubs_path]
|
66
|
-
|
67
|
-
@property
|
68
|
-
def stub_path(self) -> Path:
|
69
|
-
"return the stubs path in the microypthon-stubs repo"
|
70
|
-
return self.mpy_stubs_path / "stubs"
|
71
|
-
|
72
|
-
@property
|
73
|
-
def publish_path(self) -> Path:
|
74
|
-
"return the stubs path in the microypthon-stubs repo"
|
75
|
-
return self.mpy_stubs_path / "publish"
|
76
|
-
|
77
|
-
@property
|
78
|
-
def template_path(self) -> Path:
|
79
|
-
"return the stubs path in the microypthon-stubs repo"
|
80
|
-
return self.mpy_stubs_path / "publish" / "template"
|
81
|
-
|
82
|
-
def post_read_hook(self) -> dict:
|
83
|
-
config_updates = {}
|
84
|
-
# relative to stubs
|
85
|
-
# config_updates.update(fallback_path=self.stub_path / self.fallback_path)
|
86
|
-
|
87
|
-
# relative to repo path
|
88
|
-
config_updates.update(mpy_path=self.repo_path / self.mpy_path)
|
89
|
-
config_updates.update(mpy_lib_path=self.repo_path / self.mpy_lib_path)
|
90
|
-
if self.mpy_stubs_path.is_absolute() or self.mpy_stubs_path == Path("."):
|
91
|
-
config_updates.update(mpy_stubs_path=self.mpy_stubs_path)
|
92
|
-
else:
|
93
|
-
config_updates.update(mpy_stubs_path=self.repo_path / self.mpy_stubs_path)
|
94
|
-
# read the versions from the git tags
|
95
|
-
all_versions = []
|
96
|
-
try:
|
97
|
-
all_versions = git.get_tags("micropython/micropython", minver="v1.17")
|
98
|
-
except Exception as e:
|
99
|
-
log.warning(f"Could not read micropython versions from git: {e}")
|
100
|
-
all_versions = ["1.19", "1.19.1", "1.20.0", "1.21.0"]
|
101
|
-
config_updates.update(all_versions=all_versions)
|
102
|
-
config_updates.update(
|
103
|
-
stable_version=[v for v in all_versions if not v.endswith(V_PREVIEW)][-1]
|
104
|
-
) # second last version - last version is the preview version
|
105
|
-
return config_updates
|
106
|
-
|
107
|
-
|
108
|
-
def readconfig(filename: str = "pyproject.toml", prefix: str = "tool.", must_exist: bool = True):
|
109
|
-
"read the configuration from the pyproject.toml file"
|
110
|
-
# locate the pyproject.toml file
|
111
|
-
path = Path.cwd()
|
112
|
-
use_toml = True
|
113
|
-
while not (path / filename).exists():
|
114
|
-
path = path.parent
|
115
|
-
if path == path.parent:
|
116
|
-
log.trace(f"Could not find config file: {filename}")
|
117
|
-
use_toml = False
|
118
|
-
break
|
119
|
-
|
120
|
-
filename = str(path / filename)
|
121
|
-
|
122
|
-
config = StubberConfig()
|
123
|
-
# add provider sources to the config
|
124
|
-
config.add_source(EnvironmentConfigSource())
|
125
|
-
if use_toml:
|
126
|
-
config.add_source(
|
127
|
-
TomlConfigSource(filename, prefix=prefix, must_exist=must_exist)
|
128
|
-
) # ,"tools.micropython-stubber"))
|
129
|
-
config.read()
|
130
|
-
return config
|
131
|
-
|
132
|
-
|
133
|
-
#######################
|
134
|
-
# config singleton
|
135
|
-
CONFIG = readconfig()
|
136
|
-
"stubber configuration singleton"
|
137
|
-
#######################
|
1
|
+
"""stubber configuration"""
|
2
|
+
|
3
|
+
from pathlib import Path
|
4
|
+
from typing import List
|
5
|
+
|
6
|
+
from mpflash.logger import log
|
7
|
+
from typedconfig.config import Config, key, section
|
8
|
+
from typedconfig.source import EnvironmentConfigSource
|
9
|
+
|
10
|
+
import mpflash.basicgit as git
|
11
|
+
from mpflash.versions import V_PREVIEW
|
12
|
+
|
13
|
+
from .typed_config_toml import TomlConfigSource
|
14
|
+
|
15
|
+
|
16
|
+
@section("micropython-stubber")
|
17
|
+
class StubberConfig(Config):
|
18
|
+
"stubber configuration class"
|
19
|
+
# relative to stubs folder
|
20
|
+
fallback_path: Path = key(
|
21
|
+
key_name="fallback-path", cast=Path, required=False, default=Path("typings/fallback")
|
22
|
+
)
|
23
|
+
"a Path to the fallback stubs directory"
|
24
|
+
|
25
|
+
# ------------------------------------------------------------------------------------------
|
26
|
+
# micropython and micropython-lib are relative to ./repo folder
|
27
|
+
repo_path: Path = key(key_name="repo-path", cast=Path, required=False, default=Path("./repos"))
|
28
|
+
"a Path to the repo directory"
|
29
|
+
|
30
|
+
mpy_path: Path = key(
|
31
|
+
key_name="mpy-path", cast=Path, required=False, default=Path("micropython")
|
32
|
+
)
|
33
|
+
"a Path to the micropython folder in the repos directory"
|
34
|
+
|
35
|
+
mpy_lib_path: Path = key(
|
36
|
+
key_name="mpy-lib-path", cast=Path, required=False, default=Path("micropython-lib")
|
37
|
+
)
|
38
|
+
"a Path to the micropython-lib folder in the repos directory"
|
39
|
+
|
40
|
+
mpy_stubs_path: Path = key(
|
41
|
+
key_name="mpy-stubs-path", cast=Path, required=False, default=Path("micropython-stubs")
|
42
|
+
)
|
43
|
+
"a Path to the micropython-stubs folder in the repos directory (or current directory)"
|
44
|
+
|
45
|
+
stable_version: str = key(
|
46
|
+
key_name="stable-version", cast=str, required=False, default="1.20.0"
|
47
|
+
)
|
48
|
+
|
49
|
+
"last published stable"
|
50
|
+
|
51
|
+
all_versions = key(
|
52
|
+
key_name="all-versions",
|
53
|
+
cast=list,
|
54
|
+
required=False,
|
55
|
+
default=["1.17", "1.18", "1.19", "1.19.1", "1.20.0"],
|
56
|
+
)
|
57
|
+
"list of recent versions"
|
58
|
+
|
59
|
+
BLOCKED_PORTS = ["minimal", "bare-arm"]
|
60
|
+
"ports that should be ignored as a source of stubs"
|
61
|
+
|
62
|
+
@property
|
63
|
+
def repos(self) -> List[Path]:
|
64
|
+
"return the repo paths"
|
65
|
+
return [self.mpy_path, self.mpy_lib_path, self.mpy_stubs_path]
|
66
|
+
|
67
|
+
@property
|
68
|
+
def stub_path(self) -> Path:
|
69
|
+
"return the stubs path in the microypthon-stubs repo"
|
70
|
+
return self.mpy_stubs_path / "stubs"
|
71
|
+
|
72
|
+
@property
|
73
|
+
def publish_path(self) -> Path:
|
74
|
+
"return the stubs path in the microypthon-stubs repo"
|
75
|
+
return self.mpy_stubs_path / "publish"
|
76
|
+
|
77
|
+
@property
|
78
|
+
def template_path(self) -> Path:
|
79
|
+
"return the stubs path in the microypthon-stubs repo"
|
80
|
+
return self.mpy_stubs_path / "publish" / "template"
|
81
|
+
|
82
|
+
def post_read_hook(self) -> dict:
|
83
|
+
config_updates = {}
|
84
|
+
# relative to stubs
|
85
|
+
# config_updates.update(fallback_path=self.stub_path / self.fallback_path)
|
86
|
+
|
87
|
+
# relative to repo path
|
88
|
+
config_updates.update(mpy_path=self.repo_path / self.mpy_path)
|
89
|
+
config_updates.update(mpy_lib_path=self.repo_path / self.mpy_lib_path)
|
90
|
+
if self.mpy_stubs_path.is_absolute() or self.mpy_stubs_path == Path("."):
|
91
|
+
config_updates.update(mpy_stubs_path=self.mpy_stubs_path)
|
92
|
+
else:
|
93
|
+
config_updates.update(mpy_stubs_path=self.repo_path / self.mpy_stubs_path)
|
94
|
+
# read the versions from the git tags
|
95
|
+
all_versions = []
|
96
|
+
try:
|
97
|
+
all_versions = git.get_tags("micropython/micropython", minver="v1.17")
|
98
|
+
except Exception as e:
|
99
|
+
log.warning(f"Could not read micropython versions from git: {e}")
|
100
|
+
all_versions = ["1.19", "1.19.1", "1.20.0", "1.21.0"]
|
101
|
+
config_updates.update(all_versions=all_versions)
|
102
|
+
config_updates.update(
|
103
|
+
stable_version=[v for v in all_versions if not v.endswith(V_PREVIEW)][-1]
|
104
|
+
) # second last version - last version is the preview version
|
105
|
+
return config_updates
|
106
|
+
|
107
|
+
|
108
|
+
def readconfig(filename: str = "pyproject.toml", prefix: str = "tool.", must_exist: bool = True):
|
109
|
+
"read the configuration from the pyproject.toml file"
|
110
|
+
# locate the pyproject.toml file
|
111
|
+
path = Path.cwd()
|
112
|
+
use_toml = True
|
113
|
+
while not (path / filename).exists():
|
114
|
+
path = path.parent
|
115
|
+
if path == path.parent:
|
116
|
+
log.trace(f"Could not find config file: {filename}")
|
117
|
+
use_toml = False
|
118
|
+
break
|
119
|
+
|
120
|
+
filename = str(path / filename)
|
121
|
+
|
122
|
+
config = StubberConfig()
|
123
|
+
# add provider sources to the config
|
124
|
+
config.add_source(EnvironmentConfigSource())
|
125
|
+
if use_toml:
|
126
|
+
config.add_source(
|
127
|
+
TomlConfigSource(filename, prefix=prefix, must_exist=must_exist)
|
128
|
+
) # ,"tools.micropython-stubber"))
|
129
|
+
config.read()
|
130
|
+
return config
|
131
|
+
|
132
|
+
|
133
|
+
#######################
|
134
|
+
# config singleton
|
135
|
+
CONFIG = readconfig()
|
136
|
+
"stubber configuration singleton"
|
137
|
+
#######################
|
stubber/utils/makeversionhdr.py
CHANGED
@@ -1,54 +1,54 @@
|
|
1
|
-
"""
|
2
|
-
Code from micropyton project and adapted to use the same versioning scheme
|
3
|
-
"""
|
4
|
-
|
5
|
-
from __future__ import print_function
|
6
|
-
|
7
|
-
import subprocess
|
8
|
-
from pathlib import Path
|
9
|
-
from typing import Optional, Tuple, Union
|
10
|
-
|
11
|
-
|
12
|
-
def get_version_info_from_git(path: Optional[Path] = None) -> Tuple[Union[str, None], Union[str, None]]:
|
13
|
-
"""return the version info from the git repository specified.
|
14
|
-
returns: a 2-tuple containing git_tag, short_hash
|
15
|
-
|
16
|
-
"""
|
17
|
-
path = path or Path.cwd()
|
18
|
-
# Note: git describe doesn't work if no tag is available
|
19
|
-
try:
|
20
|
-
git_tag = subprocess.check_output(
|
21
|
-
["git", "describe", "--tags", "--dirty", "--always", "--match", "v[1-9].*"],
|
22
|
-
stderr=subprocess.STDOUT,
|
23
|
-
universal_newlines=True,
|
24
|
-
cwd=path,
|
25
|
-
).strip()
|
26
|
-
except subprocess.CalledProcessError as er: # pragma: no cover
|
27
|
-
if er.returncode == 128:
|
28
|
-
# git exit code of 128 means no repository found
|
29
|
-
return (None, None)
|
30
|
-
git_tag = ""
|
31
|
-
except OSError:
|
32
|
-
return (None, None)
|
33
|
-
try:
|
34
|
-
git_hash = subprocess.check_output(
|
35
|
-
["git", "rev-parse", "--short", "HEAD"],
|
36
|
-
stderr=subprocess.STDOUT,
|
37
|
-
universal_newlines=True,
|
38
|
-
).strip()
|
39
|
-
except subprocess.CalledProcessError: # pragma: no cover
|
40
|
-
git_hash = "unknown"
|
41
|
-
except OSError:
|
42
|
-
return (None, None)
|
43
|
-
|
44
|
-
try:
|
45
|
-
# Check if there are any modified files.
|
46
|
-
subprocess.check_call(["git", "diff", "--no-ext-diff", "--quiet", "--exit-code"], stderr=subprocess.STDOUT)
|
47
|
-
# Check if there are any staged files.
|
48
|
-
subprocess.check_call(["git", "diff-index", "--cached", "--quiet", "HEAD", "--"], stderr=subprocess.STDOUT) # pragma: no cover
|
49
|
-
except subprocess.CalledProcessError:
|
50
|
-
git_hash += "-dirty"
|
51
|
-
except OSError:
|
52
|
-
return (None, None)
|
53
|
-
|
54
|
-
return git_tag, git_hash
|
1
|
+
"""
|
2
|
+
Code from micropyton project and adapted to use the same versioning scheme
|
3
|
+
"""
|
4
|
+
|
5
|
+
from __future__ import print_function
|
6
|
+
|
7
|
+
import subprocess
|
8
|
+
from pathlib import Path
|
9
|
+
from typing import Optional, Tuple, Union
|
10
|
+
|
11
|
+
|
12
|
+
def get_version_info_from_git(path: Optional[Path] = None) -> Tuple[Union[str, None], Union[str, None]]:
|
13
|
+
"""return the version info from the git repository specified.
|
14
|
+
returns: a 2-tuple containing git_tag, short_hash
|
15
|
+
|
16
|
+
"""
|
17
|
+
path = path or Path.cwd()
|
18
|
+
# Note: git describe doesn't work if no tag is available
|
19
|
+
try:
|
20
|
+
git_tag = subprocess.check_output(
|
21
|
+
["git", "describe", "--tags", "--dirty", "--always", "--match", "v[1-9].*"],
|
22
|
+
stderr=subprocess.STDOUT,
|
23
|
+
universal_newlines=True,
|
24
|
+
cwd=path,
|
25
|
+
).strip()
|
26
|
+
except subprocess.CalledProcessError as er: # pragma: no cover
|
27
|
+
if er.returncode == 128:
|
28
|
+
# git exit code of 128 means no repository found
|
29
|
+
return (None, None)
|
30
|
+
git_tag = ""
|
31
|
+
except OSError:
|
32
|
+
return (None, None)
|
33
|
+
try:
|
34
|
+
git_hash = subprocess.check_output(
|
35
|
+
["git", "rev-parse", "--short", "HEAD"],
|
36
|
+
stderr=subprocess.STDOUT,
|
37
|
+
universal_newlines=True,
|
38
|
+
).strip()
|
39
|
+
except subprocess.CalledProcessError: # pragma: no cover
|
40
|
+
git_hash = "unknown"
|
41
|
+
except OSError:
|
42
|
+
return (None, None)
|
43
|
+
|
44
|
+
try:
|
45
|
+
# Check if there are any modified files.
|
46
|
+
subprocess.check_call(["git", "diff", "--no-ext-diff", "--quiet", "--exit-code"], stderr=subprocess.STDOUT)
|
47
|
+
# Check if there are any staged files.
|
48
|
+
subprocess.check_call(["git", "diff-index", "--cached", "--quiet", "HEAD", "--"], stderr=subprocess.STDOUT) # pragma: no cover
|
49
|
+
except subprocess.CalledProcessError:
|
50
|
+
git_hash += "-dirty"
|
51
|
+
except OSError:
|
52
|
+
return (None, None)
|
53
|
+
|
54
|
+
return git_tag, git_hash
|
stubber/utils/manifest.py
CHANGED
@@ -1,90 +1,90 @@
|
|
1
|
-
"""Create a `module.json` manifest listing all files/stubs in this folder and subfolders."""
|
2
|
-
|
3
|
-
import json
|
4
|
-
import os
|
5
|
-
from pathlib import Path
|
6
|
-
from typing import Optional
|
7
|
-
|
8
|
-
from .. import __version__
|
9
|
-
from mpflash.versions import clean_version
|
10
|
-
|
11
|
-
# # log = logging.getLogger(__name__)
|
12
|
-
# # logging.basicConfig(level=logging.INFO)
|
13
|
-
|
14
|
-
|
15
|
-
def manifest(
|
16
|
-
family: str = "micropython",
|
17
|
-
stubtype: str = "frozen",
|
18
|
-
machine: Optional[str] = None, # also frozen.variant
|
19
|
-
port: Optional[str] = None,
|
20
|
-
platform: Optional[str] = None,
|
21
|
-
sysname: Optional[str] = None,
|
22
|
-
nodename: Optional[str] = None,
|
23
|
-
version: Optional[str] = None,
|
24
|
-
release: Optional[str] = None,
|
25
|
-
firmware: Optional[str] = None,
|
26
|
-
) -> dict:
|
27
|
-
"create a new empty manifest dict"
|
28
|
-
|
29
|
-
machine = machine or family # family
|
30
|
-
port = port or "common" # family
|
31
|
-
platform = platform or port # family
|
32
|
-
version = version or "0.0.0"
|
33
|
-
sysname = sysname or ""
|
34
|
-
nodename = nodename or sysname or ""
|
35
|
-
release = release or version or ""
|
36
|
-
if firmware is None:
|
37
|
-
firmware = "{}-{}-{}".format(family, port, clean_version(version, flat=True))
|
38
|
-
# remove double dashes x2
|
39
|
-
firmware = firmware.replace("--", "-")
|
40
|
-
firmware = firmware.replace("--", "-")
|
41
|
-
|
42
|
-
return {
|
43
|
-
"$schema": "https://raw.githubusercontent.com/Josverl/micropython-stubber/main/data/schema/stubber-v1_4_0.json",
|
44
|
-
"firmware": {
|
45
|
-
"family": family,
|
46
|
-
"port": port,
|
47
|
-
"platform": platform,
|
48
|
-
"machine": machine,
|
49
|
-
"firmware": firmware,
|
50
|
-
"nodename": nodename,
|
51
|
-
"version": version,
|
52
|
-
"release": release,
|
53
|
-
"sysname": sysname,
|
54
|
-
},
|
55
|
-
"stubber": {
|
56
|
-
"version": __version__,
|
57
|
-
"stubtype": stubtype,
|
58
|
-
},
|
59
|
-
"modules": [],
|
60
|
-
}
|
61
|
-
|
62
|
-
|
63
|
-
def make_manifest(folder: Path, family: str, port: str, version: str, release: str = "", stubtype: str = "", board: str = "") -> bool:
|
64
|
-
"""Create a `module.json` manifest listing all files/stubs in this folder and subfolders."""
|
65
|
-
mod_manifest = manifest(family=family, port=port, machine=board, sysname=family, version=version, release=release, stubtype=stubtype)
|
66
|
-
try:
|
67
|
-
# list all *.py files, not strictly modules but decent enough for documentation
|
68
|
-
files = list(folder.glob("**/*.py")) or list(folder.glob("**/*.pyi"))
|
69
|
-
|
70
|
-
# sort the list
|
71
|
-
for file in sorted(files):
|
72
|
-
# if file is in folder, then use relative path only
|
73
|
-
# use old style relative path determination to support # python 3.8
|
74
|
-
file = Path(os.path.relpath(file, start=folder))
|
75
|
-
# if file.is_relative_to(folder):
|
76
|
-
# file = file.relative_to(folder)
|
77
|
-
|
78
|
-
mod_manifest["modules"].append(
|
79
|
-
{
|
80
|
-
"file": file.as_posix(),
|
81
|
-
"module": file.stem,
|
82
|
-
}
|
83
|
-
)
|
84
|
-
|
85
|
-
# write the the module manifest
|
86
|
-
with open(folder / "modules.json", "w") as outfile:
|
87
|
-
json.dump(mod_manifest, outfile, indent=4)
|
88
|
-
return True
|
89
|
-
except OSError:
|
90
|
-
return False
|
1
|
+
"""Create a `module.json` manifest listing all files/stubs in this folder and subfolders."""
|
2
|
+
|
3
|
+
import json
|
4
|
+
import os
|
5
|
+
from pathlib import Path
|
6
|
+
from typing import Optional
|
7
|
+
|
8
|
+
from .. import __version__
|
9
|
+
from mpflash.versions import clean_version
|
10
|
+
|
11
|
+
# # log = logging.getLogger(__name__)
|
12
|
+
# # logging.basicConfig(level=logging.INFO)
|
13
|
+
|
14
|
+
|
15
|
+
def manifest(
|
16
|
+
family: str = "micropython",
|
17
|
+
stubtype: str = "frozen",
|
18
|
+
machine: Optional[str] = None, # also frozen.variant
|
19
|
+
port: Optional[str] = None,
|
20
|
+
platform: Optional[str] = None,
|
21
|
+
sysname: Optional[str] = None,
|
22
|
+
nodename: Optional[str] = None,
|
23
|
+
version: Optional[str] = None,
|
24
|
+
release: Optional[str] = None,
|
25
|
+
firmware: Optional[str] = None,
|
26
|
+
) -> dict:
|
27
|
+
"create a new empty manifest dict"
|
28
|
+
|
29
|
+
machine = machine or family # family
|
30
|
+
port = port or "common" # family
|
31
|
+
platform = platform or port # family
|
32
|
+
version = version or "0.0.0"
|
33
|
+
sysname = sysname or ""
|
34
|
+
nodename = nodename or sysname or ""
|
35
|
+
release = release or version or ""
|
36
|
+
if firmware is None:
|
37
|
+
firmware = "{}-{}-{}".format(family, port, clean_version(version, flat=True))
|
38
|
+
# remove double dashes x2
|
39
|
+
firmware = firmware.replace("--", "-")
|
40
|
+
firmware = firmware.replace("--", "-")
|
41
|
+
|
42
|
+
return {
|
43
|
+
"$schema": "https://raw.githubusercontent.com/Josverl/micropython-stubber/main/data/schema/stubber-v1_4_0.json",
|
44
|
+
"firmware": {
|
45
|
+
"family": family,
|
46
|
+
"port": port,
|
47
|
+
"platform": platform,
|
48
|
+
"machine": machine,
|
49
|
+
"firmware": firmware,
|
50
|
+
"nodename": nodename,
|
51
|
+
"version": version,
|
52
|
+
"release": release,
|
53
|
+
"sysname": sysname,
|
54
|
+
},
|
55
|
+
"stubber": {
|
56
|
+
"version": __version__,
|
57
|
+
"stubtype": stubtype,
|
58
|
+
},
|
59
|
+
"modules": [],
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
def make_manifest(folder: Path, family: str, port: str, version: str, release: str = "", stubtype: str = "", board: str = "") -> bool:
|
64
|
+
"""Create a `module.json` manifest listing all files/stubs in this folder and subfolders."""
|
65
|
+
mod_manifest = manifest(family=family, port=port, machine=board, sysname=family, version=version, release=release, stubtype=stubtype)
|
66
|
+
try:
|
67
|
+
# list all *.py files, not strictly modules but decent enough for documentation
|
68
|
+
files = list(folder.glob("**/*.py")) or list(folder.glob("**/*.pyi"))
|
69
|
+
|
70
|
+
# sort the list
|
71
|
+
for file in sorted(files):
|
72
|
+
# if file is in folder, then use relative path only
|
73
|
+
# use old style relative path determination to support # python 3.8
|
74
|
+
file = Path(os.path.relpath(file, start=folder))
|
75
|
+
# if file.is_relative_to(folder):
|
76
|
+
# file = file.relative_to(folder)
|
77
|
+
|
78
|
+
mod_manifest["modules"].append(
|
79
|
+
{
|
80
|
+
"file": file.as_posix(),
|
81
|
+
"module": file.stem,
|
82
|
+
}
|
83
|
+
)
|
84
|
+
|
85
|
+
# write the the module manifest
|
86
|
+
with open(folder / "modules.json", "w") as outfile:
|
87
|
+
json.dump(mod_manifest, outfile, indent=4)
|
88
|
+
return True
|
89
|
+
except OSError:
|
90
|
+
return False
|