# holidays # -------- # A fast, efficient Python library for generating country, province and state # specific sets of holidays on the fly. It aims to make determining whether a # specific date is a holiday as fast and flexible as possible. # # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file) # dr-prodigy (c) 2017-2023 # ryanss (c) 2014-2017 # Website: https://github.com/vacanza/holidays # License: MIT (see LICENSE file) from gettext import gettext as tr 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, StaticHolidays, ) from holidays.observed_holiday_base import ( ObservedHolidayBase, MON_TO_NEXT_TUE, SAT_SUN_TO_NEXT_MON, SAT_SUN_TO_NEXT_MON_TUE, ) class CocosIslands( ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays ): """Cocos (Keeling) Islands holidays. References: * * * * [2007](https://web.archive.org/web/20250605022855/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2006/02_2006_Public_Holidays_2007_CKI.doc) * [2008](https://web.archive.org/web/20240718120923/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2007/06-2007_Public_Holidays_CKI.pdf) * [2008 Eid al-Fitr](https://web.archive.org/web/20240331104649/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2008/03_2008_Observance_of_Hari_Raya_Puasa_2008.pdf) * [2009](https://web.archive.org/web/20231208153529/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2008/01-2008-2009-public-holiday-CKI-gazette.pdf) * [2010](https://archive.org/details/cocos-island-2009-gazette-6-2009-cki-proclamation-of-2010-special-public-bank-holidays) * [2013](https://web.archive.org/web/20240805055409/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2012/2012-Gazette_8-2012-CKI-Proclamation_of_2013_Public_Holidays_for_Cocos_(Keeling)_Islands.pdf) * [2014](https://web.archive.org/web/20240718123844/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2013/2013-Gazette_3-2013-Cocos_K_Islands_2014_Public_Holidays.pdf) * [2016](https://archive.org/details/cocos-island-2015-gazette-4-2015-cki-proclamation-of-2016-special-public-bank-holidays) * [2016 Eid al-Fitr](https://web.archive.org/web/20231208203746/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2016/2016-Gazette_3-2016-CKI-Proclamation_Special_Public_and_Bank_Holidays_2016.pdf) * [2017](https://web.archive.org/web/20240303203132/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_gazette/files/2016/2016-Gazette_2-2016-CKI-Proclamation_Special_Public_and_Bank_Holidays_2017.pdf) * [2019](https://web.archive.org/web/20241123131420/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2018/files/A38-2018.pdf) * [2019 Act of Self Determination Day](https://web.archive.org/web/20220518200522/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2019/files/A10-2019-bank-holidays.pdf) * [2020](https://web.archive.org/web/20240521203357/https://www.infrastructure.gov.au/sites/default/files/migrated/territories/indian_ocean/iot_bulletins/2019/files/A53-2019.pdf) * [2021](https://web.archive.org/web/20250502204052/https://www.infrastructure.gov.au/territories-regions-cities/territories/indian_ocean/iot_bulletins/2020/A041-2020-cki-public-holidays) * [2022](https://web.archive.org/web/20250429071240/https://www.infrastructure.gov.au/sites/default/files/documents/a33-2021-2022-public-holidays-cocos-keeling-islands.pdf) * [2022 Eid al-Fitr](https://web.archive.org/web/20220810061351/https://www.infrastructure.gov.au/sites/default/files/documents/Gazette-Change-to-CKI-Hari-Raya-Puasa-2022.pdf) * [2023](https://web.archive.org/web/20240711221156/https://www.infrastructure.gov.au/sites/default/files/documents/a19-2022-community-bulletin-2023-kings-birthday-cocos-keeling-islands.pdf) * [2023 Eid al-Fitr](https://web.archive.org/web/20250627103728/https://www.infrastructure.gov.au/sites/default/files/documents/a02-2023-community-bulletin-change-of-public-holiday-date-for-hari-raya-puasa-2023-cocos-keeling-islands.pdf) * [2023 Eid al-Adha](https://web.archive.org/web/20240804112114/https://www.infrastructure.gov.au/sites/default/files/documents/a06-2023_community_bulletin_-_change_of_public_holiday_date_for_hari_raya_haji_2023.pdf) * [2024](https://web.archive.org/web/20250207203100/https://www.infrastructure.gov.au/sites/default/files/documents/a12-2023-2024-public-holidays-cocos-k-islands.pdf) * [2025](https://web.archive.org/web/20250413083314/https://www.infrastructure.gov.au/sites/default/files/documents/a21-2024-administrator-community-bulletin-cki-public-holidays-2025.pdf) """ country = "CC" default_language = "en_CC" # %s (observed). observed_label = tr("%s (observed)") # %s (estimated). estimated_label = tr("%s (estimated)") # %s (observed, estimated). observed_estimated_label = tr("%s (observed, estimated)") supported_languages = ("coa_CC", "en_CC", "en_US") # Act of Self Determination 1984. start_year = 1985 def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs): """ Args: islamic_show_estimated: Whether to add "estimated" label to Islamic holidays name if holiday date is estimated. """ ChristianHolidays.__init__(self) InternationalHolidays.__init__(self) IslamicHolidays.__init__( self, cls=CocosIslandsIslamicHolidays, show_estimated=islamic_show_estimated ) StaticHolidays.__init__(self, CocosIslandsStaticHolidays) kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON) super().__init__(*args, **kwargs) def _populate_public_holidays(self): # New Year's Day. self._add_observed(self._add_new_years_day(tr("New Year's Day"))) # Australia Day. self._add_observed(self._add_holiday_jan_26(tr("Australia Day"))) act_of_self_determination_dates = { 2007: (APR, 5), } # Act of Self Determination Day. name = tr("Act of Self Determination Day") if dt := act_of_self_determination_dates.get(self._year): self._add_holiday(name, dt) else: dt = self._add_holiday_apr_6(name) if self._year != 2019: self._add_observed(dt) # Good Friday. self._add_good_friday(tr("Good Friday")) # Easter Monday. self._add_easter_monday(tr("Easter Monday")) # ANZAC Day. self._add_observed(self._add_anzac_day(tr("ANZAC Day"))) queens_kings_birthday_dates = { 2021: (JUN, 7), 2022: (JUN, 6), 2023: (JUN, 6), 2024: (JUN, 6), } name = ( # King's Birthday. tr("King's Birthday") if self._year >= 2023 # Queen's Birthday. else tr("Queen's Birthday") ) if dt := queens_kings_birthday_dates.get(self._year): self._add_holiday(name, dt) else: self._add_holiday_2nd_mon_of_jun(name) # Placed before Christmas Day for proper observed calculation. self._add_observed( # Boxing Day. self._add_christmas_day_two(tr("Boxing Day")), rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE, ) # Christmas Day. self._add_observed(self._add_christmas_day(tr("Christmas Day"))) # Islamic holidays. if self._year <= 2019: # Islamic New Year. for dt in self._add_islamic_new_year_day(tr("Islamic New Year")): self._add_observed(dt) # Prophet's Birthday. for dt in self._add_mawlid_day(tr("Prophet's Birthday")): self._add_observed(dt) # Eid al-Fitr. for dt in self._add_eid_al_fitr_day(tr("Eid al-Fitr")): self._add_observed(dt) # Eid al-Adha. for dt in self._add_eid_al_adha_day(tr("Eid al-Adha")): if self._year != 2025: self._add_observed(dt) class CocosIslandsIslamicHolidays(_CustomIslamicHolidays): EID_AL_ADHA_DATES = { 2007: (DEC, 20), 2008: (DEC, 8), 2009: (NOV, 30), 2010: (NOV, 16), 2013: (OCT, 15), 2014: (OCT, 4), 2016: (SEP, 13), 2017: (SEP, 1), 2019: (AUG, 11), 2020: (JUL, 31), 2021: (JUL, 20), 2022: (JUL, 9), 2023: (JUN, 28), 2024: (JUN, 17), 2025: (JUN, 7), } EID_AL_FITR_DATES = { 2007: (OCT, 15), 2008: (OCT, 1), 2009: (SEP, 21), 2010: (SEP, 10), 2013: (AUG, 8), 2014: (JUL, 28), 2016: (JUL, 6), 2017: (JUN, 24), 2019: (JUN, 5), 2020: (MAY, 24), 2021: (MAY, 13), 2022: (MAY, 3), 2023: (APR, 21), 2024: (APR, 10), 2025: (MAR, 31), } HIJRI_NEW_YEAR_DATES = { 2007: (JAN, 22), 2008: (JAN, 10), 2009: (DEC, 18), 2010: (DEC, 7), 2013: (NOV, 4), 2014: (OCT, 25), 2016: (OCT, 3), 2017: (SEP, 22), 2019: (SEP, 1), } MAWLID_DATES = { 2007: (APR, 2), 2008: (MAR, 20), 2009: (MAR, 9), 2010: (FEB, 26), 2013: (JAN, 24), 2014: (JAN, 13), 2016: (DEC, 12), 2017: (DEC, 1), 2019: (NOV, 9), 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 8), 2023: (SEP, 27), 2024: (SEP, 16), 2025: (SEP, 5), } class CC(CocosIslands): pass class CCK(CocosIslands): pass class CocosIslandsStaticHolidays: """Cocos (Keeling) Islands special holidays. References: * [National Day of Mourning 2022](https://web.archive.org/web/20240712213751/https://www.infrastructure.gov.au/sites/default/files/documents/04-2022-proclamation-cki-day-of-mourning.pdf) """ special_public_holidays = { # National Day of Mourning for Queen Elizabeth II. 2022: (SEP, 22, tr("National Day of Mourning for Queen Elizabeth II")), } special_public_holidays_observed = { 2019: (APR, 10, tr("Act of Self Determination Day")), 2025: (JUN, 6, tr("Eid al-Adha")), }