Repository: dr-prodigy/python-holidays

Issue:
Add Holidays for Liechtenstien (country)
It would be great if you could add Liechtenstien.

      # Holidays Every Year same date 2022
      - '2022-01-01' #Neujahrstag
      - '2022-01-02' #Berchtoldstag
      - '2022-01-06' #Heilige Drei Konige
      - '2022-02-02' #Lichtmess
      - '2022-03-19' #Joseftag
      - '2022-05-01' #Tag der Arbeit
      - '2022-08-15' #Furstenfest (Staatsfeiertag)
      - '2022-09-08' #Maria Geburt
      - '2022-11-01' #Allerheiligen
      - '2022-12-08' #Maria Empfagnis
      - '2022-12-24' #Heiligabned
      - '2022-12-25' #1. Weihnachtstag
      - '2022-12-26' #2. Weihnachtstag
      - '2022-12-31' #Silvester
      # Holidays 2022
      - '2022-03-01' #Fasnachtsdienstag - https://en.wikipedia.org/wiki/Shrove_Tuesday
      - '2022-04-15' #Karfreitag
      - '2022-04-17' #Ostersonntag
      - '2022-04-18' #Ostermontag
      - '2022-05-26' #Christi Himmelfahrt
      - '2022-06-05' #Pfingstsonntag
      - '2022-06-06' #Pfingstmontag
      - '2022-06-16' #Fronleichnam	

Discussion:

Patch:
diff --git a/README.rst b/README.rst
index 3888be90..16e96ef1 100644
--- a/README.rst
+++ b/README.rst
@@ -272,6 +272,9 @@ following countries and their subdivisions are available:
    * - Lesotho
      - LS
      - None
+   * - Liechtenstein
+     - LI
+     - LIE
    * - Lithuania
      - LT
      - None
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 5417f4ab..86176f1e 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -61,6 +61,7 @@ from .kenya import KE, KEN, Kenya
 from .korea import KOR, KR, Korea
 from .latvia import LV, LVA, Latvia
 from .lesotho import LS, LSO, Lesotho
+from .liechtenstien import LI, LIE, Liechtenstien
 from .lithuania import LT, LTU, Lithuania
 from .luxembourg import LU, LUX, Luxembourg
 from .madagascar import MDG, MG, Madagascar
diff --git a/holidays/countries/liechtenstien.py b/holidays/countries/liechtenstien.py
new file mode 100644
index 00000000..dfefc1bf
--- /dev/null
+++ b/holidays/countries/liechtenstien.py
@@ -0,0 +1,103 @@
+#  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 <maurizio.montel@gmail.com> (c) 2017-2022
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+#  Copyright: Kateryna Golovanova <kate@kgthreads.com>, 2022
+
+from datetime import date
+
+from dateutil.easter import easter
+from dateutil.relativedelta import relativedelta as rd
+from holidays.constants import AUG, DEC, FEB, JAN, MAR, MAY, NOV, SEP
+from holidays.holiday_base import HolidayBase
+
+
+class Liechtenstien(HolidayBase):
+    """
+    Liechtenstien holidays.
+    See https://en.wikipedia.org/wiki/Public_holidays_in_Liechtenstein
+    for details.
+    """
+
+    country = "LI"
+
+    def _populate(self, year):
+        # New Year's Day.
+        self[date(year, JAN, 1)] = "Neujahr"
+
+        # Saint Berchtold's Day.
+        self[date(year, JAN, 2)] = "Berchtoldstag"
+
+        # Epiphany.
+        self[date(year, JAN, 6)] = "Drei Könige"
+
+        # Candlemas.
+        self[date(year, FEB, 2)] = "Mariä Lichtmess"
+
+        # Shrove Tuesday.
+        self[easter(year) + rd(days=-47)] = "Fasnachtsdienstag"
+
+        # Saint Joseph's Day.
+        self[date(year, MAR, 19)] = "Josefstag"
+
+        # Good Friday.
+        self[easter(year) + rd(days=-2)] = "Karfreitag"
+
+        # Easter.
+        self[easter(year)] = "Ostersonntag"
+
+        # Easter Monday.
+        self[easter(year) + rd(days=+1)] = "Ostermontag"
+
+        # Labor Day.
+        self[date(year, MAY, 1)] = "Tag der Arbeit"
+
+        # Ascension Day.
+        self[easter(year) + rd(days=+39)] = "Auffahrt"
+
+        # Pentecost.
+        self[easter(year) + rd(weeks=+7)] = "Pfingstsonntag"
+
+        # Whit Monday.
+        self[easter(year) + rd(days=+50)] = "Pfingstmontag"
+
+        # Corpus Christi.
+        self[easter(year) + rd(days=+60)] = "Fronleichnam"
+
+        # National Day.
+        self[date(year, AUG, 15)] = "Staatsfeiertag"
+
+        # Nativity of Mary.
+        self[date(year, SEP, 8)] = "Maria Geburt"
+
+        # All Saints Day.
+        self[date(year, NOV, 1)] = "Allerheiligen"
+
+        # Feast of the Immaculate Conception.
+        self[date(year, DEC, 8)] = "Maria Empfängnis"
+
+        # Christmas Eve.
+        self[date(year, DEC, 24)] = "Heiliger Abend"
+
+        # Christmas Day.
+        self[date(year, DEC, 25)] = "Weihnachten"
+
+        # St. Stephen's Day.
+        self[date(year, DEC, 26)] = "Stefanstag"
+
+        # New Year's Eve.
+        self[date(year, DEC, 31)] = "Silvester"
+
+
+class LI(Liechtenstien):
+    pass
+
+
+class LIE(Liechtenstien):
+    pass


