From 52d3220f8d8d8c143c0e51fecee03fee7aa8ece7 Mon Sep 17 00:00:00 2001 From: Davide Brunato Date: Tue, 10 Sep 2019 21:58:34 +0200 Subject: [PATCH] Fix typed selection for token '(name)' - Check the type but yield the element --- CHANGELOG.rst | 1 + elementpath/xpath1_parser.py | 8 +++++--- tox.ini | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fba3068..bb6c11b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,7 @@ CHANGELOG =============== * Fix descendant shortcut operator '//' * Fix text() function +* Fix typed select of '(name)' token `v1.2.1`_ (2019-08-30) ====================== diff --git a/elementpath/xpath1_parser.py b/elementpath/xpath1_parser.py index c09952b..2e88afe 100644 --- a/elementpath/xpath1_parser.py +++ b/elementpath/xpath1_parser.py @@ -304,11 +304,13 @@ def select(self, context=None): yield self.xsd_type.decode(item[1]) elif is_element_node(item, name): if self.xsd_type.is_simple(): - yield self.xsd_type.decode(item) + self.xsd_type.validate(item.text) else: - yield item + self.xsd_type.validate(item) + yield item except (TypeError, ValueError): - self.wrong_sequence_type("Type %r does not match sequence type of %r" % (self.xsd_type, item)) + msg = "Type {!r} does not match sequence type of {!r}" + self.wrong_sequence_type(msg.format(self.xsd_type, item)) ### diff --git a/tox.ini b/tox.ini index 416627f..23116f0 100644 --- a/tox.ini +++ b/tox.ini @@ -22,7 +22,9 @@ whitelist_externals = make commands = python tests/test_elementpath.py [testenv:py38] -deps = xmlschema~=1.0.13 +deps = + lxml==4.3.5 + xmlschema~=1.0.13 commands = python -m unittest [testenv:docs]