-
-
Notifications
You must be signed in to change notification settings - Fork 558
Add Sudan holidays #2830
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Sudan holidays #2830
Conversation
I think ive made a mess with my Sudan branch |
Summary by CodeRabbit
WalkthroughAdds a Sudan country provider (with Islamic/Christian holidays, observed rules, and locale files), registers/exportes Sudan (SD/SDN), and adds tests. Many files (README, several country modules, registry, locales, tests, version) contain unresolved git merge conflict markers that must be resolved. Changes
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
Suggested reviewers
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ 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. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
Status, Documentation and Community
|
@anshonweb , please rebase your branch onto current dev. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (8)
README.md
(2 hunks)holidays/countries/__init__.py
(1 hunks)holidays/countries/sudan.py
(1 hunks)holidays/locale/ar_SD/LC_MESSAGES/SD.po
(1 hunks)holidays/locale/en_NF/LC_MESSAGES/NF.po
(2 hunks)holidays/locale/en_US/LC_MESSAGES/SD.po
(1 hunks)holidays/registry.py
(1 hunks)tests/countries/test_sudan.py
(1 hunks)
🧰 Additional context used
🧠 Learnings (44)
📓 Common learnings
Learnt from: KJhellico
PR: vacanza/holidays#2774
File: tests/countries/test_liberia.py:15-16
Timestamp: 2025-08-08T14:37:03.045Z
Learning: When adding a new country in vacanza/holidays, also re-export it in holidays/countries/__init__.py (e.g., from .liberia import Liberia, LR, LBR) so tests and users can import from holidays.countries consistently.
📚 Learning: 2025-06-28T10:39:19.185Z
Learnt from: KJhellico
PR: vacanza/holidays#2684
File: holidays/locale/it/LC_MESSAGES/SM.po:13-13
Timestamp: 2025-06-28T10:39:19.185Z
Learning: In the holidays project, .po file header comments use the format "# [Country] holidays." for default language files (without trailing hash) and "# [Country] holidays [locale] localization." for non-default language files (also without trailing hash).
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/en_US/LC_MESSAGES/SD.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-03-05T17:51:00.633Z
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-05-06T15:25:44.333Z
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: holidays/locale/ca/LC_MESSAGES/AD.po:31-40
Timestamp: 2025-05-06T15:25:44.333Z
Learning: In the Holidays project, msgid fields in localization files contain strings in the entity's default language (as defined by default_language attribute), not English source strings as in standard gettext implementations.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-06-25T10:09:29.029Z
Learnt from: PPsyrius
PR: vacanza/holidays#2676
File: holidays/locale/ar/LC_MESSAGES/EG.po:0-0
Timestamp: 2025-06-25T10:09:29.029Z
Learning: In the holidays library, msgstr fields can be left empty for source/default_language files when using Lingva, the localization tool used by the project.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-03-08T11:28:48.652Z
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:285-299
Timestamp: 2025-03-08T11:28:48.652Z
Learning: In the holidays project, message IDs (msgids) in locale files use region-specific naming conventions (e.g., "Muharram", "Id-ul-Fitr" in en_IN locale for India), while translator comments use internationally recognized names from the project's default locale (en_US) such as "Ashura", "Eid al-Fitr". This difference is intentional for proper localization.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/en_US/LC_MESSAGES/SD.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-03-30T18:25:07.087Z
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.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/en_US/LC_MESSAGES/SD.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-04-17T17:08:48.082Z
Learnt from: PPsyrius
PR: vacanza/holidays#2438
File: holidays/locale/ar_IQ/LC_MESSAGES/IQ.po:35-81
Timestamp: 2025-04-17T17:08:48.082Z
Learning: In holiday PO files, when the file represents the default language of an entity (e.g., ar_IQ for Iraq), no translations in `msgstr` are required as the `msgid` values are already in the target language.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/en_US/LC_MESSAGES/SD.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-06-11T18:32:25.595Z
Learnt from: ankushhKapoor
PR: vacanza/holidays#2601
File: holidays/locale/en_MN/LC_MESSAGES/MN.po:13-14
Timestamp: 2025-06-11T18:32:25.595Z
Learning: For non-default locale `.po` files, the header comment format is:
`# <Country> holidays <locale> localization.` (no trailing hash).
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/en_US/LC_MESSAGES/SD.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-06-10T12:17:58.880Z
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:1-14
Timestamp: 2025-06-10T12:17:58.880Z
Learning: In the holidays project, .po files should use the full multi-line header format including the project description, authors, website, and license information, rather than a single-line comment format.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-06-25T20:55:00.642Z
Learnt from: KJhellico
PR: vacanza/holidays#2651
File: holidays/locale/nl/LC_MESSAGES/BQ.po:29-95
Timestamp: 2025-06-25T20:55:00.642Z
Learning: In the holidays library, Dutch locale files (.po) with `X-Source-Language: nl` should have empty msgstr entries when the target language is also Dutch. The library uses fallback=True with gettext, which returns the original msgid when msgstr is empty. This is the correct pattern for native language files and does not cause blank holiday names.
Applied to files:
holidays/locale/en_NF/LC_MESSAGES/NF.po
📚 Learning: 2025-08-03T12:59:53.286Z
Learnt from: KJhellico
PR: vacanza/holidays#2635
File: README.md:108-110
Timestamp: 2025-08-03T12:59:53.286Z
Learning: Always verify country counts in the COUNTRIES dictionary by checking the current count in the COUNTRIES dictionary in holidays/registry.py directly, rather than relying on information from previous PRs, as the count changes frequently with new country additions.
Applied to files:
holidays/registry.py
📚 Learning: 2025-08-08T14:37:03.045Z
Learnt from: KJhellico
PR: vacanza/holidays#2774
File: tests/countries/test_liberia.py:15-16
Timestamp: 2025-08-08T14:37:03.045Z
Learning: When adding a new country in vacanza/holidays, also re-export it in holidays/countries/__init__.py (e.g., from .liberia import Liberia, LR, LBR) so tests and users can import from holidays.countries consistently.
Applied to files:
holidays/registry.py
holidays/countries/__init__.py
tests/countries/test_sudan.py
📚 Learning: 2025-08-02T21:34:24.440Z
Learnt from: KJhellico
PR: vacanza/holidays#2774
File: holidays/registry.py:136-136
Timestamp: 2025-08-02T21:34:24.440Z
Learning: When counting entries in the COUNTRIES dictionary in holidays/registry.py, use sed to isolate only the COUNTRIES section (between "^COUNTRIES:" and "^FINANCIAL:" lines) to avoid counting FINANCIAL dictionary entries, which would give an inflated total.
Applied to files:
holidays/registry.py
📚 Learning: 2025-07-10T11:00:13.195Z
Learnt from: KJhellico
PR: vacanza/holidays#2623
File: README.md:0-0
Timestamp: 2025-07-10T11:00:13.195Z
Learning: The COUNTRIES dictionary in holidays/registry.py contains 211 entries as confirmed by KJhellico in PR #2623, not 214 as previously calculated.
Applied to files:
holidays/registry.py
📚 Learning: 2025-07-15T15:00:32.728Z
Learnt from: KJhellico
PR: vacanza/holidays#2687
File: README.md:108-108
Timestamp: 2025-07-15T15:00:32.728Z
Learning: When verifying country counts in the holidays library, always check the current count in the COUNTRIES dictionary in holidays/registry.py rather than relying on previously recorded counts, as new countries may have been added in merged PRs.
Applied to files:
holidays/registry.py
📚 Learning: 2025-07-17T11:07:04.986Z
Learnt from: KJhellico
PR: vacanza/holidays#2720
File: README.md:108-110
Timestamp: 2025-07-17T11:07:04.986Z
Learning: Always verify country counts in the holidays library by checking the current count in the COUNTRIES dictionary in holidays/registry.py directly, rather than relying on information from previous PRs, as the count changes frequently with new country additions.
Applied to files:
holidays/registry.py
📚 Learning: 2025-04-18T21:13:55.589Z
Learnt from: KJhellico
PR: vacanza/holidays#2483
File: holidays/registry.py:177-177
Timestamp: 2025-04-18T21:13:55.589Z
Learning: In the holidays/registry.py file, COUNTRIES dictionary entries should use the class name (without spaces) as the first element of the tuple (e.g., "TurksAndCaicosIslands"), not the human-readable country name with spaces.
Applied to files:
holidays/registry.py
📚 Learning: 2025-08-08T14:37:03.045Z
Learnt from: KJhellico
PR: vacanza/holidays#2774
File: tests/countries/test_liberia.py:15-16
Timestamp: 2025-08-08T14:37:03.045Z
Learning: In holidays/countries/__init__.py, re-export country classes using absolute imports (e.g., 'from holidays.countries.liberia import Liberia, LR, LBR') and keep alphabetical ordering (e.g., Lesotho, Liberia, Libya). Avoid relative imports in this file.
Applied to files:
holidays/registry.py
holidays/countries/__init__.py
holidays/countries/sudan.py
📚 Learning: 2025-08-08T10:33:55.695Z
Learnt from: KJhellico
PR: vacanza/holidays#2763
File: README.md:108-110
Timestamp: 2025-08-08T10:33:55.695Z
Learning: When verifying the country total in holidays/registry.py, isolate between '^COUNTRIES:' and '^FINANCIAL:' and count only lines matching the strict key pattern '^\s*"[a-z0-9_ ]+":\s*\(' to avoid overcounting non-entry quoted lines. As of PR vacanza/holidays#2763, this yields 227 entries.
Applied to files:
holidays/registry.py
📚 Learning: 2025-07-14T19:32:44.256Z
Learnt from: PPsyrius
PR: vacanza/holidays#2716
File: holidays/registry.py:164-164
Timestamp: 2025-07-14T19:32:44.256Z
Learning: The COUNTRIES dictionary in holidays/registry.py contains exactly 215 entries as of PR #2716, with FINANCIAL dictionary entries (4 total) being tracked separately and not included in the country count for README.md.
Applied to files:
holidays/registry.py
📚 Learning: 2025-03-30T13:33:31.598Z
Learnt from: PPsyrius
PR: vacanza/holidays#2388
File: holidays/locale/fr/LC_MESSAGES/CI.po:28-101
Timestamp: 2025-03-30T13:33:31.598Z
Learning: In the holidays library, for localization files of the default language (like French for Ivory Coast in fr/LC_MESSAGES/CI.po), the best practice is to leave the message strings (msgstr) empty to avoid possible typos, since the message IDs (msgid) are already in the target language.
Applied to files:
holidays/locale/en_US/LC_MESSAGES/SD.po
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-08-09T18:31:23.218Z
Learnt from: KJhellico
PR: vacanza/holidays#2778
File: tests/countries/test_kiribati.py:15-15
Timestamp: 2025-08-09T18:31:23.218Z
Learning: In the holidays project test files, the standard import pattern is `from holidays.countries.<country> import Country, CODE1, CODE2` (used in ~97% of test files), not `from holidays.countries import Country, CODE1, CODE2`. Only a few exceptions (Suriname, Sierra Leone, Mauritius, Mali, Ivory Coast, Guyana) use the aggregated import pattern.
Applied to files:
holidays/countries/__init__.py
📚 Learning: 2025-07-12T20:54:28.749Z
Learnt from: KJhellico
PR: vacanza/holidays#2719
File: README.md:108-108
Timestamp: 2025-07-12T20:54:28.749Z
Learning: In PR #2719 adding Faroe Islands, KJhellico confirmed that the country count in README.md should be updated from 213 to 214, making 214 the accurate total after this addition.
Applied to files:
README.md
📚 Learning: 2025-06-06T16:02:09.910Z
Learnt from: KJhellico
PR: vacanza/holidays#2606
File: README.md:562-568
Timestamp: 2025-06-06T16:02:09.910Z
Learning: The README.md country table displays ISO 3166-1 alpha-2 codes only in the "Code" column. Alpha-3 codes or country aliases should not be included in this table format, maintaining consistency with all other country entries.
Applied to files:
README.md
📚 Learning: 2025-06-13T12:18:03.539Z
Learnt from: PPsyrius
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:78-90
Timestamp: 2025-06-13T12:18:03.539Z
Learning: The holidays codebase now uses the constructor signature pattern `__init__(self, *args, islamic_show_estimated: bool = True, **kwargs)` across country classes.
Applied to files:
holidays/countries/sudan.py
📚 Learning: 2025-06-19T02:34:18.382Z
Learnt from: PPsyrius
PR: vacanza/holidays#2643
File: holidays/countries/mauritius.py:144-169
Timestamp: 2025-06-19T02:34:18.382Z
Learning: Custom holiday classes that extend _CustomHinduHolidays, _CustomIslamicHolidays, _CustomBuddhistHolidays, etc. in the holidays library do not use docstrings. They follow a pattern of using only inline comments above date dictionaries, as seen in Malaysia, Singapore, UAE, and other country implementations.
Applied to files:
holidays/countries/sudan.py
📚 Learning: 2025-06-19T02:34:14.456Z
Learnt from: PPsyrius
PR: vacanza/holidays#2643
File: holidays/countries/mauritius.py:171-184
Timestamp: 2025-06-19T02:34:14.456Z
Learning: In the holidays library, `_CustomIslamicHolidays` subclasses follow a consistent pattern of NOT having docstrings. They go directly to defining date dictionaries, as evidenced by Malaysia, Singapore, UAE, and dozens of other country implementations.
Applied to files:
holidays/countries/sudan.py
📚 Learning: 2025-03-30T08:08:31.656Z
Learnt from: PPsyrius
PR: vacanza/holidays#2388
File: holidays/countries/ivory_coast.py:84-85
Timestamp: 2025-03-30T08:08:31.656Z
Learning: Islamic holiday logic should be implemented in the holidays/groups/islamic.py file, with country-specific files only calling these methods with the appropriate translated names.
Applied to files:
holidays/countries/sudan.py
📚 Learning: 2025-03-30T18:22:11.939Z
Learnt from: KJhellico
PR: vacanza/holidays#2388
File: holidays/countries/ivory_coast.py:127-128
Timestamp: 2025-03-30T18:22:11.939Z
Learning: The IvoryCoast class in holidays/countries/ivory_coast.py already includes documentation in its class docstring explaining the "day after" naming convention for Islamic holidays, noting that in the Islamic calendar, days begin at sunset and the "day after" refers to daylight hours following the night of celebration.
Applied to files:
holidays/countries/sudan.py
📚 Learning: 2025-05-06T21:07:11.577Z
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.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-05T04:47:27.213Z
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.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-06-16T15:48:48.680Z
Learnt from: PPsyrius
PR: vacanza/holidays#2615
File: tests/countries/test_anguilla.py:1-12
Timestamp: 2025-06-16T15:48:48.680Z
Learning: Test files in the holidays repository follow a standardized structure without module or class docstrings. All country test files use the same pattern: license header, imports, and class definition (`class Test{Country}(CommonCountryTests, TestCase):`) without docstrings. This is an established codebase convention that should be maintained for consistency.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-04T10:52:41.546Z
Learnt from: KJhellico
PR: vacanza/holidays#2398
File: holidays/countries/guinea.py:106-110
Timestamp: 2025-04-04T10:52:41.546Z
Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are properly covered by the test_eid_al_fitr_day() method, which tests both the regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-05T04:29:38.042Z
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.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-05T04:33:53.254Z
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:33:53.254Z
Learning: For Turkmenistan holiday tests, recommend using CommonCountryTests as the base class rather than unittest.TestCase to follow project conventions, be consistent with other country test files, and gain access to common test utilities.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-05T06:49:06.217Z
Learnt from: PPsyrius
PR: vacanza/holidays#2386
File: tests/countries/test_nepal.py:499-536
Timestamp: 2025-04-05T06:49:06.217Z
Learning: In the holidays project, test files follow a dual testing approach: individual methods test specific holidays across multiple years, while comprehensive year-specific tests (e.g., `test_2025`) verify all holidays for a specific year in a single assertion. Both approaches serve different testing purposes and complement each other.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-07-02T18:17:53.342Z
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using `_add_new_years_day()` and should not include observed rule testing in its test method. Only holidays explicitly wrapped with `_add_observed()` have observed behavior.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-07-24T15:21:31.632Z
Learnt from: PPsyrius
PR: vacanza/holidays#2750
File: tests/countries/test_germany.py:46-46
Timestamp: 2025-07-24T15:21:31.632Z
Learning: In the holidays project test files, the standard method name for testing the absence of holidays is `test_no_holidays`, not more descriptive names like `test_no_holidays_before_1990`. This is a consistent naming convention across country test files like France and Germany.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-05T04:50:40.752Z
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:31-49
Timestamp: 2025-04-05T04:50:40.752Z
Learning: For Turkmenistan holiday tests, use this class structure: `class TestTurkmenistan(CommonCountryTests, TestCase)` with imports `from unittest import TestCase`, `from holidays.countries import Turkmenistan, TM, TKM`, and `from tests.common import CommonCountryTests`. Ensure to call `super().setUp()` in the setUp method.
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-04-04T10:52:41.546Z
Learnt from: KJhellico
PR: vacanza/holidays#2398
File: holidays/countries/guinea.py:106-110
Timestamp: 2025-04-04T10:52:41.546Z
Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are covered by the test_eid_al_fitr_day() method, which tests both regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
Applied to files:
tests/countries/test_sudan.py
📚 Learning: 2025-06-26T15:34:35.476Z
Learnt from: KJhellico
PR: vacanza/holidays#2676
File: holidays/locale/en_US/LC_MESSAGES/TN.po:17-28
Timestamp: 2025-06-26T15:34:35.476Z
Learning: In the holidays project, .po file header metadata updates (version numbers, revision dates, translator information) are legitimate changes when part of localization work and don't require `make l10n` regeneration. The `make l10n` command is primarily for formatting fixes and missing translator comments, not for intentional metadata updates.
Applied to files:
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-03-31T11:50:50.488Z
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2385
File: holidays/countries/pakistan.py:59-60
Timestamp: 2025-03-31T11:50:50.488Z
Learning: In the holidays library, function names and comments follow en_US spelling conventions (e.g., "Labor Day"), while the default strings may use different locale conventions (e.g., "Labour Day" for en_PK) and are translated appropriately using the gettext function.
Applied to files:
holidays/locale/ar_SD/LC_MESSAGES/SD.po
📚 Learning: 2025-05-10T04:32:15.760Z
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.").
Applied to files:
holidays/locale/ar_SD/LC_MESSAGES/SD.po
🪛 LanguageTool
README.md
[grammar] ~108-~108: There might be a mistake here.
Context: ... refer to a country is by using its [ISO 3166-1 alpha-2 code](https://en.wikipedi...
(QB_NEW_EN)
🔇 Additional comments (14)
holidays/registry.py (2)
215-215
: Sudan registry entry looks correct.Class name, codes, and alphabetical placement are all consistent with project conventions.
215-215
: README country count is correct—no action neededThe verification script confirms 225 country entries in holidays/registry.py, and the README already lists “We currently support 225 country codes.” All looks in sync.
holidays/countries/__init__.py (1)
221-221
: Absolute import and alphabetical placement for Sudan — good.Matches established style (alphabetical between SriLanka and Suriname).
README.md (2)
1494-1499
: Sudan row looks well-formed and consistent.
- Alphabetical placement is correct (between Sri Lanka and Suriname).
- Code column uses ISO 3166-1 alpha-2 SD as expected.
- Supported languages show ar_SD (bold as default) and en_US, consistent with project conventions.
108-121
: Country count confirmed at 225I ran the count against README.md (between “## Available Countries” and “## Available Financial Markets”) and got 225 entries, matching the registry. No drift detected—README is up to date.
holidays/locale/ar_SD/LC_MESSAGES/SD.po (2)
15-29
: Format placeholders look correct; leaving msgstr empty is right for default locale.
- c-format placeholders are preserved (%s), which is required.
- For a default-language file (ar_SD), keeping msgstr empty is the right convention in this project.
30-62
: All Arabic msgids in sudan.py match SD.po exactly
I’ve cross-checked eachtr("…")
literal against the entries inholidays/locale/ar_SD/LC_MESSAGES/SD.po
and found no orthography discrepancies. Thanks for flagging this—everything lines up.tests/countries/test_sudan.py (7)
15-17
: Good: imports follow project conventions (CommonCountryTests + country aliases).This aligns with the repository’s standardized testing pattern and ensures helper assertions are available.
45-49
: Coptic Easter coverage looks good; range check with no-estimated instance is a nice touch.This matches patterns used in other countries for movable feasts.
72-95
: Eid tests are comprehensive; good to include observed follow-ups.Coverage for multiple years across both Eid al-Fitr and Eid al-Adha is solid.
102-117
: l10n (ar_SD) assertions align with the PO entries.Names and observed suffixes match the ar_SD PO strings.
20-25
: Sanity check passed: toggles correctly implemented
TheSudan
constructor exposesislamic_show_estimated
(passed through toSudanIslamicHolidays
) and sets a defaultobserved_rule
, so both the estimated-Islamic and observed-holiday toggles work as intended across the tested years.
40-43
: Verify Orthodox Christmas date in SudanThe Sudan provider currently defines two entries:
- عيد الميلاد المجيد on Julian Dec 25 → Jan 7 Gregorian
- عيد الميلاد الأرثوذكسي on Jan 25
Orthodox Christmas is normally celebrated on January 7 by churches following the Julian calendar. Please confirm whether Sudan officially observes a separate holiday on January 25. If not, remove or correct the Jan 25 entry:
• holidays/countries/sudan.py: line 75 (
_add_holiday_jan_25
)
• tests/countries/test_sudan.py: lines 40–43
50-61
: Confirm Islamic New Year mapping & suffix behavior
- HIJRI_NEW_YEAR_DATES entries for 2020–2024 match the asserted dates.
- With
islamic_show_estimated=False
, none of these carry the “(المقدرة)” suffix.- Since 2024-07-07 falls on Sunday (and Sudan’s
SUN_TO_NEXT_MON
rule is in effect), an observed holiday will be emitted on 2024-07-08 with the “(ملاحظة)” suffix.
Consider adding a corresponding assertion intest_islamic_new_year
, for example:self.assertHolidayName( "رأس السنة الهجرية (ملاحظة)", "2024-07-08", )⛔ Skipped due to learnings
Learnt from: KJhellico PR: vacanza/holidays#2398 File: holidays/countries/guinea.py:106-110 Timestamp: 2025-04-04T10:52:41.546Z Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are properly covered by the test_eid_al_fitr_day() method, which tests both the regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
Learnt from: KJhellico PR: vacanza/holidays#2398 File: holidays/countries/guinea.py:106-110 Timestamp: 2025-04-04T10:52:41.546Z Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are covered by the test_eid_al_fitr_day() method, which tests both regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
Learnt from: KJhellico PR: vacanza/holidays#2386 File: holidays/countries/nepal.py:266-284 Timestamp: 2025-04-13T20:41:56.613Z Learning: The Islamic holiday dates in the holidays library should only include officially verified dates, not predicted ones, to maintain accuracy. This is especially important for holidays that depend on lunar observations like Eid al-Fitr and Eid al-Adha.
Learnt from: KJhellico PR: vacanza/holidays#2465 File: holidays/countries/suriname.py:219-251 Timestamp: 2025-04-13T19:10:31.502Z Learning: The `_CustomIslamicHolidays` classes in this project contain only exact verified holiday dates from reliable sources, rather than calculated or estimated future dates. This is by design to ensure accuracy, particularly for religious holidays that may follow lunar calendars or depend on local observations.
Learnt from: KJhellico PR: vacanza/holidays#2398 File: holidays/countries/guinea.py:101-106 Timestamp: 2025-04-03T13:03:16.558Z Learning: For Islamic holidays in Guinea like "Lendemain de la nuit Lailatoul Qadr" (Day after Night of Power) and "Lendemain de la nuit du Maoloud" (Day after Prophet's Birthday), the naming refers to the daylight hours following the night when these Islamic observances occur. Since in the Islamic calendar days begin at sunset rather than midnight, methods like `_add_laylat_al_qadr_day` and `_add_mawlid_day` correctly calculate these dates without requiring an additional day offset in the implementation, following the same pattern as in the Ivory Coast implementation.
Learnt from: Wasif-Shahzad PR: vacanza/holidays#2593 File: holidays/calendars/islamic.py:3993-3994 Timestamp: 2025-06-04T10:09:28.732Z Learning: In the holidays/calendars/islamic.py file, the Islamic calendar date methods in the _IslamicLunar class (like ali_al_rida_death_dates, ashura_dates, etc.) follow a consistent pattern of being single-line methods that return self._get_holiday(CONSTANT, year) without docstrings. New methods should follow this same pattern for consistency.
Learnt from: KJhellico PR: vacanza/holidays#2398 File: holidays/countries/guinea.py:101-106 Timestamp: 2025-04-03T13:03:16.558Z Learning: For Islamic holidays in Guinea like "Lendemain de la nuit Lailatoul Qadr" (Day after Night of Power) and "Lendemain de la nuit du Maoloud" (Day after Prophet's Birthday), the naming refers to the daylight hours following the night when these Islamic observances occur. Since in the Islamic calendar days begin at sunset rather than midnight, methods like `_add_laylat_al_qadr_day` and `_add_mawlid_day` correctly calculate these dates without requiring an additional day offset in the implementation.
Learnt from: KJhellico PR: vacanza/holidays#2608 File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178 Timestamp: 2025-07-02T18:17:53.342Z Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using `_add_new_years_day()` and should not include observed rule testing in its test method. Only holidays explicitly wrapped with `_add_observed()` have observed behavior.
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.
Learnt from: PPsyrius PR: vacanza/holidays#2386 File: tests/countries/test_nepal.py:499-536 Timestamp: 2025-04-05T06:49:06.217Z Learning: In the holidays project, test files follow a dual testing approach: individual methods test specific holidays across multiple years, while comprehensive year-specific tests (e.g., `test_2025`) verify all holidays for a specific year in a single assertion. Both approaches serve different testing purposes and complement each other.
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs): | ||
ChristianHolidays.__init__(self) | ||
InternationalHolidays.__init__(self) | ||
IslamicHolidays.__init__(self) | ||
IslamicHolidays.__init__( | ||
self, cls=SudanIslamicHolidays, show_estimated=islamic_show_estimated | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove duplicate IslamicHolidays initialization.
IslamicHolidays.__init__
is called twice. Keep only the variant that wires the custom class.
Apply:
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
- IslamicHolidays.__init__(self)
IslamicHolidays.__init__(
self, cls=SudanIslamicHolidays, show_estimated=islamic_show_estimated
)
kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
super().__init__(*args, **kwargs)
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs): | |
ChristianHolidays.__init__(self) | |
InternationalHolidays.__init__(self) | |
IslamicHolidays.__init__(self) | |
IslamicHolidays.__init__( | |
self, cls=SudanIslamicHolidays, show_estimated=islamic_show_estimated | |
) | |
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs): | |
ChristianHolidays.__init__(self) | |
InternationalHolidays.__init__(self) | |
IslamicHolidays.__init__( | |
self, cls=SudanIslamicHolidays, show_estimated=islamic_show_estimated | |
) | |
kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON) | |
super().__init__(*args, **kwargs) |
🤖 Prompt for AI Agents
In holidays/countries/sudan.py around lines 53 to 59, IslamicHolidays.__init__
is invoked twice; remove the first plain call and keep only the second
invocation that passes cls=SudanIslamicHolidays and
show_estimated=islamic_show_estimated so the custom Islamic holiday class is
wired correctly and the duplicate initialization is eliminated.
# Orthodox Christmas. | ||
dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي"))) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Orthodox Christmas is incorrectly set to Jan 25.
Use Julian-calendar Christmas instead of a fixed Jan 25 helper.
Apply:
- dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي")))
+ dts_observed.add(
+ self._add_christmas_day(tr("عيد الميلاد الأرثوذكسي"), calendar=JULIAN_CALENDAR)
+ )
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
# Orthodox Christmas. | |
dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي"))) | |
# Orthodox Christmas. | |
dts_observed.add( | |
self._add_christmas_day(tr("عيد الميلاد الأرثوذكسي"), calendar=JULIAN_CALENDAR) | |
) |
🤖 Prompt for AI Agents
In holidays/countries/sudan.py around lines 74-76, Orthodox Christmas is
incorrectly added via the fixed Jan 25 helper; replace that with a
Julian-calendar computation: calculate the Gregorian date corresponding to
December 25 on the Julian calendar for the current year (using the project's
Julian-to-Gregorian helper or implement the conversion) and add that computed
date with the existing translation label instead of calling _add_holiday_jan_25.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@anshonweb I'm not sure about this one, might be typo in the embassy's website since AFAIK none of the Christian denomination has Christmas observance in JAN 25
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
msgid "" | ||
msgstr "" | ||
"Project-Id-Version: Holidays 0.77\n" | ||
"Project-Id-Version: Holidays 0.78\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Unrelated en_NF locale tweaks mixed into Sudan PR.
The version bump and obsolete msgids look fine, but they’re unrelated to Sudan. Consider dropping from this PR to keep scope clean.
Do you want me to open a follow-up PR for the en_NF housekeeping?
Also applies to: 90-99
🤖 Prompt for AI Agents
In holidays/locale/en_NF/LC_MESSAGES/NF.po around line 17 (and also review lines
90-99), this PR contains unrelated locale housekeeping (a Project-Id-Version
bump and obsolete msgids) that should not be mixed into the Sudan changes;
remove those en_NF-only edits from this branch and either revert the file to the
pre-PR state here or move the housekeeping edits into a separate follow-up
branch/PR (and if you want, I can open that follow-up PR for you).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@anshonweb Please remove this file change for Norfolk Islands from this PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
def test_christmas_day(self): | ||
name = "يوم عيد الميلاد" | ||
self.assertHolidayName(name, (f"{year}-12-25" for year in range(1985, 2050))) | ||
obs_dt = ("2022-12-26",) | ||
self.assertHolidayName(f"{name} (ملاحظة)", obs_dt) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Observed rule for Christmas Day: confirm the rule exists in the provider.
The test expects 2022-12-26 as observed. Ensure the Sudan provider wraps Christmas Day with _add_observed() for the applicable years.
🏁 Script executed:
#!/bin/bash
set -euo pipefail
fd -t f sudan.py holidays/countries | xargs -I{} rg -n -C2 -P 'Christmas Day|يوم عيد الميلاد|_add_observed' {}
Length of output: 361
Wrap Christmas Day in Sudan with the observed-day rule
The Sudan provider currently adds Christmas Day straight into the observed set without using _add_observed()
, so the shift from 2022-12-25 to 2022-12-26 (with the “(ملاحظة)” suffix) won’t be applied correctly. Please update as follows:
• File: holidays/countries/sudan.py (around lines 94–97)
Replace:
# Christmas Day.
- dts_observed.add(self._add_christmas_day(tr("يوم عيد الميلاد")))
With:
# Christmas Day.
+ dts.update(self._add_christmas_day(tr("يوم عيد الميلاد")))
+ if self.observed:
+ dts_observed.update(
+ self._add_observed(self._add_christmas_day(tr("يوم عيد الميلاد")))
+ )
🤖 Prompt for AI Agents
In holidays/countries/sudan.py around lines 94 to 97, Christmas Day is currently
added directly to the observed set rather than using the provider's
_add_observed() helper; update the logic to add the base holiday (25 Dec)
normally and call self._add_observed() for that holiday so observed shifts
(e.g., 2022-12-25 -> 2022-12-26 with the "(ملاحظة)" suffix) are applied
correctly.
References: | ||
* <https://en.wikipedia.org/wiki/Public_holidays_in_Sudan> | ||
* <https://web.archive.org/web/20250801051246/https://www.sudanembassy.org.uk/public-holidays/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The old link wasn't accessible - Wayback Machine seems to be acting up these days, make sure to double-check the reference links if they're still accessible
* <https://web.archive.org/web/20250801051246/https://www.sudanembassy.org.uk/public-holidays/> | |
* <https://web.archive.org/web/20250820070831/https://www.sudanembassy.org.uk/public-holidays/> |
# Orthodox Christmas. | ||
dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي"))) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@anshonweb I'm not sure about this one, might be typo in the embassy's website since AFAIK none of the Christian denomination has Christmas observance in JAN 25
EID_AL_ADHA_DATES = { | ||
2020: (JUL, 31), | ||
2021: (JUL, 20), | ||
2022: (JUL, 10), | ||
2023: (JUN, 28), | ||
2024: (JUN, 16), | ||
2025: (JUN, 6), | ||
} | ||
|
||
EID_AL_FITR_DATES = { | ||
2020: (MAY, 24), | ||
2021: (MAY, 13), | ||
2022: (MAY, 1), | ||
2023: (APR, 21), | ||
2024: (APR, 10), | ||
2025: (MAR, 30), | ||
} | ||
|
||
HIJRI_NEW_YEAR_DATES = { | ||
2020: (AUG, 20), | ||
2021: (AUG, 11), | ||
2022: (JUL, 30), | ||
2023: (JUL, 19), | ||
2024: (JUL, 7), | ||
2025: (JUN, 26), | ||
} | ||
|
||
MAWLID_DATES = { | ||
2020: (OCT, 29), | ||
2021: (OCT, 18), | ||
2022: (OCT, 8), | ||
2023: (SEP, 28), | ||
2024: (SEP, 15), | ||
2025: (SEP, 4), | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
New syntax to reduce duplication
EID_AL_ADHA_DATES = { | |
2020: (JUL, 31), | |
2021: (JUL, 20), | |
2022: (JUL, 10), | |
2023: (JUN, 28), | |
2024: (JUN, 16), | |
2025: (JUN, 6), | |
} | |
EID_AL_FITR_DATES = { | |
2020: (MAY, 24), | |
2021: (MAY, 13), | |
2022: (MAY, 1), | |
2023: (APR, 21), | |
2024: (APR, 10), | |
2025: (MAR, 30), | |
} | |
HIJRI_NEW_YEAR_DATES = { | |
2020: (AUG, 20), | |
2021: (AUG, 11), | |
2022: (JUL, 30), | |
2023: (JUL, 19), | |
2024: (JUL, 7), | |
2025: (JUN, 26), | |
} | |
MAWLID_DATES = { | |
2020: (OCT, 29), | |
2021: (OCT, 18), | |
2022: (OCT, 8), | |
2023: (SEP, 28), | |
2024: (SEP, 15), | |
2025: (SEP, 4), | |
} | |
EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2025) | |
EID_AL_ADHA_DATES = { | |
2022: (JUL, 10), | |
} | |
EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025) | |
EID_AL_FITR_DATES = { | |
2022: (MAY, 1), | |
} | |
HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2020, 2025) | |
HIJRI_NEW_YEAR_DATES = { | |
2021: (AUG, 11), | |
} | |
MAWLID_DATES_CONFIRMED_YEARS = (2020, 2025) | |
MAWLID_DATES = { | |
2023: (SEP, 28), | |
} |
msgid "" | ||
msgstr "Project-Id-Version: Holidays 0.78\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
msgid "" | |
msgstr "Project-Id-Version: Holidays 0.78\n" | |
# | |
# Sudan holidays. | |
# | |
msgid "" | |
msgstr "" | |
"Project-Id-Version: Holidays 0.80\n" | |
"POT-Creation-Date: 2025-07-12 01:31+0530\n" | |
"PO-Revision-Date: 2025-07-12 01:31+0530\n" | |
"Last-Translator: Ansh Anand <ansh.a.3112@gmail.com>\n" | |
"Language-Team: Holidays Localization Team\n" | |
"Language: ar_SD\n" | |
"MIME-Version: 1.0\n" | |
"Content-Type: text/plain; charset=UTF-8\n" | |
"Content-Transfer-Encoding: 8bit\n" | |
"Generated-By: Lingva 5.0.6\n" | |
"X-Source-Language: ar_SD\n" |
msgid "" | ||
msgstr "" | ||
"Project-Id-Version: Holidays 0.77\n" | ||
"Project-Id-Version: Holidays 0.78\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@anshonweb Please remove this file change for Norfolk Islands from this PR
# | ||
msgid "" | ||
msgstr "" | ||
"Project-Id-Version: Holidays 0.78\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Project-Id-Version: Holidays 0.78\n" | |
"Project-Id-Version: Holidays 0.80" |
"PO-Revision-Date: 2025-07-12 01:31+0530\n" | ||
"Last-Translator: Ansh Anand <ansh.a.3112@gmail.com>\n" | ||
"Language-Team: Holidays Localization Team\n" | ||
"Language: tkl\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Language: tkl\n" | |
"Language: en_US\n" |
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 36
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (13)
holidays/locale/en_CX/LC_MESSAGES/CX.po (1)
17-49
: Remove Christmas Island en_CX changes (unrelated) and resolve conflicts; default-locale msgstr must be empty.
- Unresolved merge conflicts across header and many entries.
- For a default-locale file (en_CX), msgstr entries should be empty; some blocks set msgstr to non-empty values.
- This file change is out-of-scope for “Add Sudan holidays”; please revert to dev.
To revert:
git fetch origin dev git restore --source origin/dev -- holidays/locale/en_CX/LC_MESSAGES/CX.poIf you keep this file in a separate PR, ensure msgstr is empty for placeholders too:
- msgid "%s (observed)" - msgstr "%s (observed)" + msgid "%s (observed)" + msgstr "" - msgid "%s (estimated)" - msgstr "%s (estimated)" + msgid "%s (estimated)" + msgstr "" - msgid "%s (observed, estimated)" - msgstr "%s (observed, estimated)" + msgid "%s (observed, estimated)" + msgstr ""Also applies to: 50-62, 63-75, 76-134, 168-223
holidays/locale/en_US/LC_MESSAGES/CX.po (1)
78-122
: Action Required: Remove duplicate translation entries in CX.poWe’ve confirmed multiple
msgid
values are defined more than once inholidays/locale/en_US/LC_MESSAGES/CX.po
. Please consolidate to a single occurrence per holiday and ensure the U.S. spelling appears inmsgstr
(e.g., “Labor Day”).Affected entries (appear twice):
- ANZAC Day
- Australia Day
- Boxing Day
- Chinese New Year
- Christmas Day
- Good Friday
- Hari Raya Haji
- Hari Raya Puasa
- Labour Day
- New Year’s Day
- Territory Day
Locations: roughly lines 78–122 and 175–194 in
holidays/locale/en_US/LC_MESSAGES/CX.po
.• Remove the duplicate blocks listed above, keeping only one
msgid
/msgstr
pair per holiday.
• Verify eachmsgstr
uses American English spelling (e.g., changemsgid "Labour Day"
→msgstr "Labor Day"
).
• (Optional) Re-run the duplicate finder to confirm no repeats:grep -n '^msgid' holidays/locale/en_US/LC_MESSAGES/CX.po \ | cut -d '"' -f2 \ | sort \ | uniq -dholidays/locale/en_US/LC_MESSAGES/NF.po (2)
37-146
: Remove unrelated NF en_US changes from this Sudan PR or move them to a separate PR.Even after fixing headers, these NF entries are out-of-scope for Sudan. Revert to dev in this PR to keep scope clean.
git fetch origin dev git restore --source origin/dev -- holidays/locale/en_US/LC_MESSAGES/NF.po
21-23
: Resolve merge conflicts and correct NF.po locale headerPlease address the following critical issues in
holidays/locale/en_US/LC_MESSAGES/NF.po
:
- Remove every unresolved merge marker (
<<<<<<<
,=======
,>>>>>>>
) from the file.- In the header (the
msgid ""
block), ensure you have exactly one set of these fields:- "Language: en_NF\n" + "Language: en_US\n" - "X-Source-Language: en_US\n" + "X-Source-Language: en_NF\n"- After resolving, run the localization formatter to catch any remaining formatting issues:
make l10n # included in `make check`
Once conflicts are cleared and headers are corrected, verify there are no stray conflict markers:
rg -n '^(<<<<<<<|=======|>>>>>>>)' holidays/locale/en_US/LC_MESSAGES/NF.po
holidays/countries/norfolk_island.py (3)
13-52
: Resolve extensive Git merge conflicts in imports and class definition.The file has unresolved conflicts affecting imports and class structure. The af207d1 version appears more complete with additional imports needed for the expanded functionality.
-<<<<<<< HEAD - -from gettext import gettext as tr - -from holidays.calendars.gregorian import SEP -from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays -from holidays.observed_holiday_base import ( - ObservedHolidayBase, - SAT_SUN_TO_NEXT_MON, - SAT_SUN_TO_NEXT_MON_TUE, - SUN_TO_NEXT_MON, -) - - -class NorfolkIsland(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays): -======= from gettext import gettext as tr from holidays.calendars.gregorian import SEP, JUN from holidays.groups import ( ChristianHolidays, InternationalHolidays, StaticHolidays, ) from holidays.observed_holiday_base import ( ObservedHolidayBase, MON_TO_NEXT_TUE, SUN_TO_NEXT_MON, SAT_SUN_TO_NEXT_MON, SAT_SUN_TO_NEXT_MON_TUE, ) class NorfolkIsland( ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays, ): ->>>>>>> af207d1b (Add Norfolk Island holidays)
111-153
: Resolve ANZAC Day and Sovereign's Birthday implementation conflicts.Multiple implementation differences need resolution. The af207d1 version adds observed rules for ANZAC Day and uses a date mapping for specific years.
For ANZAC Day:
# ANZAC Day. -<<<<<<< HEAD - self._add_anzac_day(tr("ANZAC Day")) - - # Bounty Day. - self._add_observed(bounty_day := self._add_holiday_jun_8(tr("Bounty Day"))) - - # Sovereign's Birthday. - name = ( - # King's Birthday. - tr("King's Birthday") - if self._year >= 2023 - # Queen's Birthday. - else tr("Queen's Birthday") - ) - # If Sovereign's Birthday falls on the same day as Bounty Day (observed), - # it is moved to the next Monday. - if self._is_saturday(bounty_day): - self._add_holiday_2_days_past_3rd_sat_of_jun(name) - else: - self._add_holiday_2_days_past_2nd_sat_of_jun(name) -======= self._add_observed(self._add_anzac_day(tr("ANZAC Day"))) # Bounty Day. self._add_observed(self._add_holiday_jun_8(tr("Bounty Day")), rule=SAT_SUN_TO_NEXT_MON) sovereign_birthday_dates = { } # Sovereign's Birthday. if self._year >= 2023: name = tr("King's Birthday") else: name = tr("Queen's Birthday") if dt := sovereign_birthday_dates.get(self._year): self._add_holiday(name, dt) else: self._add_observed( self._add_holiday_2_days_past_2nd_sat_of_jun(name), ) ->>>>>>> af207d1b (Add Norfolk Island holidays)
161-183
: Resolve Christmas Day and Boxing Day ordering conflict.The af207d1 version changes the order and rules for these holidays. Boxing Day uses a combined rule.
self._add_observed( -<<<<<<< HEAD - # Christmas Day. - self._add_christmas_day(tr("Christmas Day")), - rule=SAT_SUN_TO_NEXT_MON_TUE, - ) - - self._add_observed( - # Boxing Day. - self._add_christmas_day_two(tr("Boxing Day")), - rule=SAT_SUN_TO_NEXT_MON_TUE, - ) - -======= # Boxing Day. self._add_christmas_day_two(tr("Boxing Day")), rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE, ) # Christmas Day. self._add_observed(self._add_christmas_day(tr("Christmas Day"))) - ->>>>>>> af207d1b (Add Norfolk Island holidays)tests/countries/test_norfolk_island.py (1)
131-169
: Resolve Sovereign's Birthday test conflict.Significant differences in test structure and expectations need resolution.
The conflict shows different test approaches for Queen's and King's Birthday. Would you like me to help create a unified test that covers both periods correctly?
holidays/countries/christmas_island.py (2)
145-159
: Initialize Chinese calendar with custom dates class.Use the cls= variant for consistency and data injection.
- ChineseCalendarHolidays.__init__(self) + ChineseCalendarHolidays.__init__(self, cls=ChristmasIslandChineseHolidays) ChristianHolidays.__init__(self) InternationalHolidays.__init__(self) IslamicHolidays.__init__( self, cls=ChristmasIslandIslamicHolidays, show_estimated=islamic_show_estimated )
327-371
: Unify Islamic dates and add CONFIRMED_YEARS spans.Resolve duplicates and follow the confirmed-year pattern to avoid blanket “estimated” labels.
class ChristmasIslandIslamicHolidays(_CustomIslamicHolidays): - EID_AL_ADHA_DATES = { - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 30), - 2010: (NOV, 16), - 2013: (OCT, 15), - 2014: (OCT, 5), - 2016: (SEP, 13), - 2017: (SEP, 1), - 2024: (JUN, 17), - 2025: (JUN, 7), - } + EID_AL_ADHA_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) + EID_AL_ADHA_DATES = { + 2007: (DEC, 20), + 2008: (DEC, 8), + 2009: (NOV, 30), + 2010: (NOV, 16), + 2013: (OCT, 15), + 2014: (OCT, 5), + 2016: (SEP, 13), + 2017: (SEP, 1), + 2019: (AUG, 11), + 2020: (JUL, 31), + 2021: (JUL, 20), + 2022: (JUL, 9), + 2023: (JUN, 28), + 2024: (JUN, 17), + 2025: (JUN, 7), + } - EID_AL_FITR_DATES = { - 2007: (OCT, 15), - 2008: (OCT, 1), - 2009: (SEP, 21), - 2010: (SEP, 10), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2016: (JUL, 6), - 2017: (JUN, 24), - 2019: (JUN, 5), - 2023: (APR, 22), - 2025: (MAR, 31), - } + EID_AL_FITR_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) + EID_AL_FITR_DATES = { + 2007: (OCT, 15), + 2008: (OCT, 1), + 2009: (SEP, 21), + 2010: (SEP, 10), + 2013: (AUG, 8), + 2014: (JUL, 28), + 2016: (JUL, 6), + 2017: (JUN, 24), + 2019: (JUN, 5), + 2020: (MAY, 24), + 2021: (MAY, 13), + 2022: (MAY, 2), + 2023: (APR, 22), + 2024: (APR, 10), + 2025: (MAR, 31), + }tests/countries/test_christmas_island.py (3)
59-147
: Unify Chinese New Year test and observed cases.Keep a single test method and align observed dates with SAT_SUN_TO_NEXT_MON_TUE rule and 2020 exception.
- def test_chinese_new_year(self): - name = "Chinese New Year" - self.assertHolidayName( - name, - "2021-02-12","2021-02-13","2022-02-01","2022-02-02", - "2023-01-23","2023-01-24","2024-02-10","2024-02-11", - "2025-01-29","2025-01-30", - ) - self.assertHolidayName(name, range(2007, 2020), range(2021, 2050)) - obs_dt = ("2018-02-19","2020-01-28","2020-01-29","2021-02-15","2024-02-12","2024-02-13") - self.assertHolidayName(f"{name} (observed)", obs_dt) - self.assertNoNonObservedHoliday(obs_dt) + def test_chinese_new_year(self): + name = "Chinese New Year" + self.assertHolidayName( + name, + "2021-02-12","2021-02-13","2022-02-01","2022-02-02", + "2023-01-23","2023-01-24","2024-02-10","2024-02-11", + "2025-01-29","2025-01-30", + ) + obs_dt = ("2018-02-19","2020-01-28","2020-01-29","2021-02-15","2024-02-12","2024-02-13") + self.assertHolidayName(f"{name} (observed)", obs_dt) + self.assertNoNonObservedHoliday(obs_dt)
319-362
: Eid al-Adha 2023 date: use 2023-06-28.Conflicts show 28 vs 29; align with provider data suggested in the country file.
- "2023-06-29", + "2023-06-28",
162-181
: Confirm 2022 Labour Day is March 28According to the rule “4th Monday in March” for Christmas Island Labour Day, in 2022 that falls on Monday, March 28 2022 (en.wikipedia.org). Please update the test and remove any merge‐conflict markers:
• In tests/countries/test_christmas_island.py →
test_labour_day
- Replace
"2022-03-21"
with"2022-03-28"
- Remove the surrounding
<<<<<<<
,=======
, and>>>>>>>
lines so only the correct date remainsSuggested diff:
def test_labour_day(self): name = "Labour Day" self.assertHolidayName( name, "2020-03-16", "2021-03-22", - "2022-03-21", + "2022-03-28", "2023-03-20", "2024-03-18", "2025-03-24", ) self.assertHolidayName(name, range(2007, 2050))
♻️ Duplicate comments (6)
holidays/locale/en_NF/LC_MESSAGES/NF.po (1)
34-49
: Drop Norfolk Island en_NF changes from this Sudan PR and fix merge conflicts.This file isn’t related to Sudan and currently has unresolved conflict markers and duplicate/obsolete entries. Keep the scope clean by removing this file from the PR; restore it to dev.
If you need help, I can open a follow-up housekeeping PR for the en_NF locale.
To revert locally:
git fetch origin dev git restore --source origin/dev -- holidays/locale/en_NF/LC_MESSAGES/NF.poAlso applies to: 78-97, 106-121, 123-146
holidays/locale/en_US/LC_MESSAGES/SD.po (2)
17-17
: Update Project-Id-Version to current version.The version should be 0.80 to match the current holidays library version.
-"Project-Id-Version: Holidays 0.78\n" +"Project-Id-Version: Holidays 0.80\n"
22-22
: Fix the Language header value.The Language header shows "tkl" but this is an en_US locale file.
-"Language: tkl\n" +"Language: en_US\n"holidays/locale/ar_SD/LC_MESSAGES/SD.po (1)
12-13
: Fix PO file header format and add missing header comment.The header needs the standard format with complete metadata fields and the proper header comment for default language files.
+# +# Sudan holidays. +# msgid "" -msgstr "Project-Id-Version: Holidays 0.78\n" +msgstr "" +"Project-Id-Version: Holidays 0.80\n" +"POT-Creation-Date: 2025-07-12 01:31+0530\n" +"PO-Revision-Date: 2025-07-12 01:31+0530\n" +"Last-Translator: Ansh Anand <ansh.a.3112@gmail.com>\n" +"Language-Team: Holidays Localization Team\n" +"Language: ar_SD\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Lingva 5.0.6\n" +"X-Source-Language: ar_SD\n"holidays/countries/sudan.py (2)
53-59
: Remove duplicate IslamicHolidays initialization. Keep only the custom class wiring.Calling IslamicHolidays.init twice is redundant and risks misconfiguration.
Apply:
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs): ChristianHolidays.__init__(self) InternationalHolidays.__init__(self) - IslamicHolidays.__init__(self) IslamicHolidays.__init__( self, cls=SudanIslamicHolidays, show_estimated=islamic_show_estimated ) kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON) super().__init__(*args, **kwargs)
74-76
: Orthodox Christmas must be computed with the Julian calendar, not fixed Jan 25.Use the project helper to compute the Julian-Calendar Christmas date (Gregorian Jan 7).
- dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي"))) + dts_observed.add( + self._add_christmas_day(tr("عيد الميلاد الأرثوذكسي"), calendar=JULIAN_CALENDAR) + )
<<<<<<< HEAD | ||
<<<<<<< HEAD | ||
from holidays.countries.christmas_island import ChristmasIsland, CX, CXR | ||
======= | ||
from holidays.countries.christmas_islands import ChristmasIslands, CX, CXR | ||
>>>>>>> 5505906f (Add Christmas Island holidays) | ||
======= | ||
from holidays.countries.christmas_island import ChristmasIsland, CX, CXR | ||
>>>>>>> f097c6b9 (Fixed Formatting Issues and tests) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Resolve merge conflict: choose the singular Christmas Island import.
Unmerged conflict markers break parsing. Keep the established module/name: christmas_island → ChristmasIsland (CX, CXR). Remove the alternate christmas_islands variant and all conflict markers.
Apply:
-<<<<<<< HEAD
-<<<<<<< HEAD
-from holidays.countries.christmas_island import ChristmasIsland, CX, CXR
-=======
-from holidays.countries.christmas_islands import ChristmasIslands, CX, CXR
->>>>>>> 5505906f (Add Christmas Island holidays)
-=======
-from holidays.countries.christmas_island import ChristmasIsland, CX, CXR
->>>>>>> f097c6b9 (Fixed Formatting Issues and tests)
+from holidays.countries.christmas_island import ChristmasIsland, CX, CXR
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
<<<<<<< HEAD | |
<<<<<<< HEAD | |
from holidays.countries.christmas_island import ChristmasIsland, CX, CXR | |
======= | |
from holidays.countries.christmas_islands import ChristmasIslands, CX, CXR | |
>>>>>>> 5505906f (Add Christmas Island holidays) | |
======= | |
from holidays.countries.christmas_island import ChristmasIsland, CX, CXR | |
>>>>>>> f097c6b9 (Fixed Formatting Issues and tests) | |
from holidays.countries.christmas_island import ChristmasIsland, CX, CXR |
🧰 Tools
🪛 Ruff (0.12.2)
59-59: SyntaxError: Expected a statement
59-59: SyntaxError: Expected a statement
59-59: SyntaxError: Expected a statement
59-59: SyntaxError: Expected a statement
60-60: SyntaxError: Expected a statement
60-60: SyntaxError: Expected a statement
60-60: SyntaxError: Expected a statement
60-60: SyntaxError: Expected a statement
62-62: SyntaxError: Expected a statement
62-62: SyntaxError: Expected a statement
62-62: SyntaxError: Expected a statement
62-62: SyntaxError: Expected a statement
62-63: SyntaxError: Expected a statement
64-64: SyntaxError: Expected a statement
64-64: SyntaxError: Expected a statement
64-64: SyntaxError: Expected a statement
64-64: SyntaxError: Expected a statement
64-64: SyntaxError: Simple statements must be separated by newlines or semicolons
64-64: SyntaxError: Expected ',', found name
64-64: SyntaxError: Expected ',', found name
64-64: SyntaxError: Expected ',', found name
65-65: SyntaxError: Expected a statement
65-65: SyntaxError: Expected a statement
65-65: SyntaxError: Expected a statement
65-65: SyntaxError: Expected a statement
65-66: SyntaxError: Expected a statement
67-67: SyntaxError: Expected a statement
67-67: SyntaxError: Expected a statement
67-67: SyntaxError: Expected a statement
67-67: SyntaxError: Expected a statement
67-67: SyntaxError: Expected ',', found name
67-67: SyntaxError: Expected ',', found name
🤖 Prompt for AI Agents
In holidays/countries/__init__.py around lines 59 to 67, the file contains
unresolved merge conflict markers and two conflicting imports for Christmas
Island; remove the conflict markers and the alternate import for
"christmas_islands" and keep the established import "from
holidays.countries.christmas_island import ChristmasIsland, CX, CXR" only;
ensure no leftover <<<<<<<, =======, or >>>>>>> lines remain and run a quick
lint to confirm the module imports cleanly.
<<<<<<< HEAD | ||
from holidays.countries.niue import Niue, NU, NIU | ||
======= | ||
>>>>>>> af207d1b (Add Norfolk Island holidays) | ||
from holidays.countries.norfolk_island import NorfolkIsland, NF, NFK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolve merge conflict: retain Niue import in alphabetical position.
Conflict markers cause SyntaxError. Keep Niue import between Nigeria and Norfolk Island.
Apply:
-<<<<<<< HEAD
-from holidays.countries.niue import Niue, NU, NIU
-=======
->>>>>>> af207d1b (Add Norfolk Island holidays)
+from holidays.countries.niue import Niue, NU, NIU
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 Ruff (0.12.2)
182-182: SyntaxError: Expected a statement
182-182: SyntaxError: Expected a statement
182-182: SyntaxError: Expected a statement
182-182: SyntaxError: Expected a statement
184-184: SyntaxError: Expected a statement
184-184: SyntaxError: Expected a statement
184-184: SyntaxError: Expected a statement
184-184: SyntaxError: Expected a statement
184-185: SyntaxError: Expected a statement
185-185: SyntaxError: Expected a statement
185-185: SyntaxError: Expected a statement
185-185: SyntaxError: Expected a statement
185-185: SyntaxError: Expected a statement
185-185: SyntaxError: Expected ',', found name
185-185: SyntaxError: Expected ',', found name
185-185: SyntaxError: Expected ',', found name
🤖 Prompt for AI Agents
In holidays/countries/__init__.py around lines 182-186 there are leftover Git
conflict markers and the Niue import was removed; remove the conflict markers
(<<<<<<<, =======, >>>>>>>), restore the line "from holidays.countries.niue
import Niue, NU, NIU" and place it alphabetically between Nigeria and Norfolk
Island imports so imports remain sorted and the file parses without a
SyntaxError.
from holidays.countries.south_korea import SouthKorea, KR, KOR, Korea | ||
from holidays.countries.spain import Spain, ES, ESP | ||
from holidays.countries.sri_lanka import SriLanka, LK, LKA | ||
from holidays.countries.sudan import Sudan, SD, SDN |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Sudan re-export looks correct and well-placed.
Absolute import, correct symbols (Sudan, SD, SDN), and alphabetical ordering (after Sri Lanka, before Suriname) align with project conventions noted by maintainers.
Run to verify placement, registry entry, and absence of conflict markers:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "1) Check unresolved merge markers anywhere:"
rg -n '^(<<<<<<<|=======|>>>>>>>)' || echo "No conflict markers found."
echo "2) Ensure singular Christmas Island import is used in __init__.py:"
rg -n "from holidays\.countries\.christmas_island import ChristmasIsland, CX, CXR" holidays/countries/__init__.py
echo " Check no plural variant remains:"
! rg -n "christmas_islands" holidays/countries/__init__.py
echo "3) Ensure Niue import exists and markers are gone:"
rg -n "from holidays\.countries\.niue import Niue, NU, NIU" holidays/countries/__init__.py
! rg -n '^(<<<<<<<|=======|>>>>>>>)' holidays/countries/__init__.py
echo "4) Verify Sudan import ordering between Sri Lanka and Suriname:"
sri=$(rg -n "from holidays\.countries\.sri_lanka import SriLanka, LK, LKA" holidays/countries/__init__.py | cut -d: -f1)
sud=$(rg -n "from holidays\.countries\.sudan import Sudan, SD, SDN" holidays/countries/__init__.py | cut -d: -f1)
sur=$(rg -n "from holidays\.countries\.suriname import Suriname, SR, SUR" holidays/countries/__init__.py | cut -d: -f1)
echo "Lines -> SriLanka:$sri Sudan:$sud Suriname:$sur"
test "$sri" -lt "$sud" -a "$sud" -lt "$sur" && echo "Ordering OK" || { echo "Ordering suspect"; exit 1; }
echo "5) Verify registry contains Sudan tuple:"
rg -nP '\("Sudan",\s*"SD",\s*"SDN"\)' holidays/registry.py
Length of output: 35048
Remove all unresolved merge markers and clean up duplicate imports before merging
The Sudan export and registry entry are correctly added, but there are still outstanding merge conflicts and a leftover plural import that must be resolved.
• In holidays/countries/init.py
– Lines 59–60, 62, 64–67 and 182–185 contain <<<<<<<
, =======
, and >>>>>>>
markers; remove these so the file parses.
– At line 63 remove the plural import
python from holidays.countries.christmas_islands import ChristmasIslands, CX, CXR
and ensure exactly one singular import remains, e.g.:
python from holidays.countries.christmas_island import ChristmasIsland, CX, CXR
positioned in alphabetical order (after Christmas Island, before Cocos).
• Across the repo there are conflict markers in README.md, tests (e.g., test_norfolk_island.py), locale PO files, and country modules. Resolve all of these to avoid build/test failures.
Once conflicts and duplicate imports are cleaned up, this change is ready to merge.
🤖 Prompt for AI Agents
holidays/countries/__init__.py lines 59-60, 62, 63, 64-67 and 182-185: remove
all unresolved git merge markers (<<<<<<<, =======, >>>>>>>) so the file parses;
at line 63 remove the plural import "ChristmasIslands, CX, CXR" and ensure a
single singular import "ChristmasIsland, CX, CXR" remains, placed alphabetically
(after Christmas Island and before Cocos) among the other imports; verify there
are no duplicate imports for Sudan (leave the single "from
holidays.countries.sudan import Sudan, SD, SDN" on line 245) and run a repo-wide
search to remove any remaining conflict markers in README.md, tests (e.g.,
test_norfolk_island.py), locale PO files, and country modules, resolving each
conflict so files build and tests can run.
<<<<<<< HEAD | ||
<<<<<<< HEAD | ||
from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays | ||
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, JUN, JUL, AUG, SEP, OCT, NOV | ||
======= | ||
from holidays.calendars import _CustomIslamicHolidays | ||
<<<<<<< HEAD | ||
from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC | ||
>>>>>>> f097c6b9 (Fixed Formatting Issues and tests) | ||
======= | ||
======= | ||
from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays | ||
>>>>>>> 0aed4632 (added custom chinese holidays) | ||
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC | ||
>>>>>>> b356221b (updated test cases and holidays) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolve merge conflicts in imports.
File is syntactically broken. Consolidate to a single, minimal import set.
-from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays
-<<<<<<< HEAD
-... (conflict markers) ...
-from holidays.calendars.gregorian import JAN, FEB, MAR, APR, JUN, JUL, AUG, SEP, OCT, NOV
-=======
-from holidays.calendars import _CustomIslamicHolidays
-... (conflict markers) ...
-from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
->>>>>>> ...
+from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays
+from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
<<<<<<< HEAD | |
<<<<<<< HEAD | |
from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays | |
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, JUN, JUL, AUG, SEP, OCT, NOV | |
======= | |
from holidays.calendars import _CustomIslamicHolidays | |
<<<<<<< HEAD | |
from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC | |
>>>>>>> f097c6b9 (Fixed Formatting Issues and tests) | |
======= | |
======= | |
from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays | |
>>>>>>> 0aed4632 (added custom chinese holidays) | |
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC | |
>>>>>>> b356221b (updated test cases and holidays) | |
# Replace lines 15–29 with the following clean import block: | |
from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays | |
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC |
🧰 Tools
🪛 Ruff (0.12.2)
15-15: SyntaxError: Expected a statement
15-15: SyntaxError: Expected a statement
15-15: SyntaxError: Expected a statement
15-15: SyntaxError: Expected a statement
16-16: SyntaxError: Expected a statement
16-16: SyntaxError: Expected a statement
16-16: SyntaxError: Expected a statement
16-16: SyntaxError: Expected a statement
19-19: SyntaxError: Expected a statement
19-19: SyntaxError: Expected a statement
19-19: SyntaxError: Expected a statement
19-19: SyntaxError: Expected a statement
19-20: SyntaxError: Expected a statement
21-21: SyntaxError: Expected a statement
21-21: SyntaxError: Expected a statement
21-21: SyntaxError: Expected a statement
21-21: SyntaxError: Expected a statement
23-23: SyntaxError: Expected a statement
23-23: SyntaxError: Expected a statement
23-23: SyntaxError: Expected a statement
23-23: SyntaxError: Expected a statement
23-23: SyntaxError: Expected ',', found name
23-23: SyntaxError: Expected ',', found name
24-24: SyntaxError: Expected a statement
24-24: SyntaxError: Expected a statement
24-24: SyntaxError: Expected a statement
24-24: SyntaxError: Expected a statement
24-25: SyntaxError: Expected a statement
25-25: SyntaxError: Expected a statement
25-25: SyntaxError: Expected a statement
25-25: SyntaxError: Expected a statement
25-25: SyntaxError: Expected a statement
25-26: SyntaxError: Expected a statement
27-27: SyntaxError: Expected a statement
27-27: SyntaxError: Expected a statement
27-27: SyntaxError: Expected a statement
27-27: SyntaxError: Expected a statement
27-27: SyntaxError: Simple statements must be separated by newlines or semicolons
27-27: SyntaxError: Expected ',', found name
27-27: SyntaxError: Expected ',', found name
27-27: SyntaxError: Expected ',', found name
29-29: SyntaxError: Expected a statement
29-29: SyntaxError: Expected a statement
29-29: SyntaxError: Expected a statement
29-29: SyntaxError: Expected a statement
29-29: SyntaxError: Expected ',', found name
29-29: SyntaxError: Expected ',', found name
🤖 Prompt for AI Agents
In holidays/countries/christmas_island.py around lines 15 to 29, resolve the
leftover Git merge markers and duplicate imports by removing the
<<<<<<</=======/>>>>>>> blocks and consolidating to a single import statement:
import the needed calendar helpers (_CustomChineseHolidays and
_CustomIslamicHolidays if both are used) and a single, minimal gregorian month
list (only the month constants actually referenced elsewhere in the file; if
unsure, include JAN through DEC), ensuring there are no duplicate or conflicting
imports and the file is syntactically valid.
class ChristmasIsland( | ||
ObservedHolidayBase, | ||
<<<<<<< HEAD | ||
<<<<<<< HEAD | ||
ChineseCalendarHolidays, | ||
======= | ||
>>>>>>> f097c6b9 (Fixed Formatting Issues and tests) | ||
======= | ||
ChineseCalendarHolidays, | ||
>>>>>>> 63a330eb (fix) | ||
ChristianHolidays, | ||
InternationalHolidays, | ||
IslamicHolidays, | ||
StaticHolidays, | ||
<<<<<<< HEAD | ||
<<<<<<< HEAD | ||
): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix base-class list and remove conflict markers.
Keep ChineseCalendarHolidays exactly once.
class ChristmasIsland(
ObservedHolidayBase,
-<<<<<<< HEAD
- ChineseCalendarHolidays,
-=======
->>>>>>> ...
+ ChineseCalendarHolidays,
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
-<<<<<<< HEAD
-... (conflict markers) ...
-=======
- ChineseCalendarHolidays,
-... (conflict markers) ...
->>>>>>> ...
):
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 Ruff (0.12.2)
47-47: SyntaxError: Expected ',', found '<<'
47-47: SyntaxError: Expected ',', found '<<'
47-47: SyntaxError: Expected ',', found '<<'
47-47: SyntaxError: Expected ',', found '<'
48-48: SyntaxError: Expected an expression
48-48: SyntaxError: Expected an expression
48-48: SyntaxError: Expected an expression
49-49: SyntaxError: Expected ',', found name
50-50: SyntaxError: Expected ',', found '=='
50-50: SyntaxError: Expected ',', found '=='
50-50: SyntaxError: Expected ',', found '=='
50-50: SyntaxError: Expected ',', found '='
51-51: SyntaxError: Expected ',', found '>>'
51-51: SyntaxError: Expected ',', found '>>'
51-51: SyntaxError: Expected ',', found '>>'
51-51: SyntaxError: Expected ',', found '>'
51-51: SyntaxError: Expected a parameter name
51-51: SyntaxError: Expected ',', found name
51-51: SyntaxError: Expected ',', found name
52-52: SyntaxError: Expected an expression
52-52: SyntaxError: Expected an expression
52-52: SyntaxError: Expected an expression
54-54: SyntaxError: Expected ',', found '>>'
54-54: SyntaxError: Expected ',', found '>>'
54-54: SyntaxError: Expected ',', found '>>'
54-54: SyntaxError: Expected ',', found '>'
54-54: SyntaxError: Positional argument cannot follow keyword argument
54-54: SyntaxError: Expected ',', found name
55-55: SyntaxError: Expected ',', found name
56-56: SyntaxError: Positional argument cannot follow keyword argument
57-57: SyntaxError: Positional argument cannot follow keyword argument
58-58: SyntaxError: Positional argument cannot follow keyword argument
59-59: SyntaxError: Expected ',', found '<<'
59-59: SyntaxError: Expected ',', found '<<'
59-59: SyntaxError: Expected ',', found '<<'
59-59: SyntaxError: Expected ',', found '<'
59-59: SyntaxError: Positional argument cannot follow keyword argument
60-60: SyntaxError: Expected an expression
60-60: SyntaxError: Expected an expression
60-60: SyntaxError: Expected an expression
🤖 Prompt for AI Agents
In holidays/countries/christmas_island.py around lines 45 to 61, there are merge
conflict markers and a duplicated ChineseCalendarHolidays entry in the class
base list; remove the conflict markers (<<<<<<<, =======, >>>>>>>) and keep
ChineseCalendarHolidays exactly once, ensuring the base-class list reads cleanly
(ObservedHolidayBase, ChineseCalendarHolidays, ChristianHolidays,
InternationalHolidays, IslamicHolidays, StaticHolidays) and the closing
parenthesis remains in place.
<<<<<<< HEAD | ||
("2022-12-26", "Boxing Day"), | ||
("2022-12-27", "Christmas Day (observed)"), | ||
======= | ||
("2022-12-26", "Boxing Day; Christmas Day (observed)"), | ||
("2022-12-27", "Boxing Day (observed)"), | ||
) | ||
|
||
def test_l10n_en_nf(self): | ||
self.assertLocalizedHolidays( | ||
"en_NF", | ||
("2022-01-01", "New Year's Day"), | ||
("2022-01-03", "New Year's Day (observed)"), | ||
("2022-01-26", "Australia Day"), | ||
("2022-03-06", "Foundation Day"), | ||
("2022-03-07", "Foundation Day (observed)"), | ||
("2022-04-15", "Good Friday"), | ||
("2022-04-18", "Easter Monday"), | ||
("2022-04-25", "ANZAC Day"), | ||
("2022-06-08", "Bounty Day"), | ||
("2022-06-13", "Queen's Birthday"), | ||
("2022-09-22", "National Day of Mourning for Queen Elizabeth II"), | ||
("2022-10-10", "Show Day"), | ||
("2022-11-30", "Thanksgiving Day"), | ||
("2022-12-25", "Christmas Day"), | ||
("2022-12-26", "Boxing Day; Christmas Day (observed)"), | ||
("2022-12-27", "Boxing Day (observed)"), | ||
>>>>>>> af207d1b (Add Norfolk Island holidays) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolve localization test conflicts.
The af207d1 version shows combined holiday strings when holidays fall on the same observed date.
The key difference is:
- HEAD: Separate entries for Boxing Day and Christmas Day (observed)
- af207d1: Combined entry "Boxing Day; Christmas Day (observed)" when they share a date
This needs resolution based on the actual implementation behavior.
🧰 Tools
🪛 Ruff (0.12.2)
250-250: SyntaxError: Expected ',', found '<<'
250-250: SyntaxError: Expected ',', found '<<'
250-250: SyntaxError: Expected ',', found '<<'
250-250: SyntaxError: Expected ',', found '<'
253-253: SyntaxError: Expected ',', found '=='
253-253: SyntaxError: Expected ',', found '=='
253-253: SyntaxError: Expected ',', found '=='
253-253: SyntaxError: Expected ',', found '='
277-277: SyntaxError: Expected ',', found '>>'
277-277: SyntaxError: Expected ',', found '>>'
277-277: SyntaxError: Expected ',', found '>>'
277-277: SyntaxError: Expected ',', found '>'
277-277: SyntaxError: Expected ',', found name
277-277: SyntaxError: Expected ',', found name
277-277: SyntaxError: Expected ',', found name
🤖 Prompt for AI Agents
In tests/countries/test_norfolk_island.py around lines 250 to 277, the
localized-holidays assertions conflict: HEAD expects two separate entries for
2022-12-26 and 2022-12-27 while af207d1b expects a combined label "Boxing Day;
Christmas Day (observed)" on 2022-12-26 and "Boxing Day (observed)" on
2022-12-27; adjust the test to match the actual holiday implementation by
consolidating the expected strings when multiple holidays share a date (i.e.,
replace the two separate expectations with the single combined string "Boxing
Day; Christmas Day (observed)" for 2022-12-26 and keep 2022-12-27 as "Boxing Day
(observed)"), or if the implementation returns separate entries instead, change
the af207d1b combined expectation back to two distinct assertions — pick the
variant consistent with the code and run tests to confirm.
from holidays.countries import Sudan, SD, SDN | ||
from tests.common import CommonCountryTests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Import style: prefer direct module import for new tests.
Matches the dominant pattern in recent additions.
-from holidays.countries import Sudan, SD, SDN
+from holidays.countries.sudan import Sudan, SD, SDN
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
from holidays.countries import Sudan, SD, SDN | |
from tests.common import CommonCountryTests | |
from holidays.countries.sudan import Sudan, SD, SDN | |
from tests.common import CommonCountryTests |
🤖 Prompt for AI Agents
In tests/countries/test_sudan.py around lines 15-16, the test uses named imports
from holidays.countries; change to a direct module import to match project
style: replace "from holidays.countries import Sudan, SD, SDN" with "from
holidays.countries import sudan" (or "import holidays.countries.sudan as sudan")
and update any references in the file to use sudan.Sudan, sudan.SD, and
sudan.SDN accordingly.
def test_orthodox_christmas(self): | ||
self.assertHolidayName( | ||
"عيد الميلاد الأرثوذكسي", (f"{year}-01-25" for year in range(1985, 2050)) | ||
) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Orthodox Christmas date should be Julian Christmas (Jan 7), not Jan 25.
Adjust to match provider change.
def test_orthodox_christmas(self):
self.assertHolidayName(
- "عيد الميلاد الأرثوذكسي", (f"{year}-01-25" for year in range(1985, 2050))
+ "عيد الميلاد الأرثوذكسي", (f"{year}-01-07" for year in range(1985, 2050))
)
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
def test_orthodox_christmas(self): | |
self.assertHolidayName( | |
"عيد الميلاد الأرثوذكسي", (f"{year}-01-25" for year in range(1985, 2050)) | |
) | |
def test_orthodox_christmas(self): | |
self.assertHolidayName( | |
"عيد الميلاد الأرثوذكسي", (f"{year}-01-07" for year in range(1985, 2050)) | |
) |
🤖 Prompt for AI Agents
In tests/countries/test_sudan.py around lines 40 to 44, the test currently
asserts Orthodox Christmas on Jan 25 (Gregorian), but it should assert
Julian/Orthodox Christmas on Jan 7; update the date generator string from
"-01-25" to "-01-07" for the same year range (e.g., range(1985, 2050)) so the
test checks Jan 7 for each year.
def test_l10n_default(self): | ||
self.assertLocalizedHolidays( | ||
("2022-01-01", "عيد الإستقلال"), | ||
("2022-01-07", "عيد الميلاد المجيد"), | ||
("2022-01-25", "عيد الميلاد الأرثوذكسي"), | ||
("2022-04-24", "عيد القيامة المجيد"), | ||
("2022-04-25", "عيد القيامة المجيد (ملاحظة)"), | ||
("2022-05-01", "عيد الفطر المبارك"), | ||
("2022-05-02", "عيد الفطر المبارك (ملاحظة)"), | ||
("2022-07-10", "عيد الأضحى المبارك"), | ||
("2022-07-11", "عيد الأضحى المبارك (ملاحظة)"), | ||
("2022-07-30", "رأس السنة الهجرية"), | ||
("2022-10-08", "المولد النبوي الشريف"), | ||
("2022-12-25", "يوم عيد الميلاد"), | ||
("2022-12-26", "يوم عيد الميلاد (ملاحظة)"), | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Update l10n default cases for Orthodox Christmas (Jan 7).
Keep observed logic intact elsewhere.
- ("2022-01-25", "عيد الميلاد الأرثوذكسي"),
+ ("2022-01-07", "عيد الميلاد الأرثوذكسي"),
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
def test_l10n_default(self): | |
self.assertLocalizedHolidays( | |
("2022-01-01", "عيد الإستقلال"), | |
("2022-01-07", "عيد الميلاد المجيد"), | |
("2022-01-25", "عيد الميلاد الأرثوذكسي"), | |
("2022-04-24", "عيد القيامة المجيد"), | |
("2022-04-25", "عيد القيامة المجيد (ملاحظة)"), | |
("2022-05-01", "عيد الفطر المبارك"), | |
("2022-05-02", "عيد الفطر المبارك (ملاحظة)"), | |
("2022-07-10", "عيد الأضحى المبارك"), | |
("2022-07-11", "عيد الأضحى المبارك (ملاحظة)"), | |
("2022-07-30", "رأس السنة الهجرية"), | |
("2022-10-08", "المولد النبوي الشريف"), | |
("2022-12-25", "يوم عيد الميلاد"), | |
("2022-12-26", "يوم عيد الميلاد (ملاحظة)"), | |
) | |
def test_l10n_default(self): | |
self.assertLocalizedHolidays( | |
("2022-01-01", "عيد الإستقلال"), | |
("2022-01-07", "عيد الميلاد المجيد"), | |
("2022-01-07", "عيد الميلاد الأرثوذكسي"), | |
("2022-04-24", "عيد القيامة المجيد"), | |
("2022-04-25", "عيد القيامة المجيد (ملاحظة)"), | |
("2022-05-01", "عيد الفطر المبارك"), | |
("2022-05-02", "عيد الفطر المبارك (ملاحظة)"), | |
("2022-07-10", "عيد الأضحى المبارك"), | |
("2022-07-11", "عيد الأضحى المبارك (ملاحظة)"), | |
("2022-07-30", "رأس السنة الهجرية"), | |
("2022-10-08", "المولد النبوي الشريف"), | |
("2022-12-25", "يوم عيد الميلاد"), | |
("2022-12-26", "يوم عيد الميلاد (ملاحظة)"), | |
) |
🤖 Prompt for AI Agents
In tests/countries/test_sudan.py around lines 102 to 117, update the
localization expected string for the 2022-01-07 holiday to use the Orthodox
Christmas label; change the tuple ("2022-01-07", "عيد الميلاد المجيد") to
("2022-01-07", "عيد الميلاد الأرثوذكسي") and leave all other test entries and
observed/notice variants unchanged.
def test_l10n_en_us(self): | ||
self.assertLocalizedHolidays( | ||
"en_US", | ||
("2022-01-01", "Independence Day"), | ||
("2022-01-07", "Coptic Christmas"), | ||
("2022-01-25", "Orthodox Christmas"), | ||
("2022-04-24", "Coptic Easter"), | ||
("2022-04-25", "Coptic Easter (observed)"), | ||
("2022-05-01", "Eid al-Fitr"), | ||
("2022-05-02", "Eid al-Fitr (observed)"), | ||
("2022-07-10", "Eid al-Adha"), | ||
("2022-07-11", "Eid al-Adha (observed)"), | ||
("2022-07-30", "Islamic New Year"), | ||
("2022-10-08", "Prophet's Birthday"), | ||
("2022-12-25", "Christmas Day"), | ||
("2022-12-26", "Christmas Day (observed)"), | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Update en_US l10n for Orthodox Christmas (Jan 7).
Aligns with provider fix.
- ("2022-01-25", "Orthodox Christmas"),
+ ("2022-01-07", "Orthodox Christmas"),
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
def test_l10n_en_us(self): | |
self.assertLocalizedHolidays( | |
"en_US", | |
("2022-01-01", "Independence Day"), | |
("2022-01-07", "Coptic Christmas"), | |
("2022-01-25", "Orthodox Christmas"), | |
("2022-04-24", "Coptic Easter"), | |
("2022-04-25", "Coptic Easter (observed)"), | |
("2022-05-01", "Eid al-Fitr"), | |
("2022-05-02", "Eid al-Fitr (observed)"), | |
("2022-07-10", "Eid al-Adha"), | |
("2022-07-11", "Eid al-Adha (observed)"), | |
("2022-07-30", "Islamic New Year"), | |
("2022-10-08", "Prophet's Birthday"), | |
("2022-12-25", "Christmas Day"), | |
("2022-12-26", "Christmas Day (observed)"), | |
) | |
def test_l10n_en_us(self): | |
self.assertLocalizedHolidays( | |
"en_US", | |
("2022-01-01", "Independence Day"), | |
("2022-01-07", "Coptic Christmas"), | |
("2022-01-07", "Orthodox Christmas"), | |
("2022-04-24", "Coptic Easter"), | |
("2022-04-25", "Coptic Easter (observed)"), | |
("2022-05-01", "Eid al-Fitr"), | |
("2022-05-02", "Eid al-Fitr (observed)"), | |
("2022-07-10", "Eid al-Adha"), | |
("2022-07-11", "Eid al-Adha (observed)"), | |
("2022-07-30", "Islamic New Year"), | |
("2022-10-08", "Prophet's Birthday"), | |
("2022-12-25", "Christmas Day"), | |
("2022-12-26", "Christmas Day (observed)"), | |
) |
🤖 Prompt for AI Agents
In tests/countries/test_sudan.py around lines 119-135, the en_US localization
expected for 2022-01-07 is incorrect; update the tuple for ("2022-01-07",
"Coptic Christmas") to ("2022-01-07", "Orthodox Christmas") so the test matches
the provider fix, run the test suite to verify, and if any l10n data files were
changed ensure they are in sync with this test update.
ok i messed up big while rebasing and now its a mess , @KJhellico should i create a new PR and close this one? |
If you see no other way to solve it, yes. |
Proposed change
Your PR description goes here.
Type of change
holidays
functionality in general)Checklist
make check
locally; all checks and tests passed.