diff --git a/template/api.mustache b/template/api.mustache index e3372c7f..50710e06 100644 --- a/template/api.mustache +++ b/template/api.mustache @@ -8,6 +8,19 @@ from typing_extensions import Annotated {{#imports}} {{import}} {{/imports}} +{{#operations.operation}} +{{! Workaround for missing imports for parameters that use oneOf }} +{{#allParams}} +{{^hasDiscriminatorWithNonEmptyMapping}} +{{#composedSchemas.oneOf}} +{{#-first}} +from {{packageName}}.models.{{#lambda.snakecase}}{{schema.complexType}}{{/lambda.snakecase}} import {{schema.complexType}} +from datetime import datetime, date, timezone +{{/-first}} +{{/composedSchemas.oneOf}} +{{/hasDiscriminatorWithNonEmptyMapping}} +{{/allParams}} +{{/operations.operation}} from {{packageName}}.api_client import ApiClient, RequestSerialized from {{packageName}}.api_response import ApiResponse from {{packageName}}.configuration import Configuration @@ -117,6 +130,7 @@ class {{classname}}: {{#queryParams}} # process the query parameters if {{paramName}} is not None: + {{^schema.composedSchemas.oneOf}} {{#isDateTime}} if isinstance({{paramName}}, datetime): _query_params.append( @@ -146,6 +160,27 @@ class {{classname}}: {{^isDateTime}}{{^isDate}} _query_params.append(('{{baseName}}', {{paramName}}{{#isEnumRef}}.value{{/isEnumRef}})) {{/isDate}}{{/isDateTime}} + {{/schema.composedSchemas.oneOf}} + {{#schema.composedSchemas.oneOf}} + {{#-first}} + if isinstance({{paramName}}, datetime): + _query_params.append( + ( + '{{schema.baseName}}', + {{paramName}}.isoformat(timespec='microseconds') + ) + ) + elif isinstance({{paramName}}, date): + _query_params.append( + ( + '{{schema.baseName}}', + {{paramName}}.isoformat() + ) + ) + else: + _query_params.append(('{{schema.baseName}}', {{paramName}})) + {{/-first}} + {{/schema.composedSchemas.oneOf}} {{/queryParams}} {{#headerParams}} diff --git a/template/model_doc.mustache b/template/model_doc.mustache index 9bc9dd8b..054ad333 100644 --- a/template/model_doc.mustache +++ b/template/model_doc.mustache @@ -11,6 +11,17 @@ Name | Type | Description | Notes {{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}} | {{{description}}} | {{^required}}[optional] {{/required}}{{#isReadOnly}}[readonly] {{/isReadOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}} {{/vars}} {{/emptyVars}} +{{#emptyVars}} +{{^model.discriminator}} +{{#composedSchemas.oneOf}} +{{#-first}} +## Type alias + +`Union[{{#oneOf}}{{^-last}}{{.}},{{/-last}}{{#-last}}{{.}}{{/-last}}{{/oneOf}}]` +{{/-first}} +{{/composedSchemas.oneOf}} +{{/model.discriminator}} +{{/emptyVars}} {{/isEnum}} {{#isEnum}} ## Enum diff --git a/template/model_oneof.mustache b/template/model_oneof.mustache index 958812d7..e04708a0 100644 --- a/template/model_oneof.mustache +++ b/template/model_oneof.mustache @@ -1,3 +1,4 @@ +{{#hasDiscriminatorWithNonEmptyMapping}} from __future__ import annotations import json import pprint @@ -206,3 +207,13 @@ class {{classname}}({{#parent}}{{{.}}}{{/parent}}{{^parent}}BaseModel{{/parent}} # TODO: Rewrite to not use raise_errors {{classname}}.model_rebuild(raise_errors=False) {{/vendorExtensions.x-py-postponed-model-imports.size}} +{{/hasDiscriminatorWithNonEmptyMapping}} +{{^hasDiscriminatorWithNonEmptyMapping}} +from typing import Union +{{#composedSchemas.oneOf}} +{{#isDateTime}} +from pydantic import AwareDatetime +{{/isDateTime}} +{{/composedSchemas.oneOf}} +{{classname}} = Union[{{#composedSchemas.oneOf}}{{#isDateTime}}AwareDatetime{{/isDateTime}}{{^isDateTime}}{{dataType}}{{/isDateTime}}{{^-last}},{{/-last}}{{/composedSchemas.oneOf}}] +{{/hasDiscriminatorWithNonEmptyMapping}} \ No newline at end of file diff --git a/template/partial_api_args.mustache b/template/partial_api_args.mustache index 21eea6ed..3d145a39 100644 --- a/template/partial_api_args.mustache +++ b/template/partial_api_args.mustache @@ -1,7 +1,7 @@ ( self, {{#allParams}} - {{paramName}}: {{{vendorExtensions.x-py-typing}}}{{^required}} = None{{/required}}, + {{paramName}}: {{^schema.composedSchemas}}{{{vendorExtensions.x-py-typing}}}{{/schema.composedSchemas}}{{#schema.composedSchemas}}Annotated[{{^required}}Optional[{{/required}}{{schema.complexType}}{{^required}}]{{/required}},Field(description="{{{description}}}",)]{{/schema.composedSchemas}}{{^required}} = None{{/required}}, {{/allParams}} _request_timeout: Union[ None,