如何约束PolyFactory生成的类型?避免Dict中出现datetime字段
约束PolyFactory生成的类型,避免出现datetime字段
方法1:自定义字段生成器过滤datetime
通过重写TypedDictFactory的get_value方法,自定义值生成逻辑,递归处理嵌套dict时排除datetime类型:
from typing import Any, Type from polyfactory.factories.typed_dict_factory import TypedDictFactory from polyfactory.value_generators import generate_random_value from datetime import datetime def filter_datetime_value_generator(type_: Type[Any]) -> Any: if type_ is dict: def build_filtered_dict() -> dict: filtered_dict = {} for _ in range(3): key = generate_random_value(str) # 指定允许生成的类型,排除datetime value = generate_random_value((int, str, float, list, dict)) if isinstance(value, dict): value = build_filtered_dict() elif isinstance(value, list): value = [generate_random_value((int, str, float, dict)) for _ in range(2)] filtered_dict[key] = value return filtered_dict return build_filtered_dict() # 遇到datetime类型时,替换为其他允许的类型 elif type_ is datetime: return generate_random_value(str) return generate_random_value(type_) class FilteredTypedDictFactory(TypedDictFactory): @classmethod def get_value(cls, type_: Type[Any]) -> Any: return filter_datetime_value_generator(type_) class S(TypedDict): d: dict print(FilteredTypedDictFactory.create_factory(model=S).build())
方法2:用自定义类型别名明确允许的类型
即使嵌套结构复杂,也可以定义递归的类型别名,限定dict的取值范围,让PolyFactory仅生成指定类型:
from typing import TypedDict, Union, List, Dict from polyfactory.factories.typed_dict_factory import TypedDictFactory # 递归定义允许的类型,完全排除datetime AllowedValue = Union[int, str, float, List['AllowedValue'], Dict[str, 'AllowedValue']] class S(TypedDict): d: Dict[str, AllowedValue] print(TypedDictFactory.create_factory(model=S).build())
方法3:全局配置排除datetime类型
直接修改PolyFactory的全局配置,禁止生成datetime类型实例:
from polyfactory import configure from datetime import datetime from polyfactory.factories.typed_dict_factory import TypedDictFactory from typing import TypedDict # 全局排除datetime类型 configure(exclude_types=[datetime]) class S(TypedDict): d: dict print(TypedDictFactory.create_factory(model=S).build())
内容的提问来源于stack exchange,提问作者user24471097
相关产品推荐
相关产品推荐

