Repository: vacanza/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:
@gerdschadler and @dr-prodigy, I would like to contribute here.
The clarification needed is, the holidays listed are not matching to the list provided in the below link.
https://tourismus.li/en/our-country/about-liechtenstein/bank-holidays-in-liechtenstein/
May I know the trusted website to refer for the holidays and then to add in our holidays library. 
@PriyabrataSamantaray 
You're right. Here's an explanation.

In addition to the statutory public holidays, there are two other public holidays that can be considered paid public holidays on the basis of collective labor agreements between individual professional groups.

Candlemas February 2nd
Josefi March 19

In addition, the following public holidays are considered bank holidays* across the country

Berchtold's Day January 2nd
Shrove Tuesday 47 days before Easter
Good Friday Friday before Easter
Christmas Eve December 24th
New Year's Eve December 31st

* [https://www.llb.li/en/contact/bank-holidays](https://www.llb.li/en/contact/bank-holidays)

Thanks @gerdschadler for the clarification, I'll work on this issue and update here once it is ready for beta version. 

Resolving patch:
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -61,6 +61,7 @@
 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
--- /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
--- /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")