openapi-generators / openapi-python-client

Generate modern Python clients from OpenAPI
MIT License
1.34k stars 202 forks source link

Union[Unset, datetime.date] is not allowed in header #881

Open beddows opened 1 year ago

beddows commented 1 year ago

Describe the bug The parameter name='IF-MODIFIED-SINCE' produces an error 'Union[Unset, datetime.date] is not allowed in header', which prevents the endpoint from being generated.

OpenAPI Spec File https://docs.developers.clio.com/openapi.json

Desktop (please complete the following information):

Additional context The parameter schema is: "schema": { "type": "string", (the format in "YYYY-MM-DD") "format": "date" (the format defined by full-date in RFC3339) } The client generator is attempting to map this schema to a Python Union type, the union of Unset and datetime.date, which is not allowed or fitting in a HTTP header. Maybe string dates need to be transformed to datetime objects and vice versa? Or the date could be converted to a string before setting the header? At least that's my limited understanding of the situation.

derenrich commented 10 months ago

I'm getting a similar issue with this https://raw.githubusercontent.com/wikimedia/mediawiki-extensions-Wikibase/e45d4f725e25a95ec2b034238fd3736f19053a16/repo/rest-api/specs/openapi.json (moving this comment from #924).

In this case it cries about:

Union[Unset, List[str]] is not allowed in header

where I'm assuming the issue is it doesn't understand how to map a list of strings to a string. Looking at the swagger endpoint for this API (https://doc.wikimedia.org/Wikibase/master/js/rest-api/#/items/getItem) it seems they want us to encode a list of strings as If-Match: "1276703231","1276705620"'. But I'm not sure if that's a standard openapi thing or if that's just some hack. If it's the latter it should probably have built in support.

petri commented 1 month ago

My two cents: This is possibly one of those missing pieces of openapi 3.x support. In other words, this is caused by schema: section of a (e.g. header) parameter. If you give the type directly, rather than under schema: subsection, there is no error.