Skip to content

Commit

Permalink
Merge branch 'beta' into upd-uae
Browse files Browse the repository at this point in the history
  • Loading branch information
KJhellico committed Jan 27, 2024
2 parents 88a7468 + 4ce8146 commit d133f59
Show file tree
Hide file tree
Showing 14 changed files with 1,518 additions and 59 deletions.
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
3 changes: 1 addition & 2 deletions RELEASE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ How to release a new version of Python Holidays
- switch to ``beta`` branch and pull the most recent changes
from https://github.com/vacanza/python-holidays remote ``beta`` branch.
- generate release notes by running the following script
``scripts/generate_release_notes.py -t <version>``, where <version> is the
value of tag/version you're going to release, e.g. 0.39
``scripts/generate_release_notes.py``
- insert the script's output into the top of ``CHANGES`` file
(see previous release notes for consistent formatting)
- commit the updated ``CHANGES`` file to ``beta`` branch with the following
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
20 changes: 14 additions & 6 deletions holidays/countries/greece.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@
from holidays.calendars.julian_revised import JULIAN_REVISED_CALENDAR
from holidays.constants import HALF_DAY, PUBLIC
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY
from holidays.observed_holiday_base import (
ObservedHolidayBase,
MON_TO_NEXT_TUE,
SAT_SUN_TO_NEXT_WORKDAY,
)


class Greece(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
Expand All @@ -36,6 +40,7 @@ def __init__(self, *args, **kwargs):
ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR)
InternationalHolidays.__init__(self)
kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
kwargs.setdefault("observed_since", 2017)
super().__init__(*args, **kwargs)

def _populate_public_holidays(self):
Expand All @@ -45,7 +50,7 @@ def _populate_public_holidays(self):
# Epiphany.
self._add_epiphany_day(tr("Θεοφάνεια"))

# Clean Monday.
# Green Monday.
self._add_ash_monday(tr("Καθαρά Δευτέρα"))

# Independence Day.
Expand All @@ -55,13 +60,16 @@ def _populate_public_holidays(self):
self._add_good_friday(tr("Μεγάλη Παρασκευή"))

# Easter Monday.
self._add_easter_monday(tr("Δευτέρα του Πάσχα"))
easter_monday = self._add_easter_monday(tr("Δευτέρα του Πάσχα"))

# Monday of the Holy Spirit.
# Whit Monday.
self._add_whit_monday(tr("Δευτέρα του Αγίου Πνεύματος"))

# Labour Day.
self._add_observed(self._add_labor_day(self.tr("Εργατική Πρωτομαγιά")))
self._add_observed(
# Labor Day.
may_1 := self._add_labor_day(self.tr("Εργατική Πρωτομαγιά")),
rule=MON_TO_NEXT_TUE if may_1 == easter_monday else SAT_SUN_TO_NEXT_WORKDAY,
)

# Dormition of the Mother of God.
self._add_assumption_of_mary_day(tr("Κοίμηση της Θεοτόκου"))
Expand Down
6 changes: 3 additions & 3 deletions holidays/locale/el/LC_MESSAGES/GR.po
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ msgstr ""
msgid "Θεοφάνεια"
msgstr ""

#. Clean Monday.
#. Green Monday.
msgid "Καθαρά Δευτέρα"
msgstr ""

Expand All @@ -40,11 +40,11 @@ msgstr ""
msgid "Δευτέρα του Πάσχα"
msgstr ""

#. Monday of the Holy Spirit.
#. Whit Monday.
msgid "Δευτέρα του Αγίου Πνεύματος"
msgstr ""

#. Labour Day.
#. Labor Day.
msgid "Εργατική Πρωτομαγιά"
msgstr ""

Expand Down
10 changes: 5 additions & 5 deletions holidays/locale/en_US/LC_MESSAGES/GR.po
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ msgstr "New Year's Day"
msgid "Θεοφάνεια"
msgstr "Epiphany"

