Skip to content

Commit

Permalink
Migrate the remaining special_holidays to StaticHolidays class (#…
Browse files Browse the repository at this point in the history
…1519)

Co-authored-by: Arkadii Yakovets <ark@cho.red>
  • Loading branch information
PPsyrius and arkid15r committed Oct 20, 2023
1 parent 6be7ab9 commit 2699783
Show file tree
Hide file tree
Showing 13 changed files with 319 additions and 252 deletions.
16 changes: 10 additions & 6 deletions holidays/countries/angola.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from typing import Tuple

from holidays.calendars.gregorian import AUG, SEP, DEC
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
TUE_TO_PREV_MON,
Expand All @@ -23,7 +23,7 @@
)


class Angola(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
class Angola(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
"""
References:
- https://en.wikipedia.org/wiki/Public_holidays_in_Angola
Expand All @@ -45,14 +45,11 @@ class Angola(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
supported_languages = ("en_US", "pt_AO", "uk")
# %s (Observed).
observed_label = tr("%s (Ponte)")
special_holidays = {
# General Election Day.
2017: (AUG, 23, tr("Dia de eleições gerais")),
}

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, cls=AngolaStaticHolidays)
super().__init__(observed_rule=TUE_TO_PREV_MON + THU_TO_NEXT_FRI, *args, **kwargs)

def _is_observed(self, dt: date) -> bool:
Expand Down Expand Up @@ -188,3 +185,10 @@ class AO(Angola):

class AGO(Angola):
pass


class AngolaStaticHolidays:
special_holidays = {
# General Election Day.
2017: (AUG, 23, tr("Dia de eleições gerais")),
}
15 changes: 10 additions & 5 deletions holidays/countries/brunei.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
)
from holidays.observed_holiday_base import (
ObservedHolidayBase,
Expand All @@ -35,6 +36,7 @@ class Brunei(
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
):
"""
A subclass of :py:class:`HolidayBase` representing public holidays in Brunei Darussalam.
Expand Down Expand Up @@ -69,16 +71,12 @@ class Brunei(
observed_label = tr("%s - Diperhatikan")
supported_languages = ("en_US", "ms", "th")

special_holidays = {
# Sultan Hassanal Bolkiah's Golden Jubilee celebration
2017: (OCT, 5, tr("Jubli Emas Sultan Hassanal Bolkiah")),
}

def __init__(self, *args, **kwargs):
ChineseCalendarHolidays.__init__(self)
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
IslamicHolidays.__init__(self, cls=BruneiIslamicHolidays)
StaticHolidays.__init__(self, cls=BruneiStaticHolidays)
super().__init__(observed_rule=FRI_SUN_TO_NEXT_SAT_MON, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -394,3 +392,10 @@ class BruneiIslamicHolidays(_CustomIslamicHolidays):
2022: (APR, 3),
2023: (MAR, 23),
}


class BruneiStaticHolidays:
special_holidays = {
# Sultan Hassanal Bolkiah's Golden Jubilee celebration
2017: (OCT, 5, tr("Jubli Emas Sultan Hassanal Bolkiah")),
}
4 changes: 2 additions & 2 deletions holidays/countries/cambodia.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH

def __init__(self, *args, **kwargs):
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, CameroonStaticHolidays)
StaticHolidays.__init__(self, cls=CambodiaStaticHolidays)
ThaiCalendarHolidays.__init__(self, KHMER_CALENDAR)
super().__init__(*args, **kwargs)

Expand Down Expand Up @@ -281,7 +281,7 @@ class KHM(Cambodia):
pass


class CameroonStaticHolidays:
class CambodiaStaticHolidays:
sangkranta_in_lieu_covid = tr(
# Khmer New Year's Replacement Holiday
"ថ្ងៃឈប់សម្រាកសងជំនួសឲ្យពិធីបុណ្យចូលឆ្នាំថ្មីប្រពៃណីជាតិ"
Expand Down
27 changes: 19 additions & 8 deletions holidays/countries/cameroon.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,18 @@

from holidays.calendars import _CustomIslamicHolidays
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
from holidays.groups import (
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
)
from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_WORKDAY


class Cameroon(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
class Cameroon(
ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays
):
"""
References:
- https://en.wikipedia.org/wiki/Public_holidays_in_Cameroon
Expand All @@ -25,17 +32,12 @@ class Cameroon(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Is

country = "CM"
observed_label = "%s (Observed)"
special_holidays = {
2021: (
(MAY, 14, "Public Holiday"),
(JUL, 19, "Public Holiday"),
),
}

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
IslamicHolidays.__init__(self, cls=CameroonIslamicHolidays)
StaticHolidays.__init__(self, cls=CameroonStaticHolidays)
super().__init__(observed_rule=SUN_TO_NEXT_WORKDAY, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -174,3 +176,12 @@ class CameroonIslamicHolidays(_CustomIslamicHolidays):
2021: (OCT, 19),
2022: (OCT, 8),
}


class CameroonStaticHolidays:
special_holidays = {
2021: (
(MAY, 14, "Public Holiday"),
(JUL, 19, "Public Holiday"),
),
}
105 changes: 54 additions & 51 deletions holidays/countries/china.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@

from holidays.calendars.gregorian import JAN, MAY, SEP, OCT, DEC
from holidays.constants import HALF_DAY, PUBLIC
from holidays.groups import ChineseCalendarHolidays, InternationalHolidays
from holidays.groups import ChineseCalendarHolidays, InternationalHolidays, StaticHolidays
from holidays.holiday_base import HolidayBase


class China(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
class China(HolidayBase, ChineseCalendarHolidays, InternationalHolidays, StaticHolidays):
"""
References:
- https://en.wikipedia.org/wiki/Public_holidays_in_China
Expand Down Expand Up @@ -66,58 +66,10 @@ class China(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
default_language = "zh_CN"
supported_languages = ("en_US", "th", "zh_CN", "zh_TW")

# Special Cases.

# New Year's Day.
new_years_day_overflow = tr("元旦")

# National Day.
national_day_2008_golden_week = tr("国庆节")

# Mid-Autumn Festival.
mid_autumn_festival_2010_special = tr("中秋节")

special_public_holidays = {
2007: (
# 2007: Overflow from 2008 Notice.
(DEC, 30, new_years_day_overflow),
(DEC, 31, new_years_day_overflow),
),
2008: (
# 2008: weird National Day Golden Week pattern.
(SEP, 29, national_day_2008_golden_week),
(SEP, 30, national_day_2008_golden_week),
(OCT, 4, national_day_2008_golden_week),
(OCT, 5, national_day_2008_golden_week),
),
2010: (
# 2010: doesn't fit with existing observed pattern.
(SEP, 23, mid_autumn_festival_2010_special),
(SEP, 24, mid_autumn_festival_2010_special),
),
2013: (
# 2013: doesn't fit with existing observed pattern.
(JAN, 2, new_years_day_overflow),
(JAN, 3, new_years_day_overflow),
),
2018: (
# 2018: Overflow from 2019 Notice.
(DEC, 30, new_years_day_overflow),
(DEC, 31, new_years_day_overflow),
),
2022: (
# 2022: Overflow from 2023 Notice.
(DEC, 31, new_years_day_overflow),
),
2023: (
# 2023: Overflow from 2023 Notice.
(JAN, 2, new_years_day_overflow),
),
}

def __init__(self, *args, **kwargs):
ChineseCalendarHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, cls=ChinaStaticHolidays)
super().__init__(*args, **kwargs)

def _add_observed_one_off_holidays(self, dt: date):
Expand Down Expand Up @@ -372,3 +324,54 @@ class CN(China):

class CHN(China):
pass


class ChinaStaticHolidays:
# Special Cases.

# New Year's Day.
new_years_day_overflow = tr("元旦")

# National Day.
national_day_2008_golden_week = tr("国庆节")

# Mid-Autumn Festival.
mid_autumn_festival_2010_special = tr("中秋节")

special_public_holidays = {
2007: (
# 2007: Overflow from 2008 Notice.
(DEC, 30, new_years_day_overflow),
(DEC, 31, new_years_day_overflow),
),
2008: (
# 2008: weird National Day Golden Week pattern.
(SEP, 29, national_day_2008_golden_week),
(SEP, 30, national_day_2008_golden_week),
(OCT, 4, national_day_2008_golden_week),
(OCT, 5, national_day_2008_golden_week),
),
2010: (
# 2010: doesn't fit with existing observed pattern.
(SEP, 23, mid_autumn_festival_2010_special),
(SEP, 24, mid_autumn_festival_2010_special),
),
2013: (
# 2013: doesn't fit with existing observed pattern.
(JAN, 2, new_years_day_overflow),
(JAN, 3, new_years_day_overflow),
),
2018: (
# 2018: Overflow from 2019 Notice.
(DEC, 30, new_years_day_overflow),
(DEC, 31, new_years_day_overflow),
),
2022: (
# 2022: Overflow from 2023 Notice.
(DEC, 31, new_years_day_overflow),
),
2023: (
# 2023: Overflow from 2023 Notice.
(JAN, 2, new_years_day_overflow),
),
}
18 changes: 11 additions & 7 deletions holidays/countries/eswatini.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,23 @@
import warnings

from holidays.calendars.gregorian import JAN, DEC
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON, SUN_TO_NEXT_TUE


class Eswatini(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
class Eswatini(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
"""
https://swazilii.org/sz/legislation/act/1938/71
https://www.officeholidays.com/countries/swaziland
"""

country = "SZ"
observed_label = "%s (Observed)"
special_holidays = {
# https://mg.co.za/article/1999-12-09-swaziland-declares-bank-holidays/
1999: (DEC, 31, "Y2K changeover"),
2000: (JAN, 3, "Y2K changeover"),
}

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, cls=EswatiniStaticHolidays)
super().__init__(observed_rule=SUN_TO_NEXT_MON, observed_since=2021, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -87,3 +83,11 @@ class SZ(Eswatini):

class SZW(Eswatini):
pass


class EswatiniStaticHolidays:
special_holidays = {
# https://mg.co.za/article/1999-12-09-swaziland-declares-bank-holidays/
1999: (DEC, 31, "Y2K changeover"),
2000: (JAN, 3, "Y2K changeover"),
}
Loading

0 comments on commit 2699783

Please sign in to comment.