Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
groodt committed Mar 13, 2024
1 parent d7d1839 commit 547cd61
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
20 changes: 19 additions & 1 deletion flit_core/flit_core/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,24 @@ def _normalise_core_metadata_name(self, name):
# Normalized Names (PEP 503)
return re.sub(r"[-_.]+", "-", name).lower()

def _extract_extras(self, req):
match = re.search(r'\[([^]]*)\]', req)
if match:
list_str = match.group(1)
return [item.strip() for item in list_str.split(',')]
else:
return None

def _normalise_requires_dist(self, req):
extras = self._extract_extras(req)
if extras:
normalised_extras = [self._normalise_core_metadata_name(extra) for extra in extras]
normalised_extras_str = ', '.join(normalised_extras)
normalised_req = re.sub(r'\[([^]]*)\]', f"[{normalised_extras_str}]", req)
return normalised_req
else:
return req

def write_metadata_file(self, fp):
"""Write out metadata in the email headers format"""
fields = [
Expand Down Expand Up @@ -404,7 +422,7 @@ def write_metadata_file(self, fp):
fp.write(u'Classifier: {}\n'.format(clsfr))

for req in self.requires_dist:
normalised_req = self._normalise_core_metadata_name(req)
normalised_req = self._normalise_requires_dist(req)
fp.write(u'Requires-Dist: {}\n'.format(normalised_req))

for url in self.project_urls:
Expand Down
45 changes: 45 additions & 0 deletions flit_core/flit_core/tests/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,3 +156,48 @@ def test_metadata_multiline(tmp_path):
assert msg['Version'] == d['version']
assert [l.lstrip() for l in msg['Author'].splitlines()] == d['author'].splitlines()
assert not msg.defects

@pytest.mark.parametrize(
("requires_dist", "expected_result"),
[
('foo [extra_1, extra.2, extra-3, extra__4, extra..5, extra--6]', 'foo [extra-1, extra-2, extra-3, extra-4, extra-5, extra-6]'),
('foo', 'foo'),
('foo[bar]', 'foo[bar]'),
],
)
def test_metadata_2_3_requires_dist(requires_dist, expected_result):
d = {
'name': 'foo',
'version': '1.0',
'requires_dist': [requires_dist],
}
md = Metadata(d)
sio = StringIO()
md.write_metadata_file(sio)
sio.seek(0)

msg = email.parser.Parser(policy=email.policy.compat32).parse(sio)
assert msg['Requires-Dist'] == expected_result
assert not msg.defects

@pytest.mark.parametrize(
("provides_extra", "expected_result"),
[
('foo', 'foo'),
('foo__bar..baz', 'foo-bar-baz'),
],
)
def test_metadata_2_3_provides_extra(provides_extra, expected_result):
d = {
'name': 'foo',
'version': '1.0',
'provides_extra': [provides_extra],
}
md = Metadata(d)
sio = StringIO()
md.write_metadata_file(sio)
sio.seek(0)

msg = email.parser.Parser(policy=email.policy.compat32).parse(sio)
assert msg['Provides-Extra'] == expected_result
assert not msg.defects

0 comments on commit 547cd61

Please sign in to comment.