Skip to content

Commit

Permalink
[PR #8169/b444e873 backport][stable-7] xml: make module work with lxm…
Browse files Browse the repository at this point in the history
…l 5.1.1 (#8171)

xml: make module work with lxml 5.1.1 (#8169)

Make module work with lxml 5.1.1.

(cherry picked from commit b444e87)

Co-authored-by: Felix Fontein <felix@fontein.de>
  • Loading branch information
patchback[bot] and felixfontein authored Mar 30, 2024
1 parent a7d8397 commit 68eb07a
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/8169-lxml.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- "xml - make module work with lxml 5.1.1, which removed some internals that the module was relying on (https://github.com/ansible-collections/community.general/pull/8169)."
9 changes: 7 additions & 2 deletions plugins/modules/xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -436,11 +436,16 @@ def is_attribute(tree, xpath, namespaces):
""" Test if a given xpath matches and that match is an attribute
An xpath attribute search will only match one item"""

# lxml 5.1.1 removed etree._ElementStringResult, so we can no longer simply assume it's there
# (https://github.com/lxml/lxml/commit/eba79343d0e7ad1ce40169f60460cdd4caa29eb3)
ElementStringResult = getattr(etree, '_ElementStringResult', None)

if xpath_matches(tree, xpath, namespaces):
match = tree.xpath(xpath, namespaces=namespaces)
if isinstance(match[0], etree._ElementStringResult):
if isinstance(match[0], etree._ElementUnicodeResult):
return True
elif isinstance(match[0], etree._ElementUnicodeResult):
elif ElementStringResult is not None and isinstance(match[0], ElementStringResult):
return True
return False

Expand Down

0 comments on commit 68eb07a

Please sign in to comment.