Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Represent empty responses as None #799

cornerman started this conversation in Feature request
Discussion options

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:

{% set parsed_responses = (endpoint.responses | length > 0) and return_string != "Any" %}

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.

You must be logged in to vote

Replies: 1 comment 1 reply

Comment options

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.

You must be logged in to vote
1 reply
Comment options

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ enhancement New feature or improvement
Converted from issue

This discussion was converted from issue #770 on August 13, 2023 00:22.

AltStyle によって変換されたページ (->オリジナル) /