diff options
author | Matthäus G. Chajdas <dev@anteru.net> | 2022-12-07 21:56:46 +0100 |
---|---|---|
committer | Matthäus G. Chajdas <dev@anteru.net> | 2022-12-07 21:57:31 +0100 |
commit | 21d4997827496c3066bde6d98a88343680e6ffc2 (patch) | |
tree | 62821c3baee87294be84bd8a4b7d5c47ef148635 | |
parent | 0db531852f848913853929a7af1b0bab44d59f1a (diff) | |
download | pygments-git-21d4997827496c3066bde6d98a88343680e6ffc2.tar.gz |
Remove the lxml dependency.
Replace lxml with html.parser for the structural-diff.
-rw-r--r-- | requirements.txt | 1 | ||||
-rw-r--r-- | tests/support/structural_diff.py | 42 | ||||
-rw-r--r-- | tox.ini | 1 |
3 files changed, 31 insertions, 13 deletions
diff --git a/requirements.txt b/requirements.txt index be5330a8..05a0b12b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,3 @@ pyflakes pylint tox wcag-contrast-ratio -lxml diff --git a/tests/support/structural_diff.py b/tests/support/structural_diff.py index d2e4d7f2..cea27d10 100644 --- a/tests/support/structural_diff.py +++ b/tests/support/structural_diff.py @@ -1,17 +1,37 @@ -import lxml.html -import lxml.etree -import pytest +import html.parser + + +class Parser(html.parser.HTMLParser): + def __init__(self): + super().__init__() + self._stream = [] + + def handle_starttag(self, tag, attrs): + attrs = sorted(attrs, key=lambda x: x[0]) + attrs = '|'.join([k[0] + ':' + k[1] for k in attrs]) + self._stream.append(('<', tag, attrs)) + + def handle_endtag(self, tag): + self._stream.append(('>', tag, '')) + + def handle_data(self, data): + self._stream.append(('_', data, '')) + + @property + def stream(self): + return self._stream + def _serialize(t): - for a, e in lxml.etree.iterwalk(t, events=("start", "end"),): - text = e.text.strip() if e.text else "" - yield (a, e.tag, repr(text), ', '.join([k[0]+':'+k[1] for k in sorted(e.attrib.items(), key = lambda x: x[0])])) + parser = Parser() + parser.feed(t) + return parser.stream + def structural_diff(a, b): """Check if there is a structural difference between two HTML files.""" - a_s = _serialize(lxml.html.fromstring(a)) - b_s = _serialize(lxml.html.fromstring(b)) - + a_s = _serialize(a) + b_s = _serialize(b) + for e, f in zip(a_s, b_s): - print(e, f) - assert e == f
\ No newline at end of file + assert e == f, f'Expected: {e}, found: {f}' @@ -6,7 +6,6 @@ deps = pytest pytest-cov wcag-contrast-ratio - lxml commands = pytest {posargs} |