Skip to content

Commit 342bf37

Browse files
committed
Fix aliased import in main
1 parent bba7578 commit 342bf37

File tree

4 files changed

+43
-14
lines changed

4 files changed

+43
-14
lines changed

fastapi_code_generator/parser.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class Argument(CachedPropertyModel):
9999
def __str__(self) -> str:
100100
return self.argument
101101

102-
@cached_property
102+
@property
103103
def argument(self) -> str:
104104
if self.field is None:
105105
type_hint = self.type_hint
@@ -113,9 +113,9 @@ def argument(self) -> str:
113113
)
114114
if self.default is None and self.required:
115115
return f'{self.name}: {type_hint}'
116-
return f'{self.name}: {self.type_hint} = {self.default}'
116+
return f'{self.name}: {type_hint} = {self.default}'
117117

118-
@cached_property
118+
@property
119119
def snakecase(self) -> str:
120120
if self.field is None:
121121
type_hint = self.type_hint
@@ -141,7 +141,6 @@ class Operation(CachedPropertyModel):
141141
parameters: List[Dict[str, Any]] = []
142142
responses: Dict[UsefulStr, Any] = {}
143143
deprecated: bool = False
144-
imports: List[Import] = []
145144
security: Optional[List[Dict[str, List[str]]]] = None
146145
tags: Optional[List[str]] = []
147146
request: Optional[Argument] = None
@@ -152,9 +151,7 @@ class Operation(CachedPropertyModel):
152151
arguments_list: List[Argument] = []
153152

154153
@classmethod
155-
def merge_arguments_with_union(
156-
cls, arguments: List[Argument], imports: List[Import]
157-
) -> List[Argument]:
154+
def merge_arguments_with_union(cls, arguments: List[Argument]) -> List[Argument]:
158155
grouped_arguments: DefaultDict[str, List[Argument]] = DefaultDict(list)
159156
for argument in arguments:
160157
grouped_arguments[argument.name].append(argument)
@@ -187,18 +184,25 @@ def type(self) -> UsefulStr:
187184

188185
@property
189186
def arguments(self) -> str:
190-
sorted_arguments = Operation.merge_arguments_with_union(
191-
self.arguments_list, self.imports
192-
)
187+
sorted_arguments = Operation.merge_arguments_with_union(self.arguments_list)
193188
return ", ".join(argument.argument for argument in sorted_arguments)
194189

195190
@property
196191
def snake_case_arguments(self) -> str:
197-
sorted_arguments = Operation.merge_arguments_with_union(
198-
self.arguments_list, self.imports
199-
)
192+
sorted_arguments = Operation.merge_arguments_with_union(self.arguments_list)
200193
return ", ".join(argument.snakecase for argument in sorted_arguments)
201194

195+
@property
196+
def imports(self) -> Imports:
197+
imports = Imports()
198+
for argument in self.arguments_list:
199+
if isinstance(argument.field, list):
200+
for field in argument.field:
201+
imports.append(field.data_type.import_)
202+
elif argument.field:
203+
imports.append(argument.field.data_type.import_)
204+
return imports
205+
202206
@cached_property
203207
def root_path(self) -> UsefulStr:
204208
paths = self.path.split("/")

fastapi_code_generator/visitors/imports.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ def get_imports(parser: OpenAPIParser, model_path: Path) -> Dict[str, object]:
3232
)
3333
for from_, imports_ in parser.imports_for_fastapi.items():
3434
imports[from_].update(imports_)
35+
for operation in parser.operations.values():
36+
if operation.imports:
37+
imports.alias.update(operation.imports.alias)
3538
return {'imports': imports}
3639

3740

tests/data/expected/openapi/default_template/shadowed_imports/main.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@
44

55
from __future__ import annotations
66

7+
from datetime import date as date_aliased
8+
from typing import Optional
9+
710
from fastapi import FastAPI
811

912
app = FastAPI(
1013
title='REST API',
1114
version='0.0.1',
1215
servers=[{'url': 'https://api.something.com/1'}],
1316
)
17+
18+
19+
@app.get('/actions/', response_model=None)
20+
def get_actions_(due: Optional[date_aliased] = None) -> None:
21+
pass

tests/data/openapi/default_template/shadowed_imports.yaml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,18 @@ components:
1616
type: string
1717
format: date
1818
example: '2018-04-26T17:03:25.155Z'
19-
paths: {}
19+
paths:
20+
/actions/:
21+
get:
22+
parameters:
23+
- name: due
24+
in: query
25+
description: A due date for the card
26+
required: false
27+
schema:
28+
type: string
29+
format: date
30+
responses:
31+
'200':
32+
description: Success
33+

0 commit comments

Comments
 (0)