Skip to content

Commit 4b11da4

Browse files
authored
Merge pull request #833 from bhrutledge/753-metadata-2.2
Add support for Metadata 2.2
2 parents 04f3592 + 116a946 commit 4b11da4

4 files changed

Lines changed: 66 additions & 2 deletions

File tree

changelog/833.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add support for core metadata version 2.2, defined in PEP 643.

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ packages =
3636
twine.commands
3737
python_requires = >=3.6
3838
install_requires=
39-
pkginfo >= 1.4.2
39+
pkginfo >= 1.8.1
4040
readme_renderer >= 21.0
4141
requests >= 2.20
4242
requests-toolbelt >= 0.8.0, != 0.9.0

tests/test_package.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from twine import exceptions
2020
from twine import package as package_file
2121

22+
from . import helpers
23+
2224

2325
def test_sign_file(monkeypatch):
2426
replaced_check_call = pretend.call_recorder(lambda args: None)
@@ -134,8 +136,59 @@ def test_package_safe_name_is_correct(pkg_name, expected_name):
134136
assert package.safe_name == expected_name
135137

136138

139+
def test_metadata_dictionary_keys():
140+
"""Merge multiple sources of metadata into a single dictionary."""
141+
package = package_file.PackageFile.from_filename(helpers.SDIST_FIXTURE, None)
142+
assert set(package.metadata_dictionary()) == set(
143+
[
144+
# identify release
145+
"name",
146+
"version",
147+
# file content
148+
"filetype",
149+
"pyversion",
150+
# additional meta-data
151+
"metadata_version",
152+
"summary",
153+
"home_page",
154+
"author",
155+
"author_email",
156+
"maintainer",
157+
"maintainer_email",
158+
"license",
159+
"description",
160+
"keywords",
161+
"platform",
162+
"classifiers",
163+
"download_url",
164+
"supported_platform",
165+
"comment",
166+
"md5_digest",
167+
"sha256_digest",
168+
"blake2_256_digest",
169+
# PEP 314
170+
"provides",
171+
"requires",
172+
"obsoletes",
173+
# Metadata 1.2
174+
"project_urls",
175+
"provides_dist",
176+
"obsoletes_dist",
177+
"requires_dist",
178+
"requires_external",
179+
"requires_python",
180+
# Metadata 2.1
181+
"provides_extras",
182+
"description_content_type",
183+
# Metadata 2.2
184+
"dynamic",
185+
]
186+
)
187+
188+
137189
@pytest.mark.parametrize("gpg_signature", [(None), (pretend.stub())])
138-
def test_metadata_dictionary(gpg_signature):
190+
def test_metadata_dictionary_values(gpg_signature):
191+
"""Pass values from pkginfo.Distribution through to dictionary."""
139192
meta = pretend.stub(
140193
name="whatever",
141194
version=pretend.stub(),
@@ -164,6 +217,7 @@ def test_metadata_dictionary(gpg_signature):
164217
requires_python=pretend.stub(),
165218
provides_extras=pretend.stub(),
166219
description_content_type=pretend.stub(),
220+
dynamic=pretend.stub(),
167221
)
168222

169223
package = package_file.PackageFile(
@@ -219,6 +273,9 @@ def test_metadata_dictionary(gpg_signature):
219273
assert result["provides_extras"] == meta.provides_extras
220274
assert result["description_content_type"] == meta.description_content_type
221275

276+
# Metadata 2.2
277+
assert result["dynamic"] == meta.dynamic
278+
222279
# GPG signature
223280
assert result.get("gpg_signature") == gpg_signature
224281

twine/package.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ def from_filename(cls, filename: str, comment: Optional[str]) -> "PackageFile":
128128
return cls(filename, comment, meta, py_version, dtype)
129129

130130
def metadata_dictionary(self) -> Dict[str, MetadataValue]:
131+
"""Merge multiple sources of metadata into a single dictionary.
132+
133+
Includes values from filename, PKG-INFO, hashers, and signature.
134+
"""
131135
meta = self.metadata
132136
data = {
133137
# identify release
@@ -167,6 +171,8 @@ def metadata_dictionary(self) -> Dict[str, MetadataValue]:
167171
# Metadata 2.1
168172
"provides_extras": meta.provides_extras,
169173
"description_content_type": meta.description_content_type,
174+
# Metadata 2.2
175+
"dynamic": meta.dynamic,
170176
}
171177

172178
if self.gpg_signature is not None:

0 commit comments

Comments
 (0)