Add Christmas Island holidays#2623
Conversation
Summary by CodeRabbit
Summary by CodeRabbit
WalkthroughAdded support for Christmas Island holidays by introducing a new country module, registry updates, localization files, and comprehensive test suite, expanding the library's coverage to 210 countries. Changes
Assessment against linked issues
Assessment against linked issues: Out-of-scope changesNo out-of-scope changes were identified in this pull request. Suggested reviewers
📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (3)
🧰 Additional context used🧠 Learnings (4)📓 Common learningsholidays/registry.py (12)README.md (29)holidays/countries/__init__.py (16)🧬 Code Graph Analysis (1)holidays/countries/__init__.py (1)
🪛 LanguageToolREADME.md[grammar] ~108-~108: Use correct spacing (QB_NEW_EN_OTHER_ERROR_IDS_5) 🔇 Additional comments (3)
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 2
🔭 Outside diff range comments (1)
holidays/locale/en_CX/LC_MESSAGES/CX.po (1)
97-106: 🧹 Nitpick (assertive)Consider cleaning up legacy comments.
The commented fallback entries (#~ msgid) appear unused; removing them could streamline the file.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (7)
README.md(2 hunks)holidays/countries/__init__.py(1 hunks)holidays/countries/christmas_islands.py(1 hunks)holidays/locale/en_CX/LC_MESSAGES/CX.po(1 hunks)holidays/locale/en_US/LC_MESSAGES/CX.po(1 hunks)holidays/registry.py(1 hunks)tests/countries/test_christmas_islands.py(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
holidays/locale/en_US/LC_MESSAGES/CX.po (1)
Learnt from: KJhellico
PR: vacanza/holidays#2388
File: holidays/locale/en_CI/LC_MESSAGES/CI.po:88-88
Timestamp: 2025-03-30T18:25:07.087Z
Learning: In the holidays library, localization files have a specific structure: message comments are in standard English (en_US) describing the holiday, while actual translations (msgstr) should use the locale-specific terminology (e.g., en_CI for Ivory Coast English). For example, "Night of Power" in standard English is translated as "Lailatou-Kadr" in Ivory Coast English.
tests/countries/test_christmas_islands.py (3)
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: tests/countries/test_andorra.py:23-28
Timestamp: 2025-05-06T21:07:11.577Z
Learning: In the holidays project, test methods for country holidays follow a standard form where year ranges are explicitly recreated in each test method rather than being stored as class variables, to maintain consistency across all country tests.
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:85-86
Timestamp: 2025-04-05T04:29:38.042Z
Learning: For testing holiday implementations in the vacanza/holidays repository, recommend using `from tests.common import CommonCountryTests` as the base class instead of directly using `unittest.TestCase` to maintain consistency with project conventions and leverage common test utilities.
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:47:27.213Z
Learning: For holiday tests in the vacanza/holidays project, structure tests by individual holidays rather than by years. Each test method should focus on a specific holiday and test it across multiple years (from start_year through 2050) using helper methods like `assertHolidayName`. For fixed holidays, use generators like `(f"{year}-01-01" for year in range(1991, 2051))`. For movable holidays, specify individual dates for specific years followed by a range check.
🧬 Code Graph Analysis (2)
holidays/countries/__init__.py (1)
holidays/countries/christmas_islands.py (3)
ChristmasIslands(32-114)CX(155-156)CXR(159-160)
tests/countries/test_christmas_islands.py (2)
tests/common.py (7)
TestCase(28-338)CommonCountryTests(356-374)assertAliases(121-130)assertNoHolidays(292-294)assertHolidayName(195-199)assertNoNonObservedHoliday(248-250)assertLocalizedHolidays(327-338)holidays/countries/christmas_islands.py (3)
ChristmasIslands(32-114)CX(155-156)CXR(159-160)
🪛 Pylint (3.3.7)
tests/countries/test_christmas_islands.py
[convention] 1-1: Missing module docstring
(C0114)
[convention] 19-19: Missing class docstring
(C0115)
[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestChristmasIslands.setUpClass' method
(W0221)
[convention] 26-26: Missing function or method docstring
(C0116)
[convention] 29-29: Missing function or method docstring
(C0116)
[convention] 32-32: Missing function or method docstring
(C0116)
[convention] 45-45: Missing function or method docstring
(C0116)
[convention] 57-57: Missing function or method docstring
(C0116)
[convention] 70-70: Missing function or method docstring
(C0116)
[convention] 83-83: Missing function or method docstring
(C0116)
[convention] 96-96: Missing function or method docstring
(C0116)
[convention] 109-109: Missing function or method docstring
(C0116)
[convention] 122-122: Missing function or method docstring
(C0116)
[convention] 144-144: Missing function or method docstring
(C0116)
[convention] 157-157: Missing function or method docstring
(C0116)
[convention] 169-169: Missing function or method docstring
(C0116)
[convention] 182-182: Missing function or method docstring
(C0116)
[convention] 203-203: Missing function or method docstring
(C0116)
[convention] 224-224: Missing function or method docstring
(C0116)
[convention] 246-246: Missing function or method docstring
(C0116)
holidays/countries/christmas_islands.py
[convention] 45-45: Line too long (169/100)
(C0301)
[convention] 46-46: Line too long (189/100)
(C0301)
[convention] 167-167: Line too long (193/100)
(C0301)
[convention] 1-1: Missing module docstring
(C0114)
[refactor] 32-32: Too many ancestors (8/7)
(R0901)
[convention] 117-117: Missing class docstring
(C0115)
[convention] 155-155: Missing class docstring
(C0115)
[refactor] 155-155: Too many ancestors (9/7)
(R0901)
[convention] 159-159: Missing class docstring
(C0115)
[refactor] 159-159: Too many ancestors (9/7)
(R0901)
[refactor] 163-163: Too few public methods (0/2)
(R0903)
🔇 Additional comments (8)
holidays/countries/__init__.py (1)
53-53: Expose Christmas Islands holidays.
ImportingChristmasIslands,CX, andCXRcorrectly integrates the new country into the package namespace.README.md (1)
416-421: Add Christmas Islands entry to supported countries.
The new table row correctly lists "Christmas Islands" with codeCXand supported languages en_CX, en_US.holidays/registry.py (1)
61-61: Register Christmas Islands in COUNTRIES mapping.
The key"christmas_islands"and its tuple("ChristmasIslands", "CX", "CXR")follow naming and sorting conventions.holidays/locale/en_US/LC_MESSAGES/CX.po (2)
22-22: Validate header locale.
The headerLanguage: en_USaligns with the file location and intended locale.
30-95: Verify message translations.
Allmsgstrvalues correctly mirror theirmsgidcounterparts and require no adjustments.holidays/locale/en_CX/LC_MESSAGES/CX.po (1)
30-96: Check translation entries.
Allmsgid/msgstrpairs mirror the holiday identifiers and match English (Christmas Island) defaults.tests/countries/test_christmas_islands.py (1)
1-267: Well-structured test implementation!The test file follows all project conventions and provides comprehensive coverage for Christmas Islands holidays.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 1-1: Missing module docstring
(C0114)
[convention] 19-19: Missing class docstring
(C0115)
[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestChristmasIslands.setUpClass' method
(W0221)
[convention] 26-26: Missing function or method docstring
(C0116)
[convention] 29-29: Missing function or method docstring
(C0116)
[convention] 32-32: Missing function or method docstring
(C0116)
[convention] 45-45: Missing function or method docstring
(C0116)
[convention] 57-57: Missing function or method docstring
(C0116)
[convention] 70-70: Missing function or method docstring
(C0116)
[convention] 83-83: Missing function or method docstring
(C0116)
[convention] 96-96: Missing function or method docstring
(C0116)
[convention] 109-109: Missing function or method docstring
(C0116)
[convention] 122-122: Missing function or method docstring
(C0116)
[convention] 144-144: Missing function or method docstring
(C0116)
[convention] 157-157: Missing function or method docstring
(C0116)
[convention] 169-169: Missing function or method docstring
(C0116)
[convention] 182-182: Missing function or method docstring
(C0116)
[convention] 203-203: Missing function or method docstring
(C0116)
[convention] 224-224: Missing function or method docstring
(C0116)
[convention] 246-246: Missing function or method docstring
(C0116)
holidays/countries/christmas_islands.py (1)
1-177: Clean holiday implementation!The module properly implements all Christmas Islands holidays with correct inheritance and initialization patterns.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 45-45: Line too long (169/100)
(C0301)
[convention] 46-46: Line too long (189/100)
(C0301)
[convention] 167-167: Line too long (193/100)
(C0301)
[convention] 1-1: Missing module docstring
(C0114)
[refactor] 32-32: Too many ancestors (8/7)
(R0901)
[convention] 117-117: Missing class docstring
(C0115)
[convention] 155-155: Missing class docstring
(C0115)
[refactor] 155-155: Too many ancestors (9/7)
(R0901)
[convention] 159-159: Missing class docstring
(C0115)
[refactor] 159-159: Too many ancestors (9/7)
(R0901)
[refactor] 163-163: Too few public methods (0/2)
(R0903)
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (3)
README.md(1 hunks)holidays/countries/__init__.py(1 hunks)holidays/registry.py(1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/christmas_islands.py (3)
ChristmasIslands(32-114)CX(155-156)CXR(159-160)
🔇 Additional comments (2)
holidays/countries/__init__.py (1)
53-53: Imported Christmas Islands module correctly.
The new import ofChristmasIslands,CX, andCXRis correctly placed alphabetically after China and before Cocos Islands, exposing the class and its aliases.holidays/registry.py (1)
61-61: Registered Christmas Islands in the registry.
The key"christmas_islands"with("ChristmasIslands", "CX", "CXR")aligns with the module name and class names, and it’s appropriately ordered between China and Cocos Islands.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## dev #2623 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 258 259 +1
Lines 15468 15525 +57
Branches 2105 2110 +5
=========================================
+ Hits 15468 15525 +57 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
holidays/locale/en_CX/LC_MESSAGES/CX.po (1)
22-22:⚠️ Potential issueHeader still shows
en_US; should been_CX.
Same issue was raised earlier and is still unresolved.-"Language: en_US\n" +"Language: en_CX\n"holidays/countries/christmas_islands.py (1)
112-114: 🧹 Nitpick (assertive)Still missing explanatory comment for 2025 Eid al-Adha special case.
Adding a one-liner keeps maintainability high.- for dt in self._add_eid_al_adha_day(tr("Eid al-Adha")): - if self._year != 2025: - self._add_observed(dt) + # Eid al-Adha is statically observed on 6 Jun 2025; skip default observation that year. + for dt in self._add_eid_al_adha_day(tr("Eid al-Adha")): + if self._year != 2025: + self._add_observed(dt)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (3)
holidays/countries/christmas_islands.py(1 hunks)holidays/locale/en_CX/LC_MESSAGES/CX.po(1 hunks)holidays/locale/en_US/LC_MESSAGES/CX.po(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
holidays/locale/en_US/LC_MESSAGES/CX.po (1)
Learnt from: KJhellico
PR: vacanza/holidays#2388
File: holidays/locale/en_CI/LC_MESSAGES/CI.po:88-88
Timestamp: 2025-03-30T18:25:07.087Z
Learning: In the holidays library, localization files have a specific structure: message comments are in standard English (en_US) describing the holiday, while actual translations (msgstr) should use the locale-specific terminology (e.g., en_CI for Ivory Coast English). For example, "Night of Power" in standard English is translated as "Lailatou-Kadr" in Ivory Coast English.
holidays/countries/christmas_islands.py (3)
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:249-253
Timestamp: 2025-05-10T04:02:13.815Z
Learning: Holiday name comments directly above tr() function calls in the holidays package should only contain the holiday name itself (e.g., "# Independence Day.") without any additional context, dates, or historical information.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:86-88
Timestamp: 2025-04-23T09:22:41.753Z
Learning: For holiday definitions in the holidays package, keep comments simple with just the holiday name (e.g., "# Independence Day.") rather than including dates or historical context, as the function names already encode the date information.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:0-0
Timestamp: 2025-05-10T04:32:15.760Z
Learning: In the holidays package, detailed historical context and additional information should be added as comments at the method level or above conditional blocks, while comments directly above tr() function calls should only contain the holiday name itself (e.g., "# Independence Day.").
🪛 Pylint (3.3.7)
holidays/countries/christmas_islands.py
[convention] 45-45: Line too long (169/100)
(C0301)
[convention] 46-46: Line too long (189/100)
(C0301)
[convention] 167-167: Line too long (193/100)
(C0301)
[convention] 1-1: Missing module docstring
(C0114)
[refactor] 32-32: Too many ancestors (8/7)
(R0901)
[convention] 117-117: Missing class docstring
(C0115)
[convention] 155-155: Missing class docstring
(C0115)
[refactor] 155-155: Too many ancestors (9/7)
(R0901)
[convention] 159-159: Missing class docstring
(C0115)
[refactor] 159-159: Too many ancestors (9/7)
(R0901)
[refactor] 163-163: Too few public methods (0/2)
(R0903)
🔇 Additional comments (2)
holidays/locale/en_US/LC_MESSAGES/CX.po (1)
15-96: Translations look sound.
No functional or formatting concerns spotted in this file.holidays/countries/christmas_islands.py (1)
84-97: 💡 Verification agent🧩 Analysis chain
Verify helper methods exist.
Methods_add_holiday_4th_mon_of_marand_add_holiday_oct_6are used but aren’t common helpers in many country files. Confirm they are implemented in the codebase to avoidAttributeError.
🏁 Script executed:
#!/bin/bash # Search for helper implementations. rg --line-number "_add_holiday_(4th_mon_of_mar|oct_6)\(" -A1Length of output: 622
Let’s double-check that these helpers are actually defined in the codebase:
🏁 Script executed:
#!/bin/bash # Search for definitions of the helper methods. rg --line-number "def _add_holiday_4th_mon_of_mar" -n rg --line-number "def _add_holiday_oct_6" -nLength of output: 102
Undefined helper methods detected
I couldn’t find any definitions for
_add_holiday_4th_mon_of_maror_add_holiday_oct_6in the codebase. Calling these will raise anAttributeError.• In holidays/countries/christmas_islands.py (lines 84–97):
- _add_holiday_4th_mon_of_mar
- _add_holiday_oct_6
Please add or import these helper implementations (e.g. in the base calendar class) before using them.
⛔ Skipped due to learnings
Learnt from: Wasif-Shahzad PR: vacanza/holidays#2409 File: holidays/countries/qatar.py:27-46 Timestamp: 2025-04-03T16:58:27.175Z Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
|
@PPsyrius @KJhellico i have done the above mentioned changes.
|
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
README.md (1)
416-420: Trim leading space before the default language tag.
<td> <strong>en_CX</strong>, en_US</td>contains an extra space after the opening<td>that breaks the visual alignment of the table and is inconsistent with the surrounding rows.-<td> <strong>en_CX</strong>, en_US</td> +<td><strong>en_CX</strong>, en_US</td>holidays/locale/en_CX/LC_MESSAGES/CX.po (1)
20-24: Header still reportsen_US; switch toen_CX.Same issue as flagged earlier: the
Language:header must match the locale directory.-"Language: en_US\n" +"Language: en_CX\n"
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (7)
README.md(2 hunks)holidays/countries/__init__.py(1 hunks)holidays/countries/christmas_island.py(1 hunks)holidays/locale/en_CX/LC_MESSAGES/CX.po(1 hunks)holidays/locale/en_US/LC_MESSAGES/CX.po(1 hunks)holidays/registry.py(1 hunks)tests/countries/test_christmas_island.py(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
holidays/locale/en_US/LC_MESSAGES/CX.po (1)
Learnt from: KJhellico
PR: vacanza/holidays#2388
File: holidays/locale/en_CI/LC_MESSAGES/CI.po:88-88
Timestamp: 2025-03-30T18:25:07.087Z
Learning: In the holidays library, localization files have a specific structure: message comments are in standard English (en_US) describing the holiday, while actual translations (msgstr) should use the locale-specific terminology (e.g., en_CI for Ivory Coast English). For example, "Night of Power" in standard English is translated as "Lailatou-Kadr" in Ivory Coast English.
tests/countries/test_christmas_island.py (2)
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:85-86
Timestamp: 2025-04-05T04:29:38.042Z
Learning: For testing holiday implementations in the vacanza/holidays repository, recommend using `from tests.common import CommonCountryTests` as the base class instead of directly using `unittest.TestCase` to maintain consistency with project conventions and leverage common test utilities.
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: tests/countries/test_andorra.py:23-28
Timestamp: 2025-05-06T21:07:11.577Z
Learning: In the holidays project, test methods for country holidays follow a standard form where year ranges are explicitly recreated in each test method rather than being stored as class variables, to maintain consistency across all country tests.
🪛 Flake8 (7.2.0)
holidays/countries/__init__.py
[error] 53-53: 'holidays.countries.christmas_island.ChristmasIsland' imported but unused
(F401)
[error] 53-53: 'holidays.countries.christmas_island.CX' imported but unused
(F401)
[error] 53-53: 'holidays.countries.christmas_island.CXR' imported but unused
(F401)
🪛 Pylint (3.3.7)
tests/countries/test_christmas_island.py
[convention] 1-1: Missing module docstring
(C0114)
[convention] 19-19: Missing class docstring
(C0115)
[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestChristmasIsland.setUpClass' method
(W0221)
[convention] 26-26: Missing function or method docstring
(C0116)
[convention] 29-29: Missing function or method docstring
(C0116)
[convention] 32-32: Missing function or method docstring
(C0116)
[convention] 45-45: Missing function or method docstring
(C0116)
[convention] 57-57: Missing function or method docstring
(C0116)
[convention] 70-70: Missing function or method docstring
(C0116)
[convention] 83-83: Missing function or method docstring
(C0116)
[convention] 96-96: Missing function or method docstring
(C0116)
[convention] 109-109: Missing function or method docstring
(C0116)
[convention] 122-122: Missing function or method docstring
(C0116)
[convention] 143-143: Missing function or method docstring
(C0116)
[convention] 156-156: Missing function or method docstring
(C0116)
[convention] 168-168: Missing function or method docstring
(C0116)
[convention] 181-181: Missing function or method docstring
(C0116)
[convention] 202-202: Missing function or method docstring
(C0116)
[convention] 223-223: Missing function or method docstring
(C0116)
[convention] 245-245: Missing function or method docstring
(C0116)
holidays/countries/christmas_island.py
[convention] 45-45: Line too long (169/100)
(C0301)
[convention] 46-46: Line too long (189/100)
(C0301)
[convention] 47-47: Line too long (208/100)
(C0301)
[convention] 48-48: Line too long (202/100)
(C0301)
[convention] 49-49: Line too long (240/100)
(C0301)
[convention] 50-50: Line too long (214/100)
(C0301)
[convention] 51-51: Line too long (252/100)
(C0301)
[convention] 52-52: Line too long (256/100)
(C0301)
[convention] 53-53: Line too long (233/100)
(C0301)
[convention] 54-54: Line too long (248/100)
(C0301)
[convention] 55-55: Line too long (256/100)
(C0301)
[convention] 56-56: Line too long (249/100)
(C0301)
[convention] 57-57: Line too long (186/100)
(C0301)
[convention] 58-58: Line too long (186/100)
(C0301)
[convention] 59-59: Line too long (218/100)
(C0301)
[convention] 60-60: Line too long (175/100)
(C0301)
[convention] 61-61: Line too long (194/100)
(C0301)
[convention] 62-62: Line too long (175/100)
(C0301)
[convention] 63-63: Line too long (194/100)
(C0301)
[convention] 190-190: Line too long (193/100)
(C0301)
[convention] 1-1: Missing module docstring
(C0114)
[refactor] 32-32: Too many ancestors (8/7)
(R0901)
[convention] 141-141: Missing class docstring
(C0115)
[convention] 178-178: Missing class docstring
(C0115)
[refactor] 178-178: Too many ancestors (9/7)
(R0901)
[convention] 182-182: Missing class docstring
(C0115)
[refactor] 182-182: Too many ancestors (9/7)
(R0901)
[refactor] 186-186: Too few public methods (0/2)
(R0903)
🔇 Additional comments (9)
holidays/registry.py (1)
61-63: Looks good – registry entry is alphabetically correct.
"christmas_island": ("ChristmasIsland", "CX", "CXR"),is inserted in the expected alphabetical slot between China and Cocos Islands and uses unique ISO codes. No further action required.holidays/countries/__init__.py (1)
52-55: Verify__all__update.The new import is fine and the file is already whitelisted with
# ruff: noqa: F401, but remember to appendChristmasIsland,CX, andCXRto the__all__tuple at the bottom of the file so thatfrom holidays.countries import *exposes them.holidays/locale/en_US/LC_MESSAGES/CX.po (1)
83-90: Translations look sensible.Holiday names are properly localised to en-US (“Eid al-Fitr”, “Eid al-Adha”) while keeping Malay msgids, matching the library’s localisation convention.
No issues spotted.tests/countries/test_christmas_island.py (3)
15-24: Well-structured test setup following project conventions.Good use of
CommonCountryTestsas the base class and proper initialization of test instances with comprehensive year ranges.
34-34: Consistent year range pattern across test methods.Good adherence to project convention of recreating year ranges within each test method.
Also applies to: 72-72, 111-111
133-141: Thorough Islamic holiday testing with estimation handling.Excellent approach testing Islamic holidays with both estimated and non-estimated instances.
Also applies to: 192-200
holidays/countries/christmas_island.py (3)
101-106: Verify the Labour Day date variation logic.The switching between 3rd and 4th Monday of March for specific years seems unusual. Please confirm this matches official proclamations.
136-138: Special handling for 2025 Eid al-Adha looks correct.The logic properly skips automatic observance for 2025 since it's handled as a special observed holiday on June 6.
Also applies to: 198-199
121-125: Smart Boxing Day observance rule implementation.The combined rule ensures proper handling when Boxing Day falls on various days of the week.
|
You need to merge latest |
Signed-off-by: Ansh Anand <ansh.a.3112@gmail.com>
|
arkid15r
left a comment
There was a problem hiding this comment.
Great work!
Thanks for adding this @anshonweb



Proposed change
Added Christmas Island holidays
Resolved #2428
Type of change
holidaysfunctionality in general)Checklist
make check, all checks and tests are green