-
-
Notifications
You must be signed in to change notification settings - Fork 106
Open
Labels
bugSomething isn't workingSomething isn't workinggood first issueGood for newcomersGood for newcomers
Description
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)
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workinggood first issueGood for newcomersGood for newcomers