litestar-org/polyfactory
Bug: Wrong type date generated for annotated datetime in pydantic factory
Aperta
#734 aperta il 17 lug 2025
buggood first issue
Metriche repository
- Star
- (1491 stelle)
- Metriche merge PR
- (Metriche PR in attesa)
Descrizione
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)