Skip to content

Commit 464f7a7

Browse files
committed
Test pydantic usage in workflow
1 parent 4d65ada commit 464f7a7

File tree

2 files changed

+50
-13
lines changed

2 files changed

+50
-13
lines changed

tests/contrib/test_pydantic.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,53 @@ async def test_mixed_collection_types(client: Client):
166166
)
167167
assert orig_dataclass_objects == round_tripped_dataclass_objects
168168
assert orig_pydantic_objects == round_tripped_pydantic_objects
169+
170+
171+
@workflow.defn
172+
class PydanticModelInWorkflow:
173+
@workflow.run
174+
async def run(self) -> None:
175+
o1, _ = make_pydantic_objects()
176+
assert isinstance(o1, MyPydanticModel)
177+
assert isinstance(o1, BaseModel)
178+
assert isinstance(o1.ip_field, IPv4Address)
179+
assert isinstance(o1.datetime_field, datetime)
180+
assert issubclass(o1.annotated_datetime.__class__, datetime)
181+
assert isinstance(o1.string_field_assigned_field, str)
182+
assert isinstance(o1.datetime_field_assigned_field, datetime)
183+
assert isinstance(o1.string_field_with_default, str)
184+
assert isinstance(o1.datetime_field_with_default, datetime)
185+
assert isinstance(o1.annotated_datetime, datetime)
186+
assert isinstance(o1.annotated_list_of_str, list)
187+
assert isinstance(o1.annotated_list_of_datetime, list)
188+
assert isinstance(o1.str_short_sequence, list)
189+
assert isinstance(o1.datetime_short_sequence, list)
190+
assert o1.annotated_datetime == datetime(2000, 1, 2, 3, 4, 5)
191+
assert o1.annotated_list_of_str == ["my-string-1", "my-string-2"]
192+
assert o1.annotated_list_of_datetime == [
193+
datetime(2000, 1, 2, 3, 4, 5),
194+
datetime(2000, 11, 12, 13, 14, 15),
195+
]
196+
assert o1.str_short_sequence == ["my-string-1", "my-string-2"]
197+
assert o1.datetime_short_sequence == [
198+
datetime(2000, 1, 2, 3, 4, 5),
199+
datetime(2000, 11, 12, 13, 14, 15),
200+
]
201+
202+
203+
async def test_pydantic_usage_in_workflow(client: Client):
204+
new_config = client.config()
205+
new_config["data_converter"] = pydantic_data_converter
206+
client = Client(**new_config)
207+
task_queue_name = str(uuid.uuid4())
208+
209+
async with Worker(
210+
client,
211+
task_queue=task_queue_name,
212+
workflows=[PydanticModelInWorkflow],
213+
):
214+
await client.execute_workflow(
215+
PydanticModelInWorkflow.run,
216+
id=str(uuid.uuid4()),
217+
task_queue=task_queue_name,
218+
)

tests/worker/workflow_sandbox/test_runner.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from enum import IntEnum
1313
from typing import Callable, Dict, List, Optional, Sequence, Set, Type
1414

15-
import pydantic
1615
import pytest
1716

1817
import temporalio.worker.workflow_sandbox._restrictions
@@ -390,10 +389,6 @@ async def test_workflow_sandbox_with_proto(client: Client):
390389
assert result is not param and result == param
391390

392391

393-
class PydanticMessage(pydantic.BaseModel):
394-
content: datetime
395-
396-
397392
@workflow.defn
398393
class KnownIssuesWorkflow:
399394
@workflow.run
@@ -413,14 +408,6 @@ async def run(self) -> None:
413408
except RuntimeError as err:
414409
assert "Restriction state not present" in str(err)
415410

416-
# Using a datetime in binary-compiled Pydantic skips our issubclass when
417-
# building their validators causing it to use date instead
418-
# TODO(cretz): https://github.com/temporalio/sdk-python/issues/207
419-
if pydantic.compiled:
420-
assert isinstance(PydanticMessage(content=workflow.now()).content, date)
421-
else:
422-
assert isinstance(PydanticMessage(content=workflow.now()).content, datetime)
423-
424411

425412
async def test_workflow_sandbox_known_issues(client: Client):
426413
async with new_worker(client, KnownIssuesWorkflow) as worker:

0 commit comments

Comments
 (0)