Skip to content

Commit fc223a5

Browse files
🥅 Raise TypeError on parameter validation error.
Closes #48
1 parent bce61cc commit fc223a5

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

‎src/lapidary/runtime/model/request.py‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,11 @@ class FreeParamsContributor(ParamsContributor):
165165
model_type: type[pydantic.BaseModel]
166166

167167
def update_builder(self, builder: RequestBuilder, free_params: Mapping[str, typing.Any]) -> None:
168-
super().update_builder(builder, self.model_type.model_validate(free_params))
168+
try:
169+
model = self.model_type.model_validate(free_params)
170+
except pydantic.ValidationError as e:
171+
raise TypeError from e
172+
super().update_builder(builder, model)
169173

170174

171175
@dc.dataclass
@@ -227,8 +231,7 @@ def update_builder(self, builder: RequestBuilder, kwargs: dict[str, typing.Any])
227231
except KeyError:
228232
raise TypeError('Unexpected argument', name)
229233
contributor.update_builder(builder, value)
230-
if free_params:
231-
assert self.free_param_contributor
234+
if self.free_param_contributor:
232235
self.free_param_contributor.update_builder(builder, free_params)
233236

234237
@classmethod

‎tests/test_request.py‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,18 @@ async def param_list_exploded(
128128
headers=httpx.Headers(),
129129
cookies=httpx.Cookies(),
130130
)
131+
132+
133+
@pytest.mark.asyncio
134+
async def test_missing_required_param(mock_http_client):
135+
class Client(ClientTestBase):
136+
@get('/param_list_exploded')
137+
async def op(
138+
self: typing.Self,
139+
q_a: typing.Annotated[typing.List[str], Query],
140+
) -> typing.Annotated[Awaitable[None], Responses({})]:
141+
pass
142+
143+
async with Client(client=mock_http_client) as client:
144+
with pytest.raises(TypeError):
145+
await client.op()

0 commit comments

Comments
 (0)