From b536cfc677897b6cfc3d397d395806cff5fcd180 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Mon, 5 Aug 2024 14:13:27 -0700 Subject: [PATCH 01/22] Initialize v0.55 --- holidays/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holidays/__init__.py b/holidays/__init__.py index 140a1d94f..cc865f6e0 100644 --- a/holidays/__init__.py +++ b/holidays/__init__.py @@ -23,7 +23,7 @@ from holidays.registry import EntityLoader from holidays.utils import * -__version__ = "0.54" +__version__ = "0.55" EntityLoader.load("countries", globals()) From cfb89f2688e2501b10182b4a5c722a672f49c620 Mon Sep 17 00:00:00 2001 From: Mike Borsetti <26698111+mborsetti@users.noreply.github.com> Date: Tue, 6 Aug 2024 23:39:54 +0800 Subject: [PATCH 02/22] Update SG: add 2025 official holidays (#1903) Co-authored-by: Arkadii Yakovets --- holidays/countries/singapore.py | 8 ++++++++ tests/countries/test_singapore.py | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/holidays/countries/singapore.py b/holidays/countries/singapore.py index 51b6fcd12..d799a9ffb 100644 --- a/holidays/countries/singapore.py +++ b/holidays/countries/singapore.py @@ -177,6 +177,7 @@ class SingaporeBuddhistHolidays(_CustomBuddhistHolidays): 2022: (MAY, 15), 2023: (JUN, 2), 2024: (MAY, 22), + 2025: (MAY, 12), } @@ -206,10 +207,12 @@ class SingaporeChineseHolidays(_CustomChineseHolidays): 2022: (FEB, 1), 2023: (JAN, 22), 2024: (FEB, 10), + 2025: (JAN, 29), } class SingaporeHinduHolidays(_CustomHinduHolidays): + # Deepavali DIWALI_DATES = { 2001: (NOV, 14), 2002: (NOV, 3), @@ -235,10 +238,12 @@ class SingaporeHinduHolidays(_CustomHinduHolidays): 2022: (OCT, 24), 2023: (NOV, 12), 2024: (OCT, 31), + 2025: (OCT, 20), } class SingaporeIslamicHolidays(_CustomIslamicHolidays): + # Hari Raya Haji EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), @@ -264,8 +269,10 @@ class SingaporeIslamicHolidays(_CustomIslamicHolidays): 2022: (JUL, 10), 2023: (JUN, 29), 2024: (JUN, 17), + 2025: (JUN, 7), } + # Hari Raya Puasa EID_AL_FITR_DATES = { 2001: (DEC, 16), 2002: (DEC, 6), @@ -291,6 +298,7 @@ class SingaporeIslamicHolidays(_CustomIslamicHolidays): 2022: (MAY, 3), 2023: (APR, 22), 2024: (APR, 10), + 2025: (MAR, 31), } diff --git a/tests/countries/test_singapore.py b/tests/countries/test_singapore.py index b89dbf926..2fc3c6e62 100644 --- a/tests/countries/test_singapore.py +++ b/tests/countries/test_singapore.py @@ -178,6 +178,21 @@ def test_2024(self): ("2024-12-25", "Christmas Day"), ) + def test_2025(self): + self.assertHolidays( + ("2025-01-01", "New Year's Day"), + ("2025-01-29", "Chinese New Year"), + ("2025-01-30", "Chinese New Year"), + ("2025-03-31", "Hari Raya Puasa"), + ("2025-04-18", "Good Friday"), + ("2025-05-01", "Labour Day"), + ("2025-05-12", "Vesak Day"), + ("2025-06-07", "Hari Raya Haji"), + ("2025-08-09", "National Day"), + ("2025-10-20", "Deepavali"), + ("2025-12-25", "Christmas Day"), + ) + def test_non_observed(self): self.assertNoNonObservedHoliday("2023-01-02") From 54d77195737a46b753bae1c00a58fed7757b9062 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Tue, 6 Aug 2024 09:05:13 -0700 Subject: [PATCH 03/22] Update Github release upload process (#1902) --- .github/workflows/ci-cd.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 3d5722a92..5db533294 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -22,7 +22,7 @@ jobs: name: Run pre-commit runs-on: ubuntu-latest steps: - - name: Check out Repository + - name: Check out repository uses: actions/checkout@v4 - name: Set up Python @@ -51,7 +51,8 @@ jobs: - '3.11' - '3.12' steps: - - uses: actions/checkout@v4 + - name: Check out repository + uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 @@ -84,7 +85,8 @@ jobs: needs: test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Check out repository + uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 @@ -122,7 +124,7 @@ jobs: - ubuntu-latest - windows-latest steps: - - name: Check out Repository + - name: Check out repository uses: actions/checkout@v4 - name: Set up Python @@ -157,7 +159,7 @@ jobs: runs-on: ubuntu-latest needs: test steps: - - name: Checkout Repository + - name: Check out repository uses: actions/checkout@v4 - name: Set Up Python @@ -167,7 +169,7 @@ jobs: cache-dependency-path: requirements/docs.txt python-version: '3.12' - - name: Install Dependencies + - name: Install dependencies run: | python -m pip install --requirement requirements/docs.txt python -m pip install . @@ -187,6 +189,7 @@ jobs: - test-build - test-docs permissions: + contents: write id-token: write runs-on: ubuntu-latest steps: @@ -199,6 +202,9 @@ jobs: - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 + - name: Check out repository + uses: actions/checkout@v4 + - name: Update Github release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From dc716d77839c270445fd5149a4a9a0b5586fae37 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:50:25 -0700 Subject: [PATCH 04/22] Bump actions/cache from v3 to v4 (#1901) --- .github/workflows/pre-commit-autoupdate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit-autoupdate.yml b/.github/workflows/pre-commit-autoupdate.yml index 415bbfff6..a0c9c7f6e 100644 --- a/.github/workflows/pre-commit-autoupdate.yml +++ b/.github/workflows/pre-commit-autoupdate.yml @@ -29,7 +29,7 @@ jobs: python -m pip install pre-commit - name: Use pre-commit environment cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: key: ${{ runner.os }}-pre-commit-${{ hashFiles('.pre-commit-config.yaml') }} path: ~/.cache/pre-commit From ef56ecb523d468671bbb74ad471176413e9401a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 22:13:21 +0000 Subject: [PATCH 05/22] Bump ruff from 0.5.5 to 0.5.6 (#1904) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index de919e20b..5a4c677ca 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -7,7 +7,7 @@ hijridate==2.5.0 lingva==5.0.3 pre-commit==3.8.0 pygithub==2.3.0 -ruff==0.5.5 +ruff==0.5.6 tox==4.16.0 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From afe2e5a6fda31491d64b8b3268803c6a639e22a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:34:59 -0700 Subject: [PATCH 06/22] Bump coverage from 7.6.0 to 7.6.1 (#1907) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/tests.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/tests.txt b/requirements/tests.txt index 7b513e709..2e6955fa2 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -1,6 +1,6 @@ # Test requirements. -coverage==7.6.0 +coverage==7.6.1 importlib-metadata==8.2.0 numpy<2.0.0; python_version < '3.9' numpy==2.0.1; python_version >= '3.9' From b1b00e66d560173e8d60a8712b25869b78e9ff7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 17:35:26 -0700 Subject: [PATCH 07/22] Bump tox from 4.16.0 to 4.17.1 (#1905) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 5a4c677ca..7abb33bcd 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -8,6 +8,6 @@ lingva==5.0.3 pre-commit==3.8.0 pygithub==2.3.0 ruff==0.5.6 -tox==4.16.0 +tox==4.17.1 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 8124e8d8af6d70258d5219381e100d82a6dde7d2 Mon Sep 17 00:00:00 2001 From: Jonathan Rozenblat Date: Thu, 8 Aug 2024 20:31:46 +0300 Subject: [PATCH 08/22] Update utils.py (#1908) Co-authored-by: ~Jhellico Co-authored-by: Arkadii Yakovets --- holidays/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/holidays/utils.py b/holidays/utils.py index f3c368559..76413fe89 100755 --- a/holidays/utils.py +++ b/holidays/utils.py @@ -22,9 +22,9 @@ import warnings from functools import lru_cache -from typing import Dict, Iterable, List, Optional, Tuple, Union +from typing import Dict, Iterable, List, Optional, Union -from holidays.holiday_base import HolidayBase +from holidays.holiday_base import CategoryArg, HolidayBase from holidays.registry import EntityLoader @@ -37,7 +37,7 @@ def country_holidays( prov: Optional[str] = None, state: Optional[str] = None, language: Optional[str] = None, - categories: Optional[Tuple[str]] = None, + categories: Optional[CategoryArg] = None, ) -> HolidayBase: """ Returns a new dictionary-like :py:class:`HolidayBase` object for the public From a98297af63b54768f41b89c010b17a0fd2df8a38 Mon Sep 17 00:00:00 2001 From: arkid15r <2201626+arkid15r@users.noreply.github.com> Date: Fri, 9 Aug 2024 00:54:28 +0000 Subject: [PATCH 09/22] chore: Update pre-commit hooks --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2f559d206..cc9a67b5a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ repos: - rst - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.6 + rev: v0.5.7 hooks: - id: ruff - id: ruff-format From 4d970d16ed8b640e879b6f4fb7af27208b7bd9c8 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:10:09 -0700 Subject: [PATCH 10/22] Update CI/CD: add CodeQL workflow (#1910) --- .github/workflows/ci-cd.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 5db533294..a81face8a 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -33,6 +33,27 @@ jobs: - name: Run pre-commit uses: pre-commit/action@v3.0.1 + code-ql: + name: CodeQL + needs: + - pre-commit + permissions: + security-events: write + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: python + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: '/language:python' + test: name: Test Python ${{ matrix.python-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} From 1f766e2a84ce2cf4833a3d7e2a49ed1d7e4eb906 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:10:22 -0700 Subject: [PATCH 11/22] Update pre-commit: add bandit (#1913) --- .pre-commit-config.yaml | 7 +++++++ pyproject.toml | 3 +++ 2 files changed, 10 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cc9a67b5a..f7eca7e67 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,6 +34,13 @@ repos: - --license-filepath - docs/file_header.txt + - repo: https://github.com/pycqa/bandit + rev: 1.7.9 + hooks: + - id: bandit + args: + - --configfile=pyproject.toml + - repo: https://github.com/pycqa/isort rev: 5.13.2 hooks: diff --git a/pyproject.toml b/pyproject.toml index eec8b297a..0d55cd3e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,9 @@ Documentation = "https://python-holidays.readthedocs.io/en/latest/" Changelog = "https://github.com/vacanza/python-holidays/releases" Downloads = "https://pypi.org/project/holidays/" +[tool.bandit] +exclude_dirs = ["docs", "tests"] + [tool.coverage.run] branch = true omit = ["scripts/*", "setup.py", "tests/*"] From d8634e174c66ed0a734deb406b1e17722b7ba25b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:37:50 -0700 Subject: [PATCH 12/22] Bump ruff from 0.5.6 to 0.5.7 (#1918) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 7abb33bcd..8f68fc196 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -7,7 +7,7 @@ hijridate==2.5.0 lingva==5.0.3 pre-commit==3.8.0 pygithub==2.3.0 -ruff==0.5.6 +ruff==0.5.7 tox==4.17.1 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 96823e89e843051f68c78d23a4b078da7e8da909 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:57:23 -0700 Subject: [PATCH 13/22] Bump tox from 4.17.1 to 4.18.0 (#1919) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/dev.txt b/requirements/dev.txt index 8f68fc196..84848b472 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -8,6 +8,6 @@ lingva==5.0.3 pre-commit==3.8.0 pygithub==2.3.0 ruff==0.5.7 -tox==4.17.1 +tox==4.18.0 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 9b0c33a36623fbe014058cc2aa5386fbccf8addb Mon Sep 17 00:00:00 2001 From: Kate Golovanova Date: Thu, 15 Aug 2024 15:19:13 -0700 Subject: [PATCH 14/22] Add Samoa holidays (#1914) --- README.rst | 7 +- holidays/countries/__init__.py | 1 + holidays/countries/samoa.py | 72 ++ holidays/registry.py | 1 + snapshots/countries/WS_COMMON.json | 1113 ++++++++++++++++++++++++++++ tests/countries/test_samoa.py | 74 ++ 6 files changed, 1267 insertions(+), 1 deletion(-) create mode 100644 holidays/countries/samoa.py create mode 100644 snapshots/countries/WS_COMMON.json create mode 100644 tests/countries/test_samoa.py diff --git a/README.rst b/README.rst index 10268459d..8741355b4 100644 --- a/README.rst +++ b/README.rst @@ -146,7 +146,7 @@ Available Countries .. _ISO 639-1 code: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes .. _ISO 639-2 code: https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes -We currently support 149 country codes. The standard way to refer to a country +We currently support 150 country codes. The standard way to refer to a country is by using its `ISO 3166-1 alpha-2 code`_, the same used for domain names, and for a subdivision its `ISO 3166-2 code`_. Some countries have common or foreign names or abbreviations as aliases for their subdivisions. These are defined in @@ -760,6 +760,11 @@ All other default values are highlighted with bold: - - en_US, **ru** - + * - Samoa + - WS + - + - + - * - San Marino - SM - diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py index 6976eff7d..6cffd4f82 100644 --- a/holidays/countries/__init__.py +++ b/holidays/countries/__init__.py @@ -128,6 +128,7 @@ from .puerto_rico import PuertoRico, PR, PRI, HolidaysPR from .romania import Romania, RO, ROU from .russia import Russia, RU, RUS +from .samoa import Samoa, WS, WSM from .san_marino import SanMarino, SM, SMR from .saudi_arabia import SaudiArabia, SA, SAU from .serbia import Serbia, RS, SRB diff --git a/holidays/countries/samoa.py b/holidays/countries/samoa.py new file mode 100644 index 000000000..05f028bd6 --- /dev/null +++ b/holidays/countries/samoa.py @@ -0,0 +1,72 @@ +# 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 AUTHORS file) +# dr-prodigy (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/python-holidays +# License: MIT (see LICENSE file) + +from holidays.groups import ChristianHolidays, InternationalHolidays +from holidays.holiday_base import HolidayBase + + +class Samoa(HolidayBase, ChristianHolidays, InternationalHolidays): + """ + References: + - https://en.wikipedia.org/wiki/Public_holidays_in_Samoa + - https://www.timeanddate.com/holidays/samoa/ + - https://www.mcil.gov.ws/?attachment_id=6336 + - https://www.paclii.org/ws/legis/consol_act_2020/pha2008163/ + """ + + country = "WS" + + def __init__(self, *args, **kwargs): + ChristianHolidays.__init__(self) + InternationalHolidays.__init__(self) + + super().__init__(*args, **kwargs) + + def _populate(self, year): + super()._populate(year) + + # New Year's Day. + self._add_new_years_day("New Year's Day") + self._add_new_years_day_two("The Day After New Year's Day") + + # Good Friday. + self._add_good_friday("Good Friday") + self._add_holy_saturday("Day After Good Friday") + + # Easter Monday. + self._add_easter_monday("Easter Monday") + + # Mother's Day. + self._add_holiday_1_day_past_2nd_sun_of_may("Mother's Day") + + # Independence Day. + self._add_holiday_jun_1("Independence Day") + + # Father's Day. + self._add_holiday_1_day_past_2nd_sun_of_aug("Father's Day") + + # White Monday (Lotu a Tamaiti). + self._add_holiday_1_day_past_2nd_sun_of_oct("White Sunday (Lotu a Tamaiti)") + + # Christmas Day. + self._add_christmas_day("Christmas Day") + + # Boxing Day. + self._add_christmas_day_two("Boxing Day") + + +class WS(Samoa): + pass + + +class WSM(Samoa): + pass diff --git a/holidays/registry.py b/holidays/registry.py index 9412870e2..bc1f3c209 100644 --- a/holidays/registry.py +++ b/holidays/registry.py @@ -135,6 +135,7 @@ "puerto_rico": ("PuertoRico", "PR", "PRI", "HolidaysPR"), "romania": ("Romania", "RO", "ROU"), "russia": ("Russia", "RU", "RUS"), + "samoa": ("Samoa", "WS", "WSM"), "san_marino": ("SanMarino", "SM", "SMR"), "saudi_arabia": ("SaudiArabia", "SA", "SAU"), "serbia": ("Serbia", "RS", "SRB"), diff --git a/snapshots/countries/WS_COMMON.json b/snapshots/countries/WS_COMMON.json new file mode 100644 index 000000000..52483b60c --- /dev/null +++ b/snapshots/countries/WS_COMMON.json @@ -0,0 +1,1113 @@ +{ + "1950-01-01": "New Year's Day", + "1950-01-02": "The Day After New Year's Day", + "1950-04-07": "Good Friday", + "1950-04-08": "Day After Good Friday", + "1950-04-10": "Easter Monday", + "1950-05-15": "Mother's Day", + "1950-06-01": "Independence Day", + "1950-08-14": "Father's Day", + "1950-10-09": "White Sunday (Lotu a Tamaiti)", + "1950-12-25": "Christmas Day", + "1950-12-26": "Boxing Day", + "1951-01-01": "New Year's Day", + "1951-01-02": "The Day After New Year's Day", + "1951-03-23": "Good Friday", + "1951-03-24": "Day After Good Friday", + "1951-03-26": "Easter Monday", + "1951-05-14": "Mother's Day", + "1951-06-01": "Independence Day", + "1951-08-13": "Father's Day", + "1951-10-15": "White Sunday (Lotu a Tamaiti)", + "1951-12-25": "Christmas Day", + "1951-12-26": "Boxing Day", + "1952-01-01": "New Year's Day", + "1952-01-02": "The Day After New Year's Day", + "1952-04-11": "Good Friday", + "1952-04-12": "Day After Good Friday", + "1952-04-14": "Easter Monday", + "1952-05-12": "Mother's Day", + "1952-06-01": "Independence Day", + "1952-08-11": "Father's Day", + "1952-10-13": "White Sunday (Lotu a Tamaiti)", + "1952-12-25": "Christmas Day", + "1952-12-26": "Boxing Day", + "1953-01-01": "New Year's Day", + "1953-01-02": "The Day After New Year's Day", + "1953-04-03": "Good Friday", + "1953-04-04": "Day After Good Friday", + "1953-04-06": "Easter Monday", + "1953-05-11": "Mother's Day", + "1953-06-01": "Independence Day", + "1953-08-10": "Father's Day", + "1953-10-12": "White Sunday (Lotu a Tamaiti)", + "1953-12-25": "Christmas Day", + "1953-12-26": "Boxing Day", + "1954-01-01": "New Year's Day", + "1954-01-02": "The Day After New Year's Day", + "1954-04-16": "Good Friday", + "1954-04-17": "Day After Good Friday", + "1954-04-19": "Easter Monday", + "1954-05-10": "Mother's Day", + "1954-06-01": "Independence Day", + "1954-08-09": "Father's Day", + "1954-10-11": "White Sunday (Lotu a Tamaiti)", + "1954-12-25": "Christmas Day", + "1954-12-26": "Boxing Day", + "1955-01-01": "New Year's Day", + "1955-01-02": "The Day After New Year's Day", + "1955-04-08": "Good Friday", + "1955-04-09": "Day After Good Friday", + "1955-04-11": "Easter Monday", + "1955-05-09": "Mother's Day", + "1955-06-01": "Independence Day", + "1955-08-15": "Father's Day", + "1955-10-10": "White Sunday (Lotu a Tamaiti)", + "1955-12-25": "Christmas Day", + "1955-12-26": "Boxing Day", + "1956-01-01": "New Year's Day", + "1956-01-02": "The Day After New Year's Day", + "1956-03-30": "Good Friday", + "1956-03-31": "Day After Good Friday", + "1956-04-02": "Easter Monday", + "1956-05-14": "Mother's Day", + "1956-06-01": "Independence Day", + "1956-08-13": "Father's Day", + "1956-10-15": "White Sunday (Lotu a Tamaiti)", + "1956-12-25": "Christmas Day", + "1956-12-26": "Boxing Day", + "1957-01-01": "New Year's Day", + "1957-01-02": "The Day After New Year's Day", + "1957-04-19": "Good Friday", + "1957-04-20": "Day After Good Friday", + "1957-04-22": "Easter Monday", + "1957-05-13": "Mother's Day", + "1957-06-01": "Independence Day", + "1957-08-12": "Father's Day", + "1957-10-14": "White Sunday (Lotu a Tamaiti)", + "1957-12-25": "Christmas Day", + "1957-12-26": "Boxing Day", + "1958-01-01": "New Year's Day", + "1958-01-02": "The Day After New Year's Day", + "1958-04-04": "Good Friday", + "1958-04-05": "Day After Good Friday", + "1958-04-07": "Easter Monday", + "1958-05-12": "Mother's Day", + "1958-06-01": "Independence Day", + "1958-08-11": "Father's Day", + "1958-10-13": "White Sunday (Lotu a Tamaiti)", + "1958-12-25": "Christmas Day", + "1958-12-26": "Boxing Day", + "1959-01-01": "New Year's Day", + "1959-01-02": "The Day After New Year's Day", + "1959-03-27": "Good Friday", + "1959-03-28": "Day After Good Friday", + "1959-03-30": "Easter Monday", + "1959-05-11": "Mother's Day", + "1959-06-01": "Independence Day", + "1959-08-10": "Father's Day", + "1959-10-12": "White Sunday (Lotu a Tamaiti)", + "1959-12-25": "Christmas Day", + "1959-12-26": "Boxing Day", + "1960-01-01": "New Year's Day", + "1960-01-02": "The Day After New Year's Day", + "1960-04-15": "Good Friday", + "1960-04-16": "Day After Good Friday", + "1960-04-18": "Easter Monday", + "1960-05-09": "Mother's Day", + "1960-06-01": "Independence Day", + "1960-08-15": "Father's Day", + "1960-10-10": "White Sunday (Lotu a Tamaiti)", + "1960-12-25": "Christmas Day", + "1960-12-26": "Boxing Day", + "1961-01-01": "New Year's Day", + "1961-01-02": "The Day After New Year's Day", + "1961-03-31": "Good Friday", + "1961-04-01": "Day After Good Friday", + "1961-04-03": "Easter Monday", + "1961-05-15": "Mother's Day", + "1961-06-01": "Independence Day", + "1961-08-14": "Father's Day", + "1961-10-09": "White Sunday (Lotu a Tamaiti)", + "1961-12-25": "Christmas Day", + "1961-12-26": "Boxing Day", + "1962-01-01": "New Year's Day", + "1962-01-02": "The Day After New Year's Day", + "1962-04-20": "Good Friday", + "1962-04-21": "Day After Good Friday", + "1962-04-23": "Easter Monday", + "1962-05-14": "Mother's Day", + "1962-06-01": "Independence Day", + "1962-08-13": "Father's Day", + "1962-10-15": "White Sunday (Lotu a Tamaiti)", + "1962-12-25": "Christmas Day", + "1962-12-26": "Boxing Day", + "1963-01-01": "New Year's Day", + "1963-01-02": "The Day After New Year's Day", + "1963-04-12": "Good Friday", + "1963-04-13": "Day After Good Friday", + "1963-04-15": "Easter Monday", + "1963-05-13": "Mother's Day", + "1963-06-01": "Independence Day", + "1963-08-12": "Father's Day", + "1963-10-14": "White Sunday (Lotu a Tamaiti)", + "1963-12-25": "Christmas Day", + "1963-12-26": "Boxing Day", + "1964-01-01": "New Year's Day", + "1964-01-02": "The Day After New Year's Day", + "1964-03-27": "Good Friday", + "1964-03-28": "Day After Good Friday", + "1964-03-30": "Easter Monday", + "1964-05-11": "Mother's Day", + "1964-06-01": "Independence Day", + "1964-08-10": "Father's Day", + "1964-10-12": "White Sunday (Lotu a Tamaiti)", + "1964-12-25": "Christmas Day", + "1964-12-26": "Boxing Day", + "1965-01-01": "New Year's Day", + "1965-01-02": "The Day After New Year's Day", + "1965-04-16": "Good Friday", + "1965-04-17": "Day After Good Friday", + "1965-04-19": "Easter Monday", + "1965-05-10": "Mother's Day", + "1965-06-01": "Independence Day", + "1965-08-09": "Father's Day", + "1965-10-11": "White Sunday (Lotu a Tamaiti)", + "1965-12-25": "Christmas Day", + "1965-12-26": "Boxing Day", + "1966-01-01": "New Year's Day", + "1966-01-02": "The Day After New Year's Day", + "1966-04-08": "Good Friday", + "1966-04-09": "Day After Good Friday", + "1966-04-11": "Easter Monday", + "1966-05-09": "Mother's Day", + "1966-06-01": "Independence Day", + "1966-08-15": "Father's Day", + "1966-10-10": "White Sunday (Lotu a Tamaiti)", + "1966-12-25": "Christmas Day", + "1966-12-26": "Boxing Day", + "1967-01-01": "New Year's Day", + "1967-01-02": "The Day After New Year's Day", + "1967-03-24": "Good Friday", + "1967-03-25": "Day After Good Friday", + "1967-03-27": "Easter Monday", + "1967-05-15": "Mother's Day", + "1967-06-01": "Independence Day", + "1967-08-14": "Father's Day", + "1967-10-09": "White Sunday (Lotu a Tamaiti)", + "1967-12-25": "Christmas Day", + "1967-12-26": "Boxing Day", + "1968-01-01": "New Year's Day", + "1968-01-02": "The Day After New Year's Day", + "1968-04-12": "Good Friday", + "1968-04-13": "Day After Good Friday", + "1968-04-15": "Easter Monday", + "1968-05-13": "Mother's Day", + "1968-06-01": "Independence Day", + "1968-08-12": "Father's Day", + "1968-10-14": "White Sunday (Lotu a Tamaiti)", + "1968-12-25": "Christmas Day", + "1968-12-26": "Boxing Day", + "1969-01-01": "New Year's Day", + "1969-01-02": "The Day After New Year's Day", + "1969-04-04": "Good Friday", + "1969-04-05": "Day After Good Friday", + "1969-04-07": "Easter Monday", + "1969-05-12": "Mother's Day", + "1969-06-01": "Independence Day", + "1969-08-11": "Father's Day", + "1969-10-13": "White Sunday (Lotu a Tamaiti)", + "1969-12-25": "Christmas Day", + "1969-12-26": "Boxing Day", + "1970-01-01": "New Year's Day", + "1970-01-02": "The Day After New Year's Day", + "1970-03-27": "Good Friday", + "1970-03-28": "Day After Good Friday", + "1970-03-30": "Easter Monday", + "1970-05-11": "Mother's Day", + "1970-06-01": "Independence Day", + "1970-08-10": "Father's Day", + "1970-10-12": "White Sunday (Lotu a Tamaiti)", + "1970-12-25": "Christmas Day", + "1970-12-26": "Boxing Day", + "1971-01-01": "New Year's Day", + "1971-01-02": "The Day After New Year's Day", + "1971-04-09": "Good Friday", + "1971-04-10": "Day After Good Friday", + "1971-04-12": "Easter Monday", + "1971-05-10": "Mother's Day", + "1971-06-01": "Independence Day", + "1971-08-09": "Father's Day", + "1971-10-11": "White Sunday (Lotu a Tamaiti)", + "1971-12-25": "Christmas Day", + "1971-12-26": "Boxing Day", + "1972-01-01": "New Year's Day", + "1972-01-02": "The Day After New Year's Day", + "1972-03-31": "Good Friday", + "1972-04-01": "Day After Good Friday", + "1972-04-03": "Easter Monday", + "1972-05-15": "Mother's Day", + "1972-06-01": "Independence Day", + "1972-08-14": "Father's Day", + "1972-10-09": "White Sunday (Lotu a Tamaiti)", + "1972-12-25": "Christmas Day", + "1972-12-26": "Boxing Day", + "1973-01-01": "New Year's Day", + "1973-01-02": "The Day After New Year's Day", + "1973-04-20": "Good Friday", + "1973-04-21": "Day After Good Friday", + "1973-04-23": "Easter Monday", + "1973-05-14": "Mother's Day", + "1973-06-01": "Independence Day", + "1973-08-13": "Father's Day", + "1973-10-15": "White Sunday (Lotu a Tamaiti)", + "1973-12-25": "Christmas Day", + "1973-12-26": "Boxing Day", + "1974-01-01": "New Year's Day", + "1974-01-02": "The Day After New Year's Day", + "1974-04-12": "Good Friday", + "1974-04-13": "Day After Good Friday", + "1974-04-15": "Easter Monday", + "1974-05-13": "Mother's Day", + "1974-06-01": "Independence Day", + "1974-08-12": "Father's Day", + "1974-10-14": "White Sunday (Lotu a Tamaiti)", + "1974-12-25": "Christmas Day", + "1974-12-26": "Boxing Day", + "1975-01-01": "New Year's Day", + "1975-01-02": "The Day After New Year's Day", + "1975-03-28": "Good Friday", + "1975-03-29": "Day After Good Friday", + "1975-03-31": "Easter Monday", + "1975-05-12": "Mother's Day", + "1975-06-01": "Independence Day", + "1975-08-11": "Father's Day", + "1975-10-13": "White Sunday (Lotu a Tamaiti)", + "1975-12-25": "Christmas Day", + "1975-12-26": "Boxing Day", + "1976-01-01": "New Year's Day", + "1976-01-02": "The Day After New Year's Day", + "1976-04-16": "Good Friday", + "1976-04-17": "Day After Good Friday", + "1976-04-19": "Easter Monday", + "1976-05-10": "Mother's Day", + "1976-06-01": "Independence Day", + "1976-08-09": "Father's Day", + "1976-10-11": "White Sunday (Lotu a Tamaiti)", + "1976-12-25": "Christmas Day", + "1976-12-26": "Boxing Day", + "1977-01-01": "New Year's Day", + "1977-01-02": "The Day After New Year's Day", + "1977-04-08": "Good Friday", + "1977-04-09": "Day After Good Friday", + "1977-04-11": "Easter Monday", + "1977-05-09": "Mother's Day", + "1977-06-01": "Independence Day", + "1977-08-15": "Father's Day", + "1977-10-10": "White Sunday (Lotu a Tamaiti)", + "1977-12-25": "Christmas Day", + "1977-12-26": "Boxing Day", + "1978-01-01": "New Year's Day", + "1978-01-02": "The Day After New Year's Day", + "1978-03-24": "Good Friday", + "1978-03-25": "Day After Good Friday", + "1978-03-27": "Easter Monday", + "1978-05-15": "Mother's Day", + "1978-06-01": "Independence Day", + "1978-08-14": "Father's Day", + "1978-10-09": "White Sunday (Lotu a Tamaiti)", + "1978-12-25": "Christmas Day", + "1978-12-26": "Boxing Day", + "1979-01-01": "New Year's Day", + "1979-01-02": "The Day After New Year's Day", + "1979-04-13": "Good Friday", + "1979-04-14": "Day After Good Friday", + "1979-04-16": "Easter Monday", + "1979-05-14": "Mother's Day", + "1979-06-01": "Independence Day", + "1979-08-13": "Father's Day", + "1979-10-15": "White Sunday (Lotu a Tamaiti)", + "1979-12-25": "Christmas Day", + "1979-12-26": "Boxing Day", + "1980-01-01": "New Year's Day", + "1980-01-02": "The Day After New Year's Day", + "1980-04-04": "Good Friday", + "1980-04-05": "Day After Good Friday", + "1980-04-07": "Easter Monday", + "1980-05-12": "Mother's Day", + "1980-06-01": "Independence Day", + "1980-08-11": "Father's Day", + "1980-10-13": "White Sunday (Lotu a Tamaiti)", + "1980-12-25": "Christmas Day", + "1980-12-26": "Boxing Day", + "1981-01-01": "New Year's Day", + "1981-01-02": "The Day After New Year's Day", + "1981-04-17": "Good Friday", + "1981-04-18": "Day After Good Friday", + "1981-04-20": "Easter Monday", + "1981-05-11": "Mother's Day", + "1981-06-01": "Independence Day", + "1981-08-10": "Father's Day", + "1981-10-12": "White Sunday (Lotu a Tamaiti)", + "1981-12-25": "Christmas Day", + "1981-12-26": "Boxing Day", + "1982-01-01": "New Year's Day", + "1982-01-02": "The Day After New Year's Day", + "1982-04-09": "Good Friday", + "1982-04-10": "Day After Good Friday", + "1982-04-12": "Easter Monday", + "1982-05-10": "Mother's Day", + "1982-06-01": "Independence Day", + "1982-08-09": "Father's Day", + "1982-10-11": "White Sunday (Lotu a Tamaiti)", + "1982-12-25": "Christmas Day", + "1982-12-26": "Boxing Day", + "1983-01-01": "New Year's Day", + "1983-01-02": "The Day After New Year's Day", + "1983-04-01": "Good Friday", + "1983-04-02": "Day After Good Friday", + "1983-04-04": "Easter Monday", + "1983-05-09": "Mother's Day", + "1983-06-01": "Independence Day", + "1983-08-15": "Father's Day", + "1983-10-10": "White Sunday (Lotu a Tamaiti)", + "1983-12-25": "Christmas Day", + "1983-12-26": "Boxing Day", + "1984-01-01": "New Year's Day", + "1984-01-02": "The Day After New Year's Day", + "1984-04-20": "Good Friday", + "1984-04-21": "Day After Good Friday", + "1984-04-23": "Easter Monday", + "1984-05-14": "Mother's Day", + "1984-06-01": "Independence Day", + "1984-08-13": "Father's Day", + "1984-10-15": "White Sunday (Lotu a Tamaiti)", + "1984-12-25": "Christmas Day", + "1984-12-26": "Boxing Day", + "1985-01-01": "New Year's Day", + "1985-01-02": "The Day After New Year's Day", + "1985-04-05": "Good Friday", + "1985-04-06": "Day After Good Friday", + "1985-04-08": "Easter Monday", + "1985-05-13": "Mother's Day", + "1985-06-01": "Independence Day", + "1985-08-12": "Father's Day", + "1985-10-14": "White Sunday (Lotu a Tamaiti)", + "1985-12-25": "Christmas Day", + "1985-12-26": "Boxing Day", + "1986-01-01": "New Year's Day", + "1986-01-02": "The Day After New Year's Day", + "1986-03-28": "Good Friday", + "1986-03-29": "Day After Good Friday", + "1986-03-31": "Easter Monday", + "1986-05-12": "Mother's Day", + "1986-06-01": "Independence Day", + "1986-08-11": "Father's Day", + "1986-10-13": "White Sunday (Lotu a Tamaiti)", + "1986-12-25": "Christmas Day", + "1986-12-26": "Boxing Day", + "1987-01-01": "New Year's Day", + "1987-01-02": "The Day After New Year's Day", + "1987-04-17": "Good Friday", + "1987-04-18": "Day After Good Friday", + "1987-04-20": "Easter Monday", + "1987-05-11": "Mother's Day", + "1987-06-01": "Independence Day", + "1987-08-10": "Father's Day", + "1987-10-12": "White Sunday (Lotu a Tamaiti)", + "1987-12-25": "Christmas Day", + "1987-12-26": "Boxing Day", + "1988-01-01": "New Year's Day", + "1988-01-02": "The Day After New Year's Day", + "1988-04-01": "Good Friday", + "1988-04-02": "Day After Good Friday", + "1988-04-04": "Easter Monday", + "1988-05-09": "Mother's Day", + "1988-06-01": "Independence Day", + "1988-08-15": "Father's Day", + "1988-10-10": "White Sunday (Lotu a Tamaiti)", + "1988-12-25": "Christmas Day", + "1988-12-26": "Boxing Day", + "1989-01-01": "New Year's Day", + "1989-01-02": "The Day After New Year's Day", + "1989-03-24": "Good Friday", + "1989-03-25": "Day After Good Friday", + "1989-03-27": "Easter Monday", + "1989-05-15": "Mother's Day", + "1989-06-01": "Independence Day", + "1989-08-14": "Father's Day", + "1989-10-09": "White Sunday (Lotu a Tamaiti)", + "1989-12-25": "Christmas Day", + "1989-12-26": "Boxing Day", + "1990-01-01": "New Year's Day", + "1990-01-02": "The Day After New Year's Day", + "1990-04-13": "Good Friday", + "1990-04-14": "Day After Good Friday", + "1990-04-16": "Easter Monday", + "1990-05-14": "Mother's Day", + "1990-06-01": "Independence Day", + "1990-08-13": "Father's Day", + "1990-10-15": "White Sunday (Lotu a Tamaiti)", + "1990-12-25": "Christmas Day", + "1990-12-26": "Boxing Day", + "1991-01-01": "New Year's Day", + "1991-01-02": "The Day After New Year's Day", + "1991-03-29": "Good Friday", + "1991-03-30": "Day After Good Friday", + "1991-04-01": "Easter Monday", + "1991-05-13": "Mother's Day", + "1991-06-01": "Independence Day", + "1991-08-12": "Father's Day", + "1991-10-14": "White Sunday (Lotu a Tamaiti)", + "1991-12-25": "Christmas Day", + "1991-12-26": "Boxing Day", + "1992-01-01": "New Year's Day", + "1992-01-02": "The Day After New Year's Day", + "1992-04-17": "Good Friday", + "1992-04-18": "Day After Good Friday", + "1992-04-20": "Easter Monday", + "1992-05-11": "Mother's Day", + "1992-06-01": "Independence Day", + "1992-08-10": "Father's Day", + "1992-10-12": "White Sunday (Lotu a Tamaiti)", + "1992-12-25": "Christmas Day", + "1992-12-26": "Boxing Day", + "1993-01-01": "New Year's Day", + "1993-01-02": "The Day After New Year's Day", + "1993-04-09": "Good Friday", + "1993-04-10": "Day After Good Friday", + "1993-04-12": "Easter Monday", + "1993-05-10": "Mother's Day", + "1993-06-01": "Independence Day", + "1993-08-09": "Father's Day", + "1993-10-11": "White Sunday (Lotu a Tamaiti)", + "1993-12-25": "Christmas Day", + "1993-12-26": "Boxing Day", + "1994-01-01": "New Year's Day", + "1994-01-02": "The Day After New Year's Day", + "1994-04-01": "Good Friday", + "1994-04-02": "Day After Good Friday", + "1994-04-04": "Easter Monday", + "1994-05-09": "Mother's Day", + "1994-06-01": "Independence Day", + "1994-08-15": "Father's Day", + "1994-10-10": "White Sunday (Lotu a Tamaiti)", + "1994-12-25": "Christmas Day", + "1994-12-26": "Boxing Day", + "1995-01-01": "New Year's Day", + "1995-01-02": "The Day After New Year's Day", + "1995-04-14": "Good Friday", + "1995-04-15": "Day After Good Friday", + "1995-04-17": "Easter Monday", + "1995-05-15": "Mother's Day", + "1995-06-01": "Independence Day", + "1995-08-14": "Father's Day", + "1995-10-09": "White Sunday (Lotu a Tamaiti)", + "1995-12-25": "Christmas Day", + "1995-12-26": "Boxing Day", + "1996-01-01": "New Year's Day", + "1996-01-02": "The Day After New Year's Day", + "1996-04-05": "Good Friday", + "1996-04-06": "Day After Good Friday", + "1996-04-08": "Easter Monday", + "1996-05-13": "Mother's Day", + "1996-06-01": "Independence Day", + "1996-08-12": "Father's Day", + "1996-10-14": "White Sunday (Lotu a Tamaiti)", + "1996-12-25": "Christmas Day", + "1996-12-26": "Boxing Day", + "1997-01-01": "New Year's Day", + "1997-01-02": "The Day After New Year's Day", + "1997-03-28": "Good Friday", + "1997-03-29": "Day After Good Friday", + "1997-03-31": "Easter Monday", + "1997-05-12": "Mother's Day", + "1997-06-01": "Independence Day", + "1997-08-11": "Father's Day", + "1997-10-13": "White Sunday (Lotu a Tamaiti)", + "1997-12-25": "Christmas Day", + "1997-12-26": "Boxing Day", + "1998-01-01": "New Year's Day", + "1998-01-02": "The Day After New Year's Day", + "1998-04-10": "Good Friday", + "1998-04-11": "Day After Good Friday", + "1998-04-13": "Easter Monday", + "1998-05-11": "Mother's Day", + "1998-06-01": "Independence Day", + "1998-08-10": "Father's Day", + "1998-10-12": "White Sunday (Lotu a Tamaiti)", + "1998-12-25": "Christmas Day", + "1998-12-26": "Boxing Day", + "1999-01-01": "New Year's Day", + "1999-01-02": "The Day After New Year's Day", + "1999-04-02": "Good Friday", + "1999-04-03": "Day After Good Friday", + "1999-04-05": "Easter Monday", + "1999-05-10": "Mother's Day", + "1999-06-01": "Independence Day", + "1999-08-09": "Father's Day", + "1999-10-11": "White Sunday (Lotu a Tamaiti)", + "1999-12-25": "Christmas Day", + "1999-12-26": "Boxing Day", + "2000-01-01": "New Year's Day", + "2000-01-02": "The Day After New Year's Day", + "2000-04-21": "Good Friday", + "2000-04-22": "Day After Good Friday", + "2000-04-24": "Easter Monday", + "2000-05-15": "Mother's Day", + "2000-06-01": "Independence Day", + "2000-08-14": "Father's Day", + "2000-10-09": "White Sunday (Lotu a Tamaiti)", + "2000-12-25": "Christmas Day", + "2000-12-26": "Boxing Day", + "2001-01-01": "New Year's Day", + "2001-01-02": "The Day After New Year's Day", + "2001-04-13": "Good Friday", + "2001-04-14": "Day After Good Friday", + "2001-04-16": "Easter Monday", + "2001-05-14": "Mother's Day", + "2001-06-01": "Independence Day", + "2001-08-13": "Father's Day", + "2001-10-15": "White Sunday (Lotu a Tamaiti)", + "2001-12-25": "Christmas Day", + "2001-12-26": "Boxing Day", + "2002-01-01": "New Year's Day", + "2002-01-02": "The Day After New Year's Day", + "2002-03-29": "Good Friday", + "2002-03-30": "Day After Good Friday", + "2002-04-01": "Easter Monday", + "2002-05-13": "Mother's Day", + "2002-06-01": "Independence Day", + "2002-08-12": "Father's Day", + "2002-10-14": "White Sunday (Lotu a Tamaiti)", + "2002-12-25": "Christmas Day", + "2002-12-26": "Boxing Day", + "2003-01-01": "New Year's Day", + "2003-01-02": "The Day After New Year's Day", + "2003-04-18": "Good Friday", + "2003-04-19": "Day After Good Friday", + "2003-04-21": "Easter Monday", + "2003-05-12": "Mother's Day", + "2003-06-01": "Independence Day", + "2003-08-11": "Father's Day", + "2003-10-13": "White Sunday (Lotu a Tamaiti)", + "2003-12-25": "Christmas Day", + "2003-12-26": "Boxing Day", + "2004-01-01": "New Year's Day", + "2004-01-02": "The Day After New Year's Day", + "2004-04-09": "Good Friday", + "2004-04-10": "Day After Good Friday", + "2004-04-12": "Easter Monday", + "2004-05-10": "Mother's Day", + "2004-06-01": "Independence Day", + "2004-08-09": "Father's Day", + "2004-10-11": "White Sunday (Lotu a Tamaiti)", + "2004-12-25": "Christmas Day", + "2004-12-26": "Boxing Day", + "2005-01-01": "New Year's Day", + "2005-01-02": "The Day After New Year's Day", + "2005-03-25": "Good Friday", + "2005-03-26": "Day After Good Friday", + "2005-03-28": "Easter Monday", + "2005-05-09": "Mother's Day", + "2005-06-01": "Independence Day", + "2005-08-15": "Father's Day", + "2005-10-10": "White Sunday (Lotu a Tamaiti)", + "2005-12-25": "Christmas Day", + "2005-12-26": "Boxing Day", + "2006-01-01": "New Year's Day", + "2006-01-02": "The Day After New Year's Day", + "2006-04-14": "Good Friday", + "2006-04-15": "Day After Good Friday", + "2006-04-17": "Easter Monday", + "2006-05-15": "Mother's Day", + "2006-06-01": "Independence Day", + "2006-08-14": "Father's Day", + "2006-10-09": "White Sunday (Lotu a Tamaiti)", + "2006-12-25": "Christmas Day", + "2006-12-26": "Boxing Day", + "2007-01-01": "New Year's Day", + "2007-01-02": "The Day After New Year's Day", + "2007-04-06": "Good Friday", + "2007-04-07": "Day After Good Friday", + "2007-04-09": "Easter Monday", + "2007-05-14": "Mother's Day", + "2007-06-01": "Independence Day", + "2007-08-13": "Father's Day", + "2007-10-15": "White Sunday (Lotu a Tamaiti)", + "2007-12-25": "Christmas Day", + "2007-12-26": "Boxing Day", + "2008-01-01": "New Year's Day", + "2008-01-02": "The Day After New Year's Day", + "2008-03-21": "Good Friday", + "2008-03-22": "Day After Good Friday", + "2008-03-24": "Easter Monday", + "2008-05-12": "Mother's Day", + "2008-06-01": "Independence Day", + "2008-08-11": "Father's Day", + "2008-10-13": "White Sunday (Lotu a Tamaiti)", + "2008-12-25": "Christmas Day", + "2008-12-26": "Boxing Day", + "2009-01-01": "New Year's Day", + "2009-01-02": "The Day After New Year's Day", + "2009-04-10": "Good Friday", + "2009-04-11": "Day After Good Friday", + "2009-04-13": "Easter Monday", + "2009-05-11": "Mother's Day", + "2009-06-01": "Independence Day", + "2009-08-10": "Father's Day", + "2009-10-12": "White Sunday (Lotu a Tamaiti)", + "2009-12-25": "Christmas Day", + "2009-12-26": "Boxing Day", + "2010-01-01": "New Year's Day", + "2010-01-02": "The Day After New Year's Day", + "2010-04-02": "Good Friday", + "2010-04-03": "Day After Good Friday", + "2010-04-05": "Easter Monday", + "2010-05-10": "Mother's Day", + "2010-06-01": "Independence Day", + "2010-08-09": "Father's Day", + "2010-10-11": "White Sunday (Lotu a Tamaiti)", + "2010-12-25": "Christmas Day", + "2010-12-26": "Boxing Day", + "2011-01-01": "New Year's Day", + "2011-01-02": "The Day After New Year's Day", + "2011-04-22": "Good Friday", + "2011-04-23": "Day After Good Friday", + "2011-04-25": "Easter Monday", + "2011-05-09": "Mother's Day", + "2011-06-01": "Independence Day", + "2011-08-15": "Father's Day", + "2011-10-10": "White Sunday (Lotu a Tamaiti)", + "2011-12-25": "Christmas Day", + "2011-12-26": "Boxing Day", + "2012-01-01": "New Year's Day", + "2012-01-02": "The Day After New Year's Day", + "2012-04-06": "Good Friday", + "2012-04-07": "Day After Good Friday", + "2012-04-09": "Easter Monday", + "2012-05-14": "Mother's Day", + "2012-06-01": "Independence Day", + "2012-08-13": "Father's Day", + "2012-10-15": "White Sunday (Lotu a Tamaiti)", + "2012-12-25": "Christmas Day", + "2012-12-26": "Boxing Day", + "2013-01-01": "New Year's Day", + "2013-01-02": "The Day After New Year's Day", + "2013-03-29": "Good Friday", + "2013-03-30": "Day After Good Friday", + "2013-04-01": "Easter Monday", + "2013-05-13": "Mother's Day", + "2013-06-01": "Independence Day", + "2013-08-12": "Father's Day", + "2013-10-14": "White Sunday (Lotu a Tamaiti)", + "2013-12-25": "Christmas Day", + "2013-12-26": "Boxing Day", + "2014-01-01": "New Year's Day", + "2014-01-02": "The Day After New Year's Day", + "2014-04-18": "Good Friday", + "2014-04-19": "Day After Good Friday", + "2014-04-21": "Easter Monday", + "2014-05-12": "Mother's Day", + "2014-06-01": "Independence Day", + "2014-08-11": "Father's Day", + "2014-10-13": "White Sunday (Lotu a Tamaiti)", + "2014-12-25": "Christmas Day", + "2014-12-26": "Boxing Day", + "2015-01-01": "New Year's Day", + "2015-01-02": "The Day After New Year's Day", + "2015-04-03": "Good Friday", + "2015-04-04": "Day After Good Friday", + "2015-04-06": "Easter Monday", + "2015-05-11": "Mother's Day", + "2015-06-01": "Independence Day", + "2015-08-10": "Father's Day", + "2015-10-12": "White Sunday (Lotu a Tamaiti)", + "2015-12-25": "Christmas Day", + "2015-12-26": "Boxing Day", + "2016-01-01": "New Year's Day", + "2016-01-02": "The Day After New Year's Day", + "2016-03-25": "Good Friday", + "2016-03-26": "Day After Good Friday", + "2016-03-28": "Easter Monday", + "2016-05-09": "Mother's Day", + "2016-06-01": "Independence Day", + "2016-08-15": "Father's Day", + "2016-10-10": "White Sunday (Lotu a Tamaiti)", + "2016-12-25": "Christmas Day", + "2016-12-26": "Boxing Day", + "2017-01-01": "New Year's Day", + "2017-01-02": "The Day After New Year's Day", + "2017-04-14": "Good Friday", + "2017-04-15": "Day After Good Friday", + "2017-04-17": "Easter Monday", + "2017-05-15": "Mother's Day", + "2017-06-01": "Independence Day", + "2017-08-14": "Father's Day", + "2017-10-09": "White Sunday (Lotu a Tamaiti)", + "2017-12-25": "Christmas Day", + "2017-12-26": "Boxing Day", + "2018-01-01": "New Year's Day", + "2018-01-02": "The Day After New Year's Day", + "2018-03-30": "Good Friday", + "2018-03-31": "Day After Good Friday", + "2018-04-02": "Easter Monday", + "2018-05-14": "Mother's Day", + "2018-06-01": "Independence Day", + "2018-08-13": "Father's Day", + "2018-10-15": "White Sunday (Lotu a Tamaiti)", + "2018-12-25": "Christmas Day", + "2018-12-26": "Boxing Day", + "2019-01-01": "New Year's Day", + "2019-01-02": "The Day After New Year's Day", + "2019-04-19": "Good Friday", + "2019-04-20": "Day After Good Friday", + "2019-04-22": "Easter Monday", + "2019-05-13": "Mother's Day", + "2019-06-01": "Independence Day", + "2019-08-12": "Father's Day", + "2019-10-14": "White Sunday (Lotu a Tamaiti)", + "2019-12-25": "Christmas Day", + "2019-12-26": "Boxing Day", + "2020-01-01": "New Year's Day", + "2020-01-02": "The Day After New Year's Day", + "2020-04-10": "Good Friday", + "2020-04-11": "Day After Good Friday", + "2020-04-13": "Easter Monday", + "2020-05-11": "Mother's Day", + "2020-06-01": "Independence Day", + "2020-08-10": "Father's Day", + "2020-10-12": "White Sunday (Lotu a Tamaiti)", + "2020-12-25": "Christmas Day", + "2020-12-26": "Boxing Day", + "2021-01-01": "New Year's Day", + "2021-01-02": "The Day After New Year's Day", + "2021-04-02": "Good Friday", + "2021-04-03": "Day After Good Friday", + "2021-04-05": "Easter Monday", + "2021-05-10": "Mother's Day", + "2021-06-01": "Independence Day", + "2021-08-09": "Father's Day", + "2021-10-11": "White Sunday (Lotu a Tamaiti)", + "2021-12-25": "Christmas Day", + "2021-12-26": "Boxing Day", + "2022-01-01": "New Year's Day", + "2022-01-02": "The Day After New Year's Day", + "2022-04-15": "Good Friday", + "2022-04-16": "Day After Good Friday", + "2022-04-18": "Easter Monday", + "2022-05-09": "Mother's Day", + "2022-06-01": "Independence Day", + "2022-08-15": "Father's Day", + "2022-10-10": "White Sunday (Lotu a Tamaiti)", + "2022-12-25": "Christmas Day", + "2022-12-26": "Boxing Day", + "2023-01-01": "New Year's Day", + "2023-01-02": "The Day After New Year's Day", + "2023-04-07": "Good Friday", + "2023-04-08": "Day After Good Friday", + "2023-04-10": "Easter Monday", + "2023-05-15": "Mother's Day", + "2023-06-01": "Independence Day", + "2023-08-14": "Father's Day", + "2023-10-09": "White Sunday (Lotu a Tamaiti)", + "2023-12-25": "Christmas Day", + "2023-12-26": "Boxing Day", + "2024-01-01": "New Year's Day", + "2024-01-02": "The Day After New Year's Day", + "2024-03-29": "Good Friday", + "2024-03-30": "Day After Good Friday", + "2024-04-01": "Easter Monday", + "2024-05-13": "Mother's Day", + "2024-06-01": "Independence Day", + "2024-08-12": "Father's Day", + "2024-10-14": "White Sunday (Lotu a Tamaiti)", + "2024-12-25": "Christmas Day", + "2024-12-26": "Boxing Day", + "2025-01-01": "New Year's Day", + "2025-01-02": "The Day After New Year's Day", + "2025-04-18": "Good Friday", + "2025-04-19": "Day After Good Friday", + "2025-04-21": "Easter Monday", + "2025-05-12": "Mother's Day", + "2025-06-01": "Independence Day", + "2025-08-11": "Father's Day", + "2025-10-13": "White Sunday (Lotu a Tamaiti)", + "2025-12-25": "Christmas Day", + "2025-12-26": "Boxing Day", + "2026-01-01": "New Year's Day", + "2026-01-02": "The Day After New Year's Day", + "2026-04-03": "Good Friday", + "2026-04-04": "Day After Good Friday", + "2026-04-06": "Easter Monday", + "2026-05-11": "Mother's Day", + "2026-06-01": "Independence Day", + "2026-08-10": "Father's Day", + "2026-10-12": "White Sunday (Lotu a Tamaiti)", + "2026-12-25": "Christmas Day", + "2026-12-26": "Boxing Day", + "2027-01-01": "New Year's Day", + "2027-01-02": "The Day After New Year's Day", + "2027-03-26": "Good Friday", + "2027-03-27": "Day After Good Friday", + "2027-03-29": "Easter Monday", + "2027-05-10": "Mother's Day", + "2027-06-01": "Independence Day", + "2027-08-09": "Father's Day", + "2027-10-11": "White Sunday (Lotu a Tamaiti)", + "2027-12-25": "Christmas Day", + "2027-12-26": "Boxing Day", + "2028-01-01": "New Year's Day", + "2028-01-02": "The Day After New Year's Day", + "2028-04-14": "Good Friday", + "2028-04-15": "Day After Good Friday", + "2028-04-17": "Easter Monday", + "2028-05-15": "Mother's Day", + "2028-06-01": "Independence Day", + "2028-08-14": "Father's Day", + "2028-10-09": "White Sunday (Lotu a Tamaiti)", + "2028-12-25": "Christmas Day", + "2028-12-26": "Boxing Day", + "2029-01-01": "New Year's Day", + "2029-01-02": "The Day After New Year's Day", + "2029-03-30": "Good Friday", + "2029-03-31": "Day After Good Friday", + "2029-04-02": "Easter Monday", + "2029-05-14": "Mother's Day", + "2029-06-01": "Independence Day", + "2029-08-13": "Father's Day", + "2029-10-15": "White Sunday (Lotu a Tamaiti)", + "2029-12-25": "Christmas Day", + "2029-12-26": "Boxing Day", + "2030-01-01": "New Year's Day", + "2030-01-02": "The Day After New Year's Day", + "2030-04-19": "Good Friday", + "2030-04-20": "Day After Good Friday", + "2030-04-22": "Easter Monday", + "2030-05-13": "Mother's Day", + "2030-06-01": "Independence Day", + "2030-08-12": "Father's Day", + "2030-10-14": "White Sunday (Lotu a Tamaiti)", + "2030-12-25": "Christmas Day", + "2030-12-26": "Boxing Day", + "2031-01-01": "New Year's Day", + "2031-01-02": "The Day After New Year's Day", + "2031-04-11": "Good Friday", + "2031-04-12": "Day After Good Friday", + "2031-04-14": "Easter Monday", + "2031-05-12": "Mother's Day", + "2031-06-01": "Independence Day", + "2031-08-11": "Father's Day", + "2031-10-13": "White Sunday (Lotu a Tamaiti)", + "2031-12-25": "Christmas Day", + "2031-12-26": "Boxing Day", + "2032-01-01": "New Year's Day", + "2032-01-02": "The Day After New Year's Day", + "2032-03-26": "Good Friday", + "2032-03-27": "Day After Good Friday", + "2032-03-29": "Easter Monday", + "2032-05-10": "Mother's Day", + "2032-06-01": "Independence Day", + "2032-08-09": "Father's Day", + "2032-10-11": "White Sunday (Lotu a Tamaiti)", + "2032-12-25": "Christmas Day", + "2032-12-26": "Boxing Day", + "2033-01-01": "New Year's Day", + "2033-01-02": "The Day After New Year's Day", + "2033-04-15": "Good Friday", + "2033-04-16": "Day After Good Friday", + "2033-04-18": "Easter Monday", + "2033-05-09": "Mother's Day", + "2033-06-01": "Independence Day", + "2033-08-15": "Father's Day", + "2033-10-10": "White Sunday (Lotu a Tamaiti)", + "2033-12-25": "Christmas Day", + "2033-12-26": "Boxing Day", + "2034-01-01": "New Year's Day", + "2034-01-02": "The Day After New Year's Day", + "2034-04-07": "Good Friday", + "2034-04-08": "Day After Good Friday", + "2034-04-10": "Easter Monday", + "2034-05-15": "Mother's Day", + "2034-06-01": "Independence Day", + "2034-08-14": "Father's Day", + "2034-10-09": "White Sunday (Lotu a Tamaiti)", + "2034-12-25": "Christmas Day", + "2034-12-26": "Boxing Day", + "2035-01-01": "New Year's Day", + "2035-01-02": "The Day After New Year's Day", + "2035-03-23": "Good Friday", + "2035-03-24": "Day After Good Friday", + "2035-03-26": "Easter Monday", + "2035-05-14": "Mother's Day", + "2035-06-01": "Independence Day", + "2035-08-13": "Father's Day", + "2035-10-15": "White Sunday (Lotu a Tamaiti)", + "2035-12-25": "Christmas Day", + "2035-12-26": "Boxing Day", + "2036-01-01": "New Year's Day", + "2036-01-02": "The Day After New Year's Day", + "2036-04-11": "Good Friday", + "2036-04-12": "Day After Good Friday", + "2036-04-14": "Easter Monday", + "2036-05-12": "Mother's Day", + "2036-06-01": "Independence Day", + "2036-08-11": "Father's Day", + "2036-10-13": "White Sunday (Lotu a Tamaiti)", + "2036-12-25": "Christmas Day", + "2036-12-26": "Boxing Day", + "2037-01-01": "New Year's Day", + "2037-01-02": "The Day After New Year's Day", + "2037-04-03": "Good Friday", + "2037-04-04": "Day After Good Friday", + "2037-04-06": "Easter Monday", + "2037-05-11": "Mother's Day", + "2037-06-01": "Independence Day", + "2037-08-10": "Father's Day", + "2037-10-12": "White Sunday (Lotu a Tamaiti)", + "2037-12-25": "Christmas Day", + "2037-12-26": "Boxing Day", + "2038-01-01": "New Year's Day", + "2038-01-02": "The Day After New Year's Day", + "2038-04-23": "Good Friday", + "2038-04-24": "Day After Good Friday", + "2038-04-26": "Easter Monday", + "2038-05-10": "Mother's Day", + "2038-06-01": "Independence Day", + "2038-08-09": "Father's Day", + "2038-10-11": "White Sunday (Lotu a Tamaiti)", + "2038-12-25": "Christmas Day", + "2038-12-26": "Boxing Day", + "2039-01-01": "New Year's Day", + "2039-01-02": "The Day After New Year's Day", + "2039-04-08": "Good Friday", + "2039-04-09": "Day After Good Friday", + "2039-04-11": "Easter Monday", + "2039-05-09": "Mother's Day", + "2039-06-01": "Independence Day", + "2039-08-15": "Father's Day", + "2039-10-10": "White Sunday (Lotu a Tamaiti)", + "2039-12-25": "Christmas Day", + "2039-12-26": "Boxing Day", + "2040-01-01": "New Year's Day", + "2040-01-02": "The Day After New Year's Day", + "2040-03-30": "Good Friday", + "2040-03-31": "Day After Good Friday", + "2040-04-02": "Easter Monday", + "2040-05-14": "Mother's Day", + "2040-06-01": "Independence Day", + "2040-08-13": "Father's Day", + "2040-10-15": "White Sunday (Lotu a Tamaiti)", + "2040-12-25": "Christmas Day", + "2040-12-26": "Boxing Day", + "2041-01-01": "New Year's Day", + "2041-01-02": "The Day After New Year's Day", + "2041-04-19": "Good Friday", + "2041-04-20": "Day After Good Friday", + "2041-04-22": "Easter Monday", + "2041-05-13": "Mother's Day", + "2041-06-01": "Independence Day", + "2041-08-12": "Father's Day", + "2041-10-14": "White Sunday (Lotu a Tamaiti)", + "2041-12-25": "Christmas Day", + "2041-12-26": "Boxing Day", + "2042-01-01": "New Year's Day", + "2042-01-02": "The Day After New Year's Day", + "2042-04-04": "Good Friday", + "2042-04-05": "Day After Good Friday", + "2042-04-07": "Easter Monday", + "2042-05-12": "Mother's Day", + "2042-06-01": "Independence Day", + "2042-08-11": "Father's Day", + "2042-10-13": "White Sunday (Lotu a Tamaiti)", + "2042-12-25": "Christmas Day", + "2042-12-26": "Boxing Day", + "2043-01-01": "New Year's Day", + "2043-01-02": "The Day After New Year's Day", + "2043-03-27": "Good Friday", + "2043-03-28": "Day After Good Friday", + "2043-03-30": "Easter Monday", + "2043-05-11": "Mother's Day", + "2043-06-01": "Independence Day", + "2043-08-10": "Father's Day", + "2043-10-12": "White Sunday (Lotu a Tamaiti)", + "2043-12-25": "Christmas Day", + "2043-12-26": "Boxing Day", + "2044-01-01": "New Year's Day", + "2044-01-02": "The Day After New Year's Day", + "2044-04-15": "Good Friday", + "2044-04-16": "Day After Good Friday", + "2044-04-18": "Easter Monday", + "2044-05-09": "Mother's Day", + "2044-06-01": "Independence Day", + "2044-08-15": "Father's Day", + "2044-10-10": "White Sunday (Lotu a Tamaiti)", + "2044-12-25": "Christmas Day", + "2044-12-26": "Boxing Day", + "2045-01-01": "New Year's Day", + "2045-01-02": "The Day After New Year's Day", + "2045-04-07": "Good Friday", + "2045-04-08": "Day After Good Friday", + "2045-04-10": "Easter Monday", + "2045-05-15": "Mother's Day", + "2045-06-01": "Independence Day", + "2045-08-14": "Father's Day", + "2045-10-09": "White Sunday (Lotu a Tamaiti)", + "2045-12-25": "Christmas Day", + "2045-12-26": "Boxing Day", + "2046-01-01": "New Year's Day", + "2046-01-02": "The Day After New Year's Day", + "2046-03-23": "Good Friday", + "2046-03-24": "Day After Good Friday", + "2046-03-26": "Easter Monday", + "2046-05-14": "Mother's Day", + "2046-06-01": "Independence Day", + "2046-08-13": "Father's Day", + "2046-10-15": "White Sunday (Lotu a Tamaiti)", + "2046-12-25": "Christmas Day", + "2046-12-26": "Boxing Day", + "2047-01-01": "New Year's Day", + "2047-01-02": "The Day After New Year's Day", + "2047-04-12": "Good Friday", + "2047-04-13": "Day After Good Friday", + "2047-04-15": "Easter Monday", + "2047-05-13": "Mother's Day", + "2047-06-01": "Independence Day", + "2047-08-12": "Father's Day", + "2047-10-14": "White Sunday (Lotu a Tamaiti)", + "2047-12-25": "Christmas Day", + "2047-12-26": "Boxing Day", + "2048-01-01": "New Year's Day", + "2048-01-02": "The Day After New Year's Day", + "2048-04-03": "Good Friday", + "2048-04-04": "Day After Good Friday", + "2048-04-06": "Easter Monday", + "2048-05-11": "Mother's Day", + "2048-06-01": "Independence Day", + "2048-08-10": "Father's Day", + "2048-10-12": "White Sunday (Lotu a Tamaiti)", + "2048-12-25": "Christmas Day", + "2048-12-26": "Boxing Day", + "2049-01-01": "New Year's Day", + "2049-01-02": "The Day After New Year's Day", + "2049-04-16": "Good Friday", + "2049-04-17": "Day After Good Friday", + "2049-04-19": "Easter Monday", + "2049-05-10": "Mother's Day", + "2049-06-01": "Independence Day", + "2049-08-09": "Father's Day", + "2049-10-11": "White Sunday (Lotu a Tamaiti)", + "2049-12-25": "Christmas Day", + "2049-12-26": "Boxing Day", + "2050-01-01": "New Year's Day", + "2050-01-02": "The Day After New Year's Day", + "2050-04-08": "Good Friday", + "2050-04-09": "Day After Good Friday", + "2050-04-11": "Easter Monday", + "2050-05-09": "Mother's Day", + "2050-06-01": "Independence Day", + "2050-08-15": "Father's Day", + "2050-10-10": "White Sunday (Lotu a Tamaiti)", + "2050-12-25": "Christmas Day", + "2050-12-26": "Boxing Day" +} diff --git a/tests/countries/test_samoa.py b/tests/countries/test_samoa.py new file mode 100644 index 000000000..a99096120 --- /dev/null +++ b/tests/countries/test_samoa.py @@ -0,0 +1,74 @@ +# 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 AUTHORS file) +# dr-prodigy (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/python-holidays +# License: MIT (see LICENSE file) + +from unittest import TestCase + +from holidays.countries.samoa import Samoa, WS, WSM +from tests.common import CommonCountryTests + + +class TestSamoa(CommonCountryTests, TestCase): + @classmethod + def setUpClass(cls): + super().setUpClass(Samoa, years=range(1950, 2050)) + + def test_country_aliases(self): + self.assertAliases(Samoa, WS, WSM) + + def test_new_years_day(self): + self.assertHolidayName("New Year's Day", (f"{year}-01-01" for year in range(1950, 2050))) + + def test_new_years_second_day(self): + self.assertHolidayName( + "The Day After New Year's Day", (f"{year}-01-02" for year in range(1950, 2050)) + ) + + def test_independence_day(self): + self.assertHolidayName("Independence Day", (f"{year}-06-01" for year in range(1950, 2050))) + + def test_christmas_day(self): + self.assertHolidayName("Christmas Day", (f"{year}-12-25" for year in range(1950, 2050))) + + def test_boxing_day(self): + self.assertHolidayName("Boxing Day", (f"{year}-12-26" for year in range(1950, 2050))) + + def test_2023(self): + self.assertHolidays( + Samoa(years=2023), + ("2023-01-01", "New Year's Day"), + ("2023-01-02", "The Day After New Year's Day"), + ("2023-04-07", "Good Friday"), + ("2023-04-08", "Day After Good Friday"), + ("2023-04-10", "Easter Monday"), + ("2023-05-15", "Mother's Day"), + ("2023-06-01", "Independence Day"), + ("2023-08-14", "Father's Day"), + ("2023-10-09", "White Sunday (Lotu a Tamaiti)"), + ("2023-12-25", "Christmas Day"), + ("2023-12-26", "Boxing Day"), + ) + + def test_2024(self): + self.assertHolidays( + Samoa(years=2024), + ("2024-01-01", "New Year's Day"), + ("2024-01-02", "The Day After New Year's Day"), + ("2024-03-29", "Good Friday"), + ("2024-03-30", "Day After Good Friday"), + ("2024-04-01", "Easter Monday"), + ("2024-05-13", "Mother's Day"), + ("2024-06-01", "Independence Day"), + ("2024-08-12", "Father's Day"), + ("2024-10-14", "White Sunday (Lotu a Tamaiti)"), + ("2024-12-25", "Christmas Day"), + ("2024-12-26", "Boxing Day"), + ) From 0d0e65ace703f9338cfecd09aedced7635b0996f Mon Sep 17 00:00:00 2001 From: arkid15r <2201626+arkid15r@users.noreply.github.com> Date: Fri, 16 Aug 2024 00:53:53 +0000 Subject: [PATCH 15/22] chore: Update pre-commit hooks --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f7eca7e67..79764e3a0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ repos: - rst - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.7 + rev: v0.6.0 hooks: - id: ruff - id: ruff-format From 1cb3e02178a2024f42fa1d04b332a5366f715bb5 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Fri, 16 Aug 2024 21:30:28 +0300 Subject: [PATCH 16/22] Update UA: move martial law holidays to WORKDAY category (#1921) --- README.rst | 2 +- holidays/countries/ukraine.py | 91 +++--- holidays/locale/ar/LC_MESSAGES/UA.po | 45 +-- holidays/locale/en_US/LC_MESSAGES/UA.po | 44 +-- holidays/locale/pot/UA.pot | 26 +- holidays/locale/uk/LC_MESSAGES/UA.po | 42 +-- snapshots/countries/UA_COMMON.json | 410 +++++++++++++++++++++--- tests/countries/test_ukraine.py | 91 ++++-- 8 files changed, 574 insertions(+), 177 deletions(-) diff --git a/README.rst b/README.rst index 8741355b4..1b0b71878 100644 --- a/README.rst +++ b/README.rst @@ -864,7 +864,7 @@ All other default values are highlighted with bold: - UA - - ar, en_US, **uk** - - + - WORKDAY * - United Arab Emirates - AE - diff --git a/holidays/countries/ukraine.py b/holidays/countries/ukraine.py index 0fa060995..b941aaed8 100644 --- a/holidays/countries/ukraine.py +++ b/holidays/countries/ukraine.py @@ -13,22 +13,10 @@ from datetime import date from gettext import gettext as tr -from holidays.calendars.gregorian import ( - GREGORIAN_CALENDAR, - JAN, - FEB, - MAR, - APR, - MAY, - JUN, - JUL, - AUG, - SEP, - OCT, - NOV, - DEC, -) +from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC from holidays.calendars.julian import JULIAN_CALENDAR +from holidays.calendars.julian_revised import JULIAN_REVISED_CALENDAR +from holidays.constants import PUBLIC, WORKDAY from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY @@ -45,10 +33,11 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta default_language = "uk" # %s (observed). observed_label = tr("%s (вихідний)") + supported_categories = (PUBLIC, WORKDAY) supported_languages = ("ar", "en_US", "uk") def __init__(self, *args, **kwargs): - ChristianHolidays.__init__(self, JULIAN_CALENDAR) + ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR) InternationalHolidays.__init__(self) StaticHolidays.__init__(self, UkraineStaticHolidays) kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY) @@ -63,33 +52,28 @@ def _is_observed(self, dt: date) -> bool: # https://zakon.rada.gov.ua/laws/show/576-14 return date(1995, JAN, 27) <= dt <= date(1998, JAN, 9) or dt >= date(1999, APR, 23) - def _populate_public_holidays(self): + def _populate_common(self, is_martial_law: bool = False): # The current set of holidays came into force in 1991 if self._year <= 1990: return None - # There is no holidays in Ukraine during the period of martial law + # There is no public holidays in Ukraine during the period of martial law # https://zakon.rada.gov.ua/laws/show/2136-20#n26 # law is in force from March 15, 2022 - if self._year >= 2023: - return None - dts_observed = set() - # New Year's Day. - dts_observed.add(self._add_new_years_day(tr("Новий рік"))) + if (self._year >= 2023) == is_martial_law: + # New Year's Day. + dts_observed.add(self._add_new_years_day(tr("Новий рік"))) - dts_observed.add( - # Christmas Day (Julian calendar). - self._add_christmas_day(tr("Різдво Христове (за юліанським календарем)")) - ) + if self._year <= 2023: + # Christmas Day. + dts_observed.add(self._add_christmas_day(tr("Різдво Христове"), JULIAN_CALENDAR)) - # International Women's Day. - dts_observed.add(self._add_womens_day(tr("Міжнародний жіночий день"))) + # International Women's Day. + dts_observed.add(self._add_womens_day(tr("Міжнародний жіночий день"))) - # There is no holidays from March 15, 2022 - # https://zakon.rada.gov.ua/laws/show/2136-20#n26 - if self._year <= 2021: + if (self._year >= 2022) == is_martial_law: if self._year >= 1992: # Easter Sunday (Pascha). dts_observed.add(self._add_easter_sunday(tr("Великдень (Пасха)"))) @@ -109,18 +93,34 @@ def _populate_public_holidays(self): dts_observed.add(self._add_labor_day_two(name)) name = ( + # Day of Remembrance and Victory over Nazism in World War II 1939-1945. + tr("День памʼяті та перемоги над нацизмом у Другій світовій війні 1939-1945 років") + if self._year >= 2024 # Day of Victory over Nazism in World War II (Victory Day). - tr("День перемоги над нацизмом у Другій світовій війні (День перемоги)") + else tr("День перемоги над нацизмом у Другій світовій війні (День перемоги)") if self._year >= 2016 # Victory Day. else tr("День перемоги") ) - dts_observed.add(self._add_world_war_two_victory_day(name)) + dts_observed.add( + self._add_holiday_may_8(name) + if self._year >= 2024 + else self._add_world_war_two_victory_day(name) + ) if self._year >= 1997: # Day of the Constitution of Ukraine. dts_observed.add(self._add_holiday_jun_28(tr("День Конституції України"))) + if self._year >= 2022: + # Ukrainian Statehood Day. + name = tr("День Української Державності") + dts_observed.add( + self._add_holiday_jul_15(name) + if self._year >= 2024 + else self._add_holiday_jul_28(name) + ) + # Independence Day. name = tr("День незалежності України") if self._year >= 1992: @@ -136,7 +136,11 @@ def _populate_public_holidays(self): # Defender of Ukraine Day. else tr("День захисника України") ) - dts_observed.add(self._add_holiday_oct_14(name)) + dts_observed.add( + self._add_holiday_oct_1(name) + if self._year >= 2023 + else self._add_holiday_oct_14(name) + ) if self._year <= 1999: # Anniversary of the Great October Socialist Revolution. @@ -145,17 +149,18 @@ def _populate_public_holidays(self): dts_observed.add(self._add_holiday_nov_8(name)) if self._year >= 2017: - dts_observed.add( - self._add_christmas_day( - # Christmas Day (Gregorian calendar). - tr("Різдво Христове (за григоріанським календарем)"), - GREGORIAN_CALENDAR, - ) - ) + # Christmas Day. + dts_observed.add(self._add_christmas_day(tr("Різдво Христове"))) - if self.observed: + if self.observed and not is_martial_law: self._populate_observed(dts_observed) + def _populate_public_holidays(self): + self._populate_common() + + def _populate_workday_holidays(self): + self._populate_common(is_martial_law=True) + class UA(Ukraine): pass diff --git a/holidays/locale/ar/LC_MESSAGES/UA.po b/holidays/locale/ar/LC_MESSAGES/UA.po index 1eed59c8a..a2147d5d4 100644 --- a/holidays/locale/ar/LC_MESSAGES/UA.po +++ b/holidays/locale/ar/LC_MESSAGES/UA.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Holidays 0.37\n" +"Project-Id-Version: Python Holidays 0.55\n" "POT-Creation-Date: 2023-07-08 19:40+0300\n" -"PO-Revision-Date: 2023-11-10 15:35+0200\n" +"PO-Revision-Date: 2024-08-15 21:24+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Python Holidays localization team\n" "Language: ar\n" @@ -25,16 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "Generated-By: Lingua 4.15.0\n" -"X-Generator: Poedit 3.2.2\n" - -#. Date format (see strftime() Format Codes) -msgid "%d.%m.%Y" -msgstr "%d/%m/%Y" - -#. Day off (substituted from %s). -#, c-format -msgid "Вихідний день (перенесено з %s)" -msgstr "يوم عطلة (استبدل من %s)" +"X-Generator: Poedit 3.4.2\n" #. %s (observed). #, c-format @@ -45,10 +36,6 @@ msgstr "(يوم عطلة) %s" msgid "Новий рік" msgstr "السنة الجديدة" -#. Christmas Day (Julian calendar). -msgid "Різдво Христове (за юліанським календарем)" -msgstr "عيد الميلاد (حسب التقويم اليولياني)" - #. International Women's Day. msgid "Міжнародний жіночий день" msgstr "اليوم العالمي للمرأة" @@ -69,6 +56,13 @@ msgstr "عيد العمال" msgid "День міжнародної солідарності трудящих" msgstr "يوم التضامن العمالي العالمي" +#. Day of Remembrance and Victory over Nazism in World War II 1939-1945. +msgid "" +"День памʼяті та перемоги над нацизмом у Другій світовій війні 1939-1945 " +"років" +msgstr "" +"يوم إحياء الذكرى والانتصار على النازية في الحرب العالمية الثانية 1939-1945" + #. Day of Victory over Nazism in World War II (Victory Day). msgid "День перемоги над нацизмом у Другій світовій війні (День перемоги)" msgstr "يوم النصر على النازية في الحرب العالمية الثانية (يوم النصر)" @@ -81,6 +75,10 @@ msgstr "يوم النصر" msgid "День Конституції України" msgstr "يوم الدستور في أوكرانيا" +#. Ukrainian Statehood Day. +msgid "День Української Державності" +msgstr "يوم الدولة الأوكرانية" + #. Independence Day. msgid "День незалежності України" msgstr "عيد استقلال أوكرانيا" @@ -97,9 +95,18 @@ msgstr "يوم المدافع عن أوكرانيا" msgid "Річниця Великої Жовтневої соціалістичної революції" msgstr "ذكرى ثورة أكتوبر الاشتراكية العظمى" -#. Christmas Day (Gregorian calendar). -msgid "Різдво Христове (за григоріанським календарем)" -msgstr "عيد الميلاد (حسب التقويم الغريغوري)" +#. Christmas Day. +msgid "Різдво Христове" +msgstr "عيد الميلاد" + +#. Date format (see strftime() Format Codes) +msgid "%d.%m.%Y" +msgstr "%d/%m/%Y" + +#. Day off (substituted from %s). +#, c-format +msgid "Вихідний день (перенесено з %s)" +msgstr "يوم عطلة (استبدل من %s)" #. Presidential decree holiday. msgid "Вихідний згідно указу Президента" diff --git a/holidays/locale/en_US/LC_MESSAGES/UA.po b/holidays/locale/en_US/LC_MESSAGES/UA.po index 23bc94638..d23200b9f 100644 --- a/holidays/locale/en_US/LC_MESSAGES/UA.po +++ b/holidays/locale/en_US/LC_MESSAGES/UA.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Holidays 0.37\n" +"Project-Id-Version: Python Holidays 0.55\n" "POT-Creation-Date: 2023-07-08 19:40+0300\n" -"PO-Revision-Date: 2024-01-05 13:04+0200\n" +"PO-Revision-Date: 2024-08-15 21:23+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Python Holidays localization team\n" "Language: en_US\n" @@ -25,18 +25,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 3.4\n" +"X-Generator: Poedit 3.4.2\n" "X-Poedit-SourceCharset: UTF-8\n" -#. Date format (see strftime() Format Codes) -msgid "%d.%m.%Y" -msgstr "%m/%d/%Y" - -#. Day off (substituted from %s). -#, c-format -msgid "Вихідний день (перенесено з %s)" -msgstr "Day off (substituted from %s)" - #. %s (observed). #, c-format msgid "%s (вихідний)" @@ -46,10 +37,6 @@ msgstr "%s (observed)" msgid "Новий рік" msgstr "New Year's Day" -#. Christmas Day (Julian calendar). -msgid "Різдво Христове (за юліанським календарем)" -msgstr "Christmas Day (Julian calendar)" - #. International Women's Day. msgid "Міжнародний жіночий день" msgstr "International Women's Day" @@ -70,6 +57,12 @@ msgstr "Labor Day" msgid "День міжнародної солідарності трудящих" msgstr "International Workers' Solidarity Day" +#. Day of Remembrance and Victory over Nazism in World War II 1939-1945. +msgid "" +"День памʼяті та перемоги над нацизмом у Другій світовій війні 1939-1945 " +"років" +msgstr "Day of Remembrance and Victory over Nazism in World War II 1939-1945" + #. Day of Victory over Nazism in World War II (Victory Day). msgid "День перемоги над нацизмом у Другій світовій війні (День перемоги)" msgstr "Day of Victory over Nazism in World War II (Victory Day)" @@ -82,6 +75,10 @@ msgstr "Victory Day" msgid "День Конституції України" msgstr "Day of the Constitution of Ukraine" +#. Ukrainian Statehood Day. +msgid "День Української Державності" +msgstr "Ukrainian Statehood Day" + #. Independence Day. msgid "День незалежності України" msgstr "Independence Day" @@ -98,9 +95,18 @@ msgstr "Defender of Ukraine Day" msgid "Річниця Великої Жовтневої соціалістичної революції" msgstr "Anniversary of the Great October Socialist Revolution" -#. Christmas Day (Gregorian calendar). -msgid "Різдво Христове (за григоріанським календарем)" -msgstr "Christmas Day (Gregorian calendar)" +#. Christmas Day. +msgid "Різдво Христове" +msgstr "Christmas Day" + +#. Date format (see strftime() Format Codes) +msgid "%d.%m.%Y" +msgstr "%m/%d/%Y" + +#. Day off (substituted from %s). +#, c-format +msgid "Вихідний день (перенесено з %s)" +msgstr "Day off (substituted from %s)" #. Presidential decree holiday. msgid "Вихідний згідно указу Президента" diff --git a/holidays/locale/pot/UA.pot b/holidays/locale/pot/UA.pot index fa26c463a..d89a1d0f1 100644 --- a/holidays/locale/pot/UA.pot +++ b/holidays/locale/pot/UA.pot @@ -4,16 +4,16 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Python Holidays 0.42\n" -"POT-Creation-Date: 2024-01-23 21:10+0200\n" -"PO-Revision-Date: 2024-01-23 21:10+0200\n" +"Project-Id-Version: Python Holidays 0.55\n" +"POT-Creation-Date: 2024-08-15 21:21+0300\n" +"PO-Revision-Date: 2024-08-15 21:21+0300\n" "Last-Translator: FULL NAME \n" "Language-Team: Python Holidays Localization Team\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Lingua 4.15.0\n" +"Generated-By: Lingva 5.0.3\n" #. %s (observed). #, c-format @@ -24,8 +24,8 @@ msgstr "" msgid "Новий рік" msgstr "" -#. Christmas Day (Julian calendar). -msgid "Різдво Христове (за юліанським календарем)" +#. Christmas Day. +msgid "Різдво Христове" msgstr "" #. International Women's Day. @@ -48,6 +48,12 @@ msgstr "" msgid "День міжнародної солідарності трудящих" msgstr "" +#. Day of Remembrance and Victory over Nazism in World War II 1939-1945. +msgid "" +"День памʼяті та перемоги над нацизмом у Другій світовій війні 1939-1945 " +"років" +msgstr "" + #. Day of Victory over Nazism in World War II (Victory Day). msgid "День перемоги над нацизмом у Другій світовій війні (День перемоги)" msgstr "" @@ -60,6 +66,10 @@ msgstr "" msgid "День Конституції України" msgstr "" +#. Ukrainian Statehood Day. +msgid "День Української Державності" +msgstr "" + #. Independence Day. msgid "День незалежності України" msgstr "" @@ -76,10 +86,6 @@ msgstr "" msgid "Річниця Великої Жовтневої соціалістичної революції" msgstr "" -#. Christmas Day (Gregorian calendar). -msgid "Різдво Христове (за григоріанським календарем)" -msgstr "" - #. Date format (see strftime() Format Codes) msgid "%d.%m.%Y" msgstr "" diff --git a/holidays/locale/uk/LC_MESSAGES/UA.po b/holidays/locale/uk/LC_MESSAGES/UA.po index e736159d5..ec1298e63 100644 --- a/holidays/locale/uk/LC_MESSAGES/UA.po +++ b/holidays/locale/uk/LC_MESSAGES/UA.po @@ -14,9 +14,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Python Holidays 0.37\n" +"Project-Id-Version: Python Holidays 0.55\n" "POT-Creation-Date: 2023-07-08 19:40+0300\n" -"PO-Revision-Date: 2023-11-10 15:35+0200\n" +"PO-Revision-Date: 2024-08-15 21:23+0300\n" "Last-Translator: ~Jhellico \n" "Language-Team: Python Holidays localization team\n" "Language: uk\n" @@ -25,16 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "Generated-By: Lingua 4.15.0\n" -"X-Generator: Poedit 3.2.2\n" - -#. Date format (see strftime() Format Codes) -msgid "%d.%m.%Y" -msgstr "" - -#. Day off (substituted from %s). -#, c-format -msgid "Вихідний день (перенесено з %s)" -msgstr "" +"X-Generator: Poedit 3.4.2\n" #. %s (observed). #, c-format @@ -45,10 +36,6 @@ msgstr "" msgid "Новий рік" msgstr "" -#. Christmas Day (Julian calendar). -msgid "Різдво Христове (за юліанським календарем)" -msgstr "" - #. International Women's Day. msgid "Міжнародний жіночий день" msgstr "" @@ -69,6 +56,12 @@ msgstr "" msgid "День міжнародної солідарності трудящих" msgstr "" +#. Day of Remembrance and Victory over Nazism in World War II 1939-1945. +msgid "" +"День памʼяті та перемоги над нацизмом у Другій світовій війні 1939-1945 " +"років" +msgstr "" + #. Day of Victory over Nazism in World War II (Victory Day). msgid "День перемоги над нацизмом у Другій світовій війні (День перемоги)" msgstr "" @@ -81,6 +74,10 @@ msgstr "" msgid "День Конституції України" msgstr "" +#. Ukrainian Statehood Day. +msgid "День Української Державності" +msgstr "" + #. Independence Day. msgid "День незалежності України" msgstr "" @@ -97,8 +94,17 @@ msgstr "" msgid "Річниця Великої Жовтневої соціалістичної революції" msgstr "" -#. Christmas Day (Gregorian calendar). -msgid "Різдво Христове (за григоріанським календарем)" +#. Christmas Day. +msgid "Різдво Христове" +msgstr "" + +#. Date format (see strftime() Format Codes) +msgid "%d.%m.%Y" +msgstr "" + +#. Day off (substituted from %s). +#, c-format +msgid "Вихідний день (перенесено з %s)" msgstr "" #. Presidential decree holiday. diff --git a/snapshots/countries/UA_COMMON.json b/snapshots/countries/UA_COMMON.json index 336f8f683..84d3aa8d9 100644 --- a/snapshots/countries/UA_COMMON.json +++ b/snapshots/countries/UA_COMMON.json @@ -1,6 +1,6 @@ { "1991-01-01": "New Year's Day", - "1991-01-07": "Christmas Day (Julian calendar)", + "1991-01-07": "Christmas Day", "1991-03-08": "International Women's Day", "1991-05-01": "International Workers' Solidarity Day", "1991-05-02": "International Workers' Solidarity Day", @@ -11,7 +11,7 @@ "1991-11-08": "Anniversary of the Great October Socialist Revolution", "1992-01-01": "New Year's Day", "1992-01-06": "Day off (substituted from 01/04/1992)", - "1992-01-07": "Christmas Day (Julian calendar)", + "1992-01-07": "Christmas Day", "1992-03-08": "International Women's Day", "1992-04-26": "Easter Sunday (Pascha)", "1992-04-27": "Day off (substituted from 05/16/1992)", @@ -23,7 +23,7 @@ "1992-11-07": "Anniversary of the Great October Socialist Revolution", "1992-11-08": "Anniversary of the Great October Socialist Revolution", "1993-01-01": "New Year's Day", - "1993-01-07": "Christmas Day (Julian calendar)", + "1993-01-07": "Christmas Day", "1993-01-08": "Day off (substituted from 01/10/1993)", "1993-03-08": "International Women's Day", "1993-04-18": "Easter Sunday (Pascha)", @@ -36,7 +36,7 @@ "1993-11-07": "Anniversary of the Great October Socialist Revolution", "1993-11-08": "Anniversary of the Great October Socialist Revolution", "1994-01-01": "New Year's Day", - "1994-01-07": "Christmas Day (Julian calendar)", + "1994-01-07": "Christmas Day", "1994-03-07": "Day off (substituted from 03/05/1994)", "1994-03-08": "International Women's Day", "1994-05-01": "Easter Sunday (Pascha); International Workers' Solidarity Day", @@ -47,7 +47,7 @@ "1994-11-07": "Anniversary of the Great October Socialist Revolution", "1994-11-08": "Anniversary of the Great October Socialist Revolution", "1995-01-01": "New Year's Day", - "1995-01-07": "Christmas Day (Julian calendar)", + "1995-01-07": "Christmas Day", "1995-01-09": "Presidential decree holiday", "1995-03-08": "International Women's Day", "1995-04-23": "Easter Sunday (Pascha)", @@ -64,8 +64,8 @@ "1995-11-07": "Anniversary of the Great October Socialist Revolution", "1995-11-08": "Anniversary of the Great October Socialist Revolution", "1996-01-01": "New Year's Day", - "1996-01-07": "Christmas Day (Julian calendar)", - "1996-01-08": "Christmas Day (Julian calendar) (observed)", + "1996-01-07": "Christmas Day", + "1996-01-08": "Christmas Day (observed)", "1996-03-08": "International Women's Day", "1996-04-14": "Easter Sunday (Pascha)", "1996-04-15": "Easter Sunday (Pascha) (observed)", @@ -83,7 +83,7 @@ "1997-01-01": "New Year's Day", "1997-01-02": "Day off (substituted from 12/28/1996)", "1997-01-06": "Day off (substituted from 01/04/1997)", - "1997-01-07": "Christmas Day (Julian calendar)", + "1997-01-07": "Christmas Day", "1997-03-08": "International Women's Day", "1997-03-10": "International Women's Day (observed)", "1997-04-27": "Easter Sunday (Pascha)", @@ -103,7 +103,7 @@ "1997-11-08": "Anniversary of the Great October Socialist Revolution", "1997-11-10": "Anniversary of the Great October Socialist Revolution (observed)", "1998-01-01": "New Year's Day", - "1998-01-07": "Christmas Day (Julian calendar)", + "1998-01-07": "Christmas Day", "1998-03-08": "International Women's Day", "1998-04-19": "Easter Sunday (Pascha)", "1998-05-01": "International Workers' Solidarity Day", @@ -115,7 +115,7 @@ "1998-11-07": "Anniversary of the Great October Socialist Revolution", "1998-11-08": "Anniversary of the Great October Socialist Revolution", "1999-01-01": "New Year's Day", - "1999-01-07": "Christmas Day (Julian calendar)", + "1999-01-07": "Christmas Day", "1999-01-08": "Day off (substituted from 01/10/1999)", "1999-03-08": "International Women's Day", "1999-04-11": "Easter Sunday (Pascha)", @@ -136,7 +136,7 @@ "1999-11-09": "Anniversary of the Great October Socialist Revolution (observed)", "2000-01-01": "New Year's Day", "2000-01-03": "New Year's Day (observed)", - "2000-01-07": "Christmas Day (Julian calendar)", + "2000-01-07": "Christmas Day", "2000-03-08": "International Women's Day", "2000-04-30": "Easter Sunday (Pascha)", "2000-05-01": "International Workers' Solidarity Day", @@ -150,8 +150,8 @@ "2000-08-24": "Independence Day", "2000-08-25": "Day off (substituted from 08/27/2000)", "2001-01-01": "New Year's Day", - "2001-01-07": "Christmas Day (Julian calendar)", - "2001-01-08": "Christmas Day (Julian calendar) (observed)", + "2001-01-07": "Christmas Day", + "2001-01-08": "Christmas Day (observed)", "2001-03-08": "International Women's Day", "2001-03-09": "Day off (substituted from 03/11/2001)", "2001-04-15": "Easter Sunday (Pascha)", @@ -169,7 +169,7 @@ "2001-08-24": "Independence Day", "2001-12-31": "Day off (substituted from 12/29/2001)", "2002-01-01": "New Year's Day", - "2002-01-07": "Christmas Day (Julian calendar)", + "2002-01-07": "Christmas Day", "2002-03-08": "International Women's Day", "2002-05-01": "International Workers' Solidarity Day", "2002-05-02": "International Workers' Solidarity Day", @@ -186,7 +186,7 @@ "2002-12-31": "Day off (substituted from 12/29/2002)", "2003-01-01": "New Year's Day", "2003-01-06": "Day off (substituted from 01/04/2003)", - "2003-01-07": "Christmas Day (Julian calendar)", + "2003-01-07": "Christmas Day", "2003-03-08": "International Women's Day", "2003-03-10": "International Women's Day (observed)", "2003-04-27": "Easter Sunday (Pascha)", @@ -204,7 +204,7 @@ "2004-01-02": "Day off (substituted from 01/10/2004)", "2004-01-05": "Day off (substituted from 01/17/2004)", "2004-01-06": "Day off (substituted from 01/31/2004)", - "2004-01-07": "Christmas Day (Julian calendar)", + "2004-01-07": "Christmas Day", "2004-03-08": "International Women's Day", "2004-04-11": "Easter Sunday (Pascha)", "2004-04-12": "Easter Sunday (Pascha) (observed)", @@ -221,7 +221,7 @@ "2004-08-24": "Independence Day", "2005-01-01": "New Year's Day", "2005-01-03": "New Year's Day (observed)", - "2005-01-07": "Christmas Day (Julian calendar)", + "2005-01-07": "Christmas Day", "2005-03-07": "Day off (substituted from 03/05/2005)", "2005-03-08": "International Women's Day", "2005-05-01": "Easter Sunday (Pascha); International Workers' Solidarity Day", @@ -240,8 +240,8 @@ "2006-01-04": "Day off (substituted from 02/04/2006)", "2006-01-05": "Day off (substituted from 02/18/2006)", "2006-01-06": "Day off (substituted from 03/11/2006)", - "2006-01-07": "Christmas Day (Julian calendar)", - "2006-01-09": "Christmas Day (Julian calendar) (observed)", + "2006-01-07": "Christmas Day", + "2006-01-09": "Christmas Day (observed)", "2006-03-08": "International Women's Day", "2006-04-23": "Easter Sunday (Pascha)", "2006-04-24": "Easter Sunday (Pascha) (observed)", @@ -259,8 +259,8 @@ "2007-01-03": "Day off (substituted from 01/27/2007)", "2007-01-04": "Day off (substituted from 02/10/2007)", "2007-01-05": "Day off (substituted from 02/24/2007)", - "2007-01-07": "Christmas Day (Julian calendar)", - "2007-01-08": "Christmas Day (Julian calendar) (observed)", + "2007-01-07": "Christmas Day", + "2007-01-08": "Christmas Day (observed)", "2007-03-08": "International Women's Day", "2007-03-09": "Day off (substituted from 03/03/2007)", "2007-04-08": "Easter Sunday (Pascha)", @@ -279,7 +279,7 @@ "2008-01-02": "Day off (substituted from 01/12/2008)", "2008-01-03": "Day off (substituted from 01/26/2008)", "2008-01-04": "Day off (substituted from 02/09/2008)", - "2008-01-07": "Christmas Day (Julian calendar)", + "2008-01-07": "Christmas Day", "2008-03-08": "International Women's Day", "2008-03-10": "International Women's Day (observed)", "2008-04-27": "Easter Sunday (Pascha)", @@ -299,7 +299,7 @@ "2009-01-02": "Day off (substituted from 01/10/2009)", "2009-01-05": "Day off (substituted from 01/24/2009)", "2009-01-06": "Day off (substituted from 02/07/2009)", - "2009-01-07": "Christmas Day (Julian calendar)", + "2009-01-07": "Christmas Day", "2009-03-08": "International Women's Day", "2009-03-09": "International Women's Day (observed)", "2009-04-19": "Easter Sunday (Pascha)", @@ -318,7 +318,7 @@ "2010-01-04": "Day off (substituted from 01/30/2010)", "2010-01-05": "Day off (substituted from 02/13/2010)", "2010-01-06": "Day off (substituted from 02/27/2010)", - "2010-01-07": "Christmas Day (Julian calendar)", + "2010-01-07": "Christmas Day", "2010-01-08": "Day off (substituted from 03/13/2010)", "2010-03-08": "International Women's Day", "2010-04-04": "Easter Sunday (Pascha)", @@ -336,7 +336,7 @@ "2010-08-24": "Independence Day", "2011-01-01": "New Year's Day", "2011-01-03": "New Year's Day (observed)", - "2011-01-07": "Christmas Day (Julian calendar)", + "2011-01-07": "Christmas Day", "2011-03-07": "Day off (substituted from 03/12/2011)", "2011-03-08": "International Women's Day", "2011-04-24": "Easter Sunday (Pascha)", @@ -352,8 +352,8 @@ "2011-08-24": "Independence Day", "2012-01-01": "New Year's Day", "2012-01-02": "New Year's Day (observed)", - "2012-01-07": "Christmas Day (Julian calendar)", - "2012-01-09": "Christmas Day (Julian calendar) (observed)", + "2012-01-07": "Christmas Day", + "2012-01-09": "Christmas Day (observed)", "2012-03-08": "International Women's Day", "2012-03-09": "Day off (substituted from 03/03/2012)", "2012-04-15": "Easter Sunday (Pascha)", @@ -369,7 +369,7 @@ "2012-08-24": "Independence Day", "2012-12-31": "Day off (substituted from 12/29/2012)", "2013-01-01": "New Year's Day", - "2013-01-07": "Christmas Day (Julian calendar)", + "2013-01-07": "Christmas Day", "2013-03-08": "International Women's Day", "2013-05-01": "International Workers' Solidarity Day", "2013-05-02": "International Workers' Solidarity Day", @@ -387,7 +387,7 @@ "2014-01-02": "Day off (substituted from 01/11/2014)", "2014-01-03": "Day off (substituted from 01/25/2014)", "2014-01-06": "Day off (substituted from 02/08/2014)", - "2014-01-07": "Christmas Day (Julian calendar)", + "2014-01-07": "Christmas Day", "2014-03-08": "International Women's Day", "2014-03-10": "International Women's Day (observed)", "2014-04-20": "Easter Sunday (Pascha)", @@ -403,7 +403,7 @@ "2014-08-25": "Independence Day (observed)", "2015-01-01": "New Year's Day", "2015-01-02": "Day off (substituted from 01/17/2015)", - "2015-01-07": "Christmas Day (Julian calendar)", + "2015-01-07": "Christmas Day", "2015-01-08": "Day off (substituted from 01/31/2015)", "2015-01-09": "Day off (substituted from 02/14/2015)", "2015-03-08": "International Women's Day", @@ -422,7 +422,7 @@ "2015-08-24": "Independence Day", "2015-10-14": "Defender of Ukraine Day", "2016-01-01": "New Year's Day", - "2016-01-07": "Christmas Day (Julian calendar)", + "2016-01-07": "Christmas Day", "2016-01-08": "Day off (substituted from 01/16/2016)", "2016-03-07": "Day off (substituted from 03/12/2016)", "2016-03-08": "International Women's Day", @@ -438,8 +438,8 @@ "2016-10-14": "Defender of Ukraine Day", "2017-01-01": "New Year's Day", "2017-01-02": "New Year's Day (observed)", - "2017-01-07": "Christmas Day (Julian calendar)", - "2017-01-09": "Christmas Day (Julian calendar) (observed)", + "2017-01-07": "Christmas Day", + "2017-01-09": "Christmas Day (observed)", "2017-03-08": "International Women's Day", "2017-04-16": "Easter Sunday (Pascha)", "2017-04-17": "Easter Sunday (Pascha) (observed)", @@ -454,10 +454,10 @@ "2017-08-25": "Day off (substituted from 08/19/2017)", "2017-10-14": "Defender of Ukraine Day", "2017-10-16": "Defender of Ukraine Day (observed)", - "2017-12-25": "Christmas Day (Gregorian calendar)", + "2017-12-25": "Christmas Day", "2018-01-01": "New Year's Day", - "2018-01-07": "Christmas Day (Julian calendar)", - "2018-01-08": "Christmas Day (Julian calendar) (observed)", + "2018-01-07": "Christmas Day", + "2018-01-08": "Christmas Day (observed)", "2018-03-08": "International Women's Day", "2018-03-09": "Day off (substituted from 03/03/2018)", "2018-04-08": "Easter Sunday (Pascha)", @@ -473,10 +473,10 @@ "2018-10-14": "Defender of Ukraine Day", "2018-10-15": "Defender of Ukraine Day (observed)", "2018-12-24": "Day off (substituted from 12/22/2018)", - "2018-12-25": "Christmas Day (Gregorian calendar)", + "2018-12-25": "Christmas Day", "2018-12-31": "Day off (substituted from 12/29/2018)", "2019-01-01": "New Year's Day", - "2019-01-07": "Christmas Day (Julian calendar)", + "2019-01-07": "Christmas Day", "2019-03-08": "International Women's Day", "2019-04-28": "Easter Sunday (Pascha)", "2019-04-29": "Easter Sunday (Pascha) (observed)", @@ -489,12 +489,12 @@ "2019-08-24": "Independence Day", "2019-08-26": "Independence Day (observed)", "2019-10-14": "Defender of Ukraine Day", - "2019-12-25": "Christmas Day (Gregorian calendar)", + "2019-12-25": "Christmas Day", "2019-12-30": "Day off (substituted from 12/21/2019)", "2019-12-31": "Day off (substituted from 12/28/2019)", "2020-01-01": "New Year's Day", "2020-01-06": "Day off (substituted from 01/11/2020)", - "2020-01-07": "Christmas Day (Julian calendar)", + "2020-01-07": "Christmas Day", "2020-03-08": "International Women's Day", "2020-03-09": "International Women's Day (observed)", "2020-04-19": "Easter Sunday (Pascha)", @@ -508,9 +508,9 @@ "2020-06-29": "Day of the Constitution of Ukraine (observed)", "2020-08-24": "Independence Day", "2020-10-14": "Defender of Ukraine Day", - "2020-12-25": "Christmas Day (Gregorian calendar)", + "2020-12-25": "Christmas Day", "2021-01-01": "New Year's Day", - "2021-01-07": "Christmas Day (Julian calendar)", + "2021-01-07": "Christmas Day", "2021-01-08": "Day off (substituted from 01/16/2021)", "2021-03-08": "International Women's Day", "2021-05-01": "Labor Day", @@ -526,11 +526,329 @@ "2021-08-24": "Independence Day", "2021-10-14": "Day of defenders of Ukraine", "2021-10-15": "Day off (substituted from 10/23/2021)", - "2021-12-25": "Christmas Day (Gregorian calendar)", - "2021-12-27": "Christmas Day (Gregorian calendar) (observed)", + "2021-12-25": "Christmas Day", + "2021-12-27": "Christmas Day (observed)", "2022-01-01": "New Year's Day", "2022-01-03": "New Year's Day (observed)", - "2022-01-07": "Christmas Day (Julian calendar)", + "2022-01-07": "Christmas Day", "2022-03-07": "Day off (substituted from 03/12/2022)", - "2022-03-08": "International Women's Day" + "2022-03-08": "International Women's Day", + "2022-04-24": "Easter Sunday (Pascha)", + "2022-05-01": "Labor Day", + "2022-05-09": "Day of Victory over Nazism in World War II (Victory Day)", + "2022-06-12": "Holy Trinity Day", + "2022-06-28": "Day of the Constitution of Ukraine", + "2022-07-28": "Ukrainian Statehood Day", + "2022-08-24": "Independence Day", + "2022-10-14": "Day of defenders of Ukraine", + "2022-12-25": "Christmas Day", + "2023-01-01": "New Year's Day", + "2023-01-07": "Christmas Day", + "2023-03-08": "International Women's Day", + "2023-04-16": "Easter Sunday (Pascha)", + "2023-05-01": "Labor Day", + "2023-05-09": "Day of Victory over Nazism in World War II (Victory Day)", + "2023-06-04": "Holy Trinity Day", + "2023-06-28": "Day of the Constitution of Ukraine", + "2023-07-28": "Ukrainian Statehood Day", + "2023-08-24": "Independence Day", + "2023-10-01": "Day of defenders of Ukraine", + "2023-12-25": "Christmas Day", + "2024-01-01": "New Year's Day", + "2024-03-08": "International Women's Day", + "2024-05-01": "Labor Day", + "2024-05-05": "Easter Sunday (Pascha)", + "2024-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2024-06-23": "Holy Trinity Day", + "2024-06-28": "Day of the Constitution of Ukraine", + "2024-07-15": "Ukrainian Statehood Day", + "2024-08-24": "Independence Day", + "2024-10-01": "Day of defenders of Ukraine", + "2024-12-25": "Christmas Day", + "2025-01-01": "New Year's Day", + "2025-03-08": "International Women's Day", + "2025-04-20": "Easter Sunday (Pascha)", + "2025-05-01": "Labor Day", + "2025-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2025-06-08": "Holy Trinity Day", + "2025-06-28": "Day of the Constitution of Ukraine", + "2025-07-15": "Ukrainian Statehood Day", + "2025-08-24": "Independence Day", + "2025-10-01": "Day of defenders of Ukraine", + "2025-12-25": "Christmas Day", + "2026-01-01": "New Year's Day", + "2026-03-08": "International Women's Day", + "2026-04-12": "Easter Sunday (Pascha)", + "2026-05-01": "Labor Day", + "2026-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2026-05-31": "Holy Trinity Day", + "2026-06-28": "Day of the Constitution of Ukraine", + "2026-07-15": "Ukrainian Statehood Day", + "2026-08-24": "Independence Day", + "2026-10-01": "Day of defenders of Ukraine", + "2026-12-25": "Christmas Day", + "2027-01-01": "New Year's Day", + "2027-03-08": "International Women's Day", + "2027-05-01": "Labor Day", + "2027-05-02": "Easter Sunday (Pascha)", + "2027-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2027-06-20": "Holy Trinity Day", + "2027-06-28": "Day of the Constitution of Ukraine", + "2027-07-15": "Ukrainian Statehood Day", + "2027-08-24": "Independence Day", + "2027-10-01": "Day of defenders of Ukraine", + "2027-12-25": "Christmas Day", + "2028-01-01": "New Year's Day", + "2028-03-08": "International Women's Day", + "2028-04-16": "Easter Sunday (Pascha)", + "2028-05-01": "Labor Day", + "2028-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2028-06-04": "Holy Trinity Day", + "2028-06-28": "Day of the Constitution of Ukraine", + "2028-07-15": "Ukrainian Statehood Day", + "2028-08-24": "Independence Day", + "2028-10-01": "Day of defenders of Ukraine", + "2028-12-25": "Christmas Day", + "2029-01-01": "New Year's Day", + "2029-03-08": "International Women's Day", + "2029-04-08": "Easter Sunday (Pascha)", + "2029-05-01": "Labor Day", + "2029-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2029-05-27": "Holy Trinity Day", + "2029-06-28": "Day of the Constitution of Ukraine", + "2029-07-15": "Ukrainian Statehood Day", + "2029-08-24": "Independence Day", + "2029-10-01": "Day of defenders of Ukraine", + "2029-12-25": "Christmas Day", + "2030-01-01": "New Year's Day", + "2030-03-08": "International Women's Day", + "2030-04-28": "Easter Sunday (Pascha)", + "2030-05-01": "Labor Day", + "2030-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2030-06-16": "Holy Trinity Day", + "2030-06-28": "Day of the Constitution of Ukraine", + "2030-07-15": "Ukrainian Statehood Day", + "2030-08-24": "Independence Day", + "2030-10-01": "Day of defenders of Ukraine", + "2030-12-25": "Christmas Day", + "2031-01-01": "New Year's Day", + "2031-03-08": "International Women's Day", + "2031-04-13": "Easter Sunday (Pascha)", + "2031-05-01": "Labor Day", + "2031-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2031-06-01": "Holy Trinity Day", + "2031-06-28": "Day of the Constitution of Ukraine", + "2031-07-15": "Ukrainian Statehood Day", + "2031-08-24": "Independence Day", + "2031-10-01": "Day of defenders of Ukraine", + "2031-12-25": "Christmas Day", + "2032-01-01": "New Year's Day", + "2032-03-08": "International Women's Day", + "2032-05-01": "Labor Day", + "2032-05-02": "Easter Sunday (Pascha)", + "2032-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2032-06-20": "Holy Trinity Day", + "2032-06-28": "Day of the Constitution of Ukraine", + "2032-07-15": "Ukrainian Statehood Day", + "2032-08-24": "Independence Day", + "2032-10-01": "Day of defenders of Ukraine", + "2032-12-25": "Christmas Day", + "2033-01-01": "New Year's Day", + "2033-03-08": "International Women's Day", + "2033-04-24": "Easter Sunday (Pascha)", + "2033-05-01": "Labor Day", + "2033-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2033-06-12": "Holy Trinity Day", + "2033-06-28": "Day of the Constitution of Ukraine", + "2033-07-15": "Ukrainian Statehood Day", + "2033-08-24": "Independence Day", + "2033-10-01": "Day of defenders of Ukraine", + "2033-12-25": "Christmas Day", + "2034-01-01": "New Year's Day", + "2034-03-08": "International Women's Day", + "2034-04-09": "Easter Sunday (Pascha)", + "2034-05-01": "Labor Day", + "2034-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2034-05-28": "Holy Trinity Day", + "2034-06-28": "Day of the Constitution of Ukraine", + "2034-07-15": "Ukrainian Statehood Day", + "2034-08-24": "Independence Day", + "2034-10-01": "Day of defenders of Ukraine", + "2034-12-25": "Christmas Day", + "2035-01-01": "New Year's Day", + "2035-03-08": "International Women's Day", + "2035-04-29": "Easter Sunday (Pascha)", + "2035-05-01": "Labor Day", + "2035-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2035-06-17": "Holy Trinity Day", + "2035-06-28": "Day of the Constitution of Ukraine", + "2035-07-15": "Ukrainian Statehood Day", + "2035-08-24": "Independence Day", + "2035-10-01": "Day of defenders of Ukraine", + "2035-12-25": "Christmas Day", + "2036-01-01": "New Year's Day", + "2036-03-08": "International Women's Day", + "2036-04-20": "Easter Sunday (Pascha)", + "2036-05-01": "Labor Day", + "2036-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2036-06-08": "Holy Trinity Day", + "2036-06-28": "Day of the Constitution of Ukraine", + "2036-07-15": "Ukrainian Statehood Day", + "2036-08-24": "Independence Day", + "2036-10-01": "Day of defenders of Ukraine", + "2036-12-25": "Christmas Day", + "2037-01-01": "New Year's Day", + "2037-03-08": "International Women's Day", + "2037-04-05": "Easter Sunday (Pascha)", + "2037-05-01": "Labor Day", + "2037-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2037-05-24": "Holy Trinity Day", + "2037-06-28": "Day of the Constitution of Ukraine", + "2037-07-15": "Ukrainian Statehood Day", + "2037-08-24": "Independence Day", + "2037-10-01": "Day of defenders of Ukraine", + "2037-12-25": "Christmas Day", + "2038-01-01": "New Year's Day", + "2038-03-08": "International Women's Day", + "2038-04-25": "Easter Sunday (Pascha)", + "2038-05-01": "Labor Day", + "2038-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2038-06-13": "Holy Trinity Day", + "2038-06-28": "Day of the Constitution of Ukraine", + "2038-07-15": "Ukrainian Statehood Day", + "2038-08-24": "Independence Day", + "2038-10-01": "Day of defenders of Ukraine", + "2038-12-25": "Christmas Day", + "2039-01-01": "New Year's Day", + "2039-03-08": "International Women's Day", + "2039-04-17": "Easter Sunday (Pascha)", + "2039-05-01": "Labor Day", + "2039-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2039-06-05": "Holy Trinity Day", + "2039-06-28": "Day of the Constitution of Ukraine", + "2039-07-15": "Ukrainian Statehood Day", + "2039-08-24": "Independence Day", + "2039-10-01": "Day of defenders of Ukraine", + "2039-12-25": "Christmas Day", + "2040-01-01": "New Year's Day", + "2040-03-08": "International Women's Day", + "2040-05-01": "Labor Day", + "2040-05-06": "Easter Sunday (Pascha)", + "2040-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2040-06-24": "Holy Trinity Day", + "2040-06-28": "Day of the Constitution of Ukraine", + "2040-07-15": "Ukrainian Statehood Day", + "2040-08-24": "Independence Day", + "2040-10-01": "Day of defenders of Ukraine", + "2040-12-25": "Christmas Day", + "2041-01-01": "New Year's Day", + "2041-03-08": "International Women's Day", + "2041-04-21": "Easter Sunday (Pascha)", + "2041-05-01": "Labor Day", + "2041-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2041-06-09": "Holy Trinity Day", + "2041-06-28": "Day of the Constitution of Ukraine", + "2041-07-15": "Ukrainian Statehood Day", + "2041-08-24": "Independence Day", + "2041-10-01": "Day of defenders of Ukraine", + "2041-12-25": "Christmas Day", + "2042-01-01": "New Year's Day", + "2042-03-08": "International Women's Day", + "2042-04-13": "Easter Sunday (Pascha)", + "2042-05-01": "Labor Day", + "2042-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2042-06-01": "Holy Trinity Day", + "2042-06-28": "Day of the Constitution of Ukraine", + "2042-07-15": "Ukrainian Statehood Day", + "2042-08-24": "Independence Day", + "2042-10-01": "Day of defenders of Ukraine", + "2042-12-25": "Christmas Day", + "2043-01-01": "New Year's Day", + "2043-03-08": "International Women's Day", + "2043-05-01": "Labor Day", + "2043-05-03": "Easter Sunday (Pascha)", + "2043-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2043-06-21": "Holy Trinity Day", + "2043-06-28": "Day of the Constitution of Ukraine", + "2043-07-15": "Ukrainian Statehood Day", + "2043-08-24": "Independence Day", + "2043-10-01": "Day of defenders of Ukraine", + "2043-12-25": "Christmas Day", + "2044-01-01": "New Year's Day", + "2044-03-08": "International Women's Day", + "2044-04-24": "Easter Sunday (Pascha)", + "2044-05-01": "Labor Day", + "2044-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2044-06-12": "Holy Trinity Day", + "2044-06-28": "Day of the Constitution of Ukraine", + "2044-07-15": "Ukrainian Statehood Day", + "2044-08-24": "Independence Day", + "2044-10-01": "Day of defenders of Ukraine", + "2044-12-25": "Christmas Day", + "2045-01-01": "New Year's Day", + "2045-03-08": "International Women's Day", + "2045-04-09": "Easter Sunday (Pascha)", + "2045-05-01": "Labor Day", + "2045-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2045-05-28": "Holy Trinity Day", + "2045-06-28": "Day of the Constitution of Ukraine", + "2045-07-15": "Ukrainian Statehood Day", + "2045-08-24": "Independence Day", + "2045-10-01": "Day of defenders of Ukraine", + "2045-12-25": "Christmas Day", + "2046-01-01": "New Year's Day", + "2046-03-08": "International Women's Day", + "2046-04-29": "Easter Sunday (Pascha)", + "2046-05-01": "Labor Day", + "2046-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2046-06-17": "Holy Trinity Day", + "2046-06-28": "Day of the Constitution of Ukraine", + "2046-07-15": "Ukrainian Statehood Day", + "2046-08-24": "Independence Day", + "2046-10-01": "Day of defenders of Ukraine", + "2046-12-25": "Christmas Day", + "2047-01-01": "New Year's Day", + "2047-03-08": "International Women's Day", + "2047-04-21": "Easter Sunday (Pascha)", + "2047-05-01": "Labor Day", + "2047-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2047-06-09": "Holy Trinity Day", + "2047-06-28": "Day of the Constitution of Ukraine", + "2047-07-15": "Ukrainian Statehood Day", + "2047-08-24": "Independence Day", + "2047-10-01": "Day of defenders of Ukraine", + "2047-12-25": "Christmas Day", + "2048-01-01": "New Year's Day", + "2048-03-08": "International Women's Day", + "2048-04-05": "Easter Sunday (Pascha)", + "2048-05-01": "Labor Day", + "2048-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2048-05-24": "Holy Trinity Day", + "2048-06-28": "Day of the Constitution of Ukraine", + "2048-07-15": "Ukrainian Statehood Day", + "2048-08-24": "Independence Day", + "2048-10-01": "Day of defenders of Ukraine", + "2048-12-25": "Christmas Day", + "2049-01-01": "New Year's Day", + "2049-03-08": "International Women's Day", + "2049-04-25": "Easter Sunday (Pascha)", + "2049-05-01": "Labor Day", + "2049-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2049-06-13": "Holy Trinity Day", + "2049-06-28": "Day of the Constitution of Ukraine", + "2049-07-15": "Ukrainian Statehood Day", + "2049-08-24": "Independence Day", + "2049-10-01": "Day of defenders of Ukraine", + "2049-12-25": "Christmas Day", + "2050-01-01": "New Year's Day", + "2050-03-08": "International Women's Day", + "2050-04-17": "Easter Sunday (Pascha)", + "2050-05-01": "Labor Day", + "2050-05-08": "Day of Remembrance and Victory over Nazism in World War II 1939-1945", + "2050-06-05": "Holy Trinity Day", + "2050-06-28": "Day of the Constitution of Ukraine", + "2050-07-15": "Ukrainian Statehood Day", + "2050-08-24": "Independence Day", + "2050-10-01": "Day of defenders of Ukraine", + "2050-12-25": "Christmas Day" } diff --git a/tests/countries/test_ukraine.py b/tests/countries/test_ukraine.py index ecc4100fd..e1be80b82 100644 --- a/tests/countries/test_ukraine.py +++ b/tests/countries/test_ukraine.py @@ -12,6 +12,7 @@ from unittest import TestCase +from holidays.constants import WORKDAY from holidays.countries.ukraine import Ukraine, UA, UKR from tests.common import CommonCountryTests @@ -27,6 +28,7 @@ def test_country_aliases(self): def test_no_holidays(self): self.assertNoHolidays(Ukraine(years=1990)) self.assertNoHolidays(Ukraine(years=2023)) + self.assertNoHolidays(Ukraine(categories=WORKDAY, years=2021)) def test_special_holidays(self): self.assertHoliday("1995-01-09") @@ -230,9 +232,6 @@ def test_october_revolution_day(self): def test_christmas_gregorian_day(self): self.assertNoHoliday(f"{year}-12-25" for year in range(1991, 2017)) - self.assertNoHolidayName( - "Різдво Христове (за григоріанським календарем)", range(1991, 2017) - ) self.assertHoliday(f"{year}-12-25" for year in range(2017, 2022)) dt = "2021-12-27" @@ -415,7 +414,7 @@ def test_2021(self): self.assertHolidays( Ukraine(years=2021), ("2021-01-01", "Новий рік"), - ("2021-01-07", "Різдво Христове (за юліанським календарем)"), + ("2021-01-07", "Різдво Христове"), ("2021-01-08", "Вихідний день (перенесено з 16.01.2021)"), ("2021-03-08", "Міжнародний жіночий день"), ("2021-05-01", "День праці"), @@ -434,25 +433,75 @@ def test_2021(self): ("2021-08-24", "День незалежності України"), ("2021-10-14", "День захисників і захисниць України"), ("2021-10-15", "Вихідний день (перенесено з 23.10.2021)"), - ("2021-12-25", "Різдво Христове (за григоріанським календарем)"), - ("2021-12-27", "Різдво Христове (за григоріанським календарем) (вихідний)"), + ("2021-12-25", "Різдво Христове"), + ("2021-12-27", "Різдво Христове (вихідний)"), ) def test_2022(self): # https://www.buhoblik.org.ua/kadry-zarplata/vremya/4246-norma-trivalosti-robochogo-chasu-2022.html - self.assertHolidayDates( + self.assertHolidays( Ukraine(years=2022), - "2022-01-01", - "2022-01-03", - "2022-01-07", - "2022-03-07", - "2022-03-08", + ("2022-01-01", "Новий рік"), + ("2022-01-03", "Новий рік (вихідний)"), + ("2022-01-07", "Різдво Христове"), + ("2022-03-07", "Вихідний день (перенесено з 12.03.2022)"), + ("2022-03-08", "Міжнародний жіночий день"), + ) + + def test_2022_workday(self): + self.assertHolidays( + Ukraine(categories=WORKDAY, years=2022), + ("2022-04-24", "Великдень (Пасха)"), + ("2022-05-01", "День праці"), + ("2022-05-09", "День перемоги над нацизмом у Другій світовій війні (День перемоги)"), + ("2022-06-12", "Трійця"), + ("2022-06-28", "День Конституції України"), + ("2022-07-28", "День Української Державності"), + ("2022-08-24", "День незалежності України"), + ("2022-10-14", "День захисників і захисниць України"), + ("2022-12-25", "Різдво Христове"), + ) + + def test_2023_workday(self): + self.assertHolidays( + Ukraine(categories=WORKDAY, years=2023), + ("2023-01-01", "Новий рік"), + ("2023-01-07", "Різдво Христове"), + ("2023-03-08", "Міжнародний жіночий день"), + ("2023-04-16", "Великдень (Пасха)"), + ("2023-05-01", "День праці"), + ("2023-05-09", "День перемоги над нацизмом у Другій світовій війні (День перемоги)"), + ("2023-06-04", "Трійця"), + ("2023-06-28", "День Конституції України"), + ("2023-07-28", "День Української Державності"), + ("2023-08-24", "День незалежності України"), + ("2023-10-01", "День захисників і захисниць України"), + ("2023-12-25", "Різдво Христове"), + ) + + def test_2024_workday(self): + self.assertHolidays( + Ukraine(categories=WORKDAY, years=2024), + ("2024-01-01", "Новий рік"), + ("2024-03-08", "Міжнародний жіночий день"), + ("2024-05-01", "День праці"), + ("2024-05-05", "Великдень (Пасха)"), + ( + "2024-05-08", + "День памʼяті та перемоги над нацизмом у Другій світовій війні 1939-1945 років", + ), + ("2024-06-23", "Трійця"), + ("2024-06-28", "День Конституції України"), + ("2024-07-15", "День Української Державності"), + ("2024-08-24", "День незалежності України"), + ("2024-10-01", "День захисників і захисниць України"), + ("2024-12-25", "Різдво Христове"), ) def test_l10n_default(self): self.assertLocalizedHolidays( ("2021-01-01", "Новий рік"), - ("2021-01-07", "Різдво Христове (за юліанським календарем)"), + ("2021-01-07", "Різдво Христове"), ("2021-01-08", "Вихідний день (перенесено з 16.01.2021)"), ("2021-03-08", "Міжнародний жіночий день"), ("2021-05-01", "День праці"), @@ -471,15 +520,15 @@ def test_l10n_default(self): ("2021-08-24", "День незалежності України"), ("2021-10-14", "День захисників і захисниць України"), ("2021-10-15", "Вихідний день (перенесено з 23.10.2021)"), - ("2021-12-25", "Різдво Христове (за григоріанським календарем)"), - ("2021-12-27", "Різдво Христове (за григоріанським календарем) (вихідний)"), + ("2021-12-25", "Різдво Христове"), + ("2021-12-27", "Різдво Христове (вихідний)"), ) def test_l10n_en_us(self): self.assertLocalizedHolidays( "en_US", ("2021-01-01", "New Year's Day"), - ("2021-01-07", "Christmas Day (Julian calendar)"), + ("2021-01-07", "Christmas Day"), ("2021-01-08", "Day off (substituted from 01/16/2021)"), ("2021-03-08", "International Women's Day"), ("2021-05-01", "Labor Day"), @@ -495,15 +544,15 @@ def test_l10n_en_us(self): ("2021-08-24", "Independence Day"), ("2021-10-14", "Day of defenders of Ukraine"), ("2021-10-15", "Day off (substituted from 10/23/2021)"), - ("2021-12-25", "Christmas Day (Gregorian calendar)"), - ("2021-12-27", "Christmas Day (Gregorian calendar) (observed)"), + ("2021-12-25", "Christmas Day"), + ("2021-12-27", "Christmas Day (observed)"), ) def test_l10n_ar(self): self.assertLocalizedHolidays( "ar", ("2021-01-01", "السنة الجديدة"), - ("2021-01-07", "عيد الميلاد (حسب التقويم اليولياني)"), + ("2021-01-07", "عيد الميلاد"), ("2021-01-08", "يوم عطلة (استبدل من 16/01/2021)"), ("2021-03-08", "اليوم العالمي للمرأة"), ("2021-05-01", "عيد العمال"), @@ -522,6 +571,6 @@ def test_l10n_ar(self): ("2021-08-24", "عيد استقلال أوكرانيا"), ("2021-10-14", "يوم المدافعين عن أوكرانيا"), ("2021-10-15", "يوم عطلة (استبدل من 23/10/2021)"), - ("2021-12-25", "عيد الميلاد (حسب التقويم الغريغوري)"), - ("2021-12-27", "(يوم عطلة) عيد الميلاد (حسب التقويم الغريغوري)"), + ("2021-12-25", "عيد الميلاد"), + ("2021-12-27", "(يوم عطلة) عيد الميلاد"), ) From d6de4b09c64cc0165d63bd29b5a6c8ea40a6aa9c Mon Sep 17 00:00:00 2001 From: Panpakorn Siripanich <19505219+PPsyrius@users.noreply.github.com> Date: Sat, 17 Aug 2024 01:42:05 +0700 Subject: [PATCH 17/22] Add special weekends format for certain countries (#1923) Co-authored-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Co-authored-by: ~Jhellico --- holidays/countries/algeria.py | 11 +++++++++++ holidays/countries/bangladesh.py | 2 ++ holidays/countries/brunei.py | 18 +++++++++++++++++- holidays/countries/egypt.py | 2 ++ holidays/countries/israel.py | 3 ++- holidays/countries/jordan.py | 5 +++++ holidays/countries/kuwait.py | 5 +++++ 7 files changed, 44 insertions(+), 2 deletions(-) diff --git a/holidays/countries/algeria.py b/holidays/countries/algeria.py index 33a858d1a..bc06e07e4 100644 --- a/holidays/countries/algeria.py +++ b/holidays/countries/algeria.py @@ -12,6 +12,7 @@ from gettext import gettext as tr +from holidays.calendars.gregorian import THU, FRI, SAT, SUN from holidays.groups import InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -38,6 +39,16 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def _populate_public_holidays(self): + # The resting days are Friday and Saturday since 2009. + # Previously, these were on Thursday and Friday as implemented in 1976. + # https://www.thenationalnews.com/mena/2021/12/07/when-is-the-weekend-in-the-arab-world/ + if self._year >= 2009: + self.weekend = {FRI, SAT} + elif self._year >= 1976: + self.weekend = {THU, FRI} + else: + self.weekend = {SAT, SUN} + # New Year's Day. self._add_new_years_day(tr("رأس السنة الميلادية")) diff --git a/holidays/countries/bangladesh.py b/holidays/countries/bangladesh.py index 592f046a1..fc0803e7f 100644 --- a/holidays/countries/bangladesh.py +++ b/holidays/countries/bangladesh.py @@ -10,6 +10,7 @@ # Website: https://github.com/vacanza/python-holidays # License: MIT (see LICENSE file) +from holidays.calendars.gregorian import FRI, SAT from holidays.groups import InternationalHolidays from holidays.holiday_base import HolidayBase @@ -22,6 +23,7 @@ class Bangladesh(HolidayBase, InternationalHolidays): """ country = "BD" + weekend = {FRI, SAT} def __init__(self, *args, **kwargs): InternationalHolidays.__init__(self) diff --git a/holidays/countries/brunei.py b/holidays/countries/brunei.py index 6d6121c52..4c038f6a8 100644 --- a/holidays/countries/brunei.py +++ b/holidays/countries/brunei.py @@ -13,7 +13,22 @@ 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.calendars.gregorian import ( + JAN, + FEB, + MAR, + APR, + MAY, + JUN, + JUL, + AUG, + SEP, + OCT, + NOV, + DEC, + FRI, + SUN, +) from holidays.groups import ( ChineseCalendarHolidays, ChristianHolidays, @@ -75,6 +90,7 @@ class Brunei( # %s (observed, estimated). observed_estimated_label = tr("%s (diperhatikan, anggaran)") supported_languages = ("en_US", "ms", "th") + weekend = {FRI, SUN} def __init__(self, *args, **kwargs): ChineseCalendarHolidays.__init__(self) diff --git a/holidays/countries/egypt.py b/holidays/countries/egypt.py index 06e7f7355..9efe368cc 100644 --- a/holidays/countries/egypt.py +++ b/holidays/countries/egypt.py @@ -12,6 +12,7 @@ from gettext import gettext as tr +from holidays.calendars.gregorian import FRI, SAT from holidays.calendars.julian import JULIAN_CALENDAR from holidays.groups import ChristianHolidays, IslamicHolidays, InternationalHolidays from holidays.holiday_base import HolidayBase @@ -32,6 +33,7 @@ class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolida # %s (estimated). estimated_label = tr("(تقدير) %s") supported_languages = ("ar", "en_US") + weekend = {FRI, SAT} def __init__(self, *args, **kwargs): ChristianHolidays.__init__(self, JULIAN_CALENDAR) diff --git a/holidays/countries/israel.py b/holidays/countries/israel.py index 8dfedd6db..733f5b793 100644 --- a/holidays/countries/israel.py +++ b/holidays/countries/israel.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _HebrewLunisolar -from holidays.calendars.gregorian import _timedelta +from holidays.calendars.gregorian import _timedelta, FRI, SAT from holidays.calendars.hebrew import ( HANUKKAH, INDEPENDENCE_DAY, @@ -53,6 +53,7 @@ class Israel(ObservedHolidayBase): observed_label = tr("(נצפה) %s") supported_categories = (OPTIONAL, PUBLIC, SCHOOL) supported_languages = ("en_US", "he", "uk") + weekend = {FRI, SAT} def __init__(self, *args, **kwargs): kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_PREV_THU) diff --git a/holidays/countries/jordan.py b/holidays/countries/jordan.py index 3e17aa0f6..eff499649 100644 --- a/holidays/countries/jordan.py +++ b/holidays/countries/jordan.py @@ -12,6 +12,7 @@ from gettext import gettext as tr +from holidays.calendars.gregorian import THU, FRI, SAT from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -36,6 +37,10 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def _populate_public_holidays(self): + # The resting days are Friday and Saturday since Jan 6, 2000. + # https://archive.wfn.org/2000/01/msg00078.html + self.weekend = {FRI, SAT} if self._year >= 2000 else {THU, FRI} + # New Year's Day. self._add_new_years_day(tr("رأس السنة الميلادية")) diff --git a/holidays/countries/kuwait.py b/holidays/countries/kuwait.py index f2e9053b9..0e647de61 100644 --- a/holidays/countries/kuwait.py +++ b/holidays/countries/kuwait.py @@ -12,6 +12,7 @@ from gettext import gettext as tr +from holidays.calendars.gregorian import THU, FRI, SAT from holidays.groups import InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -36,6 +37,10 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def _populate_public_holidays(self): + # The resting days are Friday and Saturday since Sep 1, 2007. + # https://www.arabnews.com/node/298933 + self.weekend = {FRI, SAT} if self._year >= 2007 else {THU, FRI} + # New Year's Day. self._add_new_years_day(tr("رأس السنة الميلادية")) From 0b1c26a4de7bfc0f3daba9dc8f96eb5f022be98b Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:59:57 -0700 Subject: [PATCH 18/22] Update CI/CD: simplify gh release upload (#1924) --- .github/workflows/ci-cd.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index a81face8a..fc64fcac0 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -223,11 +223,8 @@ jobs: - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 - - name: Check out repository - uses: actions/checkout@v4 - - name: Update Github release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh release upload ${{ github.ref_name }} dist/* + gh release upload --repo vacanza/python-holidays ${{ github.ref_name }} dist/* From 65a12c9c7e75d79cd88a8281babdbeb85abbc338 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 19:27:09 -0700 Subject: [PATCH 19/22] Update pre-commit hooks (#1926) Co-authored-by: arkid15r <2201626+arkid15r@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 79764e3a0..880c01a0c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ repos: - rst - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.0 + rev: v0.6.1 hooks: - id: ruff - id: ruff-format From 4b9d7f7d006cdf74bcb900c084da87780fe227cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Mon, 19 Aug 2024 18:02:32 +0200 Subject: [PATCH 20/22] Fix misleading France subdivision (#1931) --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 1b0b71878..2e6358707 100644 --- a/README.rst +++ b/README.rst @@ -427,7 +427,7 @@ All other default values are highlighted with bold: - UNOFFICIAL * - France - FR - - Départements: BL, GES, GP, GY, MF, MQ, NC, PF, RE, WF, YT + - DOM/TOM: BL, GES, GP, GY, MF, MQ, NC, PF, RE, WF, YT - en_US, **fr**, uk - * - Gabon From 08f7aac6051c9a278dd797e52abc75a0cf92faa8 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com> Date: Mon, 19 Aug 2024 09:08:45 -0700 Subject: [PATCH 21/22] Implement simple CycloneDX SBOM generation (#1925) --- .github/workflows/ci-cd.yml | 22 ++++++++++++++++++++++ .gitignore | 1 + Makefile | 3 +++ requirements/build.txt | 1 + 4 files changed, 27 insertions(+) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index fc64fcac0..69e8e4ca1 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -134,6 +134,22 @@ jobs: name: dist path: dist + - name: Set version + if: startsWith(github.event.ref, 'refs/tags/v') + run: echo "VERSION=$(echo ${{ github.ref_name }} | sed 's/^v//')" >> $GITHUB_ENV + + - name: Generate SBOM + if: startsWith(github.event.ref, 'refs/tags/v') + run: | + make sbom > holidays-$VERSION-sbom.json + + - name: Upload SBOM + if: startsWith(github.event.ref, 'refs/tags/v') + uses: actions/upload-artifact@v4 + with: + name: sbom + path: holidays-$VERSION-sbom.json + test-build: name: Test build on ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -223,8 +239,14 @@ jobs: - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 + - name: Download SBOM + uses: actions/download-artifact@v4 + with: + name: sbom + - name: Update Github release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release upload --repo vacanza/python-holidays ${{ github.ref_name }} dist/* + gh release upload --repo vacanza/python-holidays ${{ github.ref_name }} holidays-*-sbom.json diff --git a/.gitignore b/.gitignore index b85623180..bc681b629 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,5 @@ holidays/locale/pot/*.pot !holidays/locale/pot/UA.pot MANIFEST Pipfile +sbom.json venv/ diff --git a/Makefile b/Makefile index 718948a2a..f6b5b40be 100644 --- a/Makefile +++ b/Makefile @@ -43,6 +43,9 @@ package: pre-commit: pre-commit run --all-files +sbom: + @python -m cyclonedx_py requirements requirements/runtime.txt + setup: pip install --upgrade pip pip install --requirement requirements/dev.txt diff --git a/requirements/build.txt b/requirements/build.txt index 8e689c239..63aae6802 100644 --- a/requirements/build.txt +++ b/requirements/build.txt @@ -1,2 +1,3 @@ build==1.2.1 +cyclonedx-bom==4.5.0 polib==1.2.0 From 37c356eadb5dfb1a10869ba1bbb1420109d5b806 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Mon, 19 Aug 2024 09:55:29 -0700 Subject: [PATCH 22/22] Finalize v0.55 --- CHANGES | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGES b/CHANGES index 233fb44ff..31985d10f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,20 @@ +Version 0.55 +============ + +Released August 19, 2024 + +- Add Samoa holidays (#1914 by @kasya) +- Fix misleading France subdivision (#1931 by @MichaelMure) +- Update CI/CD: add CodeQL workflow (#1910 by @arkid15r) +- Update CI/CD: simplify gh release upload (#1924 by @arkid15r) +- Update Github release upload process (#1902 by @arkid15r) +- Update SG: add 2025 official holidays (#1903 by @mborsetti, @arkid15r) +- Update UA: move martial law holidays to WORKDAY category (#1921 by @KJhellico) +- Update pre-commit: add bandit (#1913 by @arkid15r) +- Update utils.py (#1908 by @JohnRoz, @arkid15r) +- Add special weekends format for certain countries (#1923 by @PPsyrius, @arkid15r) +- Implement simple CycloneDX SBOM generation (#1925 by @arkid15r) + Version 0.54 ============