Skip to content

Commit f175ccd

Browse files
committed
Improve BasicMetadata to be more immutable
1 parent 91b440c commit f175ccd

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

metadata_please/sdist.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ def from_zip_sdist(zf: ZipFile) -> bytes:
1414
requires.sort(key=len)
1515
data = zf.read(requires[0])
1616
assert data is not None
17-
requires, extras = convert_sdist_requires(data.decode("utf-8"))
17+
requires_lines, extras = convert_sdist_requires(data.decode("utf-8"))
1818

1919
buf: list[str] = []
20-
for req in requires:
20+
for req in requires_lines:
2121
buf.append(f"Requires-Dist: {req}\n")
2222
for extra in sorted(extras):
2323
buf.append(f"Provides-Extra: {extra}\n")
@@ -43,10 +43,10 @@ def from_tar_sdist(tf: TarFile) -> bytes:
4343
fo = tf.extractfile(requires[0])
4444
assert fo is not None
4545

46-
requires, extras = convert_sdist_requires(fo.read().decode("utf-8"))
46+
requires_lines, extras = convert_sdist_requires(fo.read().decode("utf-8"))
4747

4848
buf: list[str] = []
49-
for req in requires:
49+
for req in requires_lines:
5050
buf.append(f"Requires-Dist: {req}\n")
5151
for extra in sorted(extras):
5252
buf.append(f"Provides-Extra: {extra}\n")

metadata_please/tests/sdist.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def test_basic_metadata(self) -> None:
4141
)
4242
bm = basic_metadata_from_zip_sdist(z) # type: ignore
4343
self.assertEqual(
44-
["a", "b; extra == 'e'"],
44+
("a", "b; extra == 'e'"),
4545
bm.reqs,
4646
)
4747
self.assertEqual({"e"}, bm.provides_extra)
@@ -60,12 +60,12 @@ def test_basic_metadata_absl_py_09(self) -> None:
6060
)
6161
bm = basic_metadata_from_zip_sdist(z) # type: ignore
6262
self.assertEqual(
63-
[
63+
(
6464
"six",
6565
'enum34; python_version < "3.4"',
6666
# Quoting on the following line is an implementation detail
6767
"pytest; (python_version < \"3.4\") and extra == 'test'",
68-
],
68+
),
6969
bm.reqs,
7070
)
7171
self.assertEqual({"test"}, bm.provides_extra)
@@ -102,7 +102,7 @@ def test_basic_metadata(self) -> None:
102102
)
103103
bm = basic_metadata_from_tar_sdist(t) # type: ignore
104104
self.assertEqual(
105-
["a", "b; extra == 'e'"],
105+
("a", "b; extra == 'e'"),
106106
bm.reqs,
107107
)
108108
self.assertEqual({"e"}, bm.provides_extra)

metadata_please/types.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ class BasicMetadata:
1111
# Popualted from Requires-Dist or requires.txt
1212
reqs: Sequence[str]
1313
# Populated from Provides-Extra
14-
provides_extra: set[str]
14+
provides_extra: frozenset[str]
1515

1616
@classmethod
1717
def from_metadata(cls, metadata: bytes) -> BasicMetadata:
1818
msg = message_from_string(metadata.decode("utf-8"))
1919
return BasicMetadata(
2020
msg.get_all("Requires-Dist") or (),
21-
set(msg.get_all("Provides-Extra") or ()),
21+
frozenset(msg.get_all("Provides-Extra") or ()),
2222
)
2323

2424
@classmethod
@@ -33,7 +33,7 @@ def from_sdist_pkg_info_and_requires(
3333
)
3434

3535

36-
def convert_sdist_requires(data: str) -> tuple[list[str], set[str]]:
36+
def convert_sdist_requires(data: str) -> tuple[tuple[str, ...], frozenset[str]]:
3737
# This is reverse engineered from looking at a couple examples, but there
3838
# does not appear to be a formal spec. Mentioned at
3939
# https://setuptools.readthedocs.io/en/latest/formats.html#requires-txt
@@ -64,4 +64,4 @@ def convert_sdist_requires(data: str) -> tuple[list[str], set[str]]:
6464
lst.append(f"{line}; {current_markers}")
6565
else:
6666
lst.append(line)
67-
return lst, extras
67+
return tuple(lst), frozenset(extras)

0 commit comments

Comments
 (0)