-
-
Notifications
You must be signed in to change notification settings - Fork 263
Represent empty responses as None #799
-
When I specify no content for a response, I would expect to generate a sync method and async method that returns None.
Currently, I work against an api that has a few endpoints returning no data (that could be with status code 200 or status code 204).
Example:
"/something" : {
"patch" : {
...
"responses" : {
"200" : {
"description" : "something"
}
}
}
}
When I generate a client with this project, this endpoint will not have a sync or async method, but only the sync_detailed and async_detailed. This works, but it looks weird because for all other methods I use sync/async. I would be great to have them implemented to return None (like a void/unit method in python).
I think, the problem manifests here:
The sync method is only generated if the return type is not any - which makes sense. But I think, the return type here is not actually Any - but None. The response type comes from here:
Here is a link with documentation on handling empty responses and any type: https://swagger.io/docs/specification/data-models/data-types/
According to that, the difference is having either no content field for empty responses and having a content field defined with an empty object for any type.
Beta Was this translation helpful? Give feedback.
All reactions
Replies: 1 comment 1 reply
-
I think the trouble here is that there would be no easy way to tell whether or not a request had failed from the non-detailed method unless you set raise_on_unexpected_status to True in the client. It seems like that would provide an easy way for API consumers to accidentally miss failures, unless I'm missing something.
Beta Was this translation helpful? Give feedback.
All reactions
-
It seems that somehow this got implemented along the way. It is indeed a bit scary that "success" and "unexpected status" return the same thing. Although the sync method of a "204" endpoint is typed as Any | HTTPValidationError | None, the "any" that is returned from _parse_response is cast("Any", None). I would very much have preferred if something else was returned, such as a NoContent sentinel object or something.
Beta Was this translation helpful? Give feedback.