Skip to content

Commit 4429ffb

Browse files
jaracocdce8p
authored andcommitted
Replace for/if/add/extend with generator on patterns. Use unique_everseen to dedupe.
1 parent c837956 commit 4429ffb

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

setuptools/dist.py

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from glob import iglob
1919
import itertools
2020
import textwrap
21-
from typing import List, Optional, Set, TYPE_CHECKING
21+
from typing import List, Optional, TYPE_CHECKING
2222

2323
from collections import defaultdict
2424
from email import message_from_file
@@ -581,7 +581,6 @@ def _clean_req(self, req):
581581

582582
def _finalize_license_files(self):
583583
"""Compute names of all license files which should be included."""
584-
files: List[str] = []
585584
license_files: Optional[List[str]] = self.metadata.license_files
586585
patterns: List[str] = license_files if license_files else []
587586

@@ -595,16 +594,18 @@ def _finalize_license_files(self):
595594
# -> 'Including license files in the generated wheel file'
596595
patterns = ('LICEN[CS]E*', 'COPYING*', 'NOTICE*', 'AUTHORS*')
597596

598-
for pattern in patterns:
599-
files_pattern: Set[str] = set()
600-
for path in iglob(pattern):
601-
if path.endswith('~'):
602-
continue
603-
if path not in files and os.path.isfile(path):
604-
files_pattern.add(path)
605-
files.extend(sorted(files_pattern))
597+
self.metadata.license_files = list(
598+
unique_everseen(self._expand_patterns(patterns)))
606599

607-
self.metadata.license_files = files
600+
@staticmethod
601+
def _expand_patterns(patterns):
602+
return (
603+
path
604+
for pattern in patterns
605+
for path in iglob(pattern)
606+
if not path.endswith('~')
607+
and os.path.isfile(path)
608+
)
608609

609610
# FIXME: 'Distribution._parse_config_files' is too complex (14)
610611
def _parse_config_files(self, filenames=None): # noqa: C901
@@ -1111,3 +1112,21 @@ def handle_display_options(self, option_order):
11111112
class DistDeprecationWarning(SetuptoolsDeprecationWarning):
11121113
"""Class for warning about deprecations in dist in
11131114
setuptools. Not ignored by default, unlike DeprecationWarning."""
1115+
1116+
1117+
def unique_everseen(iterable, key=None):
1118+
"List unique elements, preserving order. Remember all elements ever seen."
1119+
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
1120+
# unique_everseen('ABBCcAD', str.lower) --> A B C D
1121+
seen = set()
1122+
seen_add = seen.add
1123+
if key is None:
1124+
for element in itertools.filterfalse(seen.__contains__, iterable):
1125+
seen_add(element)
1126+
yield element
1127+
else:
1128+
for element in iterable:
1129+
k = key(element)
1130+
if k not in seen:
1131+
seen_add(k)
1132+
yield element

0 commit comments

Comments
 (0)