Skip to content

Cover omit_defaults handling in asdict and to_builtins documentation #778

Closed

Description

@ncoghlan

Description

(I'm not sure if this is a bug report or a feature request, so I opted for a feature request in case the current behaviour is intentional)

I am using msgspec to help communicate with a server where a boolean field can be set to None in the data model not because null is a valid value, but because it is permitted to omit the key entirely. The relevant struct has omit_defaults=True set accordingly.

However, msgspec isn't handling the full message serialisation (httpx is doing that), so I attempted to use asdict to generate the message spec portion of the message.

This failed, as asdict includes all fields, without paying attention to omit_defaults.

Activity

  1. changed the title [-]`asdict` should respect `omit_defaults`[/-] [+]Feature: add alternative API to `asdict` that respects `omit_defaults`[/+] on Dec 5, 2024
  2. changed the title [-]Feature: add alternative API to `asdict` that respects `omit_defaults`[/-] [+]Cover `omit_defaults` handling in `asdict` and `to_builtins` documentation[/+] on Dec 5, 2024
  3. ncoghlan commented on Dec 5, 2024

    @ncoghlan
    ContributorAuthor

    After exploring the docs further, I discovered that the "recursively convert to builtin types, while respecting omit_defaults" API exists: it is to_builtins.

    Neither msgspec.struct.asdict nor msgspec.to_builtins mention omit_defaults in their documentation, so even though they have "See also" links to each other, it isn't clear why you might choose one over the other. (#748 is another example of someone hitting a similar point of confusion).

    The other thing that tripped me up was that https://jcristharif.com/msgspec/usage.html doesn't cover the non-serialisation case, so the fact that msgspec.to_builtins is the encoding equivalent and msgspec.convert is the decoding equivalent wasn't immediately apparent.

    I'll create a PR with some suggested docs tweaks.

  4. added a commit that references this issue on Dec 5, 2024
    2e6ebfb
  5. ncoghlan commented on Dec 5, 2024

    @ncoghlan
    ContributorAuthor

    #780 attempts to cover the points above in both the main usage docs, as well as in the docstrings of to_builtins and asdict.

  6. added a commit that references this issue on May 26, 2026
    c4a7195
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions