Skip to content

Commit

Permalink
Refactor static holidays (#1509)
Browse files Browse the repository at this point in the history
  • Loading branch information
arkid15r committed Oct 12, 2023
1 parent c42b985 commit 54f09bc
Show file tree
Hide file tree
Showing 35 changed files with 1,062 additions and 877 deletions.
21 changes: 16 additions & 5 deletions holidays/countries/albania.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,31 @@

from holidays.calendars.gregorian import MAR
from holidays.calendars.julian import JULIAN_CALENDAR
from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
from holidays.groups import (
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
)
from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY


class Albania(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
class Albania(
ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays
):
"""
References:
- https://en.wikipedia.org/wiki/Public_holidays_in_Albania
"""

country = "AL"
observed_label = "%s (Observed)"
special_holidays = {
2022: (MAR, 21, "Public Holiday"),
}

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
IslamicHolidays.__init__(self)
StaticHolidays.__init__(self, AlbaniaStaticHolidays)
super().__init__(observed_rule=SAT_SUN_TO_NEXT_WORKDAY, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -96,3 +101,9 @@ class AL(Albania):

class ALB(Albania):
pass


class AlbaniaStaticHolidays:
special_holidays = {
2022: (MAR, 21, "Public Holiday"),
}
185 changes: 95 additions & 90 deletions holidays/countries/argentina.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from gettext import gettext as tr

from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
THU_TO_NEXT_MON,
Expand All @@ -21,7 +21,7 @@
)


class Argentina(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
class Argentina(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
"""
A subclass of :py:class:`HolidayBase` representing public holidays
in Argentina.
Expand Down Expand Up @@ -73,97 +73,10 @@ class Argentina(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
# %s (Observed).
observed_label = tr("%s (Observado)")

# Special Bridge Holidays are given upto 3 days a year
# as long as it's declared 50 days before calendar year's end
# There's no Bridge Holidays declared in 2017

# Bridge Public Holiday.
arg_bridge_public_holiday = tr("Feriado con fines turísticos")

# Bicentenary of the creation and first oath of the national flag.
bicentennial_national_flag = tr(
"Bicentenario de la creación y primera jura de la bandera nacional"
)

# Bicentenary of the Battle of Tucuman.
bicentennial_battle_tucuman = tr("Bicentenario de la Batalla de Tucumán")

# Bicentenary of the inaugural session of the National Constituent Assembly of the year 1813.
bicentennial_assembly_1813 = tr(
"Bicentenario de la sesión inaugural de la Asamblea Nacional Constituyente del año 1813"
)

# Bicentenary of the Battle of Salta.
bicentennial_battle_salta = tr("Bicentenario de la Batalla de Salta")

# National Census Day 2022.
national_census_2022 = tr("Censo nacional 2022")

special_holidays = {
2011: (
(MAR, 25, arg_bridge_public_holiday),
(DEC, 9, arg_bridge_public_holiday),
),
2012: (
(FEB, 27, bicentennial_national_flag),
(APR, 30, arg_bridge_public_holiday),
(SEP, 24, bicentennial_battle_tucuman),
(DEC, 24, arg_bridge_public_holiday),
),
2013: (
(JAN, 31, bicentennial_assembly_1813),
(FEB, 20, bicentennial_battle_salta),
(APR, 1, arg_bridge_public_holiday),
(JUN, 21, arg_bridge_public_holiday),
),
2014: (
(MAY, 2, arg_bridge_public_holiday),
(DEC, 26, arg_bridge_public_holiday),
),
2015: (
(MAR, 23, arg_bridge_public_holiday),
(DEC, 7, arg_bridge_public_holiday),
),
2016: (
(JUL, 8, arg_bridge_public_holiday),
(DEC, 9, arg_bridge_public_holiday),
),
2018: (
(APR, 30, arg_bridge_public_holiday),
(DEC, 24, arg_bridge_public_holiday),
(DEC, 31, arg_bridge_public_holiday),
),
2019: (
(JUL, 8, arg_bridge_public_holiday),
(AUG, 19, arg_bridge_public_holiday),
(OCT, 14, arg_bridge_public_holiday),
),
2020: (
(MAR, 23, arg_bridge_public_holiday),
(JUL, 10, arg_bridge_public_holiday),
(DEC, 7, arg_bridge_public_holiday),
),
2021: (
(MAY, 24, arg_bridge_public_holiday),
(OCT, 8, arg_bridge_public_holiday),
(NOV, 22, arg_bridge_public_holiday),
),
2022: (
(MAY, 18, national_census_2022),
(OCT, 7, arg_bridge_public_holiday),
(NOV, 21, arg_bridge_public_holiday),
(DEC, 9, arg_bridge_public_holiday),
),
2023: (
(MAY, 26, arg_bridge_public_holiday),
(JUN, 19, arg_bridge_public_holiday),
(OCT, 13, arg_bridge_public_holiday),
),
}

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, ArgentinaStaticHolidays)
super().__init__(observed_rule=TUE_WED_TO_PREV_MON + THU_FRI_TO_NEXT_MON, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -336,3 +249,95 @@ class AR(Argentina):

class ARG(Argentina):
pass


class ArgentinaStaticHolidays:
"""
Special Bridge Holidays are given upto 3 days a year
as long as it's declared 50 days before calendar year's end
There's no Bridge Holidays declared in 2017.
"""

# Bridge Public Holiday.
arg_bridge_public_holiday = tr("Feriado con fines turísticos")

# Bicentenary of the creation and first oath of the national flag.
bicentennial_national_flag = tr(
"Bicentenario de la creación y primera jura de la bandera nacional"
)

# Bicentenary of the Battle of Tucuman.
bicentennial_battle_tucuman = tr("Bicentenario de la Batalla de Tucumán")

# Bicentenary of the inaugural session of the National Constituent Assembly of the year 1813.
bicentennial_assembly_1813 = tr(
"Bicentenario de la sesión inaugural de la Asamblea Nacional Constituyente del año 1813"
)

# Bicentenary of the Battle of Salta.
bicentennial_battle_salta = tr("Bicentenario de la Batalla de Salta")

# National Census Day 2022.
national_census_2022 = tr("Censo nacional 2022")

special_holidays = {
2011: (
(MAR, 25, arg_bridge_public_holiday),
(DEC, 9, arg_bridge_public_holiday),
),
2012: (
(FEB, 27, bicentennial_national_flag),
(APR, 30, arg_bridge_public_holiday),
(SEP, 24, bicentennial_battle_tucuman),
(DEC, 24, arg_bridge_public_holiday),
),
2013: (
(JAN, 31, bicentennial_assembly_1813),
(FEB, 20, bicentennial_battle_salta),
(APR, 1, arg_bridge_public_holiday),
(JUN, 21, arg_bridge_public_holiday),
),
2014: (
(MAY, 2, arg_bridge_public_holiday),
(DEC, 26, arg_bridge_public_holiday),
),
2015: (
(MAR, 23, arg_bridge_public_holiday),
(DEC, 7, arg_bridge_public_holiday),
),
2016: (
(JUL, 8, arg_bridge_public_holiday),
(DEC, 9, arg_bridge_public_holiday),
),
2018: (
(APR, 30, arg_bridge_public_holiday),
(DEC, 24, arg_bridge_public_holiday),
(DEC, 31, arg_bridge_public_holiday),
),
2019: (
(JUL, 8, arg_bridge_public_holiday),
(AUG, 19, arg_bridge_public_holiday),
(OCT, 14, arg_bridge_public_holiday),
),
2020: (
(MAR, 23, arg_bridge_public_holiday),
(JUL, 10, arg_bridge_public_holiday),
(DEC, 7, arg_bridge_public_holiday),
),
2021: (
(MAY, 24, arg_bridge_public_holiday),
(OCT, 8, arg_bridge_public_holiday),
(NOV, 22, arg_bridge_public_holiday),
),
2022: (
(MAY, 18, national_census_2022),
(OCT, 7, arg_bridge_public_holiday),
(NOV, 21, arg_bridge_public_holiday),
(DEC, 9, arg_bridge_public_holiday),
),
2023: (
(MAY, 26, arg_bridge_public_holiday),
(JUN, 19, arg_bridge_public_holiday),
(OCT, 13, arg_bridge_public_holiday),
),
}
14 changes: 9 additions & 5 deletions holidays/countries/australia.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from datetime import timedelta as td

from holidays.calendars.gregorian import APR, AUG, SEP, OCT, FRI, _get_nth_weekday_from
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
SUN_TO_NEXT_MON,
Expand All @@ -22,17 +22,14 @@
)


class Australia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
class Australia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
"""
References:
- https://www.qld.gov.au/recreation/travel/holidays
"""

country = "AU"
observed_label = "%s (Observed)"
special_holidays = {
2022: (SEP, 22, "National Day of Mourning for Queen Elizabeth II"),
}
subdivisions = ("ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA")

@property
Expand All @@ -47,6 +44,7 @@ def sovereign_birthday(self) -> str:
def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, AustraliaStaticHolidays)
super().__init__(observed_rule=SAT_SUN_TO_NEXT_MON, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -317,3 +315,9 @@ class AU(Australia):

class AUS(Australia):
pass


class AustraliaStaticHolidays:
special_holidays = {
2022: (SEP, 22, "National Day of Mourning for Queen Elizabeth II"),
}
26 changes: 15 additions & 11 deletions holidays/countries/barbados.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
# License: MIT (see LICENSE file)

from holidays.calendars.gregorian import JAN, JUL
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
MON_TO_NEXT_TUE,
Expand All @@ -19,7 +19,7 @@
)


class Barbados(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
class Barbados(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
"""
https://en.wikipedia.org/wiki/Public_holidays_in_Barbados
https://www.timeanddate.com/holidays/barbados/
Expand All @@ -32,19 +32,11 @@ class Barbados(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):

country = "BB"
observed_label = "%s (Observed)"
special_holidays = {
2021: (
(JAN, 4, "Public Holiday"),
(JAN, 5, "Public Holiday"),
),
# One off 50th Anniversary of CARICOM Holiday.
# See https://tinyurl.com/brbhol
2023: (JUL, 31, "50th Anniversary of CARICOM Holiday"),
}

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
StaticHolidays.__init__(self, BarbadosStaticHolidays)
super().__init__(observed_rule=SUN_TO_NEXT_MON, *args, **kwargs)

def _populate(self, year):
Expand Down Expand Up @@ -100,3 +92,15 @@ class BB(Barbados):

class BRB(Barbados):
pass


class BarbadosStaticHolidays:
special_holidays = {
2021: (
(JAN, 4, "Public Holiday"),
(JAN, 5, "Public Holiday"),
),
# One off 50th Anniversary of CARICOM Holiday.
# See https://tinyurl.com/brbhol
2023: (JUL, 31, "50th Anniversary of CARICOM Holiday"),
}
Loading

0 comments on commit 54f09bc

Please sign in to comment.