Source code for brunns.matchers.datetime
from datetime import date
from typing import Union
from hamcrest import described_as
from hamcrest.core.base_matcher import BaseMatcher
from hamcrest.core.description import Description
from hamcrest.core.helpers.wrap_matcher import wrap_matcher
from hamcrest.core.matcher import Matcher
from brunns.matchers.object import between
[docs]
def is_weekday() -> Matcher[date]:
"""Match if date is a weekday."""
matcher = HasWeekday(between(0, 4))
return described_as("A weekday", matcher)
[docs]
class HasWeekday(BaseMatcher[date]):
"""Match if date has matching day of the week.
:param day: Day of week, with 0 being Monday, 1 being Tuesday, and so on.
"""
def __init__(self, day: Union[int, Matcher[int]]) -> None:
self.day = wrap_matcher(day)
def _matches(self, actual: date) -> bool:
return self.day.matches(actual.weekday())
[docs]
def describe_to(self, description: Description) -> None:
description.append_text("Date with weekday matching ").append_description_of(self.day)
[docs]
def describe_mismatch(self, actual: date, description: Description) -> None:
description.append_text("was ").append_description_of(actual).append_text(
" with weekday ",
).append_description_of(actual.weekday()).append_text(", a ").append_text(actual.strftime("%A"))