Source code for fauxfactory.factories.dates

"""Methods related to generating date/time related values."""

import datetime
import random

from fauxfactory.constants import MAX_YEARS, MIN_YEARS


random.seed()


[docs] def gen_date(min_date=None, max_date=None): """Return a random date value. :param min_date: A valid ``datetime.date`` object. :param max_date: A valid ``datetime.date`` object. :raises: ``ValueError`` if arguments are not valid ``datetime.date`` objects. :returns: Random ``datetime.date`` object. """ _min_value = datetime.date.today() - datetime.timedelta(365 * MIN_YEARS) _max_value = datetime.date.today() + datetime.timedelta(365 * MAX_YEARS) if min_date is None: min_date = _min_value if max_date is None: max_date = _max_value # Validation if not isinstance(min_date, datetime.date): raise ValueError("%s is not a valid datetime.date object") if not isinstance(max_date, datetime.date): raise ValueError("%s is not a valid datetime.date object") # Check that max_date is not before min_date assert min_date < max_date # Pick a day between min and max dates diff = max_date - min_date days = random.randint(0, diff.days) date = min_date + datetime.timedelta(days=days) return date
[docs] def gen_datetime(min_date=None, max_date=None): """Return a random datetime value. :param min_date: A valid ``datetime.datetime`` object. :param max_date: A valid ``datetime.datetime`` object. :raises: ``ValueError`` if arguments are not valid ``datetime.datetime`` objects. :returns: Random ``datetime.datetime`` object. """ _min_value = datetime.datetime.now() - datetime.timedelta(365 * MIN_YEARS) _max_value = datetime.datetime.now() + datetime.timedelta(365 * MAX_YEARS) if min_date is None: min_date = _min_value if max_date is None: max_date = _max_value # Validation if not isinstance(min_date, datetime.datetime): raise ValueError("%s is not a valid datetime.datetime object") if not isinstance(max_date, datetime.datetime): raise ValueError("%s is not a valid datetime.datetime object") # Check that max_date is not before min_date assert min_date < max_date # Pick a time between min and max dates diff = max_date - min_date seconds = random.randint(0, diff.days * 3600 * 24 + diff.seconds) return min_date + datetime.timedelta(seconds=seconds)
[docs] def gen_time(): """Generate a random time. :returns: A random ``datetime.time`` object. """ return datetime.time( random.randint(0, 23), random.randint(0, 59), random.randint(0, 59), random.randint(0, 999999), )
__all__ = tuple(name for name in locals() if name.startswith("gen_")) def __dir__(): return __all__