+
Skip to content

Conversation

anshonweb
Copy link
Contributor

Proposed change

Your PR description goes here.

Type of change

  • New country/market holidays support (thank you!)
  • Supported country/market holidays update (calendar discrepancy fix, localization)
  • Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
  • Dependency update (version deprecation/pin/upgrade)
  • Bugfix (non-breaking change which fixes an issue)
  • Breaking change (a code change causing existing functionality to break)
  • New feature (new holidays functionality in general)

Checklist

@anshonweb
Copy link
Contributor Author

I think ive made a mess with my Sudan branch

Copy link
Contributor

coderabbitai bot commented Aug 19, 2025

Summary by CodeRabbit

  • New Features
    • Added Sudan holidays support with Arabic and English translations.
  • Documentation
    • README contains unresolved merge conflicts in Available Countries and specific entries.
  • Tests
    • Introduced comprehensive Sudan holiday and localization test suite.
  • Chores
    • Added Sudan to the country registry.
    • Several locale files (Christmas Island, Norfolk Island) and the version file contain unresolved merge conflicts that may affect translations and version reporting.

Walkthrough

Adds 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

Cohort / File(s) Summary of changes
New country: Sudan
holidays/countries/sudan.py, holidays/countries/__init__.py, holidays/registry.py, tests/countries/test_sudan.py
Adds Sudan holiday provider (classes Sudan/SD/SDN), registry entry "sudan", tests covering holidays and localization, and exposes Sudan in package exports.
Locale files for Sudan
holidays/locale/ar_SD/LC_MESSAGES/SD.po, holidays/locale/en_US/LC_MESSAGES/SD.po
Adds Arabic and English PO files for Sudan translations and observed/estimated label mappings.
Christmas Island / Christmas Islands conflict
holidays/countries/christmas_island.py, holidays/countries/__init__.py, holidays/registry.py, holidays/locale/en_CX/LC_MESSAGES/CX.po, holidays/locale/en_US/LC_MESSAGES/CX.po, tests/countries/test_christmas_island.py
Multiple unresolved merge conflicts introducing divergent changes (Chinese/Islamic calendars, expanded special holidays, naming singular vs plural) — file state is conflicted and semantically ambiguous.
Norfolk Island changes & conflicts
holidays/countries/norfolk_island.py, holidays/locale/en_NF/LC_MESSAGES/NF.po, holidays/locale/en_US/LC_MESSAGES/NF.po, tests/countries/test_norfolk_island.py
One branch adds expanded Norfolk Island holiday logic (observed/estimated labels, sovereignty birthday logic, new rules); multiple files contain unresolved merge conflicts.
README and docs
README.md
README contains unresolved merge conflict blocks in Available Countries section with inconsistent country counts and conflicting country rows.
Version bump conflict
holidays/version.py
Unresolved conflict on version with multiple candidate values.
Other locale conflicts
holidays/locale/en_US/LC_MESSAGES/CX.po, holidays/locale/en_CX/LC_MESSAGES/CX.po, holidays/locale/en_US/LC_MESSAGES/NF.po, holidays/locale/en_NF/LC_MESSAGES/NF.po
Multiple PO files contain interleaved/duplicated translations and unresolved merge markers, making them invalid until resolved.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Suggested reviewers

  • arkid15r
  • KJhellico

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 Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@KJhellico
Copy link
Collaborator

@anshonweb , please rebase your branch onto current dev.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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.

📥 Commits

Reviewing files that changed from the base of the PR and between 8a35942 and 35cd38a.

📒 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 needed

The 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 225

I 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 each tr("…") literal against the entries in holidays/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
The Sudan constructor exposes islamic_show_estimated (passed through to SudanIslamicHolidays) and sets a default observed_rule, so both the estimated-Islamic and observed-holiday toggles work as intended across the tested years.


40-43: Verify Orthodox Christmas date in Sudan

The 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 in test_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.

Comment on lines +53 to +59
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
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Comment on lines +74 to +76
# Orthodox Christmas.
dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي")))

