11import dataclasses
22import uuid
3- from datetime import datetime , timedelta
3+ from datetime import date , datetime , timedelta
44from ipaddress import IPv4Address
55from typing import Annotated , Any , List , Sequence , Tuple , TypeVar , Union
66
@@ -65,11 +65,44 @@ def _check_instance(self):
6565 ]
6666
6767
68+ class MyPydanticDateModel (BaseModel ):
69+ date_field : date
70+ date_field_assigned_field : date = Field ()
71+ date_field_with_default : date = Field (default_factory = lambda : date (2000 , 1 , 2 ))
72+ annotated_date : Annotated [date , Field (), WithJsonSchema ({"extra" : "data" })]
73+ annotated_list_of_date : Annotated [
74+ List [date ], Field (), WithJsonSchema ({"extra" : "data" })
75+ ]
76+ date_short_sequence : ShortSequence [List [date ]]
77+
78+ def _check_instance (self ):
79+ _assert_date_validity (self .date_field )
80+ _assert_date_validity (self .date_field_assigned_field )
81+ _assert_date_validity (self .date_field_with_default )
82+ _assert_date_validity (self .annotated_date )
83+ assert isinstance (self .annotated_list_of_date , list )
84+ assert isinstance (self .date_short_sequence , list )
85+ assert self .annotated_date == date (2000 , 1 , 2 )
86+ assert self .annotated_list_of_date == [
87+ date (2000 , 1 , 2 ),
88+ date (2001 , 11 , 12 ),
89+ ]
90+ assert self .date_short_sequence == [
91+ date (2000 , 1 , 2 ),
92+ date (2001 , 11 , 12 ),
93+ ]
94+
95+
6896def _assert_datetime_validity (dt : datetime ):
6997 assert isinstance (dt , datetime )
7098 assert issubclass (dt .__class__ , datetime )
7199
72100
101+ def _assert_date_validity (d : date ):
102+ assert isinstance (d , date )
103+ assert issubclass (d .__class__ , date )
104+
105+
73106def make_homogeneous_list_of_pydantic_objects () -> List [MyPydanticModel ]:
74107 return [
75108 MyPydanticModel (
@@ -82,7 +115,7 @@ def make_homogeneous_list_of_pydantic_objects() -> List[MyPydanticModel]:
82115
83116
84117def make_heterogenous_list_of_pydantic_objects () -> (
85- List [Union [MyPydanticModel , MyPydanticDatetimeModel ]]
118+ List [Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]]
86119):
87120 return [
88121 MyPydanticModel (
@@ -104,6 +137,13 @@ def make_heterogenous_list_of_pydantic_objects() -> (
104137 datetime (2001 , 11 , 12 , 13 , 14 , 15 ),
105138 ],
106139 ),
140+ MyPydanticDateModel (
141+ date_field = date (2000 , 1 , 2 ),
142+ date_field_assigned_field = date (2000 , 1 , 2 ),
143+ annotated_date = date (2000 , 1 , 2 ),
144+ annotated_list_of_date = [date (2000 , 1 , 2 ), date (2001 , 11 , 12 )],
145+ date_short_sequence = [date (2000 , 1 , 2 ), date (2001 , 11 , 12 )],
146+ ),
107147 ]
108148
109149
@@ -116,8 +156,8 @@ async def homogeneous_list_of_pydantic_models_activity(
116156
117157@activity .defn
118158async def heterogeneous_list_of_pydantic_models_activity (
119- models : List [Union [MyPydanticModel , MyPydanticDatetimeModel ]],
120- ) -> List [Union [MyPydanticModel , MyPydanticDatetimeModel ]]:
159+ models : List [Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]],
160+ ) -> List [Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]]:
121161 return models
122162
123163
@@ -136,8 +176,11 @@ async def run(self, models: List[MyPydanticModel]) -> List[MyPydanticModel]:
136176class HeterogenousListOfPydanticObjectsWorkflow :
137177 @workflow .run
138178 async def run (
139- self , models : List [Union [MyPydanticModel , MyPydanticDatetimeModel ]]
140- ) -> List [Union [MyPydanticModel , MyPydanticDatetimeModel ]]:
179+ self ,
180+ models : List [
181+ Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]
182+ ],
183+ ) -> List [Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]]:
141184 return await workflow .execute_activity (
142185 heterogeneous_list_of_pydantic_models_activity ,
143186 models ,
@@ -206,10 +249,12 @@ class MixedCollectionTypesWorkflow:
206249 async def run (
207250 self ,
208251 input : Tuple [
209- List [MyDataClass ], List [Union [MyPydanticModel , MyPydanticDatetimeModel ]]
252+ List [MyDataClass ],
253+ List [Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]],
210254 ],
211255 ) -> Tuple [
212- List [MyDataClass ], List [Union [MyPydanticModel , MyPydanticDatetimeModel ]]
256+ List [MyDataClass ],
257+ List [Union [MyPydanticModel , MyPydanticDatetimeModel , MyPydanticDateModel ]],
213258 ]:
214259 data_classes , pydantic_objects = input
215260 pydantic_objects = await workflow .execute_activity (
0 commit comments