Opa_omroep-automatiseren/venv/lib/python3.8/site-packages/holidays/countries/france.py
Eljakim Herrewijnen f26bbbf103 initial
2020-12-27 21:00:11 +01:00

133 lines
4.5 KiB
Python

# -*- 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-2020
# Website: https://github.com/dr-prodigy/python-holidays
# License: MIT (see LICENSE file)
from datetime import date
from dateutil.easter import easter
from dateutil.relativedelta import relativedelta as rd
from holidays.constants import JAN, APR, MAY, JUN, JUL, AUG, SEP, OCT, \
NOV, DEC
from holidays.holiday_base import HolidayBase
class France(HolidayBase):
"""Official French holidays.
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.
For religious holidays usually happening on Sundays (Easter, Pentecost),
only the following Monday is considered a holiday.
Primary sources:
https://fr.wikipedia.org/wiki/Fêtes_et_jours_fériés_en_France
https://www.service-public.fr/particuliers/vosdroits/F2405
"""
PROVINCES = ['Métropole', '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']
def __init__(self, **kwargs):
self.country = 'FR'
self.prov = kwargs.pop('prov', 'Métropole')
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# Civil holidays
if year > 1810:
self[date(year, JAN, 1)] = "Jour de l'an"
if year > 1919:
name = 'Fête du Travail'
if year <= 1948:
name += ' et de la Concorde sociale'
self[date(year, MAY, 1)] = name
if (1953 <= year <= 1959) or year > 1981:
self[date(year, MAY, 8)] = 'Armistice 1945'
if year >= 1880:
self[date(year, JUL, 14)] = 'Fête nationale'
if year >= 1918:
self[date(year, NOV, 11)] = 'Armistice 1918'
# Religious holidays
if self.prov in ['Alsace-Moselle', 'Guadeloupe', 'Guyane',
'Martinique', 'Polynésie Française']:
self[easter(year) - rd(days=2)] = 'Vendredi saint'
if self.prov == 'Alsace-Moselle':
self[date(year, DEC, 26)] = 'Deuxième jour de Noël'
if year >= 1886:
self[easter(year) + rd(days=1)] = 'Lundi de Pâques'
self[easter(year) + rd(days=50)] = 'Lundi de Pentecôte'
if year >= 1802:
self[easter(year) + rd(days=39)] = 'Ascension'
self[date(year, AUG, 15)] = 'Assomption'
self[date(year, NOV, 1)] = 'Toussaint'
name = 'Noël'
if self.prov == 'Alsace-Moselle':
name = 'Premier jour de ' + name
self[date(year, DEC, 25)] = name
# Non-metropolitan holidays (starting dates missing)
if self.prov == 'Mayotte':
self[date(year, APR, 27)] = "Abolition de l'esclavage"
if self.prov == 'Wallis-et-Futuna':
self[date(year, APR, 28)] = 'Saint Pierre Chanel'
if self.prov == 'Martinique':
self[date(year, MAY, 22)] = "Abolition de l'esclavage"
if self.prov in ['Guadeloupe', 'Saint-Martin']:
self[date(year, MAY, 27)] = "Abolition de l'esclavage"
if self.prov == 'Guyane':
self[date(year, JUN, 10)] = "Abolition de l'esclavage"
if self.prov == 'Polynésie Française':
self[date(year, JUN, 29)] = "Fête de l'autonomie"
if self.prov in ['Guadeloupe', 'Martinique']:
self[date(year, JUL, 21)] = 'Fête Victor Schoelcher'
if self.prov == 'Wallis-et-Futuna':
self[date(year, JUL, 29)] = 'Fête du Territoire'
if self.prov == 'Nouvelle-Calédonie':
self[date(year, SEP, 24)] = 'Fête de la Citoyenneté'
if self.prov == 'Saint-Barthélémy':
self[date(year, OCT, 9)] = "Abolition de l'esclavage"
if self.prov == 'La Réunion' and year >= 1981:
self[date(year, DEC, 20)] = "Abolition de l'esclavage"
# *Warning* FR is also used by dateutlis (Friday), so be careful with its use
class FR(France):
pass
class FRA(France):
pass