Source code for polyfactory.value_generators.constrained_dates

from __future__ import annotations

from datetime import date, datetime, timedelta, timezone, tzinfo
from typing import TYPE_CHECKING, cast

if TYPE_CHECKING:
    from faker import Faker


[docs]def handle_constrained_date( faker: Faker, ge: date | None = None, gt: date | None = None, le: date | None = None, lt: date | None = None, tz: tzinfo = timezone.utc, ) -> date: """Generates a date value fulfilling the expected constraints. :param faker: An instance of faker. :param lt: Less than value. :param le: Less than or equal value. :param gt: Greater than value. :param ge: Greater than or equal value. :param tz: A timezone. :returns: A date instance. """ start_date = datetime.now(tz=tz).date() - timedelta(days=100) if ge: start_date = ge elif gt: start_date = gt + timedelta(days=1) end_date = datetime.now(tz=timezone.utc).date() + timedelta(days=100) if le: end_date = le elif lt: end_date = lt - timedelta(days=1) return cast(date, faker.date_between(start_date=start_date, end_date=end_date))