Skip to content

Commit 6dcea49

Browse files
🐛 Don't add types generated from error response declarations to functions' return types.
1 parent 7fd0a4c commit 6dcea49

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

src/lapidary/render/model/openapi_conv.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,11 @@ def process_operation(
246246
security = self.process_security(value.security, stack.push('security'))
247247

248248
return_types = set()
249-
for response in responses.values():
249+
for status_code, response in responses.items():
250+
# Don't include error responses in the return type
251+
if status_code[0] in ('4', '5'):
252+
continue
253+
250254
body_type = type_hint.union_of(*response.content.values())
251255
return_types.add(type_hint.tuple_of(body_type, response.headers_type))
252256

tests/e2e/expected/petstore/gen/test_petstore/client.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ async def addPet(
4646
}),
4747
],
4848
) -> typing.Annotated[
49-
typing.Union[tuple[None, None], tuple[test_petstore.components.schemas.Pet.schema.Pet, None]],
49+
tuple[test_petstore.components.schemas.Pet.schema.Pet, None],
5050
Responses({
5151
'200': Response(
5252
Body({
@@ -71,7 +71,7 @@ async def updatePet(
7171
}),
7272
],
7373
) -> typing.Annotated[
74-
typing.Union[tuple[None, None], tuple[test_petstore.components.schemas.Pet.schema.Pet, None]],
74+
tuple[test_petstore.components.schemas.Pet.schema.Pet, None],
7575
Responses({
7676
'200': Response(
7777
Body({
@@ -100,7 +100,7 @@ async def findPetsByStatus(
100100
*,
101101
status_q: typing.Annotated[typing.Union[None, str], Query('status', style=FormExplode,)] = None,
102102
) -> typing.Annotated[
103-
typing.Union[tuple[None, None], tuple[list[test_petstore.components.schemas.Pet.schema.Pet], None]],
103+
tuple[list[test_petstore.components.schemas.Pet.schema.Pet], None],
104104
Responses({
105105
'200': Response(
106106
Body({
@@ -121,7 +121,7 @@ async def findPetsByTags(
121121
*,
122122
tags_q: typing.Annotated[typing.Union[None, list[str]], Query('tags', style=FormExplode,)] = None,
123123
) -> typing.Annotated[
124-
typing.Union[tuple[None, None], tuple[list[test_petstore.components.schemas.Pet.schema.Pet], None]],
124+
tuple[list[test_petstore.components.schemas.Pet.schema.Pet], None],
125125
Responses({
126126
'200': Response(
127127
Body({
@@ -142,7 +142,7 @@ async def getPetById(
142142
*,
143143
petId_p: typing.Annotated[int, Path('petId', )],
144144
) -> typing.Annotated[
145-
typing.Union[tuple[None, None], tuple[test_petstore.components.schemas.Pet.schema.Pet, None]],
145+
tuple[test_petstore.components.schemas.Pet.schema.Pet, None],
146146
Responses({
147147
'200': Response(
148148
Body({
@@ -169,7 +169,7 @@ async def updatePetWithForm(
169169
name_q: typing.Annotated[typing.Union[None, str], Query('name', )] = None,
170170
status_q: typing.Annotated[typing.Union[None, str], Query('status', )] = None,
171171
) -> typing.Annotated[
172-
tuple[None, None],
172+
None,
173173
Responses({
174174
'405': Response(
175175
Body({
@@ -186,7 +186,7 @@ async def deletePet(
186186
petId_p: typing.Annotated[int, Path('petId', )],
187187
meta: typing.Annotated[typing.Union[None, test_petstore.paths.u_lpetu_lu_1zpetIdu_21.delete.parameters.meta.RequestMetadata], Metadata()] = None,
188188
) -> typing.Annotated[
189-
tuple[None, None],
189+
None,
190190
Responses({
191191
'400': Response(
192192
Body({
@@ -239,7 +239,7 @@ async def placeOrder(
239239
}),
240240
],
241241
) -> typing.Annotated[
242-
typing.Union[tuple[None, None], tuple[test_petstore.components.schemas.Order.schema.Order, None]],
242+
tuple[test_petstore.components.schemas.Order.schema.Order, None],
243243
Responses({
244244
'200': Response(
245245
Body({
@@ -260,7 +260,7 @@ async def getOrderById(
260260
*,
261261
orderId_p: typing.Annotated[int, Path('orderId', )],
262262
) -> typing.Annotated[
263-
typing.Union[tuple[None, None], tuple[test_petstore.components.schemas.Order.schema.Order, None]],
263+
tuple[test_petstore.components.schemas.Order.schema.Order, None],
264264
Responses({
265265
'200': Response(
266266
Body({
@@ -285,7 +285,7 @@ async def deleteOrder(
285285
*,
286286
orderId_p: typing.Annotated[int, Path('orderId', )],
287287
) -> typing.Annotated[
288-
tuple[None, None],
288+
None,
289289
Responses({
290290
'400': Response(
291291
Body({
@@ -352,7 +352,7 @@ async def loginUser(
352352
username_q: typing.Annotated[typing.Union[None, str], Query('username', )] = None,
353353
password_q: typing.Annotated[typing.Union[None, str], Query('password', )] = None,
354354
) -> typing.Annotated[
355-
typing.Union[tuple[None, None], tuple[str, test_petstore.paths.u_luseru_llogin.get.responses.u_o00.headers.ResponseMetadata]],
355+
tuple[str, test_petstore.paths.u_luseru_llogin.get.responses.u_o00.headers.ResponseMetadata],
356356
Responses({
357357
'200': Response(
358358
Body({
@@ -388,7 +388,7 @@ async def getUserByName(
388388
*,
389389
username_p: typing.Annotated[str, Path('username', )],
390390
) -> typing.Annotated[
391-
typing.Union[tuple[None, None], tuple[test_petstore.components.schemas.User.schema.User, None]],
391+
tuple[test_petstore.components.schemas.User.schema.User, None],
392392
Responses({
393393
'200': Response(
394394
Body({
@@ -435,7 +435,7 @@ async def deleteUser(
435435
*,
436436
username_p: typing.Annotated[str, Path('username', )],
437437
) -> typing.Annotated[
438-
tuple[None, None],
438+
None,
439439
Responses({
440440
'400': Response(
441441
Body({

0 commit comments

Comments
 (0)