diff --git a/fastapi_code_generator/parser.py b/fastapi_code_generator/parser.py index 38f9156..60bc0fb 100644 --- a/fastapi_code_generator/parser.py +++ b/fastapi_code_generator/parser.py @@ -330,7 +330,7 @@ def get_argument_list(self, snake_case: bool, path: List[str]) -> List[Argument] for argument in arguments: if positional_argument and argument.required and argument.default is None: argument.default = UsefulStr('...') - positional_argument = argument.required + positional_argument = argument.required or argument.default is not None return arguments diff --git a/tests/data/expected/openapi/default_template/body_and_parameters/main.py b/tests/data/expected/openapi/default_template/body_and_parameters/main.py index 9789cce..47bd8d9 100644 --- a/tests/data/expected/openapi/default_template/body_and_parameters/main.py +++ b/tests/data/expected/openapi/default_template/body_and_parameters/main.py @@ -6,7 +6,7 @@ from typing import List, Optional, Union -from fastapi import FastAPI, Path, Query +from fastapi import FastAPI, Path, Query, UploadFile from starlette.requests import Request from .models import ( @@ -36,6 +36,11 @@ def post_bar(request: Request) -> None: pass +@app.post('/convert', response_model=bytes) +def convert(format: Optional[str] = 'pdf', file: UploadFile = ...) -> bytes: + pass + + @app.get('/foo', response_model=str, tags=['foo']) def get_foo(foo: Optional[str] = None) -> str: pass diff --git a/tests/data/openapi/default_template/body_and_parameters.yaml b/tests/data/openapi/default_template/body_and_parameters.yaml index 340fbf3..a373049 100644 --- a/tests/data/openapi/default_template/body_and_parameters.yaml +++ b/tests/data/openapi/default_template/body_and_parameters.yaml @@ -337,6 +337,29 @@ paths: schema: $ref: '#/components/schemas/Pet' required: true + /convert: + post: + operationId: convert + parameters: + - in: query + name: format + schema: + type: string + default: pdf + requestBody: + required: true + content: + application/octet-stream: + schema: + type: string + format: binary + responses: + "200": + content: + application/octet-stream: + schema: + type: string + format: binary components: parameters: MyParam: