8000 Add Guyana holidays by kritibirda26 · Pull Request #2614 · vacanza/holidays · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Add Guyana holidays #2614

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
Jun 14, 2025
Merged

Add Guyana holidays #2614

merged 22 commits into from
Jun 14, 2025

Conversation

kritibirda26
Copy link
Collaborator
@kritibirda26 kritibirda26 commented Jun 8, 2025

Proposed change

Add Guyana holidays.

Resolves #1196.

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

Copy link
Contributor
coderabbitai bot commented Jun 8, 2025

Summary by CodeRabbit

  • New Features
    • Added comprehensive support for Guyana's public holidays, including historical and current observances, to the holiday calendar.
    • Introduced localization for Guyana holidays in both Guyanese English (en_GY) and US English (en_US).
  • Documentation
    • Updated documentation to reflect the addition of Guyana as a supported country.
  • Tests
    • Added tests to verify correct holiday calculation and localization for Guyana.
  • Chores
    • Updated internal registry and data snapshots to include Guyana.

Summary by CodeRabbit

  • New Features

    • Added support for Guyana's public holidays, including detailed observance rules and culturally specific holidays.
    • Introduced Guyana as a selectable country, increasing the total supported countries to 188.
    • Provided English (en_GY and en_US) localization for Guyana's holiday names.
  • Tests

    • Added comprehensive tests to verify Guyana holiday calculations and localization.
  • Documentation

    • Updated documentation to reflect the addition of Guyana and its supported languages.

Walkthrough

This change introduces full holiday support for Guyana. It adds the Guyana holiday calendar, updates documentation and registry, provides localization files for holiday names, and includes a comprehensive test suite for Guyana-specific holidays and their observance rules.

Changes

Files/Groups Change Summary
README.md Updated documentation to add Guyana as a supported country with language and code details.
holidays/countries/init.py, holidays/registry.py Registered Guyana (GY, GUY) as a supported country in the package and registry.
holidays/countries/guyana.py Added new holiday calendar implementation for Guyana, including classes and observance rules.
holidays/locale/en_GY/LC_MESSAGES/GY.po, holidays/locale/en_US/LC_MESSAGES/GY.po Added localization files for Guyana holidays in en_GY and en_US locales.
tests/countries/test_guyana.py Introduced test suite for Guyana holidays, including localization and observance tests.
snapshots/countries/GY_COMMON.json Added snapshot data for Guyana holidays from 1968 to 2050.

Assessment against linked issues

