Skip to content

Recurive wildcard produces a StopIteration exception when called on objects containing iterators #254

Open
@lululaplap

Description

Hello,

I am trying to use the recursive wildcard feature on a nested dictionary. Some of the objects in the dictionary have attributes which are iterators. However, after the glom search the iterators produce a StopIteration exception on the next call to next. I have produced a minimal example below:

import glom
import pprint

class MyData:
    def __init__(self):
        self.data = iter([1,2,3])

b = MyData()
target = {"A": {"b": b}}
spec = "A.**"
result = glom.glom(target, spec)
pprint.pprint(result)
next(b.data)

Which produces:

[{'b': <__main__.MyData object at 0x7f7b06390550>},
 <__main__.MyData object at 0x7f7b06390550>,
 <list_iterator object at 0x7f7b06390f70>,
 1,
 2,
 3]
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
Cell In[48], line 6
      4 result = glom.glom(target, spec)
      5 pprint.pprint(result)
----> 6 next(my_iter.data)

StopIteration: 

Is this the excepted behaviour? If so, is it possible to limit how far the recursion goes? I would like to be able to limit it to only look inside the nested dictionary and not the objects contained within.

Many thanks,
Lewis

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions