cloudevents / cloudevents/sdk-python

`.json()` unable to serialize datetime elements in `data` payload

Aperta
#213 3 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Python
Stelle
342
Fork
65
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

  1. Init a CloudEvent where some element of the data argument is a datetime instance.
  2. 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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

La issue identifica cloudevents.pydantic.CloudEvent.json() come punto di ingresso; inizia confrontando la gestione di datetime con quella di Pydantic BaseModel.json(). Aggiungi un caso di regressione che utilizzi datetime in data e verifica che la serializzazione produca una stringa invece di generare un’eccezione. Conferma il comportamento con la riproduzione mostrata nella issue.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
backend-api-design
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.