From 37e0c7850de902179b28f1378fbbc38a5ed3628c Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 2 May 2021 17:03:40 -0400 Subject: bpo-43926: Cleaner metadata with PEP 566 JSON support. (GH-25565) * bpo-43926: Cleaner metadata with PEP 566 JSON support. * Add blurb * Add versionchanged and versionadded declarations for changes to metadata. * Use descriptor for PEP 566 --- Lib/importlib/metadata/_itertools.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Lib/importlib/metadata/_itertools.py (limited to 'Lib/importlib/metadata/_itertools.py') diff --git a/Lib/importlib/metadata/_itertools.py b/Lib/importlib/metadata/_itertools.py new file mode 100644 index 0000000000..dd45f2f096 --- /dev/null +++ b/Lib/importlib/metadata/_itertools.py @@ -0,0 +1,19 @@ +from itertools import filterfalse + + +def unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in filterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element -- cgit v1.2.1