Objective Addressed Explanation
Add Guyana holidays with correct holiday dates and observance rules (#1196)
Include localization for Guyana holidays (#1196)
Register Guyana in the countries registry (#1196)
Provide tests covering Guyana holidays and localization (#1196)

Assessment against linked issues: Out-of-scope changes

No out-of-scope changes detected.

Possibly related PRs

Suggested reviewers

  • PPsyrius
  • KJhellico
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate Unit Tests
  • Create PR with Unit Tests
  • Commit Unit Tests in branch guyana
  • Post Copyable Unit Tests in 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 8000 :

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • 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. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • 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 src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

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

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

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.

Documentation and Community

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

Copy link
codecov bot commented Jun 8, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (a934403) to head (b9ce755).
Report is 1 commits behind head on dev.

Additional details and impacted files
@@            Coverage Diff            @@
##               dev     #2614   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          231       232    +1     
  Lines        14681     14739   +58     
  Branches      2050      2057    +7     
=========================================
+ Hits         14681     14739   +58     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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: 3

🔭 Outside diff range comments (1)
holidays/locale/en_GY/LC_MESSAGES/GY.po (1)

29-96: 🧹 Nitpick (assertive)

Empty translations fallback
All msgstr entries are blank, causing fallback to msgid. Consider adding region-specific spellings or phrases where needed (e.g., confirm “Labour Day” vs “Labor Day”).

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8b4f02b and 7b93a2e.

📒 Files selected for processing (7)
  • README.md (2 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/countries/guyana.py (1 hunks)
  • holidays/locale/en_GY/LC_MESSAGES/GY.po (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/GY.po (1 hunks)
  • holidays/registry.py (1 hunks)
  • tests/countries/test_guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
tests/countries/test_guyana.py (1)
Learnt from: PPsyrius
PR: vacanza/holidays#2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:47:27.213Z
Learning: For holiday tests in the vacanza/holidays project, structure tests by individual holidays rather than by years. Each test method should focus on a specific holiday and test it across multiple years (from start_year through 2050) using helper methods like `assertHolidayName`. For fixed holidays, use generators like `(f"{year}-01-01" for year in range(1991, 2051))`. For movable holidays, specify individual dates for specific years followed by a range check.
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/guyana.py (3)
  • Guyana (32-124)
  • GY (127-128)
  • GUY (131-132)
🪛 Pylint (3.3.7)
tests/countries/test_guyana.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 45-45: Missing function or method docstring

(C0116)


[convention] 50-50: Missing function or method docstring

(C0116)


[convention] 54-54: Missing function or method docstring

(C0116)


[convention] 68-68: Missing function or method docstring

(C0116)


[convention] 82-82: Missing function or method docstring

(C0116)


[convention] 89-89: Missing function or method docstring

(C0116)


[convention] 96-96: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 121-121: Missing function or method docstring

(C0116)


[convention] 138-138: Missing function or method docstring

(C0116)


[convention] 157-157: Missing function or method docstring

(C0116)


[convention] 173-173: Missing function or method docstring

(C0116)


[convention] 189-189: Missing function or method docstring

(C0116)


[convention] 206-206: Missing function or method docstring

(C0116)


[convention] 222-222: Missing function or method docstring

(C0116)

holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (133/100)

(C0301)


[convention] 256-256: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[warning] 59-59: Keyword argument before variable positional arguments list in the definition of init function

(W1113)


[convention] 127-127: Missing class docstring

(C0115)


[refactor] 127-127: Too many ancestors (9/7)

(R0901)


[convention] 131-131: Missing class docstring

(C0115)


[refactor] 131-131: Too many ancestors (9/7)

(R0901)


[convention] 135-135: Missing class docstring

(C0115)


[convention] 192-192: Missing class docstring

(C0115)


[refactor] 252-252: Too few public methods (0/2)

(R0903)

⏰ Context from checks skipped due to timeout of 300000ms (3)
  • GitHub Check: Test build on windows-latest
  • GitHub Check: Test build on macos-latest
  • GitHub Check: Test build on ubuntu-latest
🔇 Additional comments (24)
holidays/registry.py (1)

98-98: Register Guyana entry
The new "guyana": ("Guyana", "GY", "GUY") aligns with existing patterns and is correctly sorted after "guinea". No duplicates found.

README.md (2)

108-108: Update supported country count
Incremented to 186 to reflect the addition of Guyana. Confirm that any automated checks or badges tied to country count are in sync.


668-673: Add Guyana to supported countries table
Row formatting is consistent with other entries. Subdivisions left blank and languages (en_GY, en_US) match locale files.

holidays/countries/__init__.py (1)

94-94: Expose Guyana in package namespace
Import of Guyana, GY, GUY is correct and follows the alias pattern established for other countries.

holidays/locale/en_GY/LC_MESSAGES/GY.po (1)

1-28: Verify PO file headers
Headers correctly specify the en_GY locale. Ensure Language: en_GY and related metadata remain aligned if the file is regenerated.

holidays/locale/en_US/LC_MESSAGES/GY.po (1)

29-96: US-English translations look good
msgstr reflects American variants (e.g., “Labor Day”). Verify consistency of all entries and consider adjusting any regional names if needed.

tests/countries/test_guyana.py (14)

19-23: Test class setup looks good!

The test class properly inherits from CommonCountryTests and sets up the correct year ranges for testing Guyana holidays from 1968 onwards.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


25-26: Country aliases test is correct.

Properly verifies GY and GUY as valid aliases.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 25-25: Missing function or method docstring

(C0116)


28-29: Pre-1968 holiday test is accurate.

Correctly validates no holidays exist before the start year.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 28-28: Missing function or method docstring

(C0116)


31-33: Special holiday test matches implementation.

Validates the 2020 public holiday correctly.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 31-31: Missing function or method docstring

(C0116)


35-44: New Year's Day test is comprehensive.

Correctly tests both the regular holiday and observed dates when falling on weekends.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 35-35: Missing function or method docstring

(C0116)


45-48: Independence Day date range is correct.

Properly validates the holiday only exists in 1968-1969.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 45-45: Missing function or method docstring

(C0116)


50-52: Republic Day test aligns with historical transition.

Correctly starts from 1970 when Guyana became a republic.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 50-50: Missing function or method docstring

(C0116)


54-81: Christian holiday tests are well-structured.

Good Friday and Easter Monday tests properly validate movable holidays with specific date checks.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 54-54: Missing function or method docstring

(C0116)


[convention] 68-68: Missing function or method docstring

(C0116)


82-87: Labour Day test handles observance correctly.

Validates both regular and observed dates appropriately.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 82-82: Missing function or method docstring

(C0116)


89-94: Commonwealth Day test validates first Monday of August.

Dates correctly represent the holiday timing.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 89-89: Missing function or method docstring

(C0116)


96-119: Christmas holiday tests properly handle consecutive days.

Both Christmas Day and Day after Christmas correctly apply the SAT_SUN_TO_NEXT_MON_TUE observance rule.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 96-96: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


138-187: Religious holiday tests are comprehensive.

Deepavali, Youman Nabi, and Eid-Ul-Azha tests properly validate dates and observances.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 138-138: Missing function or method docstring

(C0116)


[convention] 157-157: Missing function or method docstring

(C0116)


[convention] 173-173: Missing function or method docstring

(C0116)


189-204: 2024 snapshot test provides good coverage.

Complete holiday list for a single year helps validate the full calendar.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 189-189: Missing function or method docstring

(C0116)


206-237: Localization tests validate regional naming differences.

Correctly tests both en_GY and en_US translations with appropriate variations.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 206-206: Missing function or method docstring

(C0116)


[convention] 222-222: Missing function or method docstring

(C0116)

holidays/countries/guyana.py (4)

32-39: Class inheritance structure is appropriate.

The multiple inheritance properly combines all needed holiday types for Guyana.

🧰 Tools
🪛 Pylint (3.3.7)

[refactor] 32-32: Too many ancestors (8/7)

(R0901)


76-124: Holiday definitions are comprehensive and accurate.

All holidays are properly defined with appropriate observance rules matching Guyana's calendar.


163-189: Verify Diwali dates from 2001-2015.

All Diwali dates from 2001-2015 are listed as October 30, which seems unusual for a lunar calendar holiday that typically varies each year.

Please verify these dates are correct according to the referenced source. If this is accurate, consider adding a comment explaining why the date was fixed for those years.


252-263: Static holidays class properly handles special occasions.

Correctly implements the 2020 special public holiday with proper documentation reference.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 256-256: Line too long (157/100)

(C0301)


[refactor] 252-252: Too few public methods (0/2)

(R0903)

@kritibirda26
Copy link
Collaborator Author
  1. The official gazette of Guyana mentions has annual proclamations for celebrating Independence Day and CARICOM Day since 2016-17.
  2. Since 2022, there are annual proclamations for Arrival Day celebrations as well.
  3. The Commonwealth Day has been named as Emancipation Day in annual proclamations since 2016 at least.

I didn't find any acts or amendments making these changes permanent, but wikipedia and other sources do include these changes. Should these changes be made as special/static holidays or added as normal public holidays?

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: 2

♻️ Duplicate comments (2)
holidays/locale/en_US/LC_MESSAGES/GY.po (1)

22-22: Good fix on the locale metadata.

The Language header now correctly shows en_US to match the file's location.

tests/countries/test_guyana.py (1)

133-133: Year range properly includes 2026.

Good fix - the range now correctly covers all tested years.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7b93a2e and 9556590.

📒 Files selected for processing (3)
  • holidays/countries/guyana.py (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/GY.po (1 hunks)
  • tests/countries/test_guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
tests/countries/test_guyana.py (2)
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: 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.
holidays/countries/guyana.py (1)
Learnt from: PPsyrius
PR: vacanza/holidays#2583
File: holidays/countries/niger.py:71-71
Timestamp: 2025-05-31T03:21:53.257Z
Learning: In the holidays Python library, the standard pattern for country class __init__ methods is to have keyword arguments with defaults before *args and **kwargs, such as `def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):`. This pattern is used consistently across all country implementations and should not be flagged as an issue.
🪛 Pylint (3.3.7)
tests/countries/test_guyana.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 45-45: Missing function or method docstring

(C0116)


[convention] 50-50: Missing function or method docstring

(C0116)


[convention] 54-54: Missing function or method docstring

(C0116)


[convention] 68-68: Missing function or method docstring

(C0116)


[convention] 82-82: Missing function or method docstring

(C0116)


[convention] 89-89: Missing function or method docstring

(C0116)


[convention] 96-96: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 121-121: Missing function or method docstring

(C0116)


[convention] 138-138: Missing function or method docstring

(C0116)


[convention] 157-157: Missing function or method docstring

(C0116)


[convention] 173-173: Missing function or method docstring

(C0116)


[convention] 189-189: Missing function or method docstring

(C0116)


[convention] 206-206: Missing function or method docstring

(C0116)


[convention] 222-222: Missing function or method docstring

(C0116)

holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (133/100)

(C0301)


[convention] 256-256: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 127-127: Missing class docstring

(C0115)


[refactor] 127-127: Too many ancestors (9/7)

(R0901)


[convention] 131-131: Missing class docstring

(C0115)


[refactor] 131-131: Too many ancestors (9/7)

(R0901)


[convention] 135-135: Missing class docstring

(C0115)


[convention] 192-192: Missing class docstring

(C0115)


[refactor] 252-252: Too few public methods (0/2)

(R0903)

⏰ Context from checks skipped due to timeout of 300000ms (1)
  • GitHub Check: Test Python 3.13 on windows-latest
🔇 Additional comments (1)
holidays/countries/guyana.py (1)

159-160: 🧹 Nitpick (assertive)

Consider extending holiday date tables beyond 2025-2026.

The Hindu and Islamic holiday date tables only extend to 2025-2026, but the test coverage goes to 2050. This might cause issues for future years.

Consider extending these date tables or implementing a calculation method for years beyond the hardcoded dates.

Also applies to: 188-189, 219-220, 248-249

⛔ Skipped due to learnings
Learnt from: PPsyrius
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:146-159
Timestamp: 2025-03-19T16:54:58.657Z
Learning: In the holidays library implementation, explicit holiday dates (like Diwali in Fiji) are only defined for historical years with official sources (2016-2025). Future dates beyond the explicitly defined range are automatically calculated by methods like `_add_diwali`, which provide approximations when official dates aren't yet available.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:171-183
Timestamp: 2025-03-29T15:15:05.919Z
Learning: In the Fiji holidays implementation, the maintainers are aware of the need to extend the MAWLID_DATES dictionary beyond 2025 when future official references become available, and will do so when appropriate. No suggestions about extending this dictionary should be made in future reviews.

Copy link
Collaborator
@PPsyrius PPsyrius left a comment

Choose a reason for hiding this comment

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

Besides this and bot's comment - I think this PR is pretty much LGTM 👍

@PPsyrius
Copy link
Collaborator
  1. The official gazette of Guyana mentions has annual proclamations for celebrating Independence Day and CARICOM Day since 2016-17.
  2. Since 2022, there are annual proclamations for Arrival Day celebrations as well.
  3. The Commonwealth Day has been named as Emancipation Day in annual proclamations since 2016 at least.

I didn't find any acts or amendments making these changes permanent, but wikipedia and other sources do include these changes. Should these changes be made as special/static holidays or added as normal public holidays?

IMO if it's de facto an annual thing by this point, we can probably include it as normal public holidays with context provide in the code 👀

Co-authored-by: ~Jhellico <KJhellico@users.noreply.github.com>
Signed-off-by: Kriti Birda <164247895+kritibirda26@users.noreply.github.com>
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: 1

♻️ Duplicate comments (3)
holidays/countries/guyana.py (3)

59-59: Fix parameter order in init method.

Move islamic_show_estimated before *args to match the standard library pattern.

-    def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):

100-110: Simplify Christmas holiday additions.

Use the more concise form as suggested in previous reviews.

-        self._add_observed(
-            # Christmas Day.
-            self._add_christmas_day(tr("Christmas Day")),
-            rule=SAT_SUN_TO_NEXT_MON_TUE,
-        )
-
-        self._add_observed(
-            # Day after Christmas.
-            self._add_christmas_day_two(tr("Day after Christmas")),
-            rule=SAT_SUN_TO_NEXT_MON_TUE,
-        )
+        self._add_observed(
+            # Christmas Day.
+            self._add_christmas_day(tr("Christmas Day")),
+            rule=SAT_SUN_TO_NEXT_MON_TUE,
+        )
+
+        self._add_observed(
+            # Day after Christmas.
+            self._add_christmas_day_two(tr("Day after Christmas")),
+            rule=SAT_SUN_TO_NEXT_MON_TUE,
+        )

167-181: Fix incorrect Diwali dates for 2001-2015.

All Diwali dates from 2001-2015 are set to October 30, which is incorrect. Diwali follows the lunar calendar and varies each year.

-        2001: (OCT, 30),
-        2002: (OCT, 30),
-        2003: (OCT, 30),
-        2004: (OCT, 30),
-        2005: (OCT, 30),
-        2006: (OCT, 30),
-        2007: (OCT, 30),
-        2008: (OCT, 30),
-        2009: (OCT, 30),
-        2010: (OCT, 30),
-        2011: (OCT, 30),
-        2012: (OCT, 30),
-        2013: (OCT, 30),
-        2014: (OCT, 30),
-        2015: (OCT, 30),
+        2001: (NOV, 14),
+        2002: (NOV, 4),
+        2003: (OCT, 25),
+        2004: (NOV, 12),
+        2005: (NOV, 1),
+        2006: (OCT, 21),
+        2007: (NOV, 9),
+        2008: (OCT, 28),
+        2009: (OCT, 17),
+        2010: (NOV, 5),
+        2011: (OCT, 26),
+        2012: (NOV, 13),
+        2013: (NOV, 3),
+        2014: (OCT, 23),
+        2015: (NOV, 11),
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9556590 and a8fdf3d.

📒 Files selected for processing (1)
  • holidays/countries/guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
holidays/countries/guyana.py (1)
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
🪛 Ruff (0.11.9)
holidays/countries/guyana.py

26-26: holidays.observed_holiday_base.SAT_SUN_TO_NEXT_WORKDAY imported but unused

Remove unused import: holidays.observed_holiday_base.SAT_SUN_TO_NEXT_WORKDAY

(F401)


78-78: Undefined name SAT_SUN_TO_NEXT_MON

(F821)

🪛 Pylint (3.3.7)
holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (133/100)

(C0301)


[convention] 259-259: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[error] 78-78: Undefined variable 'SAT_SUN_TO_NEXT_MON'

(E0602)


[convention] 130-130: Missing class docstring

(C0115)


[refactor] 130-130: Too many ancestors (9/7)

(R0901)


[convention] 134-134: Missing class docstring

(C0115)


[refactor] 134-134: Too many ancestors (9/7)

(R0901)


[convention] 138-138: Missing class docstring

(C0115)


[convention] 195-195: Missing class docstring

(C0115)


[refactor] 255-255: Too few public methods (0/2)

(R0903)


[warning] 24-29: Unused SAT_SUN_TO_NEXT_WORKDAY imported from holidays.observed_holiday_base

(W0611)

🔇 Additional comments (1)
holidays/countries/guyana.py (1)

255-267: Well-structured static holidays implementation.

The special holidays class follows the library pattern correctly with proper gazette reference.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 259-259: Line too long (157/100)

(C0301)


[refactor] 255-255: Too few public methods (0/2)

(R0903)

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: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a8fdf3d and 03eea9f.

📒 Files selected for processing (4)
  • holidays/countries/guyana.py (1 hunks)
  • holidays/locale/en_GY/LC_MESSAGES/GY.po (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/GY.po (1 hunks)
  • tests/countries/test_guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
tests/countries/test_guyana.py (1)
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.
holidays/countries/guyana.py (2)
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
🧬 Code Graph Analysis (1)
tests/countries/test_guyana.py (2)
tests/common.py (8)
  • TestCase (28-338)
  • CommonCountryTests (356-374)
  • assertAliases (121-130)
  • assertNoHolidays (292-294)
  • assertHolidayName (195-199)
  • assertNoNonObservedHoliday (248-250)
  • assertHolidays (228-230)
  • assertLocalizedHolidays (327-338)
holidays/countries/guyana.py (3)
  • Guyana (32-127)
  • GY (130-131)
  • GUY (134-135)
🪛 Pylint (3.3.7)
tests/countries/test_guyana.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 45-45: Missing function or method docstring

(C0116)


[convention] 50-50: Missing function or method docstring

(C0116)


[convention] 54-54: Missing function or method docstring

(C0116)


[convention] 68-68: Missing function or method docstring

(C0116)


[convention] 82-82: Missing function or method docstring

(C0116)


[convention] 89-89: Missing function or method docstring

(C0116)


[convention] 96-96: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 121-121: Missing function or method docstring

(C0116)


[convention] 138-138: Missing function or method docstring

(C0116)


[convention] 157-157: Missing function or method docstring

(C0116)


[convention] 173-173: Missing function or method docstring

(C0116)


[convention] 189-189: Missing function or method docstring

(C0116)


[convention] 206-206: Missing function or method docstring

(C0116)


[convention] 222-222: Missing function or method docstring

(C0116)

holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (133/100)

(C0301)


[convention] 244-244: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 130-130: Missing class docstring

(C0115)


[refactor] 130-130: Too many ancestors (9/7)

(R0901)


[convention] 134-134: Missing class docstring

(C0115)


[refactor] 134-134: Too many ancestors (9/7)

(R0901)


[convention] 138-138: Missing class docstring

(C0115)


[convention] 180-180: Missing class docstring

(C0115)


[refactor] 240-240: Too few public methods (0/2)

(R0903)

🔇 Additional comments (3)
holidays/locale/en_GY/LC_MESSAGES/GY.po (1)

1-99: LGTM!

The PO file structure is correct. Empty msgstr values are appropriate here since the msgids already contain the English text for the en_GY locale.

holidays/locale/en_US/LC_MESSAGES/GY.po (1)

1-99: Translations look good!

The en_US translations are appropriate, using common US English names for the holidays.

tests/countries/test_guyana.py (1)

19-237: Well-structured test suite!

The tests follow the project's best practices by organizing tests per holiday and covering the full date range.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 45-45: Missing function or method docstring

(C0116)


[convention] 50-50: Missing function or method docstring

(C0116)


[convention] 54-54: Missing function or method docstring

(C0116)


[convention] 68-68: Missing function or method docstring

(C0116)


[convention] 82-82: Missing function or method docstring

(C0116)


[convention] 89-89: Missing function or method docstring

(C0116)


[convention] 96-96: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 121-121: Missing function or method docstring

(C0116)


[convention] 138-138: Missing function or method docstring

(C0116)


[convention] 157-157: Missing function or method docstring

(C0116)


[convention] 173-173: Missing function or method docstring

(C0116)


[convention] 189-189: Missing function or method docstring

(C0116)


[convention] 206-206: Missing function or method docstring

(C0116)


[convention] 222-222: Missing function or method docstring

(C0116)

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: 5

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 03eea9f and 953bd2a.

📒 Files selected for processing (7)
  • README.md (2 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/countries/guyana.py (1 hunks)
  • holidays/locale/en_GY/LC_MESSAGES/GY.po (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/GY.po (1 hunks)
  • holidays/registry.py (1 hunks)
  • tests/countries/test_guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
tests/countries/test_guyana.py (2)
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: 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.
holidays/countries/guyana.py (2)
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
🧬 Code Graph Analysis (2)
holidays/countries/__init__.py (1)
holidays/countries/guyana.py (3)
  • Guyana (32-157)
  • GY (160-161)
  • GUY (164-165)
tests/countries/test_guyana.py (2)
tests/common.py (8)
  • TestCase (28-338)
  • CommonCountryTests (356-374)
  • assertAliases (121-130)
  • assertNoHolidays (292-294)
  • assertHolidayName (195-199)
  • assertNoNonObservedHoliday (248-250)
  • assertHolidays (228-230)
  • assertLocalizedHolidays (327-338)
holidays/countries/guyana.py (3)
  • Guyana (32-157)
  • GY (160-161)
  • GUY (164-165)
🪛 Pylint (3.3.7)
tests/countries/test_guyana.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 25-25: Missing function or method docstring

(C0116)


[convention] 28-28: Missing function or method docstring

(C0116)


[convention] 31-31: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 45-45: Missing function or method docstring

(C0116)


[convention] 54-54: Missing function or method docstring

(C0116)


[convention] 58-58: Missing function or method docstring

(C0116)


[convention] 72-72: Missing function or method docstring

(C0116)


[convention] 86-86: Missing function or method docstring

(C0116)


[convention] 93-93: Missing function or method docstring

(C0116)


[convention] 101-101: Missing function or method docstring

(C0116)


[convention] 109-109: Missing function or method docstring

(C0116)


[convention] 124-124: Missing function or method docstring

(C0116)


[convention] 138-138: Missing function or method docstring

(C0116)


[convention] 149-149: Missing function or method docstring

(C0116)


[convention] 166-166: Missing function or method docstring

(C0116)


[convention] 185-185: Missing function or method docstring

(C0116)


[convention] 201-201: Missing function or method docstring

(C0116)


[convention] 217-217: Missing function or method docstring

(C0116)


[convention] 238-238: Missing function or method docstring

(C0116)


[convention] 257-257: Missing function or method docstring

(C0116)


[refactor] 19-19: Too many public methods (22/20)

(R0904)

holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (176/100)

(C0301)


[convention] 50-50: Line too long (182/100)

(C0301)


[convention] 51-51: Line too long (175/100)

(C0301)


[convention] 53-53: Line too long (182/100)

(C0301)


[convention] 54-54: Line too long (177/100)

(C0301)


[convention] 56-56: Line too long (181/100)

(C0301)


[convention] 57-57: Line too long (175/100)

(C0301)


[convention] 61-61: Line too long (182/100)

(C0301)


[convention] 62-62: Line too long (180/100)

(C0301)


[convention] 274-274: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 160-160: Missing class docstring

(C0115)


[refactor] 160-160: Too many ancestors (9/7)

(R0901)


[convention] 164-164: Missing class docstring

(C0115)


[refactor] 164-164: Too many ancestors (9/7)

(R0901)


[convention] 168-168: Missing class docstring

(C0115)


[convention] 210-210: Missing class docstring

(C0115)


[refactor] 270-270: Too few public methods (0/2)

(R0903)

🔇 Additional comments (8)
README.md (1)

108-108: Approve country count update
Supported countries incremented to 187, and the Guyana entry (GY) is correctly inserted before Haiti.

holidays/registry.py (1)

98-98: Approve registry entry
Guyana has been added to the COUNTRIES dictionary with the correct ISO codes and alphabetical placement between Guinea and Haiti.

holidays/countries/__init__.py (1)

94-94: Approve import addition
The Guyana class and its aliases GY and GUY are imported in the correct sequence alongside other countries.

holidays/locale/en_GY/LC_MESSAGES/GY.po (2)

22-22: Verify locale header
The header Language: en_GY is correctly set for the Guyana English locale.


29-110: 🧹 Nitpick (assertive)

Populate translations
All msgstr entries are currently empty—consider initializing them to match their msgid values to ensure consistent output for the en_GY locale.

⛔ Skipped due to learnings
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.
Learnt from: KJhellico
PR: vacanza/holidays#2394
File: holidays/locale/pt_PT/LC_MESSAGES/CV.po:31-88
Timestamp: 2025-03-31T19:37:57.691Z
Learning: In the holidays library, when a locale file matches the country's default language (e.g., pt_PT for Cape Verde), the msgstr fields should be left empty. Only non-default language files should have filled msgstr fields with translations.
holidays/locale/en_US/LC_MESSAGES/GY.po (2)

22-22: Approve metadata correction
The header now correctly specifies Language: en_US.


29-110: Approve translation content
All msgstr entries accurately reflect US English translations of Guyana holiday names and labels.

holidays/countries/guyana.py (1)

169-169: Well-documented holiday sources

Good practice using archived references for all holiday date tables. This ensures the sources remain accessible even if the original URLs change.

Also applies to: 195-195, 211-211, 240-240

Co-authored-by: ~Jhellico <KJhellico@users.noreply.github.com>
Signed-off-by: Kriti Birda <164247895+kritibirda26@users.noreply.github.com>
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: 1

♻️ Duplicate comments (2)
holidays/countries/guyana.py (2)

78-90: ⚠️ Potential issue

Constructor signature still deviates from the library-wide pattern

Previous review already highlighted that keyword parameters with defaults (here islamic_show_estimated) should precede *args for country classes (def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):).
The change never landed and the current order can break callers that pass positional arguments after year.

-    def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):

This keeps Guyana consistent with Benin, Fiji, Iran, etc.


148-151: 🧹 Nitpick (assertive)

⚠️ Potential issue

Hard-coding Diwali to 30 Oct for pre-2016 years is historically wrong

Diwali is a lunar festival; the date swings ~20 days year-to-year.
Leaving a blanket fallback to _add_holiday_oct_30(name) inserts incorrect holidays for 1968-2015 and will mislead consumers.

Two options:

  1. Drop the fallback and rely solely on _add_diwali, extending DIWALI_DATES down to the earliest verified year.
  2. If exact dates are unavailable, omit the holiday for those years until sourced.
-        self._add_observed(
-            self._add_diwali(name) if self._year >= 2016 else self._add_holiday_oct_30(name)
-        )
+        self._add_observed(self._add_diwali(name))

Please update DIWALI_DATES (2001-2015 at minimum) or remove the holiday for unverified years.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 953bd2a and 973a379.

📒 Files selected for processing (1)
  • holidays/countries/guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
holidays/countries/guyana.py (2)
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
🧬 Code Graph Analysis (1)
holidays/countries/guyana.py (8)
holidays/calendars/hindu.py (1)
  • _CustomHinduHolidays (1493-1494)
holidays/calendars/islamic.py (1)
  • _CustomIslamicHolidays (4042-4043)
holidays/groups/christian.py (5)
  • ChristianHolidays (22-463)
  • _add_good_friday (308-317)
  • _add_easter_monday (259-268)
  • _add_christmas_day (208-216)
  • _add_christmas_day_two (218-226)
holidays/groups/hindu.py (3)
  • HinduCalendarHolidays (21-481)
  • _add_holi (226-235)
  • _add_diwali (99-109)
holidays/groups/international.py (3)
  • InternationalHolidays (18-220)
  • _add_new_years_day (126-134)
  • _add_labor_day (99-108)
holidays/groups/islamic.py (3)
  • IslamicHolidays (20-436)
  • _add_mawlid_day (339-349)
  • _add_eid_al_adha_day (109-120)
holidays/groups/custom.py (1)
  • StaticHolidays (18-47)
holidays/observed_holiday_base.py (1)
  • ObservedHolidayBase (101-243)
🪛 Pylint (3.3.7)
holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (176/100)

(C0301)


[convention] 52-52: Line too long (178/100)

(C0301)


[convention] 53-53: Line too long (171/100)

(C0301)


[convention] 55-55: Line too long (178/100)

(C0301)


[convention] 56-56: Line too long (173/100)

(C0301)


[convention] 58-58: Line too long (177/100)

(C0301)


[convention] 59-59: Line too long (171/100)

(C0301)


[convention] 63-63: Line too long (178/100)

(C0301)


[convention] 64-64: Line too long (176/100)

(C0301)


[convention] 276-276: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 162-162: Missing class docstring

(C0115)


[refactor] 162-162: Too many ancestors (9/7)

(R0901)


[convention] 166-166: Missing class docstring

(C0115)


[refactor] 166-166: Too many ancestors (9/7)

(R0901)


[convention] 170-170: Missing class docstring

(C0115)


[convention] 212-212: Missing class docstring

(C0115)


[refactor] 272-272: Too few public methods (0/2)

(R0903)

⏰ Context from checks skipped due to timeout of 300000ms (2)
  • GitHub Check: Build distribution
  • GitHub Check: Test docs build

@arkid15r arkid15r enabled auto-merge June 14, 2025 18:29
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: 2

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0a17fe5 and 5103e1d.

📒 Files selected for processing (1)
  • holidays/countries/guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
holidays/countries/guyana.py (3)
Learnt from: PPsyrius
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:78-90
Timestamp: 2025-06-13T12:18:03.531Z
Learning: The holidays codebase now uses the constructor signature pattern `__init__(self, *args, islamic_show_estimated: bool = True, **kwargs)` across country classes.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holida
F438
ys/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
🪛 Pylint (3.3.7)
holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (176/100)

(C0301)


[convention] 52-52: Line too long (177/100)

(C0301)


[convention] 53-53: Line too long (170/100)

(C0301)


[convention] 55-55: Line too long (177/100)

(C0301)


[convention] 56-56: Line too long (172/100)

(C0301)


[convention] 58-58: Line too long (176/100)

(C0301)


[convention] 59-59: Line too long (170/100)

(C0301)


[convention] 63-63: Line too long (177/100)

(C0301)


[convention] 64-64: Line too long (175/100)

(C0301)


[convention] 273-273: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 159-159: Missing class docstring

(C0115)


[refactor] 159-159: Too many ancestors (9/7)

(R0901)


[convention] 163-163: Missing class docstring

(C0115)


[refactor] 163-163: Too many ancestors (9/7)

(R0901)


[convention] 167-167: Missing class docstring

(C0115)


[convention] 209-209: Missing class docstring

(C0115)


[refactor] 269-269: Too few public methods (0/2)

(R0903)

⏰ Context from checks skipped due to timeout of 300000ms (2)
  • GitHub Check: Test Python 3.13 on windows-latest
  • GitHub Check: Test Python 3.10 on windows-latest

@arkid15r arkid15r added this pull request to the merge queue Jun 14, 2025
@KJhellico KJhellico removed this pull request from the merge queue due to a manual request Jun 14, 2025
Co-authored-by: ~Jhellico <KJhellico@users.noreply.github.com>
Signed-off-by: Arkadii Yakovets <2201626+arkid15r@users.noreply.github.com>
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: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5103e1d and 13d288c.

📒 Files selected for processing (1)
  • holidays/countries/guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
holidays/countries/guyana.py (4)
Learnt from: PPsyrius
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:78-90
Timestamp: 2025-06-13T12:18:03.531Z
Learning: The holidays codebase now uses the constructor signature pattern `__init__(self, *args, islamic_show_estimated: bool = True, **kwargs)` across country classes.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:124-130
Timestamp: 2025-06-14T18:58:55.477Z
Learning: In Guyana's holidays implementation (holidays/countries/guyana.py), Emancipation Day should be implemented as a fixed-date holiday on August 1st with weekend observance rules, not as the first Monday of August. This is confirmed by official Guyana Ministry of Home Affairs sources.
🪛 Pylint (3.3.7)
holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (176/100)

(C0301)


[convention] 52-52: Line too long (177/100)

(C0301)


[convention] 53-53: Line too long (170/100)

(C0301)


[convention] 55-55: Line too long (177/100)

(C0301)


[convention] 56-56: Line too long (172/100)

(C0301)


[convention] 58-58: Line too long (176/100)

(C0301)


[convention] 59-59: Line too long (170/100)

(C0301)


[convention] 63-63: Line too long (177/100)

(C0301)


[convention] 64-64: Line too long (175/100)

(C0301)


[convention] 272-272: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 158-158: Missing class docstring

(C0115)


[refactor] 158-158: Too many ancestors (9/7)

(R0901)


[convention] 162-162: Missing class docstring

(C0115)


[refactor] 162-162: Too many ancestors (9/7)

(R0901)


[convention] 166-166: Missing class docstring

(C0115)


[convention] 208-208: Missing class docstring

(C0115)


[refactor] 268-268: Too few public methods (0/2)

(R0903)

🔇 Additional comments (4)
holidays/countries/guyana.py (4)

92-93: Default observed rule skips Saturday
The module-wide observed_rule is set to SUN_TO_NEXT_MON, so fixed-date holidays that fall on a Saturday stay on Saturday. Most country classes use SAT_SUN_TO_NEXT_MON as the baseline and override only when needed. Please double-check Guyana’s legislation; if Saturday observance should also move, switch the default constant.


113-118: Labour / Arrival Day observance may miss Saturday shift
Both holidays are wrapped in _add_observed(...) without an explicit rule, hence inherit the Sunday-only behaviour above. If the Saturday-to-Monday rule applies (see other Gazette examples), pass rule=SAT_SUN_TO_NEXT_MON.


124-129: Emancipation Day: confirm Saturday handling
Aug 1 can land on Saturday (e.g. 2026). With the current settings it will not move to Monday. Verify with Gazette notices; if Monday observance is expected, add rule=SAT_SUN_TO_NEXT_MON.


168-178: Possible incorrect Deepavali 2024 date
Diwali 2024 is widely listed as 1 Nov (India) / 31 Oct in some Caribbean sources. Please confirm the Guyana proclamation—if 1 Nov is correct, update DIWALI_INDIA_DATES[2024].

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: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 13d288c and 641e744.

📒 Files selected for processing (2)
  • holidays/countries/guyana.py (1 hunks)
  • tests/countries/test_guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
tests/countries/test_guyana.py (4)
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#2629
File: tests/countries/test_namibia.py:22-23
Timestamp: 2025-06-14T10:58:43.618Z
Learning: In the vacanza/holidays project, country test files consistently use range(start_year, 2050) which intentionally excludes 2050 and stops at 2049. This is a library-wide implementation pattern, not an off-by-one error.
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.
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.
holidays/countries/guyana.py (4)
Learnt from: PPsyrius
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:78-90
Timestamp: 2025-06-13T12:18:03.531Z
Learning: The holidays codebase now uses the constructor signature pattern `__init__(self, *args, islamic_show_estimated: bool = True, **kwargs)` across country classes.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:124-130
Timestamp: 2025-06-14T18:58:55.477Z
Learning: In Guyana's holidays implementation (holidays/countries/guyana.py), Emancipation Day should be implemented as a fixed-date holiday on August 1st with weekend observance rules, not as the first Monday of August. This is confirmed by official Guyana Ministry of Home Affairs sources.
🧬 Code Graph Analysis (1)
tests/countries/test_guyana.py (2)
tests/common.py (6)
  • TestCase (28-338)
  • CommonCountryTests (356-374)
  • assertNoHolidays (292-294)
  • assertHolidayName (195-199)
  • assertNoHolidayName (273-275)
  • assertLocalizedHolidays (327-338)
holidays/countries/guyana.py (3)
  • Guyana (32-155)
  • GY (158-159)
  • GUY (162-163)
🪛 Pylint (3.3.7)
tests/countries/test_guyana.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 26-26: Missing function or method docstring

(C0116)


[convention] 29-29: Missing function or method docstring

(C0116)


[convention] 32-32: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 48-48: Missing function or method docstring

(C0116)


[convention] 55-55: Missing function or method docstring

(C0116)


[convention] 60-60: Missing function or method docstring

(C0116)


[convention] 74-74: Missing function or method docstring

(C0116)


[convention] 88-88: Missing function or method docstring

(C0116)


[convention] 99-99: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 123-123: Missing function or method docstring

(C0116)


[convention] 136-136: Missing function or method docstring

(C0116)


[convention] 149-149: Missing function or method docstring

(C0116)


[convention] 162-162: Missing function or method docstring

(C0116)


[convention] 175-175: Missing function or method docstring

(C0116)


[convention] 197-197: Missing function or method docstring

(C0116)


[convention] 218-218: Missing function or method docstring

(C0116)


[convention] 239-239: Missing function or method docstring

(C0116)


[convention] 258-258: Missing function or method docstring

(C0116)


[convention] 279-279: Missing function or method docstring

(C0116)


[convention] 298-298: Missing function or method docstring

(C0116)


[refactor] 19-19: Too many public methods (23/20)

(R0904)

holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (176/100)

(C0301)


[convention] 52-52: Line too long (177/100)

(C0301)


[convention] 53-53: Line too long (170/100)

(C0301)


[convention] 55-55: Line too long (177/100)

(C0301)


[convention] 56-56: Line too long (172/100)

(C0301)


[convention] 58-58: Line too long (176/100)

(C0301)


[convention] 59-59: Line too long (170/100)

(C0301)


[convention] 63-63: Line too long (177/100)

(C0301)


[convention] 64-64: Line too long (175/100)

(C0301)


[convention] 272-272: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 158-158: Missing class docstring

(C0115)


[refactor] 158-158: Too many ancestors (9/7)

(R0901)


[convention] 162-162: Missing class docstring

(C0115)


[refactor] 162-162: Too many ancestors (9/7)

(R0901)


[convention] 166-166: Missing class docstring

(C0115)


[convention] 208-208: Missing class docstring

(C0115)


[refactor] 268-268: Too few public methods (0/2)

(R0903)

🔇 Additional comments (2)
tests/countries/test_guyana.py (1)

1-316: No blocking issues found in the test suite
The structure, year-ranges and observed-day checks follow the project’s established patterns.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 26-26: Missing function or method docstring

(C0116)


[convention] 29-29: Missing function or method docstring

(C0116)


[convention] 32-32: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 48-48: Missing function or method docstring

(C0116)


[convention] 55-55: Missing function or method docstring

(C0116)


[convention] 60-60: Missing function or method docstring

(C0116)


[convention] 74-74: Missing function or method docstring

(C0116)


[convention] 88-88: Missing function or method docstring

(C0116)


[convention] 99-99: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 123-123: Missing function or method docstring

(C0116)


[convention] 136-136: Missing function or method docstring

(C0116)


[convention] 149-149: Missing function or method docstring

(C0116)


[convention] 162-162: Missing function or method docstring

(C0116)


[convention] 175-175: Missing function or method docstring

(C0116)


[convention] 197-197: Missing function or method docstring

(C0116)


[convention] 218-218: Missing function or method docstring

(C0116)


[convention] 239-239: Missing function or method docstring

(C0116)


[convention] 258-258: Missing function or method docstring

(C0116)


[convention] 279-279: Missing function or method docstring

(C0116)


[convention] 298-298: Missing function or method docstring

(C0116)


[refactor] 19-19: Too many public methods (23/20)

(R0904)

holidays/countries/guyana.py (1)

114-118: Double-check Saturday handling for Labour Day
_add_observed(...Labour Day) relies on the class-level default SUN_TO_NEXT_MON, so a Saturday 1 May would not be shifted.
If Gazette notices confirm that Saturday holidays are also moved (as with New Year’s Day), switch to SAT_SUN_TO_NEXT_MON for consistency.

@arkid15r arkid15r requested review from KJhellico and PPsyrius June 14, 2025 19:58
@arkid15r arkid15r enabled auto-merge June 14, 2025 19:58
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: 3

🔭 Outside diff range comments (1)
holidays/countries/__init__.py (1)

13-218: 🛠️ Refactor suggestion

Consider lazy-loading for large import list

holidays.countries.__init__ keeps growing; importing every country unconditionally adds noticeable import time (~100 ms on my machine). You already have an elegant EntityLoader in registry.py; switching the country package to re-export loaders instead of real classes would shave startup time and memory.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 641e744 and 07ab4ad.

📒 Files selected for processing (4)
  • README.md (2 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/registry.py (1 hunks)
  • snapshots/countries/GY_COMMON.json (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/guyana.py (3)
  • Guyana (32-155)
  • GY (158-159)
  • GUY (162-163)
🔇 Additional comments (3)
README.md (1)

668-673: Missing ‘Labour’ vs ‘Labor’ consistency

Throughout the project the spelling “Labour Day” is used for other Commonwealth countries.
For Guyana the table leaves the holiday names column empty, so this may not surface here, but keeping the spelling consistent across docs prevents confusion when users grep the README.

holidays/registry.py (1)

94-99: Dictionary insertion keeps alphabetical order – good catch
The new guyana entry is correctly placed after guinea; no further action needed.

holidays/countries/__init__.py (1)

94-95: Import block still sorted alphabetically – nice
Guyana import added in the right slot; no namespace collisions observed.

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: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 641e744 and 07ab4ad.

📒 Files selected for processing (4)
  • README.md (2 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/registry.py (1 hunks)
  • snapshots/countries/GY_COMMON.json (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/guyana.py (3)
  • Guyana (32-155)
  • GY (158-159)
  • GUY (162-163)
⏰ Context from checks skipped due to timeout of 300000ms (3)
  • GitHub Check: Test build on macos-latest
  • GitHub Check: Test build on windows-latest
  • GitHub Check: Test build on ubuntu-latest
🔇 Additional comments (4)
holidays/countries/__init__.py (1)

94-94: Guyana import looks perfect.

The new Guyana, GY, GUY import is alphabetically in the right place (after Guinea) and matches the class/aliases defined in holidays/countries/guyana.py.
No further action required.

holidays/registry.py (1)

98-99: Registry entry correctly added and ordered.

"guyana": ("Guyana", "GY", "GUY") is syntactically correct, follows the tuple structure used elsewhere, and is alphabetically positioned after "guinea".
All good here.

README.md (1)

668-673: Row inserted cleanly.

The Guyana row is alphabetically correct and its language list matches supported_languages in the implementation.
Nice touch adding bold to the default locale.

snapshots/countries/GY_COMMON.json (1)

1-1132:

✅ Verification successful

Snapshot file is huge—verify git storage policy.

The JSON is well-formed and chronologically sorted, but at ~300 KB it nudges repo size upward. If future snapshots grow similarly, you may hit the LFS threshold.
Just keep an eye on total snapshot footprint.


🏁 Script executed:

#!/bin/bash
# Check file size
if [ -f snapshots/countries/GY_COMMON.json ]; then
  stat -c "%n: %s bytes" snapshots/countries/GY_COMMON.json
else
  echo "File not found: snapshots/countries/GY_COMMON.json"
fi

# Check cumulative size of country snapshots
du -sh snapshots/countries

# Look for Git LFS rules in .gitattributes
if [ -f .gitattributes ]; then
  grep -n "filter=lfs" .gitattributes || echo "No Git LFS filters configured in .gitattributes"
else
  echo "No .gitattributes file found"
fi

Length of output: 424


🏁 Script executed:

#!/bin/bash
# Measure single file size in bytes and human-readable form
if [ -f snapshots/countries/GY_COMMON.json ]; then
  echo "Byte count:"
  wc -c snapshots/countries/GY_COMMON.json
  echo "Human-readable:"
  du -h snapshots/countries/GY_COMMON.json
else
  echo "File not found: snapshots/countries/GY_COMMON.json"
fi

Length of output: 285


Snapshot Directory Size and Git LFS Check

  • snapshots/countries/GY_COMMON.json is ~44 KB
  • snapshots/countries total footprint is ~41 MB
  • No Git LFS filters found in .gitattributes

No immediate action needed, but please monitor the overall snapshot directory size. If it grows significantly (e.g., over your repo policy threshold), consider configuring Git LFS for large files.

Co-authored-by: ~Jhellico <KJhellico@users.noreply.github.com>
Signed-off-by: Kriti Birda <164247895+kritibirda26@users.noreply.github.com>
auto-merge was automatically disabled June 14, 2025 20:26

Head branch was pushed to by a user without write access

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: 2

♻️ Duplicate comments (2)
tests/countries/test_guyana.py (2)

60-73: 🧹 Nitpick (assertive)

Add a brief comment to distinguish “spot-check” vs “full-range” assertions

The double assertion pattern (explicit recent dates + full-year range) tripped reviewers before.
Dropping in a one-liner right above the explicit list makes the intent self-documenting and avoids repeated questions:

-        self.assertHolidayName(
+        # Spot-check algorithmic calculation for recent years; the range below
+        # ensures the holiday exists for every year in scope.
+        self.assertHolidayName(

Purely documentary, no functional change.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 60-60: Missing function or method docstring

(C0116)


21-24: 🧹 Nitpick (assertive)

Silence Pylint’s W0221 by matching the parent signature

pylint complains because setUpClass overrides the unittest.TestCase version with a different signature.
A minimal tweak keeps the current behaviour while quieting the warning:

-    def setUpClass(cls):
+    def setUpClass(cls, *args, **kwargs):
         years = range(1968, 2050)
-        super().setUpClass(Guyana, years=years, years_non_observed=years)
+        # Forward any unused args/kwargs to the parent implementation.
+        super().setUpClass(Guyana, years=years, years_non_observed=years, *args, **kwargs)

This pattern is already used in a few newer country test modules and doesn’t alter test logic.

🧰 Tools
🪛 Pylint (3.3.7)

[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 07ab4ad and b9ce755.

📒 Files selected for processing (2)
  • holidays/countries/guyana.py (1 hunks)
  • tests/countries/test_guyana.py (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
tests/countries/test_guyana.py (4)
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#2629
File: tests/countries/test_namibia.py:22-23
Timestamp: 2025-06-14T10:58:43.618Z
Learning: In the vacanza/holidays project, country test files consistently use range(start_year, 2050) which intentionally excludes 2050 and stops at 2049. This is a library-wide implementation pattern, not an off-by-one error.
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.
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.
holidays/countries/guyana.py (8)
Learnt from: PPsyrius
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:78-90
Timestamp: 2025-06-13T12:18:03.531Z
Learning: The holidays codebase now uses the constructor signature pattern `__init__(self, *args, islamic_show_estimated: bool = True, **kwargs)` across country classes.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:146-179
Timestamp: 2025-06-14T20:12:37.182Z
Learning: The `_CustomHinduHolidays` mechanism works through `_CustomCalendarType` metaclass which renames public attributes (like `DIWALI_INDIA_DATES`) with a postfix, allowing `_HinduLunisolar::_get_holiday` to find and use custom holiday dates. When `_add_diwali_india()` is called, it uses the custom dates if available rather than calculated dates.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:146-179
Timestamp: 2025-06-14T20:12:37.182Z
Learning: The `_CustomHinduHolidays` mechanism works through `_CustomCalendarType` metaclass which renames public attributes (like `DIWALI_INDIA_DATES`) with a postfix, allowing `_HinduLunisolar::_get_holiday` to find and use custom holiday dates. When `_add_diwali_india()` is called, it uses the custom dates if available rather than calculated dates.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the `SAT_SUN_TO_NEXT_MON_TUE` rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while `SAT_SUN_TO_NEXT_MON` is used as the default rule for other holidays.
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like `_add_holiday_2nd_tue_of_feb()` and `_add_holiday_1st_sun_of_mar()` use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:124-130
Timestamp: 2025-06-14T18:58:55.477Z
Learning: In Guyana's holidays implementation (holidays/countries/guyana.py), Emancipation Day should be implemented as a fixed-date holiday on August 1st with weekend observance rules, not as the first Monday of August. This is confirmed by official Guyana Ministry of Home Affairs sources.
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: PPsyrius
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:146-159
Timestamp: 2025-03-19T16:54:58.657Z
Learning: In the holidays library implementation, explicit holiday dates (like Diwali in Fiji) are only defined for historical years with official sources (2016-2025). Future dates beyond the explicitly defined range are automatically calculated by methods like `_add_diwali`, which provide approximations when official dates aren't yet available.
🪛 Pylint (3.3.7)
tests/countries/test_guyana.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 19-19: Missing class docstring

(C0115)


[warning] 21-21: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestGuyana.setUpClass' method

(W0221)


[convention] 26-26: Missing function or method docstring

(C0116)


[convention] 29-29: Missing function or method docstring

(C0116)


[convention] 32-32: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 48-48: Missing function or method docstring

(C0116)


[convention] 55-55: Missing function or method docstring

(C0116)


[convention] 60-60: Missing function or method docstring

(C0116)


[convention] 74-74: Missing function or method docstring

(C0116)


[convention] 88-88: Missing function or method docstring

(C0116)


[convention] 99-99: Missing function or method docstring

(C0116)


[convention] 110-110: Missing function or method docstring

(C0116)


[convention] 123-123: Missing function or method docstring

(C0116)


[convention] 136-136: Missing function or method docstring

(C0116)


[convention] 147-147: Missing function or method docstring

(C0116)


[convention] 160-160: Missing function or method docstring

(C0116)


[convention] 173-173: Missing function or method docstring

(C0116)


[convention] 195-195: Missing function or method docstring

(C0116)


[convention] 216-216: Missing function or method docstring

(C0116)


[convention] 237-237: Missing function or method docstring

(C0116)


[convention] 256-256: Missing function or method docstring

(C0116)


[convention] 277-277: Missing function or method docstring

(C0116)


[convention] 296-296: Missing function or method docstring

(C0116)


[refactor] 19-19: Too many public methods (23/20)

(R0904)

holidays/countries/guyana.py

[convention] 43-43: Line too long (173/100)

(C0301)


[convention] 44-44: Line too long (160/100)

(C0301)


[convention] 45-45: Line too long (176/100)

(C0301)


[convention] 46-46: Line too long (102/100)

(C0301)


[convention] 53-53: Line too long (177/100)

(C0301)


[convention] 54-54: Line too long (170/100)

(C0301)


[convention] 56-56: Line too long (177/100)

(C0301)


[convention] 57-57: Line too long (172/100)

(C0301)


[convention] 59-59: Line too long (176/100)

(C0301)


[convention] 60-60: Line too long (170/100)

(C0301)


[convention] 64-64: Line too long (177/100)

(C0301)


[convention] 65-65: Line too long (175/100)

(C0301)


[convention] 273-273: Line too long (157/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[refactor] 32-32: Too many ancestors (8/7)

(R0901)


[convention] 159-159: Missing class docstring

(C0115)


[refactor] 159-159: Too many ancestors (9/7)

(R0901)


[convention] 163-163: Missing class docstring

(C0115)


[refactor] 163-163: Too many ancestors (9/7)

(R0901)


[convention] 167-167: Missing class docstring

(C0115)


[convention] 209-209: Missing class docstring

(C0115)


[refactor] 269-269: Too few public methods (0/2)

(R0903)

🔇 Additional comments (1)
holidays/countries/guyana.py (1)

79-91: Constructor signature matches current library pattern – good.

*args precedes islamic_show_estimated, aligning with the convention adopted across recent country modules. 👍

Copy link
Collaborator
@KJhellico KJhellico left a comment

Choose a reason for hiding this comment

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

LGTM.

@arkid15r arkid15r added this pull request to the merge queue Jun 14, 2025
Merged via the queue into vacanza:dev with commit 3d11b59 Jun 14, 2025
33 checks passed
@kritibirda26 kritibirda26 deleted the guyana branch June 15, 2025 04:54
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.

Add Guyana holidays
4 participants
0