Repository: dr-prodigy/python-holidays

Issue:
Revisit #211 to include FR for France
This is an appeal to reconsider the request in #211 

Started using this library and I really like it, but this one exception to the [iso3166 standard](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) is most unexpected. I'll skip a lengthy opinion on the value of standards and go directly to my question: if there was a pull request to adhere to iso3166, would it be considered? Or would that be wasted work because of reasons (backwards compatibility or anything else)?

Thanks,
rfm.

Discussion:
coveralls: ## Pull Request Test Coverage Report for [Build 867](https://coveralls.io/builds/34020030)

* **4** of **4**   **(100.0%)**  changed or added relevant lines in **3** files are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage remained the same at **100.0%**

---



|  Totals | [![Coverage Status](https://coveralls.io/builds/34020030/badge)](https://coveralls.io/builds/34020030) |
| :-- | --: |
| Change from base [Build 856](https://coveralls.io/builds/33230664): |  0.0% |
| Covered Lines: | 8973 |
| Relevant Lines: | 8973 |

---
##### 💛  - [Coveralls](https://coveralls.io)


Patch:
diff --git a/README.rst b/README.rst
index 2816fdbf..1f64edd3 100644
--- a/README.rst
+++ b/README.rst
@@ -121,7 +121,7 @@ England                       None
 Estonia             EE/EST    None
 EuropeanCentralBank ECB/TAR   Trans-European Automated Real-time Gross Settlement (TARGET2)
 Finland             FI/FIN    None
-France              FRA       **Métropole** (default), Alsace-Moselle, Guadeloupe, Guyane,
+France              FR/FRA    **Métropole** (default), Alsace-Moselle, Guadeloupe, Guyane,
                               Martinique, Mayotte, Nouvelle-Calédonie, La Réunion,
                               Polynésie Française, Saint-Barthélémy, Saint-Martin,
                               Wallis-et-Futuna
@@ -176,7 +176,7 @@ Switzerland         CH/CHE    prov = AG, AR, AI, BL, BS, BE, FR, GE, GL, GR, JU,
 Turkey              TR/TUR    None
 Ukraine             UA/UKR    None
 UnitedArabEmirates  AE/ARE    None
-UnitedKingdom       UK/GB/GBR None
+UnitedKingdom       GB/GBR/UK None
 UnitedStates        US/USA    state = AL, AK, AS, AZ, AR, CA, CO, CT, DE, DC, FL, GA,
                               GU, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MH, MA, MI,
                               FM, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, MP,
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index d3e1d230..a8d8d4c4 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -30,7 +30,7 @@ from .egypt import Egypt, EG, EGY
 from .estonia import Estonia, EE, EST
 from .european_central_bank import EuropeanCentralBank, ECB, TAR
 from .finland import Finland, FI, FIN
-from .france import France, FRA
+from .france import France, FR, FRA
 from .germany import Germany, DE, DEU
 from .greece import Greece, GR, GRC
 from .honduras import Honduras, HN, HND
diff --git a/holidays/countries/croatia.py b/holidays/countries/croatia.py
index 519fe18b..0136f1e3 100644
--- a/holidays/countries/croatia.py
+++ b/holidays/countries/croatia.py
@@ -11,18 +11,18 @@
 #  Website: https://github.com/dr-prodigy/python-holidays
 #  License: MIT (see LICENSE file)
 
-from datetime import date
+from datetime import date, timedelta
 
 from dateutil.easter import easter
-from dateutil.relativedelta import relativedelta as rd
 
-from holidays.constants import JAN, MAY, JUN, AUG, OCT, \
-    NOV, DEC
+from holidays.constants import JAN, MAY, JUN, AUG, OCT, NOV, DEC
 from holidays.holiday_base import HolidayBase
 
 
 class Croatia(HolidayBase):
 
+    # Updated with act 022-03 / 19-01 / 219 of 14 November 2019
+    # https://narodne-novine.nn.hr/clanci/sluzbeni/2019_11_110_2212.html
     # https://en.wikipedia.org/wiki/Public_holidays_in_Croatia
 
     def __init__(self, **kwargs):
@@ -32,6 +32,7 @@ class Croatia(HolidayBase):
     def _populate(self, year):
         # New years
         self[date(year, JAN, 1)] = "Nova Godina"
+
         # Epiphany
         self[date(year, JAN, 6)] = "Sveta tri kralja"
         easter_date = easter(year)
@@ -39,23 +40,23 @@ class Croatia(HolidayBase):
         # Easter
         self[easter_date] = "Uskrs"
         # Easter Monday
-        self[easter_date + rd(days=1)] = "Uskršnji ponedjeljak"
+        self[easter_date + timedelta(days=1)] = "Uskrsni ponedjeljak"
 
         # Corpus Christi
-        self[easter_date + rd(days=60)] = "Tijelovo"
+        self[easter_date + timedelta(days=60)] = "Tijelovo"
 
         # International Workers' Day
         self[date(year, MAY, 1)] = "Međunarodni praznik rada"
 
+        # Statehood day (new)
         if year >= 2020:
-            # Statehood day
             self[date(year, MAY, 30)] = "Dan državnosti"
 
         # Anti-fascist struggle day
         self[date(year, JUN, 22)] = "Dan antifašističke borbe"
 
+        # Statehood day (old)
         if year < 2020:
-            # Statehood day
             self[date(year, JUN, 25)] = "Dan državnosti"
 
         # Victory and Homeland Thanksgiving Day
@@ -64,17 +65,16 @@ class Croatia(HolidayBase):
         # Assumption of Mary
         self[date(year, AUG, 15)] = "Velika Gospa"
 
+        # Independence Day (old)
         if year < 2020:
-            # Independence Day
             self[date(year, OCT, 8)] = "Dan neovisnosti"
 
         # All Saints' Day
-        self[date(year, NOV, 1)] = "Dan svih svetih"
+        self[date(year, NOV, 1)] = "Svi sveti"
 
         if year >= 2020:
             # Memorial day
-            self[date(year, NOV, 18)] =\
-                "Dan sjećanja na žrtve Domovinskog rata"
+            self[date(year, NOV, 18)] = "Dan sjećanja"
 
         # Christmas day
         self[date(year, DEC, 25)] = "Božić"
diff --git a/holidays/countries/france.py b/holidays/countries/france.py
index 8f57f518..66d99534 100644
--- a/holidays/countries/france.py
+++ b/holidays/countries/france.py
@@ -123,6 +123,10 @@ class France(HolidayBase):
             self[date(year, DEC, 20)] = "Abolition de l'esclavage"
 
 
-# FR already exists (Friday), we don't want to mess it up
+# *Warning* FR is also used by dateutlis (Friday), so be careful with its use
+class FR(France):
+    pass
+
+
 class FRA(France):
     pass
diff --git a/holidays/countries/russia.py b/holidays/countries/russia.py
index 8e935295..41d36c92 100644
--- a/holidays/countries/russia.py
+++ b/holidays/countries/russia.py
@@ -53,8 +53,12 @@ class Russia(HolidayBase):
         self[date(year, MAY, 9)] = "День Победы"
         # Russia's Day
         self[date(year, JUN, 12)] = "День России"
-        # Unity Day
-        self[date(year, NOV, 4)] = "День народного единства"
+        if year >= 2005:
+            # Unity Day
+            self[date(year, NOV, 4)] = "День народного единства"
+        else:
+            # October Revolution Day
+            self[date(year, NOV, 7)] = "День Октябрьской революции"
 
 
 class RU(Russia):
diff --git a/holidays/countries/united_kingdom.py b/holidays/countries/united_kingdom.py
index 4054b559..dfa92fae 100644
--- a/holidays/countries/united_kingdom.py
+++ b/holidays/countries/united_kingdom.py
@@ -166,6 +166,8 @@ class UnitedKingdom(HolidayBase):
 
         # Boxing Day
         name = "Boxing Day"
+        if self.country == "Ireland":
+            name = "St. Stephen's Day"
         self[date(year, DEC, 26)] = name
         if self.observed and date(year, DEC, 26).weekday() == SAT:
             self[date(year, DEC, 28)] = name + " (Observed)"
diff --git a/holidays/countries/united_states.py b/holidays/countries/united_states.py
index 595005e5..428eac78 100644
--- a/holidays/countries/united_states.py
+++ b/holidays/countries/united_states.py
@@ -452,12 +452,12 @@ class UnitedStates(HolidayBase):
         # American Indian Heritage Day
         # Family Day
         # New Mexico Presidents' Day
-        if (self.state in ('DE', 'FL', 'NH', 'NC', 'OK', 'TX', 'WV') and
+        if (self.state in ('CA', 'DE', 'FL', 'NH', 'NC', 'OK', 'TX', 'WV') and
             year >= 1975) \
                 or (self.state == 'IN' and year >= 2010) \
                 or (self.state == 'MD' and year >= 2008) \
                 or self.state in ('NV', 'NM'):
-            if self.state in ('DE', 'NH', 'NC', 'OK', 'WV'):
+            if self.state in ('CA', 'DE', 'NH', 'NC', 'OK', 'WV'):
                 name = "Day After Thanksgiving"
             elif self.state in ('FL', 'TX'):
                 name = "Friday After Thanksgiving"


Test patch:
diff --git a/tests.py b/tests.py
index 6832fdd4..43bf7734 100644
--- a/tests.py
+++ b/tests.py
@@ -1937,6 +1937,7 @@ class TestUS(unittest.TestCase):
         self.assertIn(date(2017, 11, 20), pr_holidays)
 
     def test_thanksgiving_day(self):
+        ca_holidays = holidays.US(state='CA')
         de_holidays = holidays.US(state='DE')
         fl_holidays = holidays.US(state='FL')
         in_holidays = holidays.US(state='IN')
@@ -1955,6 +1956,8 @@ class TestUS(unittest.TestCase):
             self.assertNotIn(dt + relativedelta(days=-1), self.holidays)
             self.assertNotIn(dt + relativedelta(days=+1), self.holidays)
             self.assertIn(dt + relativedelta(days=+1), de_holidays)
+            self.assertEqual(ca_holidays.get(dt + relativedelta(days=+1)),
+                             "Day After Thanksgiving")
             self.assertEqual(de_holidays.get(dt + relativedelta(days=+1)),
                              "Day After Thanksgiving")
             self.assertEqual(nh_holidays.get(dt + relativedelta(days=+1)),
@@ -3974,8 +3977,8 @@ class TestFrance(unittest.TestCase):
 
     def setUp(self):
         self.holidays = holidays.France()
-        self.prov_holidays = {prov: holidays.France(prov=prov)
-                              for prov in holidays.France.PROVINCES}
+        self.prov_holidays = {prov: holidays.FR(prov=prov)
+                              for prov in holidays.FRA.PROVINCES}
 
     def test_2017(self):
         self.assertIn(date(2017, 1, 1), self.holidays)
@@ -4949,6 +4952,9 @@ class TestCroatia(unittest.TestCase):
         self.assertIn(date(2018, 11, 1), self.holidays)
         self.assertIn(date(2018, 12, 25), self.holidays)
         self.assertIn(date(2018, 12, 26), self.holidays)
+
+    def test_2020_new(self):
+        self.assertIn(date(2020, 5, 30), self.holidays)
         self.assertIn(date(2020, 11, 18), self.holidays)
 
 
@@ -5282,6 +5288,10 @@ class TestRussia(unittest.TestCase):
 
     def setUp(self):
         self.holidays = holidays.RU()
+        
+    def test_before_2005(self):
+        self.assertIn(date(2004, 11, 7), self.holidays)
+        self.assertNotIn(date(2004, 11, 4), self.holidays)
 
     def test_2018(self):
         # https://en.wikipedia.org/wiki/Public_holidays_in_Russia
@@ -5299,6 +5309,7 @@ class TestRussia(unittest.TestCase):
         self.assertIn(date(2018, 5, 9), self.holidays)
         self.assertIn(date(2018, 6, 12), self.holidays)
         self.assertIn(date(2018, 11, 4), self.holidays)
+        self.assertNotIn(date(2018, 11, 7), self.holidays)
 
 
 class TestLatvia(unittest.TestCase):