Skip to content

Commit c965317

Browse files
fix(models): mark unknown fields as set in pydantic v1 (#45)
1 parent 79ff165 commit c965317

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

src/orb/_models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ def construct(
121121
if PYDANTIC_V2:
122122
_extra[key] = value
123123
else:
124+
_fields_set.add(key)
124125
fields_values[key] = value
125126

126127
object.__setattr__(m, "__dict__", fields_values)

tests/test_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ class TestOrb:
4040

4141
@pytest.mark.respx(base_url=base_url)
4242
def test_raw_response(self, respx_mock: MockRouter) -> None:
43-
respx_mock.post("/foo").mock(return_value=httpx.Response(200, json='{"foo": "bar"}'))
43+
respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"}))
4444

4545
response = self.client.post("/foo", cast_to=httpx.Response)
4646
assert response.status_code == 200
4747
assert isinstance(response, httpx.Response)
48-
assert response.json() == '{"foo": "bar"}'
48+
assert response.json() == {"foo": "bar"}
4949

5050
@pytest.mark.respx(base_url=base_url)
5151
def test_raw_response_for_binary(self, respx_mock: MockRouter) -> None:
@@ -56,7 +56,7 @@ def test_raw_response_for_binary(self, respx_mock: MockRouter) -> None:
5656
response = self.client.post("/foo", cast_to=httpx.Response)
5757
assert response.status_code == 200
5858
assert isinstance(response, httpx.Response)
59-
assert response.json() == '{"foo": "bar"}'
59+
assert response.json() == {"foo": "bar"}
6060

6161
def test_copy(self) -> None:
6262
copied = self.client.copy()
@@ -583,12 +583,12 @@ class TestAsyncOrb:
583583
@pytest.mark.respx(base_url=base_url)
584584
@pytest.mark.asyncio
585585
async def test_raw_response(self, respx_mock: MockRouter) -> None:
586-
respx_mock.post("/foo").mock(return_value=httpx.Response(200, json='{"foo": "bar"}'))
586+
respx_mock.post("/foo").mock(return_value=httpx.Response(200, json={"foo": "bar"}))
587587

588588
response = await self.client.post("/foo", cast_to=httpx.Response)
589589
assert response.status_code == 200
590590
assert isinstance(response, httpx.Response)
591-
assert response.json() == '{"foo": "bar"}'
591+
assert response.json() == {"foo": "bar"}
592592

593593
@pytest.mark.respx(base_url=base_url)
594594
@pytest.mark.asyncio
@@ -600,7 +600,7 @@ async def test_raw_response_for_binary(self, respx_mock: MockRouter) -> None:
600600
response = await self.client.post("/foo", cast_to=httpx.Response)
601601
assert response.status_code == 200
602602
assert isinstance(response, httpx.Response)
603-
assert response.json() == '{"foo": "bar"}'
603+
assert response.json() == {"foo": "bar"}
604604

605605
def test_copy(self) -> None:
606606
copied = self.client.copy()

tests/test_transform.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import pytest
88

99
from orb._utils import PropertyInfo, transform, parse_datetime
10+
from orb._compat import PYDANTIC_V2
1011
from orb._models import BaseModel
1112

1213

@@ -210,14 +211,20 @@ def test_pydantic_unknown_field() -> None:
210211

211212
def test_pydantic_mismatched_types() -> None:
212213
model = MyModel.construct(foo=True)
213-
with pytest.warns(UserWarning):
214+
if PYDANTIC_V2:
215+
with pytest.warns(UserWarning):
216+
params = transform(model, Any)
217+
else:
214218
params = transform(model, Any)
215219
assert params == {"foo": True}
216220

217221

218222
def test_pydantic_mismatched_object_type() -> None:
219223
model = MyModel.construct(foo=MyModel.construct(hello="world"))
220-
with pytest.warns(UserWarning):
224+
if PYDANTIC_V2:
225+
with pytest.warns(UserWarning):
226+
params = transform(model, Any)
227+
else:
221228
params = transform(model, Any)
222229
assert params == {"foo": {"hello": "world"}}
223230

0 commit comments

Comments
 (0)