cloudevents / cloudevents/sdk-python
`.json()` unable to serialize datetime elements in `data` payload
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 342
- Forks
- 65
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Expected Behavior
The CloudEvent model, like Pydantic's BaseModel, can serialize of datetime properties to strings in the .json() function.
Actual Behavior
The CloudEvent model raises a ValueError from the standard library's json.dumps function when .json() is called on a model containing datetime properties in the data field.
Alternatively, if this is intentional behavior, it would be helpful to have some guidance around what the expected usage is when users want to have dates or timestamps in their CloudEvent data.
Steps to Reproduce the Problem
- Init a CloudEvent where some element of the
dataargument is adatetimeinstance. - Call
.json()on the CloudEvent instance
For example:
from datetime import datetime
from cloudevents.pydantic import CloudEvent
event = CloudEvent(attributes={'source': 'my.source', 'type': 'com.my.type'}, data={'dt': datetime.now()})
# raises TypeError
print(event.json())
By contrast, Pydantic's BaseModel is able to encode datetime properties:
from datetime import datetime
from pydantic import BaseModel
class MyModel(BaseModel):
dt: datetime
foo = MyModel(dt=datetime.now())
# encodes dt as a string
print(foo.json())
Specifications
- Platform: MacOS Ventura 13.2.1 (Intel)
- Python Version: 3.9.9
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Das Issue identifiziert cloudevents.pydantic.CloudEvent.json() als Einstiegspunkt; beginne damit, die Behandlung von datetime mit der von Pydantic BaseModel.json() zu vergleichen. Füge einen Regressionstest hinzu, der datetime in data verwendet, und überprüfe, dass die Serialisierung einen String erzeugt, anstatt eine Ausnahme auszulösen. Bestätige das Verhalten mit der im Issue gezeigten Reproduktion.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- backend-api-design
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100