diff --git a/cssutils/util.py b/cssutils/util.py index c2e6db78..45f112bf 100644 --- a/cssutils/util.py +++ b/cssutils/util.py @@ -8,8 +8,6 @@ import xml.dom from itertools import chain -from more_itertools import unique_everseen - import cssutils from . import codec, errorhandler, tokenize2 @@ -23,6 +21,28 @@ log = errorhandler.ErrorHandler() +def unique_everseen(iterable, key=None): + """ + Yield unique elements, preserving order. Remember all elements ever seen. + + This is the function available from the itertools recipe page: + https://docs.python.org/3/library/itertools.html#itertools-recipes + """ + # unique_everseen('AAAABBBCCDAABBB') → A B C D + # unique_everseen('ABBcCAD', str.casefold) → A B c D + seen = set() + 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 + + class _BaseClass: """ Base class for Base, Base2 and _NewBase. diff --git a/pyproject.toml b/pyproject.toml index 81760d48..5be86090 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,9 +23,7 @@ classifiers = [ "Topic :: Text Processing :: Markup :: HTML", ] requires-python = ">=3.9" -dependencies = [ - "more_itertools", -] +dependencies = [ ] dynamic = ["version"] keywords = ["CSS", "Cascading Style Sheets", "CSSParser", "DOM Level 2 Stylesheets", "DOM Level 2 CSS"]