vacanza / python-holidays

Generate and work with holidays in Python
https://pypi.org/project/holidays
MIT License
1.39k stars 447 forks source link

How to check for holidays within an interval of time #1825

Open dsoprea opened 2 weeks ago

dsoprea commented 2 weeks ago

I'd like to be able to determine if there are any holidays in the near future, expressed as a timedelta. More generally, maybe just between two dates.

Pseudocode:

NOW_DATETIME = datetime.datetime.utcnow()
SIXTY_DAYS_TIMEDELTA = datetime.timedelta(days=60)

holidays_us = holidays.US()
upcoming_holiday_dates = holidays_us.holidays_before(SIXTY_DAYS_TIMEDELTA)
holiday_dates = holidays_us.holidays_between(NOW_DATETIME, NOW_DATETIME + SIXTY_DAYS_TIMEDELTA)

It's not clear if holidays supports just checking certain dates in order for developers to be able to implement this ourselves. It seems sort of there, except that I wonder what happens due to the year handling if the next sixty days includes both December and January. Based on the design of _add_holiday(), they're seemingly stored in a year-specific fashion: https://github.com/vacanza/python-holidays/blob/fde28db1d17e05e0853585936b8b8f85e9e38d34/holidays/holiday_base.py#L737

Suggestions?

arkid15r commented 2 weeks ago

Hi @dsoprea!

I'd like to be able to determine if there are any holidays in the near future, expressed as a timedelta. More generally, maybe just between two dates.

I don't recall holidays having built-in functionality for that. However, it sounds to me like something that could be useful for the end-users.

PRs welcome. Or you may get lucky if @KJhellico or me will be able to find some time this month. Perhaps, by extending holidays.utils.country_holidays() (and similar) with before_date and after_date args.

Thanks for the idea!

dsoprea commented 2 weeks ago

If you could suggest a straightforward approach then I could do it. If it requires research or rewiring then that'd be best left to the maintainers.

arkid15r commented 2 weeks ago

Yeah, it's up to you. I believe any PR would require some research of the existing code base, project architecture and generally used approaches. I suggest looking at some of the most recent PRs (perhaps, changes related to HolidayBase would be the most useful).

Just make sure to let us know if you decide to work on this so no work would be done twice.

Thank you @dsoprea!