Test patch:
diff --git a/test/countries/test_liechtenstein.py b/test/countries/test_liechtenstein.py
new file mode 100644
index 00000000..840256b4
--- /dev/null
+++ b/test/countries/test_liechtenstein.py
@@ -0,0 +1,214 @@
+#  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 <maurizio.montel@gmail.com> (c) 2017-2022
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/dr-prodigy/python-holidays
+#  License: MIT (see LICENSE file)
+#  Copyright: Kateryna Golovanova <kate@kgthreads.com>, 2022
+
+import unittest
+from datetime import date
+
+import holidays
+
+
+class TestLI(unittest.TestCase):
+    def setUp(self):
+        self.holidays = holidays.LI(observed=False)
+
+    def test_new_years(self):
+        for dt in (date(2010, 12, 30), date(2017, 1, 3)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 1, 1)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Neujahr")
+
+    def test_saint_berchtolds_day(self):
+        for dt in (date(2010, 12, 30), date(2017, 1, 3)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 1, 2)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Berchtoldstag")
+
+    def test_epiphany(self):
+        for dt in (date(2010, 1, 5), date(2017, 1, 7)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 1, 6)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Drei Könige")
+
+    def test_candlemas(self):
+        for dt in (date(2010, 2, 1), date(2017, 2, 3)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 2, 2)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Mariä Lichtmess")
+
+    def test_shrove_tuesday(self):
+        for dt in (date(2022, 3, 2), date(2021, 2, 15)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 3, 1), date(2021, 2, 16)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Fasnachtsdienstag")
+
+    def test_saint_josephs_day(self):
+        for dt in (date(2022, 3, 18), date(2021, 3, 20)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 3, 19)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Josefstag")
+
+    def test_good_friday(self):
+        for dt in (date(2022, 4, 16), date(2021, 4, 1)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 4, 15), date(2021, 4, 2)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Karfreitag")
+
+    def test_easter(self):
+        for dt in (date(2022, 4, 16), date(2021, 4, 3)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 4, 17), date(2021, 4, 4)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Ostersonntag")
+
+    def test_easter_monday(self):
+        for dt in (date(2022, 4, 19), date(2021, 4, 6)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 4, 18), date(2021, 4, 5)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Ostermontag")
+
+    def test_labor_day(self):
+        for dt in (date(2022, 5, 2), date(2021, 4, 30)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 5, 1)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Tag der Arbeit")
+
+    def test_ascension_day(self):
+        for dt in (date(2022, 5, 25), date(2021, 5, 12)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 5, 26), date(2021, 5, 13)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Auffahrt")
+
+    def test_pentecost(self):
+        for dt in (date(2022, 6, 4), date(2021, 5, 22)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 6, 5), date(2021, 5, 23)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Pfingstsonntag")
+
+    def test_whit_monday(self):
+        for dt in (date(2022, 6, 7), date(2021, 5, 25)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 6, 6), date(2021, 5, 24)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Pfingstmontag")
+
+    def test_corpus_christi(self):
+        for dt in (date(2022, 6, 15), date(2021, 6, 2)):
+            self.assertNotIn(dt, self.holidays)
+
+        for dt in (date(2022, 6, 16), date(2021, 6, 3)):
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Fronleichnam")
+
+    def test_national_day(self):
+        for dt in (date(2022, 5, 14), date(2021, 8, 16)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 8, 15)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Staatsfeiertag")
+
+    def test_nativity_of_mary(self):
+        for dt in (date(2022, 9, 7), date(2021, 9, 9)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 9, 8)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Maria Geburt")
+
+    def test_all_saints_day(self):
+        for dt in (date(2022, 10, 31), date(2022, 11, 2)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 11, 1)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Allerheiligen")
+
+    def test_feast_of_the_immaculate_conception(self):
+        for dt in (date(2022, 12, 7), date(2022, 12, 9)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 12, 8)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Maria Empfängnis")
+
+    def test_christmas_eve(self):
+        for year in (2021, 2022):
+            dt = date(year, 12, 23)
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 12, 24)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Heiliger Abend")
+
+    def test_christmas_day(self):
+        for year in (2021, 2022):
+            dt = date(year, 12, 23)
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 12, 25)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Weihnachten")
+
+    def test_st_stephens_day(self):
+        for dt in (date(2022, 12, 23), date(2021, 12, 27)):
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 12, 26)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Stefanstag")
+
+    def test_new_years_eve(self):
+        for year in (2021, 2022):
+            dt = date(year, 12, 30)
+            self.assertNotIn(dt, self.holidays)
+
+        for year in (2021, 2022):
+            dt = date(year, 12, 31)
+            self.assertIn(dt, self.holidays)
+            self.assertEqual(self.holidays[dt], "Silvester")