-
Notifications
You must be signed in to change notification settings - Fork 248
/
api.py
88 lines (62 loc) · 2.61 KB
/
api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"""
PEP-517 compliant buildsystem API
"""
from __future__ import annotations
import logging
from pathlib import Path
from typing import Any
from poetry.core.factory import Factory
from poetry.core.masonry.builders.sdist import SdistBuilder
from poetry.core.masonry.builders.wheel import WheelBuilder
log = logging.getLogger(__name__)
def get_requires_for_build_wheel(
config_settings: dict[str, Any] | None = None,
) -> list[str]:
"""
Returns an additional list of requirements for building, as PEP508 strings,
above and beyond those specified in the pyproject.toml file.
This implementation is optional. At the moment it only returns an empty list,
which would be the same as if not define. So this is just for completeness
for future implementation.
"""
return []
# For now, we require all dependencies to build either a wheel or an sdist.
get_requires_for_build_sdist = get_requires_for_build_wheel
def prepare_metadata_for_build_wheel(
metadata_directory: str, config_settings: dict[str, Any] | None = None
) -> str:
poetry = Factory().create_poetry(Path().resolve(), with_groups=False)
builder = WheelBuilder(poetry)
metadata_path = Path(metadata_directory)
dist_info = builder.prepare_metadata(metadata_path)
return dist_info.name
def build_wheel(
wheel_directory: str,
config_settings: dict[str, Any] | None = None,
metadata_directory: str | None = None,
) -> str:
"""Builds a wheel, places it in wheel_directory"""
poetry = Factory().create_poetry(Path().resolve(), with_groups=False)
metadata_path = None if metadata_directory is None else Path(metadata_directory)
return WheelBuilder.make_in(
poetry, Path(wheel_directory), metadata_directory=metadata_path
)
def build_sdist(
sdist_directory: str, config_settings: dict[str, Any] | None = None
) -> str:
"""Builds an sdist, places it in sdist_directory"""
poetry = Factory().create_poetry(Path().resolve(), with_groups=False)
path = SdistBuilder(poetry).build(Path(sdist_directory))
return path.name
def build_editable(
wheel_directory: str,
config_settings: dict[str, Any] | None = None,
metadata_directory: str | None = None,
) -> str:
poetry = Factory().create_poetry(Path().resolve(), with_groups=False)
metadata_path = None if metadata_directory is None else Path(metadata_directory)
return WheelBuilder.make_in(
poetry, Path(wheel_directory), metadata_directory=metadata_path, editable=True
)
get_requires_for_build_editable = get_requires_for_build_wheel
prepare_metadata_for_build_editable = prepare_metadata_for_build_wheel