feat: configurable response JSON decoder
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 30/100
Direzione di ricerca
Inizia leggendo build_request(), Request.extensions, response.json() e la gestione dell’invio della risposta descritta nell’issue. Esamina l’issue correlata #259 e le domande aperte sui livelli dell’API, la denominazione, la propagazione e il contratto del decoder. Il lavoro è completo quando il progetto ha concordato il design e la semantica proposta a livello di client e di request è specificata abbastanza da poter essere implementata.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Configurable response JSON decoder
While working on #945, it became clear that request-side JSON serialization and response-side JSON decoding may not belong to the same API surface.
This discussion focuses only on configurable response JSON decoding.
Motivation
The original issue was primarily about customizing how response JSON is decoded, for example using orjson.loads instead of the standard library decoder.
Today response.json() is effectively tied to the stdlib implementation, which makes it difficult to:
- use alternative JSON libraries globally
- optimize JSON decoding performance
- customize decoding behavior consistently across a client
Proposed scope
Only response-side decoding.
No request-side JSON serialization customization.
Proposed API shape
Client-level decoder:
client = httpx.Client(
json_deserializer=orjson.loads,
)
Per-request override:
response = client.get(
"https://example.org",
json_deserializer=custom_decoder,
)
Explicit disable:
response = client.get(
"https://example.org",
json_deserializer=None,
)
Proposed semantics
- request-level decoder overrides client-level decoder
Noneexplicitly disables the custom decoder- manually-created
Request(...)objects without decoder configuration fall back to the client-level decoder - redirect requests preserve decoder configuration
Internal design direction
Current direction is:
- keep all config merging in
build_request() - propagate decoder configuration through
Request.extensions - configure the
Responseobject during send handling - avoid introducing new abstractions or generalized serialization hooks
Example internal extension key:
"httpx2.json_deserializer"
Type contract
Current proposal:
JsonDeserializer = typing.Callable[[bytes], typing.Any]
The intention is to keep the contract strict and compatible with libraries like orjson.
Open questions
- Does the proposed API shape make sense?
- Should the decoder be configurable at the client level, request level, or both?
- Is
json_deserializerthe right naming? - Is
Request.extensionsan acceptable propagation mechanism for this configuration? - Should the decoder contract accept only
bytes, orstr | bytes?
I’d appreciate feedback before continuing the implementation work in the PR.
See also issue #259 for related discussion.
- Lingua principale
- Python
- Stelle
- 1.6k
- Fork
- 103
- Merge medio
- 1g 19h
- PR unite (30g)
- 25
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pydantic/httpx2
-
Please revert aiter_bytes signature to AsyncIteratorForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
pydantic/httpx2#1158 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Export AutoBackendForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
pydantic/httpx2#1131 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
Mention header name error message for invalid header encodingsForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
pydantic/httpx2#864 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Support DigestAuth with "x-www-authenticate" in first response headerForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di pydantic/httpx2
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
OCA/account-invoicing#2529 ·
I maintainer di solito rispondono entro 1 giorno
-
area/ci
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
ImageGen generate-batch aborts valid JSONL jobs containing a Unicode line separator in poster textApertabug imagen skills
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Email validation accepts a trailing newlineForse già presa @marcello-pichini l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno