Skip to content

CloudEvent equality is incorrect on none attributes #199

Description

@sasha-tkachev

CloudEvent equality is incorrect on none attributes

from cloudevents.http import CloudEvent
CloudEvent(attributes={"type": "a", "source": "a", "a": None}) == CloudEvent({"type": "a", "source":"a"})

expected True

actual False

the spec says that null value attributes are the same as non-existing attributes

Activity

  1. xSAVIKx commented on Nov 9, 2022

    @xSAVIKx
    Member

    Can you please point to a specific place where this is stated in the spec? I have a pretty hard time finding this in the spec.

  2. sasha-tkachev commented on Nov 11, 2022

    @sasha-tkachev
    ContributorAuthor

    It is specified only in the JSON format type system mapping I even think we MUST NOT allow None values for attributes. Because it is not a supported attribute type

  3. xSAVIKx commented on Nov 11, 2022

    @xSAVIKx
    Member

    Unset attributes MAY be encoded to the JSON value of null

    So looks like None is a valid input.

    Also, we're talking about JSON representation of the event, not about language-specific representation. IMO, it means that to_json(CloudEvent(attributes={"type": "a", "source": "a", "a": None})) must be == to to_json(CloudEvent({"type": "a", "source":"a"})). But it does not require CloudEvent instances to be equal.

  4. xSAVIKx commented on Nov 11, 2022

    @xSAVIKx
    Member

    Or actually:

    from_json(to_json(CloudEvent(attributes={"type": "a", "source": "a", "a": None}))) must be == to from_json(to_json(CloudEvent({"type": "a", "source":"a"})))

    So we must be treating JSON representation with null or without a value in the very same way. But it is not required for the instance of CloudEvent.

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