Skip to content

Better Traceback for JSON Serialization Failures #930

Closed
@rmorshea

Description

@rmorshea

Discussed in #927

Originally posted by numpde February 13, 2023
The following grim traceback was caused by writing button(disabled=mutation) instead of ...=mutation.loading, and it's representative of a fairly common set. It would be great to have a pointer to near the origin of the error.

Exception inside application: Object of type Mutation is not JSON serializable
...
Traceback (most recent call last):
  File "REPO/venv-3.11/lib/python3.11/site-packages/django_idom/websocket/consumer.py", line 48, in disconnect
    await self._idom_dispatcher_future
  File "REPO/venv-3.11/lib/python3.11/site-packages/django_idom/websocket/consumer.py", line 124, in _run_dispatch_loop
    await serve_layout(
  File "REPO/venv-3.11/lib/python3.11/site-packages/idom/core/serve.py", line 41, in serve_layout
    async with create_task_group() as task_group:
  File "REPO/venv-3.11/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 662, in __aexit__
    raise exceptions[0]
  File "REPO/venv-3.11/lib/python3.11/site-packages/idom/core/serve.py", line 52, in _single_outgoing_loop
    await send(await layout.render())
  File "REPO/venv-3.11/lib/python3.11/site-packages/channels/generic/websocket.py", line 271, in send_json
    await super().send(text_data=await self.encode_json(content), close=close)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "REPO/venv-3.11/lib/python3.11/site-packages/channels/generic/websocket.py", line 279, in encode_json
    return json.dumps(content)
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Mutation is not JSON serializable

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority-2-moderateShould be resolved on a reasonable timeline.release-patchWarrents a patch release

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions