Skip to content

Commit 097a835

Browse files
authored
Implement minimal versions of metadata preparation methods (#466)
1 parent dac8659 commit 097a835

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

backend/src/hatchling/build.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,24 @@ def get_requires_for_build_wheel(config_settings=None):
3131
return builder.config.dependencies
3232

3333

34+
def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
35+
"""
36+
https://peps.python.org/pep-0517/#prepare-metadata-for-build-wheel
37+
"""
38+
from hatchling.builders.wheel import WheelBuilder
39+
40+
builder = WheelBuilder(os.getcwd())
41+
42+
directory = os.path.join(metadata_directory, f'{builder.artifact_project_id}.dist-info')
43+
if not os.path.isdir(directory):
44+
os.mkdir(directory)
45+
46+
with open(os.path.join(directory, 'METADATA'), 'w', encoding='utf-8') as f:
47+
f.write(builder.config.core_metadata_constructor(builder.metadata))
48+
49+
return os.path.basename(directory)
50+
51+
3452
def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
3553
"""
3654
https://peps.python.org/pep-0517/#build-wheel
@@ -51,6 +69,28 @@ def get_requires_for_build_editable(config_settings=None):
5169
return builder.config.dependencies
5270

5371

72+
def prepare_metadata_for_build_editable(metadata_directory, config_settings=None):
73+
"""
74+
https://peps.python.org/pep-0660/#prepare-metadata-for-build-editable
75+
"""
76+
from hatchling.builders.wheel import EDITABLES_MINIMUM_VERSION, WheelBuilder
77+
78+
builder = WheelBuilder(os.getcwd())
79+
80+
directory = os.path.join(metadata_directory, f'{builder.artifact_project_id}.dist-info')
81+
if not os.path.isdir(directory):
82+
os.mkdir(directory)
83+
84+
extra_dependencies = []
85+
if not builder.config.dev_mode_dirs and builder.config.dev_mode_exact:
86+
extra_dependencies.append(f'editables~={EDITABLES_MINIMUM_VERSION}')
87+
88+
with open(os.path.join(directory, 'METADATA'), 'w', encoding='utf-8') as f:
89+
f.write(builder.config.core_metadata_constructor(builder.metadata, extra_dependencies=extra_dependencies))
90+
91+
return os.path.basename(directory)
92+
93+
5494
def build_editable(wheel_directory, config_settings=None, metadata_directory=None):
5595
"""
5696
https://peps.python.org/pep-0660/#build-editable

backend/src/hatchling/ouroboros.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,48 @@ def get_requires_for_build_wheel(config_settings=None):
9595
return CONFIG['project']['dependencies']
9696

9797

98+
def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
99+
"""
100+
https://peps.python.org/pep-0517/#prepare-metadata-for-build-wheel
101+
"""
102+
from hatchling.builders.wheel import WheelBuilder
103+
104+
builder = WheelBuilder(os.getcwd(), config=CONFIG)
105+
106+
directory = os.path.join(metadata_directory, f'{builder.artifact_project_id}.dist-info')
107+
if not os.path.isdir(directory):
108+
os.mkdir(directory)
109+
110+
with open(os.path.join(directory, 'METADATA'), 'w', encoding='utf-8') as f:
111+
f.write(builder.config.core_metadata_constructor(builder.metadata))
112+
113+
return os.path.basename(directory)
114+
115+
98116
def get_requires_for_build_editable(config_settings=None):
99117
"""
100118
https://peps.python.org/pep-0660/#get-requires-for-build-editable
101119
"""
102120
return CONFIG['project']['dependencies']
121+
122+
123+
def prepare_metadata_for_build_editable(metadata_directory, config_settings=None):
124+
"""
125+
https://peps.python.org/pep-0660/#prepare-metadata-for-build-editable
126+
"""
127+
from hatchling.builders.wheel import EDITABLES_MINIMUM_VERSION, WheelBuilder
128+
129+
builder = WheelBuilder(os.getcwd(), config=CONFIG)
130+
131+
directory = os.path.join(metadata_directory, f'{builder.artifact_project_id}.dist-info')
132+
if not os.path.isdir(directory):
133+
os.mkdir(directory)
134+
135+
extra_dependencies = []
136+
if not builder.config.dev_mode_dirs and builder.config.dev_mode_exact:
137+
extra_dependencies.append(f'editables~={EDITABLES_MINIMUM_VERSION}')
138+
139+
with open(os.path.join(directory, 'METADATA'), 'w', encoding='utf-8') as f:
140+
f.write(builder.config.core_metadata_constructor(builder.metadata, extra_dependencies=extra_dependencies))
141+
142+
return os.path.basename(directory)

docs/history.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ This is the first stable release of Hatch v1, a complete rewrite. Enjoy!
174174

175175
***Added:***
176176

177+
- Implement a minimal version of `prepare_metadata_for_build_wheel` and `prepare_metadata_for_build_editable` for non-frontend tools that only need to inspect a project's metadata
177178
- Add `metadata` command to view PEP 621 project metadata
178179
- Improve error messages for SPDX license errors
179180
- Retroactively support `License-File` for core metadata starting at version 2.1

0 commit comments

Comments
 (0)