Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RecursionError when using .serialize #147

Closed
tlenters opened this issue Jul 21, 2021 · 0 comments
Closed

RecursionError when using .serialize #147

tlenters opened this issue Jul 21, 2021 · 0 comments

Comments

@tlenters
Copy link

tlenters commented Jul 21, 2021

I'm currently getting an error message when trying to serialize a ProvDocument. The strange thing is that I don't get this error when using your example notebook. I've added the full error log below. Is this something you've encountered before?

RecursionError                            Traceback (most recent call last)
<ipython-input-102-dedcd967efa6> in <module>
----> 1 doc.serialize()

/opt/conda/lib/python3.9/site-packages/prov/model.py in serialize(self, destination, format, **args)
   2477         if destination is None:
   2478             stream = io.StringIO()
-> 2479             serializer.serialize(stream, **args)
   2480             return stream.getvalue()
   2481         if hasattr(destination, "write"):

/opt/conda/lib/python3.9/site-packages/prov/serializers/provjson.py in serialize(self, stream, **kwargs)
     65         buf = io.StringIO()
     66         try:
---> 67             json.dump(self.document, buf, cls=ProvJSONEncoder, **kwargs)
     68             buf.seek(0, 0)
     69             # Right now this is a bytestream. If the object to stream to is

/opt/conda/lib/python3.9/json/__init__.py in dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
    177     # could accelerate with writelines in some versions of Python, at
    178     # a debuggability cost
--> 179     for chunk in iterable:
    180         fp.write(chunk)
    181 

/opt/conda/lib/python3.9/json/encoder.py in _iterencode(o, _current_indent_level)
    437                 markers[markerid] = o
    438             o = _default(o)
--> 439             yield from _iterencode(o, _current_indent_level)
    440             if markers is not None:
    441                 del markers[markerid]

/opt/conda/lib/python3.9/json/encoder.py in _iterencode(o, _current_indent_level)
    429             yield from _iterencode_list(o, _current_indent_level)
    430         elif isinstance(o, dict):
--> 431             yield from _iterencode_dict(o, _current_indent_level)
    432         else:
    433             if markers is not None:

/opt/conda/lib/python3.9/json/encoder.py in _iterencode_dict(dct, _current_indent_level)
    403                 else:
    404                     chunks = _iterencode(value, _current_indent_level)
--> 405                 yield from chunks
    406         if newline_indent is not None:
    407             _current_indent_level -= 1

/opt/conda/lib/python3.9/json/encoder.py in _iterencode_dict(dct, _current_indent_level)
    403                 else:
    404                     chunks = _iterencode(value, _current_indent_level)
--> 405                 yield from chunks
    406         if newline_indent is not None:
    407             _current_indent_level -= 1

/opt/conda/lib/python3.9/json/encoder.py in _iterencode_list(lst, _current_indent_level)
    323                 else:
    324                     chunks = _iterencode(value, _current_indent_level)
--> 325                 yield from chunks
    326         if newline_indent is not None:
    327             _current_indent_level -= 1

/opt/conda/lib/python3.9/json/encoder.py in _iterencode_dict(dct, _current_indent_level)
    403                 else:
    404                     chunks = _iterencode(value, _current_indent_level)
--> 405                 yield from chunks
    406         if newline_indent is not None:
    407             _current_indent_level -= 1

/opt/conda/lib/python3.9/json/encoder.py in _iterencode(o, _current_indent_level)
    436                     raise ValueError("Circular reference detected")
    437                 markers[markerid] = o
--> 438             o = _default(o)
    439             yield from _iterencode(o, _current_indent_level)
    440             if markers is not None:

/opt/conda/lib/python3.9/site-packages/prov/serializers/provjson.py in default(self, o)
     96             return encode_json_document(o)
     97         else:
---> 98             return super(ProvJSONEncoder, self).encode(o)
     99 
    100 

/opt/conda/lib/python3.9/json/encoder.py in encode(self, o)
    197         # exceptions aren't as detailed.  The list call should be roughly
    198         # equivalent to the PySequence_Fast that ''.join() would do.
--> 199         chunks = self.iterencode(o, _one_shot=True)
    200         if not isinstance(chunks, (list, tuple)):
    201             chunks = list(chunks)

/opt/conda/lib/python3.9/json/encoder.py in iterencode(self, o, _one_shot)
    255                 self.key_separator, self.item_separator, self.sort_keys,
    256                 self.skipkeys, _one_shot)
--> 257         return _iterencode(o, 0)
    258 
    259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,

... last 3 frames repeated, from the frame below ...

/opt/conda/lib/python3.9/site-packages/prov/serializers/provjson.py in default(self, o)
     96             return encode_json_document(o)
     97         else:
---> 98             return super(ProvJSONEncoder, self).encode(o)
     99 
    100 

RecursionError: maximum recursion depth exceeded while calling a Python object```
@tlenters tlenters closed this as completed Aug 1, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant