166 lines
5.6 KiB
Python
166 lines
5.6 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, TH, FR
|
||
|
||
from holidays.constants import JAN, MAR, MAY, JUN, JUL, AUG, OCT, \
|
||
NOV, DEC
|
||
from holidays.constants import MON, WEEKEND
|
||
from holidays.holiday_base import HolidayBase
|
||
|
||
|
||
class Colombia(HolidayBase):
|
||
# https://es.wikipedia.org/wiki/Anexo:D%C3%ADas_festivos_en_Colombia
|
||
|
||
def __init__(self, **kwargs):
|
||
self.country = 'CO'
|
||
HolidayBase.__init__(self, **kwargs)
|
||
|
||
def _populate(self, year):
|
||
|
||
# Fixed date holidays!
|
||
# If observed=True and they fall on a weekend they are not observed.
|
||
# If observed=False there are 18 holidays
|
||
|
||
# New Year's Day
|
||
if self.observed and date(year, JAN, 1).weekday() in WEEKEND:
|
||
pass
|
||
else:
|
||
self[date(year, JAN, 1)] = "Año Nuevo [New Year's Day]"
|
||
|
||
# Labor Day
|
||
self[date(year, MAY, 1)] = "Día del Trabajo [Labour Day]"
|
||
|
||
# Independence Day
|
||
name = "Día de la Independencia [Independence Day]"
|
||
if self.observed and date(year, JUL, 20).weekday() in WEEKEND:
|
||
pass
|
||
else:
|
||
self[date(year, JUL, 20)] = name
|
||
|
||
# Battle of Boyaca
|
||
self[date(year, AUG, 7)] = "Batalla de Boyacá [Battle of Boyacá]"
|
||
|
||
# Immaculate Conception
|
||
if self.observed and date(year, DEC, 8).weekday() in WEEKEND:
|
||
pass
|
||
else:
|
||
self[date(year, DEC, 8)] = "La Inmaculada Concepción" \
|
||
" [Immaculate Conception]"
|
||
|
||
# Christmas
|
||
self[date(year, DEC, 25)] = "Navidad [Christmas]"
|
||
|
||
# Emiliani Law holidays!
|
||
# Unless they fall on a Monday they are observed the following monday
|
||
|
||
# Epiphany
|
||
name = "Día de los Reyes Magos [Epiphany]"
|
||
if date(year, JAN, 6).weekday() == MON or not self.observed:
|
||
self[date(year, JAN, 6)] = name
|
||
else:
|
||
self[date(year, JAN, 6) + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
# Saint Joseph's Day
|
||
name = "Día de San José [Saint Joseph's Day]"
|
||
if date(year, MAR, 19).weekday() == MON or not self.observed:
|
||
self[date(year, MAR, 19)] = name
|
||
else:
|
||
self[date(year, MAR, 19) + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
# Saint Peter and Saint Paul's Day
|
||
name = "San Pedro y San Pablo [Saint Peter and Saint Paul]"
|
||
if date(year, JUN, 29).weekday() == MON or not self.observed:
|
||
self[date(year, JUN, 29)] = name
|
||
else:
|
||
self[date(year, JUN, 29) + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
# Assumption of Mary
|
||
name = "La Asunción [Assumption of Mary]"
|
||
if date(year, AUG, 15).weekday() == MON or not self.observed:
|
||
self[date(year, AUG, 15)] = name
|
||
else:
|
||
self[date(year, AUG, 15) + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
# Discovery of America
|
||
name = "Descubrimiento de América [Discovery of America]"
|
||
if date(year, OCT, 12).weekday() == MON or not self.observed:
|
||
self[date(year, OCT, 12)] = name
|
||
else:
|
||
self[date(year, OCT, 12) + rd(weekday=MO)] = name + \
|
||
"(Observed)"
|
||
|
||
# All Saints’ Day
|
||
name = "Dia de Todos los Santos [All Saint's Day]"
|
||
if date(year, NOV, 1).weekday() == MON or not self.observed:
|
||
self[date(year, NOV, 1)] = name
|
||
else:
|
||
self[date(year, NOV, 1) + rd(weekday=MO)] = name + \
|
||
"(Observed)"
|
||
|
||
# Independence of Cartagena
|
||
name = "Independencia de Cartagena [Independence of Cartagena]"
|
||
if date(year, NOV, 11).weekday() == MON or not self.observed:
|
||
self[date(year, NOV, 11)] = name
|
||
else:
|
||
self[date(year, NOV, 11) + rd(weekday=MO)] = name + \
|
||
"(Observed)"
|
||
|
||
# Holidays based on Easter
|
||
|
||
# Maundy Thursday
|
||
self[easter(year) + rd(weekday=TH(-1))
|
||
] = "Jueves Santo [Maundy Thursday]"
|
||
|
||
# Good Friday
|
||
self[easter(year) + rd(weekday=FR(-1))
|
||
] = "Viernes Santo [Good Friday]"
|
||
|
||
# Holidays based on Easter but are observed the following monday
|
||
# (unless they occur on a monday)
|
||
|
||
# Ascension of Jesus
|
||
name = "Ascensión del señor [Ascension of Jesus]"
|
||
hdate = easter(year) + rd(days=+39)
|
||
if hdate.weekday() == MON or not self.observed:
|
||
self[hdate] = name
|
||
else:
|
||
self[hdate + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
# Corpus Christi
|
||
name = "Corpus Christi [Corpus Christi]"
|
||
hdate = easter(year) + rd(days=+60)
|
||
if hdate.weekday() == MON or not self.observed:
|
||
self[hdate] = name
|
||
else:
|
||
self[hdate + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
# Sacred Heart
|
||
name = "Sagrado Corazón [Sacred Heart]"
|
||
hdate = easter(year) + rd(days=+68)
|
||
if hdate.weekday() == MON or not self.observed:
|
||
self[hdate] = name
|
||
else:
|
||
self[hdate + rd(weekday=MO)] = name + "(Observed)"
|
||
|
||
|
||
class CO(Colombia):
|
||
pass
|
||
|
||
|
||
class COL(Colombia):
|
||
pass
|