Source code for datemore.date

# -*- coding: utf-8 -*-

import datetime
import typing
from typing import TYPE_CHECKING

import datemore.daterange
import datemore.utils

if TYPE_CHECKING:  # pragma: no cover
    import datemore.datetime


DateType = typing.Union[datetime.date, "Date"]


[docs]class Date(datetime.date, datemore.daterange.Daterange):
[docs] @classmethod def from_native(cls, _date: datetime.date) -> "Date": """Creates a wrapped Date instance from a native datetime date """ return cls(year=_date.year, month=_date.month, day=_date.day)
[docs] @classmethod def today(cls) -> "Date": """Returns the today's date """ t = datetime.datetime.today().timestamp() return cls.fromtimestamp(t)
[docs] def native(self) -> datetime.date: """Returns the underlying native datetime date instance """ return datetime.date(year=self.year, month=self.month, day=self.day)
[docs] def add_days(self, days: int) -> "Date": """Adds some number of days to the current Date """ return self.from_native(datemore.utils.add_days(self, days))
[docs] def range(self, offset: int) -> typing.List["Date"]: """Returns a range of dates within this Date and a given offset """ return self.date_range(self, offset=offset)
[docs] def range_to(self, end: "Date") -> typing.List["Date"]: """Returns a range of dates between this Date and another Date """ return self.dates_between(start=self, end=end)