|
1 | 1 | import uuid |
2 | 2 | from datetime import datetime, timedelta |
3 | 3 | from ipaddress import IPv4Address |
4 | | -from typing import List |
| 4 | +from typing import Annotated, Any, List, Sequence, TypeVar |
5 | 5 |
|
6 | | -from pydantic import BaseModel |
| 6 | +from annotated_types import Len |
| 7 | +from pydantic import BaseModel, Field, WithJsonSchema |
7 | 8 |
|
8 | 9 | from temporalio import activity, workflow |
9 | 10 | from temporalio.client import Client |
10 | 11 | from temporalio.contrib.pydantic.converter import pydantic_data_converter |
11 | 12 | from temporalio.worker import Worker |
12 | 13 |
|
| 14 | +SequenceType = TypeVar("SequenceType", bound=Sequence[Any]) |
| 15 | +ShortSequence = Annotated[SequenceType, Len(max_length=2)] |
| 16 | + |
13 | 17 |
|
14 | 18 | class MyPydanticModel(BaseModel): |
15 | 19 | ip_field: IPv4Address |
16 | 20 | datetime_field: datetime |
| 21 | + string_field_assigned_field: str = Field() |
| 22 | + datetime_field_assigned_field: datetime = Field() |
| 23 | + string_field_with_default: str = Field(default_factory=lambda: "my-string") |
| 24 | + datetime_field_with_default: datetime = Field( |
| 25 | + default_factory=lambda: datetime(2000, 1, 2, 3, 4, 5) |
| 26 | + ) |
| 27 | + annotated_datetime: Annotated[datetime, Field(), WithJsonSchema({"extra": "data"})] |
| 28 | + annotated_list_of_str: Annotated[ |
| 29 | + List[str], Field(), WithJsonSchema({"extra": "data"}) |
| 30 | + ] |
| 31 | + annotated_list_of_datetime: Annotated[ |
| 32 | + List[datetime], Field(), WithJsonSchema({"extra": "data"}) |
| 33 | + ] |
| 34 | + str_short_sequence: ShortSequence[List[str]] |
| 35 | + datetime_short_sequence: ShortSequence[List[datetime]] |
17 | 36 |
|
18 | 37 |
|
19 | 38 | @activity.defn |
@@ -43,10 +62,36 @@ async def test_workflow_with_pydantic_model(client: Client): |
43 | 62 | MyPydanticModel( |
44 | 63 | ip_field=IPv4Address("127.0.0.1"), |
45 | 64 | datetime_field=datetime(2000, 1, 2, 3, 4, 5), |
| 65 | + string_field_assigned_field="my-string", |
| 66 | + datetime_field_assigned_field=datetime(2000, 1, 2, 3, 4, 5), |
| 67 | + annotated_datetime=datetime(2000, 1, 2, 3, 4, 5), |
| 68 | + annotated_list_of_str=["my-string-1", "my-string-2"], |
| 69 | + annotated_list_of_datetime=[ |
| 70 | + datetime(2000, 1, 2, 3, 4, 5), |
| 71 | + datetime(2000, 11, 12, 13, 14, 15), |
| 72 | + ], |
| 73 | + str_short_sequence=["my-string-1", "my-string-2"], |
| 74 | + datetime_short_sequence=[ |
| 75 | + datetime(2000, 1, 2, 3, 4, 5), |
| 76 | + datetime(2000, 11, 12, 13, 14, 15), |
| 77 | + ], |
46 | 78 | ), |
47 | 79 | MyPydanticModel( |
48 | 80 | ip_field=IPv4Address("127.0.0.2"), |
49 | 81 | datetime_field=datetime(2001, 2, 3, 4, 5, 6), |
| 82 | + string_field_assigned_field="my-string", |
| 83 | + datetime_field_assigned_field=datetime(2000, 2, 3, 4, 5, 6), |
| 84 | + annotated_datetime=datetime(2001, 2, 3, 4, 5, 6), |
| 85 | + annotated_list_of_str=["my-string-3", "my-string-4"], |
| 86 | + annotated_list_of_datetime=[ |
| 87 | + datetime(2001, 2, 3, 4, 5, 6), |
| 88 | + datetime(2001, 12, 13, 14, 15, 16), |
| 89 | + ], |
| 90 | + str_short_sequence=["my-string-3", "my-string-4"], |
| 91 | + datetime_short_sequence=[ |
| 92 | + datetime(2001, 2, 3, 4, 5, 6), |
| 93 | + datetime(2001, 12, 13, 14, 15, 16), |
| 94 | + ], |
50 | 95 | ), |
51 | 96 | ] |
52 | 97 |
|
|
0 commit comments