Copy link
Contributor

@coderabbitai coderabbitai bot Aug 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
# 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.

Copy link
Collaborator

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

Copy link
Contributor

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"
Copy link
Contributor

@coderabbitai coderabbitai bot Aug 19, 2025

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).

Copy link
Collaborator

@PPsyrius PPsyrius Aug 20, 2025

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

Copy link
Contributor

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!

Comment on lines +96 to +101
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)

Copy link
Contributor

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.

@KJhellico KJhellico marked this pull request as draft August 19, 2025 19:20
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_Sudan>
* <https://web.archive.org/web/20250801051246/https://www.sudanembassy.org.uk/public-holidays/>
Copy link
Collaborator

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

Suggested change
* <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/>

Comment on lines +74 to +76
# Orthodox Christmas.
dts_observed.add(self._add_holiday_jan_25(tr("عيد الميلاد الأرثوذكسي")))

Copy link
Collaborator

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

Comment on lines +110 to +144
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),
}
Copy link
Collaborator

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

Suggested change
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),
}

Comment on lines +12 to +13
msgid ""
msgstr "Project-Id-Version: Holidays 0.78\n"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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"
Copy link
Collaborator

@PPsyrius PPsyrius Aug 20, 2025

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"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"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"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"Language: tkl\n"
"Language: en_US\n"

Copy link

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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.po

If 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.po

We’ve confirmed multiple msgid values are defined more than once in holidays/locale/en_US/LC_MESSAGES/CX.po. Please consolidate to a single occurrence per holiday and ensure the U.S. spelling appears in msgstr (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 each msgstr uses American English spelling (e.g., change msgid "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 -d
holidays/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 header

Please 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 28

According 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 remains

Suggested 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.po

Also 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)
+        )

Comment on lines +59 to +67
<<<<<<< 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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

⚠️ Potential issue

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.

Suggested change
<<<<<<< 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.

Comment on lines +182 to 186
<<<<<<< HEAD
from holidays.countries.niue import Niue, NU, NIU
=======
>>>>>>> af207d1b (Add Norfolk Island holidays)
from holidays.countries.norfolk_island import NorfolkIsland, NF, NFK
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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
Copy link
Contributor

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.

Comment on lines +15 to +29
<<<<<<< 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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
<<<<<<< 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.

Comment on lines 45 to +61
class ChristmasIsland(
ObservedHolidayBase,
<<<<<<< HEAD
<<<<<<< HEAD
ChineseCalendarHolidays,
=======
>>>>>>> f097c6b9 (Fixed Formatting Issues and tests)
=======
ChineseCalendarHolidays,
>>>>>>> 63a330eb (fix)
ChristianHolidays,
InternationalHolidays,
IslamicHolidays,
StaticHolidays,
<<<<<<< HEAD
<<<<<<< HEAD
):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Comment on lines +250 to +277
<<<<<<< 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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Comment on lines +15 to +16
from holidays.countries import Sudan, SD, SDN
from tests.common import CommonCountryTests
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +40 to +44
def test_orthodox_christmas(self):
self.assertHolidayName(
"عيد الميلاد الأرثوذكسي", (f"{year}-01-25" for year in range(1985, 2050))
)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

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.

Suggested change
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.

Comment on lines +102 to +117
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", "يوم عيد الميلاد (ملاحظة)"),
)
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +119 to +135
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)"),
)
Copy link
Contributor

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.

Suggested change
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.

@anshonweb
Copy link
Contributor Author

ok i messed up big while rebasing and now its a mess , @KJhellico should i create a new PR and close this one?

@KJhellico
Copy link
Collaborator

should i create a new PR and close this one?

If you see no other way to solve it, yes.

@anshonweb anshonweb closed this Aug 24, 2025
@anshonweb anshonweb deleted the sudan branch August 24, 2025 13:54
@anshonweb anshonweb restored the sudan branch August 24, 2025 14:03
@anshonweb anshonweb deleted the sudan branch August 24, 2025 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载