diff --git a/CHANGES.rst b/CHANGES.rst index 66d0485..cbc5bec 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,11 @@ Changelog 2.3 (unreleased) ---------------- -- Nothing changed yet. +* Use new ``lxml_html_clean`` package when available. + You need this when you are using ``lxml`` 5.2 or later. + We don't want to make this a hard dependency. + When you use Plone 6.0.11 or later, you must use this new ``htmllaundry`` version. + Fine for older Plone versions as well. 2.2 (2020-01-28) diff --git a/htmllaundry/cleaners.py b/htmllaundry/cleaners.py index c22e6e1..5a5faad 100644 --- a/htmllaundry/cleaners.py +++ b/htmllaundry/cleaners.py @@ -1,5 +1,10 @@ -from lxml.html.clean import Cleaner -from lxml.html.clean import _find_external_links +try: + from lxml_html_clean.clean import _find_external_links + from lxml_html_clean.clean import Cleaner +except ImportError: + # BBB for lxml 5.1 or earlier + from lxml.html.clean import _find_external_links + from lxml.html.clean import Cleaner marker = [] @@ -18,6 +23,8 @@ def force_link_target(self, doc, target): if target is None: if 'target' in el.attrib: del el.attrib['target'] + elif isinstance(target, (list, tuple)): + el.set('target', target[0]) else: el.set('target', target) @@ -71,7 +78,7 @@ def force_link_target(self, doc, target): processing_instructions=False, frames=False, annoying_tags=False, - link_target="_blank") + link_target=["_blank"]) __all__ = ['DocumentCleaner', 'LineCleaner', 'CommentCleaner'] diff --git a/setup.py b/setup.py index d53846a..e2b8d86 100644 --- a/setup.py +++ b/setup.py @@ -25,12 +25,13 @@ 'License :: OSI Approved :: BSD License', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.4', - 'Programming Language :: Python :: 2.5', - 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Text Processing :: Markup :: HTML', ],