From 0a9b6099dd39b298fd0ff897dbcd4fed632d8776 Mon Sep 17 00:00:00 2001 From: Martin Lehmann Date: Thu, 18 Aug 2022 07:10:21 +0200 Subject: [PATCH] Fix return type of `_Element.iter*` methods (GH-70) These methods return `Iterator` objects, not just `Iterable`s. --- lxml-stubs/etree.pyi | 10 +++++----- test-data/test-etree.yml | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lxml-stubs/etree.pyi b/lxml-stubs/etree.pyi index 18839a9..b87af01 100644 --- a/lxml-stubs/etree.pyi +++ b/lxml-stubs/etree.pyi @@ -166,14 +166,14 @@ class _Element(Iterable["_Element"], Sized): def items(self) -> Sequence[Tuple[_AnyStr, _AnyStr]]: ... def iter( self, tag: Optional[_TagSelector] = ..., *tags: _TagSelector - ) -> Iterable[_Element]: ... + ) -> Iterator[_Element]: ... iterancestors = iter def iterchildren( self, tag: Optional[_TagSelector] = ..., reversed: bool = False, *tags: _TagSelector, - ) -> Iterable[_Element]: ... + ) -> Iterator[_Element]: ... iterdescendants = iter def iterfind( self, path: str, namespaces: Optional[_NSMapArg] = ... @@ -183,13 +183,13 @@ class _Element(Iterable["_Element"], Sized): tag: Optional[_TagSelector] = ..., preceding: bool = False, *tags: _TagSelector, - ) -> Iterable[_Element]: ... + ) -> Iterator[_Element]: ... def itertext( self, tag: Optional[_TagSelector] = ..., with_tail: bool = False, *tags: _TagSelector, - ) -> Iterable[_AnyStr]: ... + ) -> Iterator[_AnyStr]: ... def keys(self) -> Sequence[_AnyStr]: ... def makeelement( self, @@ -242,7 +242,7 @@ class _ElementTree: def getroot(self) -> _Element: ... def iter( self, tag: Optional[_TagSelector] = ..., *tags: _TagSelector - ) -> Iterable[_Element]: ... + ) -> Iterator[_Element]: ... def iterfind( self, path: str, namespaces: Optional[_NSMapArg] = ... ) -> Iterator["_Element"]: ... diff --git a/test-data/test-etree.yml b/test-data/test-etree.yml index 6c9bb2a..8420edc 100644 --- a/test-data/test-etree.yml +++ b/test-data/test-etree.yml @@ -34,9 +34,9 @@ main: | from lxml import etree element = etree.Element("foo") - reveal_type(element.iterchildren) # N: Revealed type is "def (tag: Union[builtins.str, builtins.bytes, lxml.etree.QName, Any, None] =, reversed: builtins.bool =, *tags: Union[builtins.str, builtins.bytes, lxml.etree.QName, Any]) -> typing.Iterable[lxml.etree._Element]" + reveal_type(element.iterchildren) # N: Revealed type is "def (tag: Union[builtins.str, builtins.bytes, lxml.etree.QName, Any, None] =, reversed: builtins.bool =, *tags: Union[builtins.str, builtins.bytes, lxml.etree.QName, Any]) -> typing.Iterator[lxml.etree._Element]" result = element.iterchildren("my-attr") - reveal_type(result) # N: Revealed type is "typing.Iterable[lxml.etree._Element]" + reveal_type(result) # N: Revealed type is "typing.Iterator[lxml.etree._Element]" - case: etree_xmlparser_makeelement disable_cache: true