From 2540f3ad5108747db604208899751c0e848cdd7f Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar Date: Mon, 24 Jul 2023 19:53:41 +0200 Subject: [PATCH 01/12] Add Barbados holidays --- README.rst | 6 ++- holidays/countries/__init__.py | 1 + holidays/countries/barbados.py | 70 ++++++++++++++++++++++++++++++++ holidays/registry.py | 1 + tests/countries/test_barbados.py | 43 ++++++++++++++++++++ 5 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 holidays/countries/barbados.py create mode 100644 tests/countries/test_barbados.py diff --git a/README.rst b/README.rst index dfc768ee0..aff521e94 100644 --- a/README.rst +++ b/README.rst @@ -109,7 +109,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 131 country codes. The standard way to refer to a country +We currently support 132 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. @@ -185,6 +185,10 @@ The list of supported countries, their subdivisions and supported languages - BD - - + * - Barbados + - BB + - + - * - Belarus - BY - diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py index 3082bee05..cbc7a8310 100644 --- a/holidays/countries/__init__.py +++ b/holidays/countries/__init__.py @@ -24,6 +24,7 @@ from .azerbaijan import Azerbaijan, AZ, AZE from .bahrain import Bahrain, BH, BAH from .bangladesh import Bangladesh, BD, BGD +from .barbados import Barbados, BB, BRB from .belarus import Belarus, BY, BLR from .belgium import Belgium, BE, BEL from .belize import Belize, BZ, BLZ diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py new file mode 100644 index 000000000..1da840393 --- /dev/null +++ b/holidays/countries/barbados.py @@ -0,0 +1,70 @@ +from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV, DEC +from holidays.holiday_base import HolidayBase +from holidays.holiday_groups import ChristianHolidays, InternationalHolidays + + +class Barbados(HolidayBase, ChristianHolidays, InternationalHolidays): + """ + https://www.timeanddate.com/holidays/barbados/ + """ + + country = "BB" + default_language = "en" + + def __init__(self, *args, **kwargs) -> None: + ChristianHolidays.__init__(self) + InternationalHolidays.__init__(self) + super().__init__(*args, **kwargs) + + def _populate(self, year): + super()._populate(year) + + # Overview: https://en.wikipedia.org/wiki/Public_holidays_in_Barbados + # New Year's Day + self._add_new_years_day("New Year's Day") + + # Errol Barrow Day + self._add_holiday("Errol Barrow Day", JAN, 21) + + # Good Friday + self._add_good_friday("Good Friday") + + # Easter Monday + self._add_easter_monday("Easter Monday") + + # National Heroes Day + self._add_holiday("National Heroes Day", APR, 28) + + # Labor Day / May Day + self._add_labor_day("Labor Day / May Day") + + # Whit Monday + self._add_whit_monday("Whit Monday") + + # One off 50th Anniversary of CARICOM Holiday. + # See https://tinyurl.com/brbhol + if year == 2023: + self._add_holiday("50th Anniversary of CARICOM Holiday", JUL, 31) + + # Emancipation Day + self._add_holiday("Emancipation Day", AUG, 1) + + # Kadootment Day + self._add_holiday("Kadooment Day", AUG, 7) + + # Independence Day + self._add_holiday("Independence Day", NOV, 30) + + # Christmas + self._add_christmas_day("Christmas Day") + + # Boxing Day + self._add_holiday("Boxing Day", DEC, 26) + + +class BB(Barbados): + pass + + +class BRB(Barbados): + pass \ No newline at end of file diff --git a/holidays/registry.py b/holidays/registry.py index 957de7041..894490e2d 100644 --- a/holidays/registry.py +++ b/holidays/registry.py @@ -30,6 +30,7 @@ "azerbaijan": ("Azerbaijan", "AZ", "AZE"), "bahrain": ("Bahrain", "BH", "BAH"), "bangladesh": ("Bangladesh", "BD", "BGD"), + "barbados": ("Barbados", "BB", "BRB"), "belarus": ("Belarus", "BY", "BLR"), "belgium": ("Belgium", "BE", "BEL"), "belize": ("Belize", "BZ", "BLZ"), diff --git a/tests/countries/test_barbados.py b/tests/countries/test_barbados.py new file mode 100644 index 000000000..126035681 --- /dev/null +++ b/tests/countries/test_barbados.py @@ -0,0 +1,43 @@ +# 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 (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/dr-prodigy/python-holidays +# License: MIT (see LICENSE file) + +from holidays.countries.barbados import Barbados, BB, BRB +from tests.common import TestCase + + +class TestBarbados(TestCase): + @classmethod + def setUpClass(cls): + super().setUpClass(Barbados) + + def test_country_aliases(self): + self.assertCountryAliases(Barbados, BB, BRB) + + def test_2023(self): + self.assertHolidays( + ("2023-01-01", "New Year's Day"), + ("2023-01-21", "Errol Barrow Day"), + ("2023-04-07", "Good Friday"), + ("2023-04-10", "Easter Monday"), + ("2023-04-28", "National Heroes Day"), + ("2023-05-01", "Labor Day / May Day"), + ("2023-05-29", "Whit Monday"), + ("2023-07-31", "50th Anniversary of CARICOM Holiday"), + ("2023-08-01", "Emancipation Day"), + ("2023-08-07", "Kadooment Day"), + ("2023-11-30", "Independence Day"), + ("2023-12-25", "Christmas Day"), + ("2023-12-26", "Boxing Day"), + ) + + def test_2024(self): + self.assertNoHoliday("2024-07-31") + self.assertNoHolidayName("50th Anniversary of CARICOM Holiday", Barbados(years=2024)) \ No newline at end of file From a0cab99fc84082f9abc22360d94b4da5f8d3251c Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar Date: Mon, 24 Jul 2023 20:39:41 +0200 Subject: [PATCH 02/12] Remove default_lang --- holidays/countries/barbados.py | 3 +-- tests/countries/test_barbados.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 1da840393..95c717ba6 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -9,7 +9,6 @@ class Barbados(HolidayBase, ChristianHolidays, InternationalHolidays): """ country = "BB" - default_language = "en" def __init__(self, *args, **kwargs) -> None: ChristianHolidays.__init__(self) @@ -67,4 +66,4 @@ class BB(Barbados): class BRB(Barbados): - pass \ No newline at end of file + pass diff --git a/tests/countries/test_barbados.py b/tests/countries/test_barbados.py index 126035681..31968cd04 100644 --- a/tests/countries/test_barbados.py +++ b/tests/countries/test_barbados.py @@ -40,4 +40,4 @@ def test_2023(self): def test_2024(self): self.assertNoHoliday("2024-07-31") - self.assertNoHolidayName("50th Anniversary of CARICOM Holiday", Barbados(years=2024)) \ No newline at end of file + self.assertNoHolidayName("50th Anniversary of CARICOM Holiday", Barbados(years=2024)) From ffe4b6dbb8cf756f376bbcf0fc3bf79847e4e00d Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar <102953522+arjunanan6@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:38:55 +0200 Subject: [PATCH 03/12] Update holidays/countries/barbados.py Co-authored-by: ~Jhellico --- holidays/countries/barbados.py | 1 + 1 file changed, 1 insertion(+) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 95c717ba6..8c4e6c2d3 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -5,6 +5,7 @@ class Barbados(HolidayBase, ChristianHolidays, InternationalHolidays): """ + https://en.wikipedia.org/wiki/Public_holidays_in_Barbados https://www.timeanddate.com/holidays/barbados/ """ From ad9a1254c2d8319e50b04c009468a89dc12c84e7 Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar <102953522+arjunanan6@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:39:38 +0200 Subject: [PATCH 04/12] Update holidays/countries/barbados.py Co-authored-by: ~Jhellico --- holidays/countries/barbados.py | 1 - 1 file changed, 1 deletion(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 8c4e6c2d3..4f72058ce 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -19,7 +19,6 @@ def __init__(self, *args, **kwargs) -> None: def _populate(self, year): super()._populate(year) - # Overview: https://en.wikipedia.org/wiki/Public_holidays_in_Barbados # New Year's Day self._add_new_years_day("New Year's Day") From 68f7b26a471f1c077258433d0327983fbfdb2969 Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar <102953522+arjunanan6@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:39:52 +0200 Subject: [PATCH 05/12] Update holidays/countries/barbados.py Co-authored-by: ~Jhellico --- holidays/countries/barbados.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 4f72058ce..14f44d525 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -1,4 +1,4 @@ -from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV, DEC +from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV, MON from holidays.holiday_base import HolidayBase from holidays.holiday_groups import ChristianHolidays, InternationalHolidays From 4e99640dd0fc2bddcb6ffc42644fd5b34baea6bd Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar <102953522+arjunanan6@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:40:07 +0200 Subject: [PATCH 06/12] Update holidays/countries/barbados.py Co-authored-by: ~Jhellico --- holidays/countries/barbados.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 14f44d525..1d55ad107 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -49,7 +49,7 @@ def _populate(self, year): self._add_holiday("Emancipation Day", AUG, 1) # Kadootment Day - self._add_holiday("Kadooment Day", AUG, 7) + self._add_holiday("Kadooment Day", self._get_nth_weekday_of_month(1, MON, AUG)) # Independence Day self._add_holiday("Independence Day", NOV, 30) From 9c0e3a98d067a2c3d8ab8b8f52a2c8ba19a3b575 Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar <102953522+arjunanan6@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:40:12 +0200 Subject: [PATCH 07/12] Update holidays/countries/barbados.py Co-authored-by: ~Jhellico --- holidays/countries/barbados.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 1d55ad107..a0eaec0df 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -58,7 +58,7 @@ def _populate(self, year): self._add_christmas_day("Christmas Day") # Boxing Day - self._add_holiday("Boxing Day", DEC, 26) + self._add_christmas_day_two("Boxing Day") class BB(Barbados): From 921daa9aa0621f682fc97f77c41b583a6ad17fc7 Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar <102953522+arjunanan6@users.noreply.github.com> Date: Sat, 12 Aug 2023 11:40:18 +0200 Subject: [PATCH 08/12] Update holidays/countries/barbados.py Co-authored-by: ~Jhellico --- holidays/countries/barbados.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index a0eaec0df..8440d1afd 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -34,8 +34,8 @@ def _populate(self, year): # National Heroes Day self._add_holiday("National Heroes Day", APR, 28) - # Labor Day / May Day - self._add_labor_day("Labor Day / May Day") + # May Day + self._add_labor_day("May Day") # Whit Monday self._add_whit_monday("Whit Monday") From e50b4b0155b4db7878a72412774f1be3f39bc8fa Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar Date: Sat, 12 Aug 2023 11:48:45 +0200 Subject: [PATCH 09/12] Some changes --- holidays/countries/barbados.py | 11 ++++++----- tests/countries/test_barbados.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 8440d1afd..a19c242b7 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -11,6 +11,12 @@ class Barbados(HolidayBase, ChristianHolidays, InternationalHolidays): country = "BB" + special_holidays = { + # One off 50th Anniversary of CARICOM Holiday. + # See https://tinyurl.com/brbhol + 2023: (JUL, 31, "50th Anniversary of CARICOM Holiday") + } + def __init__(self, *args, **kwargs) -> None: ChristianHolidays.__init__(self) InternationalHolidays.__init__(self) @@ -40,11 +46,6 @@ def _populate(self, year): # Whit Monday self._add_whit_monday("Whit Monday") - # One off 50th Anniversary of CARICOM Holiday. - # See https://tinyurl.com/brbhol - if year == 2023: - self._add_holiday("50th Anniversary of CARICOM Holiday", JUL, 31) - # Emancipation Day self._add_holiday("Emancipation Day", AUG, 1) diff --git a/tests/countries/test_barbados.py b/tests/countries/test_barbados.py index 31968cd04..b39fe2d35 100644 --- a/tests/countries/test_barbados.py +++ b/tests/countries/test_barbados.py @@ -28,7 +28,7 @@ def test_2023(self): ("2023-04-07", "Good Friday"), ("2023-04-10", "Easter Monday"), ("2023-04-28", "National Heroes Day"), - ("2023-05-01", "Labor Day / May Day"), + ("2023-05-01", "May Day"), ("2023-05-29", "Whit Monday"), ("2023-07-31", "50th Anniversary of CARICOM Holiday"), ("2023-08-01", "Emancipation Day"), From 03624115940e78be452654aeaa9bfdc97a21be89 Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar Date: Sat, 12 Aug 2023 12:56:18 +0200 Subject: [PATCH 10/12] Changes to method --- holidays/countries/barbados.py | 4 ++-- tests/countries/test_barbados.py | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index a19c242b7..18f8a394a 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -1,4 +1,4 @@ -from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV, MON +from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV, MON, _get_nth_weekday_of_month from holidays.holiday_base import HolidayBase from holidays.holiday_groups import ChristianHolidays, InternationalHolidays @@ -50,7 +50,7 @@ def _populate(self, year): self._add_holiday("Emancipation Day", AUG, 1) # Kadootment Day - self._add_holiday("Kadooment Day", self._get_nth_weekday_of_month(1, MON, AUG)) + self._add_holiday("Kadooment Day", _get_nth_weekday_of_month(1, MON, AUG, self._year)) # Independence Day self._add_holiday("Independence Day", NOV, 30) diff --git a/tests/countries/test_barbados.py b/tests/countries/test_barbados.py index b39fe2d35..9c85ad0b7 100644 --- a/tests/countries/test_barbados.py +++ b/tests/countries/test_barbados.py @@ -21,6 +21,9 @@ def setUpClass(cls): def test_country_aliases(self): self.assertCountryAliases(Barbados, BB, BRB) + def test_special_holidays(self): + self.assertHoliday("2023-07-31") + def test_2023(self): self.assertHolidays( ("2023-01-01", "New Year's Day"), From 686fd791cefcd6c73e6729a330853a9d8c41574e Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar Date: Sat, 12 Aug 2023 14:18:58 +0200 Subject: [PATCH 11/12] Switch to _add_holiday_1st_mon_of_aug --- holidays/countries/barbados.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index 18f8a394a..c22c0995f 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -1,4 +1,4 @@ -from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV, MON, _get_nth_weekday_of_month +from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV from holidays.holiday_base import HolidayBase from holidays.holiday_groups import ChristianHolidays, InternationalHolidays @@ -49,8 +49,8 @@ def _populate(self, year): # Emancipation Day self._add_holiday("Emancipation Day", AUG, 1) - # Kadootment Day - self._add_holiday("Kadooment Day", _get_nth_weekday_of_month(1, MON, AUG, self._year)) + # Kadooment Day + self._add_holiday_1st_mon_of_aug("Kadooment Day") # Independence Day self._add_holiday("Independence Day", NOV, 30) From 74b9530a0344dd3b858c489a663bb5f9530b7532 Mon Sep 17 00:00:00 2001 From: Arjun Anandkumar Date: Tue, 15 Aug 2023 09:21:56 +0200 Subject: [PATCH 12/12] Changes to _add_holiday --- holidays/countries/barbados.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py index c22c0995f..c1bb2f70b 100644 --- a/holidays/countries/barbados.py +++ b/holidays/countries/barbados.py @@ -1,4 +1,4 @@ -from holidays.calendars.gregorian import JAN, APR, JUL, AUG, NOV +from holidays.calendars.gregorian import JUL from holidays.holiday_base import HolidayBase from holidays.holiday_groups import ChristianHolidays, InternationalHolidays @@ -29,7 +29,7 @@ def _populate(self, year): self._add_new_years_day("New Year's Day") # Errol Barrow Day - self._add_holiday("Errol Barrow Day", JAN, 21) + self._add_holiday_jan_21("Errol Barrow Day") # Good Friday self._add_good_friday("Good Friday") @@ -38,7 +38,7 @@ def _populate(self, year): self._add_easter_monday("Easter Monday") # National Heroes Day - self._add_holiday("National Heroes Day", APR, 28) + self._add_holiday_apr_28("National Heroes Day") # May Day self._add_labor_day("May Day") @@ -47,13 +47,13 @@ def _populate(self, year): self._add_whit_monday("Whit Monday") # Emancipation Day - self._add_holiday("Emancipation Day", AUG, 1) + self._add_holiday_aug_1("Emancipation Day") # Kadooment Day self._add_holiday_1st_mon_of_aug("Kadooment Day") # Independence Day - self._add_holiday("Independence Day", NOV, 30) + self._add_holiday_nov_30("Independence Day") # Christmas self._add_christmas_day("Christmas Day")