#. Clean Monday.
#. Green Monday.
msgid "Καθαρά Δευτέρα"
msgstr "Clean Monday"
msgstr "Green Monday"

#. Independence Day.
msgid "Εικοστή Πέμπτη Μαρτίου"
Expand All @@ -40,11 +40,11 @@ msgstr "Good Friday"
msgid "Δευτέρα του Πάσχα"
msgstr "Easter Monday"

#. Monday of the Holy Spirit.
#. Whit Monday.
msgid "Δευτέρα του Αγίου Πνεύματος"
msgstr "Easter Monday"
msgstr "Whit Monday"

#. Labour Day.
#. Labor Day.
msgid "Εργατική Πρωτομαγιά"
msgstr "Labor Day"

Expand Down
6 changes: 3 additions & 3 deletions holidays/locale/uk/LC_MESSAGES/GR.po
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ msgstr "Новий рік"
msgid "Θεοφάνεια"
msgstr "Богоявлення"

#. Clean Monday.
#. Green Monday.
msgid "Καθαρά Δευτέρα"
msgstr "Чистий понеділок"

Expand All @@ -40,11 +40,11 @@ msgstr "Страсна пʼятниця"
msgid "Δευτέρα του Πάσχα"
msgstr "Великодній понеділок"

#. Monday of the Holy Spirit.
#. Whit Monday.
msgid "Δευτέρα του Αγίου Πνεύματος"
msgstr "День Святого Духа"

#. Labour Day.
#. Labor Day.
msgid "Εργατική Πρωτομαγιά"
msgstr "День праці"

Expand Down
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
22 changes: 10 additions & 12 deletions scripts/generate_release_notes.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
# flake8: noqa: T201

import argparse
import os
import re
import sys
from datetime import date
from pathlib import Path
from typing import Dict, Set
Expand All @@ -24,6 +24,9 @@
from github import Github
from github.GithubException import UnknownObjectException

sys.path.append(f"{Path.cwd()}")
import holidays

BRANCH_NAME = "beta"
HEADER_TEMPLATE = """
Version {version}
Expand All @@ -39,7 +42,7 @@ class ReleaseNotesGenerator:
"""
Generates release notes based on local git commits and GitHub PRs metadata.
Usage example: scripts/generate_release_notes.py -t 0.24
Usage example: scripts/generate_release_notes.py
"""

def __init__(self) -> None:
Expand Down Expand Up @@ -69,13 +72,6 @@ def __init__(self) -> None:
nargs="+",
type=int,
)
arg_parser.add_argument(
"-t",
"--tag",
help="New release tag",
required=True,
type=str,
)
arg_parser.add_argument(
"-v",
"--verbose",
Expand All @@ -85,12 +81,14 @@ def __init__(self) -> None:
)
self.args = arg_parser.parse_args()

self.local_repo = Repo(os.getcwd())
self.local_repo = Repo(Path.cwd())
self.remote_repo = Github(self.github_token).get_repo(REPOSITORY_NAME)

self.previous_commits: Set[str] = set()
self.pull_requests: Dict[int, str] = {}

self.tag = holidays.__version__

try:
latest_tag = self.remote_repo.get_tags()[0]
self.latest_tag_name = latest_tag.name
Expand Down Expand Up @@ -146,7 +144,7 @@ def add_pull_request(self, pull_request):

# Skip failed release attempt PRs, version upgrades.
pr_title = pull_request.title
skip_titles = (f"v.{self.args.tag}", "Bump", "Revert")
skip_titles = (f"v.{self.tag}", "Bump", "Revert")
for skip_title in skip_titles:
if pr_title.startswith(skip_title):
return None
Expand Down Expand Up @@ -246,7 +244,7 @@ def print_release_notes(self):
HEADER_TEMPLATE.format(
day=today.day,
month=today.strftime("%B"),
version=self.args.tag,
version=self.tag,
year=today.year,
)
)
Expand Down
Loading

0 comments on commit d133f59

Please sign in to comment.