litestar-org/polyfactory
Bug: Wrong type date generated for annotated datetime in pydantic factory
開放
#734 建立於 2025年7月17日
buggood first issue
倉庫指標
- 星標
- (1,491 顆星)
- PR 合併指標
- (PR 指標待抓取)
描述
Description
When using an annotated datetime type in a pydantic model, polyfactory generates random dates instead of random datetimes. This leads to unexpected results:
- time is always set to midnight
- breaks custom validators relying on e.g. tzinfo
URL to code causing the issue
No response
MCVE
from typing import Optional, Annotated
import datetime
from pydantic import BaseModel, Field, BeforeValidator
from polyfactory.factories.pydantic_factory import ModelFactory
def validate_datetime(value: datetime.datetime) -> datetime.datetime:
print(type(value))
assert value.tzinfo == datetime.timezone.utc
return value
ValidatedDatetime = Annotated[
datetime.datetime, BeforeValidator(validate_datetime)
]
class MyModel(BaseModel):
dt: ValidatedDatetime = Field(
gt=datetime.datetime(2022, 1, 1, tzinfo=datetime.timezone.utc)
)
class MyModelFactory(ModelFactory[MyModel]):
pass
MyModelFactory.build()
# => Prints: <class 'datetime.date'>
# => Returns error: AttributeError: 'datetime.date' object has no attribute 'tzinfo'
Steps to reproduce
Create an annotated datetime type
Create a pydantic model with a field of the annotated datetime type
Create a ModelFactory for the pydantic model
Call ModelFactory.build()
Screenshots
No response
Logs
Release Version
polyfactory 2.22.1
Platform
- Linux
- Mac
- Windows
- Other (Please specify in the description above)