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

161 lines
6.2 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, MO, FR, SA
from holidays.constants import JAN, MAY, JUN, JUL, AUG, SEP, OCT, \
NOV, DEC
from holidays.constants import TUE, THU, FRI, SAT, SUN
from holidays.holiday_base import HolidayBase
class Chile(HolidayBase):
# https://www.feriados.cl
# http://www.feriadoschilenos.cl/ (excellent history)
# https://es.wikipedia.org/wiki/Anexo:D%C3%ADas_feriados_en_Chile
# ISO 3166-2 codes for the principal subdivisions, called regions
STATES = ['AI', 'AN', 'AP', 'AR', 'AT', 'BI', 'CO', 'LI', 'LL', 'LR',
'MA', 'ML', 'NB', 'RM', 'TA', 'VS']
def __init__(self, **kwargs):
self.country = 'CL'
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# New Year's Day (Law 2.977)
self[date(year, JAN, 1)] = "Año Nuevo [New Year's Day]"
# Day after, if it's a Sunday (Law 20.983)
if year > 2016 and date(year, JAN, 1).weekday() == SUN:
self[date(year, JAN, 2)] = "Fiestas Patrias [Holiday]"
# Holy Week (Law 2.977)
name_fri = "Semana Santa (Viernes Santo) [Good Friday)]"
name_sat = "Semana Santa (Sábado Santo) [Good Saturday)]"
name_easter = 'Día de Pascuas [Easter Day]'
self[easter(year) + rd(weekday=FR(-1))] = name_fri
self[easter(year) + rd(weekday=SA(-1))] = name_sat
self[easter(year)] = name_easter
# Labor Day (Law 2.200, renamed with Law 18.018)
name = "Día Nacional del Trabajo [Labour Day]"
self[date(year, MAY, 1)] = name
# Naval Glories Day (Law 2.977)
name = "Día de las Glorias Navales [Navy Day]"
self[date(year, MAY, 21)] = name
# Saint Peter and Saint Paul (Law 18.432)
name = "San Pedro y San Pablo [Saint Peter and Saint Paul]"
if year < 2020:
self[date(year, JUN, 29)] = name
else:
# floating Monday holiday (Law 19.668)
if date(year, JUN, 29).weekday() <= THU:
self[date(year, JUN, 29) + rd(date(year, JUN, 29),
weekday=MO(-1))] = name
elif date(year, JUN, 29).weekday() == FRI:
self[date(year, JUN, 29) + rd(weekday=MO)] = name
else:
self[date(year, JUN, 29)] = name
# Day of Virgin of Carmen (Law 20.148)
if year > 2006:
name = "Virgen del Carmen [Our Lady of Mount Carmel]"
self[date(year, JUL, 16)] = name
# Day of Assumption of the Virgin (Law 2.977)
name = "Asunción de la Virgen [Assumption of Mary]"
self[date(year, AUG, 15)] = name
# National Holiday Friday preceding Independence Day (Law 20.983)
if year > 2016 and date(year, SEP, 18).weekday() == SAT:
self[date(year, SEP, 17)] = "Fiestas Patrias [Holiday]"
# National Holiday Monday preceding Independence Day (Law 20.215)
if year > 2007 and date(year, SEP, 18).weekday() == TUE:
self[date(year, SEP, 17)] = "Fiestas Patrias [Holiday]"
# Independence Day (Law 2.977)
name = "Día de la Independencia [Independence Day]"
self[date(year, SEP, 18)] = name
# Day of Glories of the Army of Chile (Law 2.977)
name = "Día de las Glorias del Ejército [Army Day]"
self[date(year, SEP, 19)] = name
# National Holiday Friday following Army Day (Law 20.215)
if year > 2007 and date(year, SEP, 19).weekday() == THU:
self[date(year, SEP, 20)] = "Fiestas Patrias [Holiday]"
# Day of the Meeting of Two Worlds (Law 3.810)
if year < 2010:
self[date(year, OCT, 12)] = "Día de la Raza [Columbus day]"
elif year < 2020:
self[date(year, OCT, 12)] = "Día del Respeto a la Diversidad"\
" [Day of the Meeting " \
" of Two Worlds]"
else:
# floating Monday holiday (Law 19.668)
name = ("Día del Descubrimiento de dos Mundos [Columbus Day]")
if date(year, OCT, 12).weekday() <= THU:
self[date(year, OCT, 12) + rd(date(year, OCT, 12),
weekday=MO(-1))] = name
elif date(year, OCT, 12).weekday() == FRI:
self[date(year, OCT, 12) + rd(weekday=MO)] = name
else:
self[date(year, OCT, 12)] = name
# National Day of the Evangelical and Protestant Churches (Law 20.299)
if year > 2007:
name = ("Día Nacional de las Iglesias Evangélicas y Protestantes "
" [Reformation Day]")
self[date(year, OCT, 31)] = name
# All Saints Day (Law 2.977)
name = "Día de Todos los Santos [All Saints Day]"
self[date(year, NOV, 1)] = name
# Immaculate Conception (Law 2.977)
self[date(year, DEC, 8)] = "La Inmaculada Concepción" \
" [Immaculate Conception]"
# Christmas (Law 2.977)
self[date(year, DEC, 25)] = "Navidad [Christmas]"
# región de Arica y Parinacota
if self.state == 'AP' and year >= 2020:
# Law 20.663
self[date(year, JUN, 7)] = ("Asalto y Toma del Morro de Arica"
" [Assault and Capture of Cape Arica]")
# región de Ñuble
if self.state == 'NB' and year >= 2014:
# Law 20.678
self[date(year, AUG, 20)] =\
("Nacimiento del Prócer de la Independencia"
" (Chillán y Chillán Viejo)"
" [Nativity of Bernardo O'Higgins]")
class CL(Chile):
pass
class CHL(Chile):
pass