Skip to content

Allow asdict to exclude fields based on values #63

@Gallaecio

Description

@Gallaecio

e.g.

def asdict(*, unset_values=None) -> dict:
    if unset_values is None:
        unset_values = set()
    return _asdict(self, unset_values)
    ...

def _asdict(obj: Any, unset_values) -> Any:
    if isinstance(obj, dict):
        return {key: _asdict(value, unset_values=unset_values) for key, value in obj.items() if value not in unset_values}
    if isinstance(obj, (list, set, tuple)):
        return obj.__class__(_asdict(x, unset_values=unset_values) for x in obj if x not in unset_values)
    if isinstance(obj, ItemAdapter):
        return obj.asdict(unset_values=unset_values)
    if ItemAdapter.is_item(obj):
        return ItemAdapter(obj).asdict(unset_values=unset_values)
    return

Context: zytedata/zyte-common-items#2 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions