Support for multiple content types in error response
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Verwende die bereitgestellte OpenAPI-403-Response mit application/json und text/plain, um das aktuelle Verhalten des generierten Clients nachzustellen. Untersuche den Pfad für Error-Responses im generierten Client und führe die relevante Client-Generierung und die Response-Tests aus, sofern verfügbar. Erledigt bedeutet, dass der generierte Client die Verarbeitung anhand des Response-Content-Type auswählt, sodass JSON-Details weiterhin verfügbar bleiben, ohne zu versuchen, text/plain als JSON zu parsen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
Similar to previous issues about multiple content types support like https://github.com/openapi-generators/openapi-python-client/issues/453 or https://github.com/openapi-generators/openapi-python-client/issues/1004
For a single endpoint, the same error code can be returned by different piece of software. For example, an application can return error details as application/json but have some infra elements in front (cloud gateway/load balancer/reverse proxy/firewall) that can block request and also return their own errors in their own format text/json/xml (usually for network errors 401,403,502,503,504).
In my use case, I realized a firewall can sometimes block requests and returns a text/plain with a string Access Forbidden. So I'm trying to represent that in my OpenAPI spec so the generated client can handle these errors properly without crashing, and this works for some of the other openapi generators. But it doesn't work well with this python client, because the content type is not validated in the generated code. It only depends on the first content declared in the schema and seems to ignore the other ones.
So I'm getting the following implementation:
if response.status_code == 403:
response_403 = APIError.from_dict(response.json())
Which works for json error, but json parsing throw an exception if it's something else (like text/plain)
And if I declare text/plain before application/json, I get:
if response.status_code == 403:
response_403 = response.text
But in that case, I'm losing any detail about the json error.
What I expect here, is something similar to the oapi-codegen golang implementation.
If there are multiple content types defined for an error code, check that the response content type match before handling it.
So each content type can coexist and be handled separately.
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 403:
// this is a json error
var dest APIError
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
return nil, err
}
response.JSON403 = &dest
case rsp.StatusCode == 403:
... // default case for text/plain error
OpenAPI Spec File
403:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/APIError'
text/plain:
schema:
type: string
Desktop (please complete the following information):
- OS: macOS 14.7.4
- Python Version: 3.11.88
- openapi-python-client version: 0.24.3
- Vorherrschende Sprache
- Python
- Sterne
- 2k
- Forks
- 293
- Ø Merge
- 34 Min.
- Gemergte PRs (30 T.)
- 1
Entwicklungsumgebung
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus openapi-generators/openapi-python-client
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 72/100
openapi-generators/openapi-python-client#1451 · 2 Kommentare ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 52/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 64/100
openapi-generators/openapi-python-client#1435 · 1 Kommentar ·
Alle Issues in openapi-generators/openapi-python-client
Ähnliche Issues
-
good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
vllm-project/vllm-metal#822 ·
Maintainer antworten meist innerhalb von 1 Tag
-
vector-store
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 90/100
mem0ai/mem0#7461 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug]: chunk_span_bounds and _validated_chunk_spans reject Pydantic models ChunkSpan and AudioFileOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
BasedHardware/omi#19047 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag