Skip to content

Commit

Permalink
Add Ghana holidays (#1639)
Browse files Browse the repository at this point in the history
Co-authored-by: Arkadii Yakovets <[email protected]>
  • Loading branch information
JerryAgbesi and arkid15r authored Jan 26, 2024
1 parent 72a45f4 commit 08e3dc7
Show file tree
Hide file tree
Showing 6 changed files with 1,476 additions and 1 deletion.
7 changes: 6 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Available Countries
.. _ISO 639-1 code: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
.. _ISO 639-2 code: https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes

We currently support 141 country codes. The standard way to refer to a country
We currently support 142 country codes. The standard way to refer to a country
is by using its `ISO 3166-1 alpha-2 code`_, the same used for domain names, and
for a subdivision its `ISO 3166-2 code`_. Some of the countries support more
than one language for holiday names output.
Expand Down Expand Up @@ -438,6 +438,11 @@ All other default values are highlighted with bold:
- States: BB, BE, BW, BY, BYP, HB, HE, HH, MV, NI, NW, RP, SH, SL, SN, ST, TH
- **de**, en_US, uk
-
* - Ghana
- GH
-
-
-
* - Greece
- GR
-
Expand Down
1 change: 1 addition & 0 deletions holidays/countries/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
from .gabon import Gabon, GA, GAB
from .georgia import Georgia, GE, GEO
from .germany import Germany, DE, DEU
from .ghana import Ghana, GH, GHA
from .greece import Greece, GR, GRC
from .guam import Guam, GU, GUM, HolidaysGU
from .guatemala import Guatemala, GT, GUA
Expand Down
97 changes: 97 additions & 0 deletions holidays/countries/ghana.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# python-holidays
# ---------------
# A fast, efficient Python library for generating country, province and state
# specific sets of holidays on the fly. It aims to make determining whether a
# specific date is a holiday as fast and flexible as possible.
#
# Authors: dr-prodigy <[email protected]> (c) 2017-2023
# ryanss <[email protected]> (c) 2014-2017
# Website: https://github.com/dr-prodigy/python-holidays
# License: MIT (see LICENSE file)

from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
from holidays.observed_holiday_base import (
ObservedHolidayBase,
SAT_SUN_TO_NEXT_MON,
SAT_SUN_TO_NEXT_MON_TUE,
)


class Ghana(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
"""
https://www.mint.gov.gh/statutory-public-holidays/
https://en.wikipedia.org/wiki/Public_holidays_in_Ghana
"""

country = "GH"
estimated_label = "%s (estimated)"
observed_label = "%s (observed)"
observed_estimated_label = "%s (observed, estimated)"

def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self)
InternationalHolidays.__init__(self)
IslamicHolidays.__init__(self)
kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
super().__init__(*args, **kwargs)

def _populate_public_holidays(self):
# Holidays observed since 1957
if self._year <= 1956:
return None

# New Year's Day
self._add_observed(self._add_new_years_day("New Year's Day"))

# Constitution Day
if self._year >= 2019:
self._add_observed(self._add_holiday_jan_7("Constitution Day"))

# Independence Day
self._add_observed(self._add_holiday_mar_6("Independence Day"))

# Good Friday
self._add_good_friday("Good Friday")

# Easter Monday
self._add_easter_monday("Easter Monday")

# May Day(Workers' Day)
self._add_observed(self._add_labor_day("May Day"))

# Eid al-Fitr
for dt in self._add_eid_al_fitr_day("Eid ul-Fitr"):
self._add_observed(dt)

# Eid al-Adha
for dt in self._add_eid_al_adha_day("Eid ul-Adha"):
self._add_observed(dt)

# Founders' Day
if self._year >= 2019:
self._add_observed(self._add_holiday_aug_4("Founders' Day"))

# Kwame Nkrumah Memorial Day / Founder's Day
if self._year >= 2009:
self._add_observed(
self._add_holiday_sep_21(
"Kwame Nkrumah Memorial Day" if self._year >= 2019 else "Founder's Day"
)
)

# Farmer's Day
self._add_holiday_1st_fri_of_dec("Farmer's Day")

# Christmas Day
self._add_observed(self._add_christmas_day("Christmas Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)

# Boxing Day
self._add_observed(self._add_christmas_day_two("Boxing Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)


class GH(Ghana):
pass


class GHA(Ghana):
pass
1 change: 1 addition & 0 deletions holidays/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
"gabon": ("Gabon", "GA", "GAB"),
"georgia": ("Georgia", "GE", "GEO"),
"germany": ("Germany", "DE", "DEU"),
"ghana": ("Ghana", "GH", "GHA"),
"greece": ("Greece", "GR", "GRC"),
"guam": ("Guam", "GU", "GUM", "HolidaysGU"),
"guatemala": ("Guatemala", "GT", "GUA"),
Expand Down
Loading

0 comments on commit 08e3dc7

Please sign in to comment.