1515 Tuple ,
1616 TypeVar ,
1717 Union ,
18- get_type_hints ,
1918)
2019
2120from annotated_types import Len
@@ -229,42 +228,6 @@ def make_generic_string_object() -> GenericModel[str]:
229228 )
230229
231230
232- class PydanticModel (BaseModel ):
233- ip_field : IPv4Address
234- string_field_assigned_field : str = Field ()
235- string_field_with_default : str = Field (default_factory = lambda : "my-string" )
236- annotated_list_of_str : Annotated [
237- List [str ], Field (), WithJsonSchema ({"extra" : "data" })
238- ]
239- str_short_sequence : ShortSequence [List [str ]]
240- union_field : Union [int , str ]
241-
242- def _check_instance (self ):
243- assert isinstance (self .ip_field , IPv4Address )
244- assert isinstance (self .string_field_assigned_field , str )
245- assert isinstance (self .string_field_with_default , str )
246- assert isinstance (self .annotated_list_of_str , list )
247- assert isinstance (self .str_short_sequence , list )
248- assert self .annotated_list_of_str == ["my-string-1" , "my-string-2" ]
249- assert self .str_short_sequence == ["my-string-1" , "my-string-2" ]
250- assert isinstance (self .union_field , str )
251- assert self .union_field == "my-string"
252-
253- assert get_type_hints (self ) == {
254- "ip_field" : IPv4Address ,
255- "string_field_assigned_field" : str ,
256- "string_field_with_default" : str ,
257- "annotated_list_of_str" : List [str ],
258- "str_short_sequence" : List [str ],
259- # TODO: why not
260- # "annotated_list_of_str": Annotated[
261- # List[str], Field(), WithJsonSchema({"extra": "data"})
262- # ],
263- # "str_short_sequence": ShortSequence[List[str]],
264- "union_field" : Union [int , str ],
265- }
266-
267-
268231class PydanticDatetimeModel (BaseModel ):
269232 datetime_field : datetime
270233 datetime_field_assigned_field : datetime = Field ()
@@ -295,6 +258,22 @@ def _check_instance(self):
295258 ]
296259
297260
261+ def make_pydantic_datetime_object () -> PydanticDatetimeModel :
262+ return PydanticDatetimeModel (
263+ datetime_field = datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
264+ datetime_field_assigned_field = datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
265+ annotated_datetime = datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
266+ annotated_list_of_datetime = [
267+ datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
268+ datetime (2001 , 11 , 12 , 13 , 14 , 15 ),
269+ ],
270+ datetime_short_sequence = [
271+ datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
272+ datetime (2001 , 11 , 12 , 13 , 14 , 15 ),
273+ ],
274+ )
275+
276+
298277class PydanticDateModel (BaseModel ):
299278 date_field : date
300279 date_field_assigned_field : date = Field ()
@@ -323,6 +302,16 @@ def _check_instance(self):
323302 ]
324303
325304
305+ def make_pydantic_date_object () -> PydanticDateModel :
306+ return PydanticDateModel (
307+ date_field = date (2000 , 1 , 2 ),
308+ date_field_assigned_field = date (2000 , 1 , 2 ),
309+ annotated_date = date (2000 , 1 , 2 ),
310+ annotated_list_of_date = [date (2000 , 1 , 2 ), date (2001 , 11 , 12 )],
311+ date_short_sequence = [date (2000 , 1 , 2 ), date (2001 , 11 , 12 )],
312+ )
313+
314+
326315class PydanticTimedeltaModel (BaseModel ):
327316 timedelta_field : timedelta
328317 timedelta_field_assigned_field : timedelta = Field ()
@@ -355,6 +344,22 @@ def _check_instance(self):
355344 ]
356345
357346
347+ def make_pydantic_timedelta_object () -> PydanticTimedeltaModel :
348+ return PydanticTimedeltaModel (
349+ timedelta_field = timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
350+ timedelta_field_assigned_field = timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
351+ annotated_timedelta = timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
352+ annotated_list_of_timedelta = [
353+ timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
354+ timedelta (2 , 3 , 4 , 5 , 6 , 7 , 8 ),
355+ ],
356+ timedelta_short_sequence = [
357+ timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
358+ timedelta (2 , 3 , 4 , 5 , 6 , 7 , 8 ),
359+ ],
360+ )
361+
362+
358363PydanticModels = Union [
359364 BasicTypesModel ,
360365 ComplexTypesModel ,
@@ -363,7 +368,6 @@ def _check_instance(self):
363368 FieldFeaturesModel ,
364369 AnnotatedFieldsModel ,
365370 GenericModel ,
366- PydanticModel ,
367371 PydanticDatetimeModel ,
368372 PydanticDateModel ,
369373 PydanticTimedeltaModel ,
@@ -385,16 +389,8 @@ def _assert_timedelta_validity(td: timedelta):
385389 assert issubclass (td .__class__ , timedelta )
386390
387391
388- def make_homogeneous_list_of_pydantic_objects () -> List [PydanticModel ]:
389- objects = [
390- PydanticModel (
391- ip_field = IPv4Address ("127.0.0.1" ),
392- string_field_assigned_field = "my-string" ,
393- annotated_list_of_str = ["my-string-1" , "my-string-2" ],
394- str_short_sequence = ["my-string-1" , "my-string-2" ],
395- union_field = "my-string" ,
396- ),
397- ]
392+ def make_homogeneous_list_of_pydantic_objects () -> List [PydanticDatetimeModel ]:
393+ objects = [make_pydantic_datetime_object ()]
398394 for o in objects :
399395 o ._check_instance ()
400396 return objects
@@ -409,46 +405,9 @@ def make_heterogeneous_list_of_pydantic_objects() -> List[PydanticModels]:
409405 make_field_features_object (),
410406 make_annotated_fields_object (),
411407 make_generic_string_object (),
412- PydanticModel (
413- ip_field = IPv4Address ("127.0.0.1" ),
414- string_field_assigned_field = "my-string" ,
415- annotated_list_of_str = ["my-string-1" , "my-string-2" ],
416- str_short_sequence = ["my-string-1" , "my-string-2" ],
417- union_field = "my-string" ,
418- ),
419- PydanticDatetimeModel (
420- datetime_field = datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
421- datetime_field_assigned_field = datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
422- annotated_datetime = datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
423- annotated_list_of_datetime = [
424- datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
425- datetime (2001 , 11 , 12 , 13 , 14 , 15 ),
426- ],
427- datetime_short_sequence = [
428- datetime (2000 , 1 , 2 , 3 , 4 , 5 ),
429- datetime (2001 , 11 , 12 , 13 , 14 , 15 ),
430- ],
431- ),
432- PydanticDateModel (
433- date_field = date (2000 , 1 , 2 ),
434- date_field_assigned_field = date (2000 , 1 , 2 ),
435- annotated_date = date (2000 , 1 , 2 ),
436- annotated_list_of_date = [date (2000 , 1 , 2 ), date (2001 , 11 , 12 )],
437- date_short_sequence = [date (2000 , 1 , 2 ), date (2001 , 11 , 12 )],
438- ),
439- PydanticTimedeltaModel (
440- timedelta_field = timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
441- timedelta_field_assigned_field = timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
442- annotated_timedelta = timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
443- annotated_list_of_timedelta = [
444- timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
445- timedelta (2 , 3 , 4 , 5 , 6 , 7 , 8 ),
446- ],
447- timedelta_short_sequence = [
448- timedelta (1 , 2 , 3 , 4 , 5 , 6 , 7 ),
449- timedelta (2 , 3 , 4 , 5 , 6 , 7 , 8 ),
450- ],
451- ),
408+ make_pydantic_datetime_object (),
409+ make_pydantic_date_object (),
410+ make_pydantic_timedelta_object (),
452411 ]
453412 for o in objects :
454413 o ._check_instance ()
@@ -457,8 +416,8 @@ def make_heterogeneous_list_of_pydantic_objects() -> List[PydanticModels]:
457416
458417@activity .defn
459418async def homogeneous_list_of_pydantic_models_activity (
460- models : List [PydanticModel ],
461- ) -> List [PydanticModel ]:
419+ models : List [PydanticDatetimeModel ],
420+ ) -> List [PydanticDatetimeModel ]:
462421 return models
463422
464423
@@ -472,7 +431,9 @@ async def heterogeneous_list_of_pydantic_models_activity(
472431@workflow .defn
473432class HomogeneousListOfPydanticObjectsWorkflow :
474433 @workflow .run
475- async def run (self , models : List [PydanticModel ]) -> List [PydanticModel ]:
434+ async def run (
435+ self , models : List [PydanticDatetimeModel ]
436+ ) -> List [PydanticDatetimeModel ]:
476437 return await workflow .execute_activity (
477438 homogeneous_list_of_pydantic_models_activity ,
478439 models ,
0 commit comments