File: france.py

package info (click to toggle)
python-holidays 0.86-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 57,296 kB
  • sloc: python: 117,830; javascript: 85; makefile: 59
file content (342 lines) | stat: -rw-r--r-- 14,266 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
#  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: Vacanza Team and individual contributors (see CONTRIBUTORS file)
#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
#  Website: https://github.com/vacanza/holidays
#  License: MIT (see LICENSE file)

from gettext import gettext as tr

from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.holiday_base import HolidayBase


class France(HolidayBase, ChristianHolidays, InternationalHolidays):
    """France holidays.

    References:
        * <https://fr.wikipedia.org/wiki/Fêtes_et_jours_fériés_en_France>
        * <https://web.archive.org/web/20250424031328/https://www.service-public.fr/particuliers/vosdroits/F2405>
        * [Arrêté du 29 germinal an X](https://web.archive.org/web/20250327095254/https://journals.openedition.org/rdr/439)
        * [Loi du 6 juillet 1880](https://archive.org/details/jorf-18800707-185)
        * [Loi du 8 mars 1886](https://archive.org/details/jorf-18860309-67)
        * [Loi du 9 décembre 1905](https://web.archive.org/web/20250617084843/https://mjp.univ-perp.fr/france/1905laicite.htm)
        * [Loi du 24 octobre 1922](https://web.archive.org/web/20250618030815/https://archives.defense.gouv.fr/content/download/102094/992430/Loi%20du%2024%20octobre%201922%20fixant%20la%20journée%20commémorative%20du%2011%20novembre.pdf)
        * [Loi n°46-828 du 26 avril 1946](https://archive.org/details/jorf-19460428-100)
        * [Loi n°46-934 du 7 mai 1946](https://archive.org/details/jorf-19460508-107)
        * [Loi n°47-778 du 30 avril 1947 ](https://archive.org/details/jorf-19470501-104)
        * [Loi n°48-746 du 29 avril 1948](https://archive.org/details/jorf-19480430-104)
        * [Loi n°53-225 du 20 mars 1953](https://archive.org/details/jorf-19530321-69)
        * [Décret n°59-533 du 11 avril 1959](https://archive.org/details/jorf-19590415-88)
        * [Loi n° 61-814 du 29 juillet 1961](https://web.archive.org/web/20240715174837/https://www.legifrance.gouv.fr/loda/id/JORFTEXT000000684031)
        * [Loi n°81-893 du 2 octobre 1981](https://archive.org/details/jorf-19811003-232)
        * [Loi n° 83-550 du 30 juin 1983](https://archive.org/details/jorf-19830701-151)
        * [Décret n°83-1003 du 23 novembre 1983](https://archive.org/details/jorf-19831124-272_202506)
        * [Loi n° 2004-626 du 30 juin 2004](https://web.archive.org/web/20220830045136/https://www.legifrance.gouv.fr/loda/id/JORFTEXT000000622485/)
        * [Loi n° 2008-351 du 16 avril 2008](https://web.archive.org/web/20220602124233/https://www.legifrance.gouv.fr/loda/id/JORFTEXT000018656009/)
        * [Décret n° 2012-553 du 23 avril 2012](https://web.archive.org/web/20231104120733/https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000025743756)
        * <https://web.archive.org/web/20240719134144/https://www.moselle.gouv.fr/contenu/telechargement/5830/42693/file/fiche+commerce+MAJ.pdf>
        * <https://web.archive.org/web/20190812110746/http://histoire.assemblee.pf/articles.php?id=567>
        * <https://web.archive.org/web/20190812043635/http://histoire.assemblee.pf/articles.php?id=568>
        * <https://web.archive.org/web/20250618073111/https://www.tahitipresse.pf/2025/05/polynesie-29-juin-ou-20-novembre/>
        * <https://web.archive.org/web/20250618061809/https://la1ere.franceinfo.fr/nouvellecaledonie/commemorations-differentes-24-septembre-752087.html>

    Some provinces have specific holidays, only those are included in the
    PROVINCES, because these provinces have different administrative status,
    which makes it difficult to enumerate.
    """

    country = "FR"
    default_language = "fr"
    # Arrêté du 29 germinal an X (April 19th, 1802),
    # Reaffirmed by Article 42 de la loi du 9 décembre 1905.
    start_year = 1803
    # fmt: off
    subdivisions: tuple[str, ...] = (
        "57",   # Moselle.
        "6AE",  # Alsace.
        "971",  # Guadeloupe.
        "972",  # Martinique.
        "973",  # Guyane.
        "974",  # La Réunion.
        "976",  # Mayotte.
        "BL",   # Saint-Barthélemy.
        "MF",   # Saint-Martin.
        "NC",   # Nouvelle-Calédonie,
        "PF",   # Polynésie Française.
        "PM",   # Saint-Pierre-et-Miquelon.
        "TF",   # Terres australes françaises.
        "WF",   # Wallis-et-Futuna.
    )
    # fmt: on
    subdivisions_aliases = {
        "Moselle": "57",
        "Alsace": "6AE",
        "GP": "971",
        "GUA": "971",
        "Guadeloupe": "971",
        "MQ": "972",
        "Martinique": "972",
        "GY": "973",
        "Guyane": "973",
        "RE": "974",
        "LRE": "974",
        "La Réunion": "974",
        "YT": "976",
        "MAY": "976",
        "Mayotte": "976",
        "Saint-Barthélemy": "BL",
        "Saint-Martin": "MF",
        "Nouvelle-Calédonie": "NC",
        "Polynésie Française": "PF",
        "Saint-Pierre-et-Miquelon": "PM",
        "Terres australes françaises": "TF",
        "Wallis-et-Futuna": "WF",
    }
    supported_languages = ("en_US", "fr", "th", "uk")
    _deprecated_subdivisions = (
        "Alsace-Moselle",
        "GES",
        "Métropole",
        "Saint-Barthélémy",
    )

    def __init__(self, *args, **kwargs):
        ChristianHolidays.__init__(self)
        InternationalHolidays.__init__(self)
        super().__init__(*args, **kwargs)

    def _populate_public_holidays(self):
        # Established on March 28th, 1810.
        if self._year >= 1811:
            # New Year's Day.
            self._add_new_years_day(tr("Jour de l'an"))

        # Established on March 8th, 1886.
        if self._year >= 1886:
            # Easter Monday.
            self._add_easter_monday(tr("Lundi de Pâques"))

            # Removed on June 30th, 2004.
            # Readded on April 16th, 2008.
            if self._year not in {2005, 2006, 2007}:
                # Whit Monday.
                self._add_whit_monday(tr("Lundi de Pentecôte"))

        # Made unofficial public holiday with no name on April 23rd, 1919.
        # Included in official list by Vichy France with new name on April 24th, 1941.
        # Confirmed for 1946 with no name on April 26th, 1946.
        # Added annually from 1947 onwards with no name on April 30th, 1947.
        # Got its current name on April 29th, 1948.
        if self._year >= 1919:
            if self._year >= 1948:
                # Labor Day.
                name = tr("Fête du Travail")
            elif 1941 <= self._year <= 1945:
                # Labor and Social Concord Day.
                name = tr("Fête du Travail et de la Concorde sociale")
            else:
                # May Day.
                name = tr("1er mai")
            self._add_labor_day(name)

        # Commemorated on May 7th, 1946 as 1st Sunday after May 7th.
        # Upgraded to Public Holiday on May 8th directly on March 20th, 1953.
        # Removed from 1960 onwards per April 11th, 1959 decree.
        # Readded on October 2nd, 1981.
        if 1953 <= self._year <= 1959 or self._year >= 1982:
            # Victory Day.
            self._add_world_war_two_victory_day(tr("Fête de la Victoire"))

        # Ascension Day.
        self._add_ascension_thursday(tr("Ascension"))

        # Established on July 6th, 1880.
        if self._year >= 1880:
            # National Day.
            self._add_holiday_jul_14(tr("Fête nationale"))

        # Assumption Day.
        self._add_assumption_of_mary_day(tr("Assomption"))

        # All Saints' Day.
        self._add_all_saints_day(tr("Toussaint"))

        # Established on October 24th, 1922.
        if self._year >= 1922:
            # Armistice Day.
            self._add_remembrance_day(tr("Armistice"))

        # Christmas Day.
        self._add_christmas_day(tr("Noël"))

        if self.subdiv == "Alsace-Moselle":
            self._populate_subdiv_6ae_public_holidays()
        elif self.subdiv == "Saint-Barthélémy":
            self._populate_subdiv_bl_public_holidays()

    # Moselle.
    def _populate_subdiv_57_public_holidays(self):
        # Established on August 16th, 1892.
        if self._year >= 1893:
            # Good Friday.
            self._add_good_friday(tr("Vendredi saint"))

        # Established on August 16th, 1892.
        if self._year >= 1892:
            # Saint Stephen's Day.
            self._add_christmas_day_two(tr("Saint Étienne"))

    # Alsace.
    def _populate_subdiv_6ae_public_holidays(self):
        # Established on August 16th, 1892.
        if self._year >= 1893:
            # Good Friday.
            self._add_good_friday(tr("Vendredi saint"))

        # Established on August 16th, 1892.
        if self._year >= 1892:
            # Saint Stephen's Day.
            self._add_christmas_day_two(tr("Saint Étienne"))

    # Guadeloupe.
    def _populate_subdiv_971_public_holidays(self):
        # Good Friday.
        self._add_good_friday(tr("Vendredi saint"))

        # Mi-Careme.
        self._add_holiday_24_days_prior_easter(tr("Mi-Carême"))

        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        # Victor Schoelcher Day is based on June 30th, 1983 provision.
        if self._year >= 1984:
            # Abolition of Slavery.
            self._add_holiday_may_27(tr("Abolition de l'esclavage"))

            # Victor Schoelcher Day.
            self._add_holiday_jul_21(tr("Fête de Victor Schoelcher"))

    # Martinique.
    def _populate_subdiv_972_public_holidays(self):
        # Good Friday.
        self._add_good_friday(tr("Vendredi saint"))

        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        # Victor Schoelcher Day is based on June 30th, 1983 provision.
        if self._year >= 1984:
            # Abolition of Slavery.
            self._add_holiday_may_22(tr("Abolition de l'esclavage"))

            # Victor Schoelcher Day.
            self._add_holiday_jul_21(tr("Fête de Victor Schoelcher"))

    # Guyane.
    def _populate_subdiv_973_public_holidays(self):
        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        if self._year >= 1984:
            # Abolition of Slavery.
            self._add_holiday_jun_10(tr("Abolition de l'esclavage"))

    # Reunion.
    def _populate_subdiv_974_public_holidays(self):
        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        if self._year >= 1983:
            # Abolition of Slavery.
            self._add_holiday_dec_20(tr("Abolition de l'esclavage"))

    # Mayotte.
    def _populate_subdiv_976_public_holidays(self):
        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        if self._year >= 1984:
            # Abolition of Slavery.
            self._add_holiday_apr_27(tr("Abolition de l'esclavage"))

    # Saint Barthelemy.
    def _populate_subdiv_bl_public_holidays(self):
        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        # Amended to include Saint-Barthélemy and Saint-Martin subdivision on April 23rd, 2012.
        if self._year >= 2012:
            # Abolition of Slavery.
            self._add_holiday_oct_9(tr("Abolition de l'esclavage"))

    # Saint Martin.
    def _populate_subdiv_mf_public_holidays(self):
        # Provision for Public Holidays decreed on June 30th, 1983.
        # Date for each DOM declared on November 23rd, 1983.
        # Amended to include Saint-Barthélemy and Saint-Martin subdivision on April 23rd, 2012.
        # Victor Schoelcher Day is based on June 30th, 1983 provision.
        if self._year >= 2012:
            # Abolition of Slavery.
            self._add_holiday_may_28(tr("Abolition de l'esclavage"))

            # Victor Schoelcher Day.
            self._add_holiday_jul_21(tr("Fête de Victor Schoelcher"))

    # New Caledonia.
    def _populate_subdiv_nc_public_holidays(self):
        # First observed in 1953.
        # Renamed in 2004.
        if self._year >= 1953:
            self._add_holiday_sep_24(
                # Citizenship Day.
                tr("Fête de la Citoyenneté")
                if self._year >= 2004
                # Annexation Day.
                else tr("Fête de la prise de possession")
            )

    # French Polynesia.
    def _populate_subdiv_pf_public_holidays(self):
        # Good Friday.
        self._add_good_friday(tr("Vendredi saint"))

        # Established on February 1st, 1978.
        if self._year >= 1978:
            # Missionary Day.
            self._add_holiday_mar_5(tr("Arrivée de l'Évangile"))

        # Established on May 30th, 1985.
        # Replaced by Matāri'i on April 30th, 2024.
        if 1985 <= self._year <= 2024:
            # Internal Autonomy Day.
            self._add_holiday_jun_29(tr("Fête de l'autonomie"))

        # Established on April 30th, 2024.
        if self._year >= 2025:
            # Matāri'i.
            self._add_holiday_nov_20(tr("Matāri'i"))

    #  Wallis and Futuna.
    def _populate_subdiv_wf_public_holidays(self):
        # While it's not clear when these holidays were added,
        # they're likely added after local autonomy was granted on July 29th, 1961.
        if self._year >= 1962:
            # Feast of Saint Peter Chanel.
            self._add_holiday_apr_28(tr("Saint Pierre Chanel"))

            # Saints Peter and Paul Day.
            self._add_saints_peter_and_paul_day(tr("Saints Pierre et Paul"))

            # Territory Day.
            self._add_holiday_jul_29(tr("Fête du Territoire"))


class FR(France):
    """FR is also used by dateutil (Friday), so be careful with this one."""

    pass


class FRA(France):
    pass