[+] improve typing

This commit is contained in:
Siarhei Siniak 2025-05-19 12:33:28 +03:00
parent 591c893909
commit 1dbba925f1

@ -101,6 +101,43 @@ def check_dict(
value,
)
@overload
def check_list(
value: Any,
VT: Type[Value],
) -> list[Value]: ...
@overload
def check_list(
value: Any,
) -> list[Any]: ...
def check_list(
value: Any,
VT: Optional[Type[Value]] = None,
) -> list[Value] | list[Any]:
assert isinstance(value, list)
value2 = cast(list[Any], value)
assert all([
(
VT is None or
isinstance(o, VT)
)
for o in value2
])
if VT is None:
return cast(
list[Any],
value,
)
else:
return cast(
list[Value],
value,
)
def pyproject_load(
d: pathlib.Path,
) -> PyProject:
@ -148,18 +185,11 @@ def pyproject_load(
tool_name = 'online.fxreader.pr34'.replace('.', '-')
if (
'tool' in content and
isinstance(
content['tool'], dict
) and
all([
isinstance(o, str)
for o in content['tool']
])
'tool' in content
):
res.tool = cast(
dict[str, Any],
content['tool']
res.tool = check_dict(
content['tool'],
str,
)
if (
@ -173,42 +203,52 @@ def pyproject_load(
dict
)
):
if 'early_features' in content['tool'][tool_name]:
res.early_features = content['tool'][tool_name]['early_features']
pr34_tool = check_dict(
check_dict(
content['tool'],
str,
)[tool_name],
str
)
if 'pip_find_links' in content['tool'][tool_name]:
if 'early_features' in pr34_tool:
res.early_features = pr34_tool['early_features']
if 'pip_find_links' in pr34_tool:
res.pip_find_links = [
d.parent / pathlib.Path(o)
for o in content['tool'][tool_name]['pip_find_links']
for o in pr34_tool['pip_find_links']
]
if 'runtime_libdirs' in content['tool'][tool_name]:
if 'runtime_libdirs' in pr34_tool:
res.runtime_libdirs = [
d.parent / pathlib.Path(o)
# pathlib.Path(o)
for o in content['tool'][tool_name]['runtime_libdirs']
for o in pr34_tool['runtime_libdirs']
]
if 'runtime_preload' in content['tool'][tool_name]:
if 'runtime_preload' in pr34_tool:
res.runtime_preload = [
d.parent / pathlib.Path(o)
# pathlib.Path(o)
for o in content['tool'][tool_name]['runtime_preload']
for o in pr34_tool['runtime_preload']
]
if 'requirements' in content['tool'][tool_name]:
assert isinstance(content['tool'][tool_name]['requirements'], dict)
if 'requirements' in pr34_tool:
res.requirements = {
k : d.parent / pathlib.Path(v)
# pathlib.Path(o)
for k, v in content['tool'][tool_name]['requirements'].items()
for k, v in check_dict(
pr34_tool['requirements'],
str,
str
).items()
}
if 'modules' in content['tool'][tool_name]:
modules = content['tool'][tool_name]['modules']
assert isinstance(modules, list)
if 'modules' in pr34_tool:
modules = check_list(
pr34_tool['modules']
)
# res.modules = []
for o in modules: