Repository: vacanza/python-holidays

Issue:
Holidays for Georgia
Georgian (not the USA state) holidays are missing and if possible I'd like to add Georgian holidays. I'll send PR when it will be ready :)


Discussion:

Resolving patch:
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -33,6 +33,7 @@
 from .european_central_bank import EuropeanCentralBank, ECB, TAR
 from .finland import Finland, FI, FIN
 from .france import France, FR, FRA
+from .georgia import Georgia, GE, GEO
 from .germany import Germany, DE, DEU
 from .greece import Greece, GR, GRC
 from .honduras import Honduras, HN, HND
diff --git a/holidays/countries/georgia.py b/holidays/countries/georgia.py
new file mode 100644
--- /dev/null
+++ b/holidays/countries/georgia.py
@@ -0,0 +1,108 @@
+# -*- coding: utf-8 -*-
+
+#  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.
+#
+#  Author:  ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#           dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2021
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+
+from datetime import date
+
+from dateutil.easter import easter, EASTER_ORTHODOX
+from dateutil.relativedelta import relativedelta as rd
+
+from holidays.constants import JAN, MAR, APR, MAY, AUG, OCT, NOV
+from holidays.holiday_base import HolidayBase
+
+
+class Georgia(HolidayBase):
+    """
+    https://en.wikipedia.org/wiki/Public_holidays_in_Georgia_(country)
+    """
+
+    def __init__(self, **kwargs):
+        self.country = "GE"
+        HolidayBase.__init__(self, **kwargs)
+
+    def _populate(self, year):
+
+        # New Year's Day
+        name = "ახალი წელი"
+        self[date(year, JAN, 1)] = name
+
+        # New Year's Day
+        name = "ბედობა"
+        self[date(year, JAN, 2)] = name
+
+        # Christmas Day (Orthodox)
+        name = "ქრისტეშობა"
+        self[date(year, JAN, 7)] = name
+
+        # Baptism Day of our Lord Jesus Christ
+        name = "ნათლისღება"
+        self[date(year, JAN, 19)] = name
+
+        # Mother's Day
+        name = "დედის დღე"
+        self[date(year, MAR, 3)] = name
+
+        # Women's Day
+        name = "ქალთა საერთაშორისო დღე"
+        self[date(year, MAR, 8)] = name
+
+        # Orthodox Good Friday
+        name = "წითელი პარასკევი"
+        self[easter(year, method=EASTER_ORTHODOX) - rd(days=2)] = name
+
+        # Orthodox Holy Saturday
+        name = "დიდი შაბათი"
+        self[easter(year, method=EASTER_ORTHODOX) - rd(days=1)] = name
+
+        # 	Orthodox Easter Sunday
+        name = "აღდგომა"
+        self[easter(year, method=EASTER_ORTHODOX)] = name
+
+        # Orthodox Easter Monday
+        name = "შავი ორშაბათი"
+        self[easter(year, method=EASTER_ORTHODOX) + rd(days=1)] = name
+
+        # National Unity Day
+        name = "ეროვნული ერთიანობის დღე"
+        self[date(year, APR, 9)] = name
+
+        # Day of Victory
+        name = "ფაშიზმზე გამარჯვების დღე"
+        self[date(year, MAY, 9)] = name
+
+        # Saint Andrew the First-Called Day
+        name = "წმინდა ანდრია პირველწოდებულის დღე"
+        self[date(year, MAY, 12)] = name
+
+        # Independence Day
+        name = "დამოუკიდებლობის დღე"
+        self[date(year, MAY, 26)] = name
+
+        # Saint Mary's Day
+        name = "მარიამობა"
+        self[date(year, AUG, 28)] = name
+
+        # Day of Svetitskhoveli Cathedral
+        name = "სვეტიცხოვლობა"
+        self[date(year, OCT, 14)] = name
+
+        # Saint George's Day
+        name = "გიორგობა"
+        self[date(year, NOV, 23)] = name
+
+
+class GE(Georgia):
+    pass
+
+
+class GEO(Georgia):
+    pass


Test patch:
diff --git a/tests.py b/tests.py
--- a/tests.py
+++ b/tests.py
@@ -7022,5 +7022,35 @@ def test_not_holiday(self):
         self.assertNotIn('2015-04-13', self.holidays)
         self.assertNotIn('2018-03-23', self.holidays)
 
+class TestGeorgia(unittest.TestCase):
+
+    def setUp(self):
+        self.holidays = holidays.GE()
+
+    def test_easter(self):
+        self.assertIn(date(2020, 4, 19), self.holidays)
+        self.assertIn(date(2019, 4, 28), self.holidays)
+        self.assertIn(date(2018, 4, 8), self.holidays)
+
+    def test_2020(self):
+        # https://en.wikipedia.org/wiki/Public_holidays_in_Georgia_(country)
+        self.assertIn(date(2020, 1, 1), self.holidays)
+        self.assertIn(date(2020, 1, 2), self.holidays)
+        self.assertIn(date(2020, 1, 7), self.holidays)
+        self.assertIn(date(2020, 1, 19), self.holidays)
+        self.assertIn(date(2020, 3, 3), self.holidays)
+        self.assertIn(date(2020, 3, 8), self.holidays)
+        self.assertIn(date(2020, 4, 9), self.holidays)
+        self.assertIn(date(2020, 5, 9), self.holidays)
+        self.assertIn(date(2020, 5, 12), self.holidays)
+        self.assertIn(date(2020, 5, 26), self.holidays)
+        self.assertIn(date(2020, 8, 28), self.holidays)
+        self.assertIn(date(2020, 10, 14), self.holidays)
+        self.assertIn(date(2020, 11, 23), self.holidays)
+    
+    def test_not_holiday(self):
+        self.assertNotIn("2020-08-16", self.holidays)
+        self.assertNotIn("2008-08-05", self.holidays)
+
 if __name__ == "__main__":
     unittest.main()