File tree Expand file tree Collapse file tree 3 files changed +26
-1
lines changed
Expand file tree Collapse file tree 3 files changed +26
-1
lines changed Original file line number Diff line number Diff line change 33 */.tox/*
44 tests/*
55 prepare/*
6+ */_itertools.py
67
78[report]
89show_missing = True
Original file line number Diff line number Diff line change 1919 Protocol ,
2020)
2121
22+ from ._itertools import unique_everseen
23+
2224from configparser import ConfigParser
2325from contextlib import suppress
2426from importlib import import_module
@@ -646,7 +648,10 @@ def entry_points():
646648
647649 :return: EntryPoint objects for all installed packages.
648650 """
649- eps = itertools .chain .from_iterable (dist .entry_points for dist in distributions ())
651+ unique = functools .partial (unique_everseen , key = operator .attrgetter ('name' ))
652+ eps = itertools .chain .from_iterable (
653+ dist .entry_points for dist in unique (distributions ())
654+ )
650655 by_group = operator .attrgetter ('group' )
651656 ordered = sorted (eps , key = by_group )
652657 grouped = itertools .groupby (ordered , by_group )
Original file line number Diff line number Diff line change 1+ from itertools import filterfalse
2+
3+
4+ def unique_everseen (iterable , key = None ):
5+ "List unique elements, preserving order. Remember all elements ever seen."
6+ # unique_everseen('AAAABBBCCDAABBB') --> A B C D
7+ # unique_everseen('ABBCcAD', str.lower) --> A B C D
8+ seen = set ()
9+ seen_add = seen .add
10+ if key is None :
11+ for element in filterfalse (seen .__contains__ , iterable ):
12+ seen_add (element )
13+ yield element
14+ else :
15+ for element in iterable :
16+ k = key (element )
17+ if k not in seen :
18+ seen_add (k )
19+ yield element
You can’t perform that action at this time.
0 commit comments