some new features

This commit is contained in:
ilgazca
2025-07-30 18:53:50 +03:00
parent 8019bd3b7c
commit 079804a0fc
2118 changed files with 297840 additions and 502 deletions

View File

@ -0,0 +1,611 @@
# 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.calendars import _CustomIslamicHolidays
from holidays.calendars.gregorian import (
JAN,
FEB,
MAR,
APR,
MAY,
JUN,
JUL,
AUG,
SEP,
OCT,
NOV,
DEC,
FRI,
)
from holidays.groups import IslamicHolidays, PersianCalendarHolidays
from holidays.holiday_base import HolidayBase
class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
"""Iran holidays.
References:
* <https://en.wikipedia.org/wiki/Public_holidays_in_Iran>
* <https://fa.wikipedia.org/wiki/تعطیلات_عمومی_در_ایران>
* <https://web.archive.org/web/20250426102648/https://www.time.ir/>
* <https://web.archive.org/web/20170222200759/http://www.hvm.ir/LawDetailNews.aspx?id=9017>
* <https://en.wikipedia.org/wiki/Workweek_and_weekend>
"""
country = "IR"
default_language = "fa_IR"
# %s (estimated).
estimated_label = tr("%s (تخمینی)")
supported_languages = ("en_US", "fa_IR")
start_year = 1980
weekend = {FRI}
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
"""
Args:
islamic_show_estimated:
Whether to add "estimated" label to Islamic holidays name
if holiday date is estimated.
"""
IslamicHolidays.__init__(
self, cls=IranIslamicHolidays, show_estimated=islamic_show_estimated
)
PersianCalendarHolidays.__init__(self)
super().__init__(*args, **kwargs)
def _populate_public_holidays(self):
# Persian calendar holidays.
# Islamic Revolution Day.
self._add_islamic_revolution_day(tr("پیروزی انقلاب اسلامی"))
# Iranian Oil Industry Nationalization Day.
self._add_oil_nationalization_day(tr("روز ملی شدن صنعت نفت ایران"))
# Last Day of Year.
self._add_last_day_of_year(tr("آخرین روز سال"))
# Nowruz.
self._add_nowruz_day(tr("جشن نوروز"))
# Nowruz Holiday.
name = tr("عیدنوروز")
self._add_nowruz_day_two(name)
self._add_nowruz_day_three(name)
self._add_nowruz_day_four(name)
# Islamic Republic Day.
self._add_islamic_republic_day(tr("روز جمهوری اسلامی"))
# Nature's Day.
self._add_natures_day(tr("روز طبیعت"))
# Death of Imam Khomeini.
self._add_death_of_khomeini_day(tr("رحلت حضرت امام خمینی"))
# 15 Khordad Uprising.
self._add_khordad_uprising_day(tr("قیام 15 خرداد"))
# Islamic holidays.
# Tasua.
self._add_tasua_day(tr("تاسوعای حسینی"))
# Ashura.
self._add_ashura_day(tr("عاشورای حسینی"))
# Arbaeen.
self._add_arbaeen_day(tr("اربعین حسینی"))
# Death of Prophet Muhammad and Martyrdom of Hasan ibn Ali.
self._add_prophet_death_day(tr("رحلت رسول اکرم؛شهادت امام حسن مجتبی علیه السلام"))
# Martyrdom of Ali al-Rida.
self._add_ali_al_rida_death_day(tr("شهادت امام رضا علیه السلام"))
# Martyrdom of Hasan al-Askari.
self._add_hasan_al_askari_death_day(tr("شهادت امام حسن عسکری علیه السلام"))
# Birthday of Muhammad and Imam Ja'far al-Sadiq.
self._add_sadiq_birthday_day(tr("میلاد رسول اکرم و امام جعفر صادق علیه السلام"))
# Martyrdom of Fatima.
self._add_fatima_death_day(tr("شهادت حضرت فاطمه زهرا سلام الله علیها"))
# Birthday of Imam Ali.
self._add_ali_birthday_day(tr("ولادت امام علی علیه السلام و روز پدر"))
# Isra' and Mi'raj.
self._add_isra_and_miraj_day(tr("مبعث رسول اکرم (ص)"))
self._add_imam_mahdi_birthday_day(
# Birthday of Mahdi.
tr("ولادت حضرت قائم عجل الله تعالی فرجه و جشن نیمه شعبان")
)
# Martyrdom of Imam Ali.
self._add_ali_death_day(tr("شهادت حضرت علی علیه السلام"))
# Eid al-Fitr.
self._add_eid_al_fitr_day(tr("عید سعید فطر"))
# Eid al-Fitr Holiday.
self._add_eid_al_fitr_day_two(tr("تعطیل به مناسبت عید سعید فطر"))
# Martyrdom of Imam Ja'far al-Sadiq.
self._add_sadiq_death_day(tr("شهادت امام جعفر صادق علیه السلام"))
# Eid al-Adha.
self._add_eid_al_adha_day(tr("عید سعید قربان"))
# Eid al-Ghadeer.
self._add_eid_al_ghadir_day(tr("عید سعید غدیر خم"))
class IR(Iran):
pass
class IRN(Iran):
pass
class IranIslamicHolidays(_CustomIslamicHolidays):
ALI_AL_RIDA_DEATH_DATES = {
2001: (MAY, 24),
2002: (MAY, 13),
2003: (MAY, 2),
2004: (APR, 20),
2005: (APR, 9),
2006: (MAR, 30),
2007: (MAR, 20),
2008: (MAR, 8),
2009: (FEB, 26),
2010: (FEB, 15),
2011: (FEB, 4),
2012: (JAN, 24),
2013: (JAN, 12),
2014: ((JAN, 2), (DEC, 23)),
2015: (DEC, 12),
2016: (NOV, 30),
2017: (NOV, 19),
2018: (NOV, 8),
2019: (OCT, 29),
2020: (OCT, 17),
2021: (OCT, 7),
2022: (SEP, 27),
2023: (SEP, 16),
2024: (SEP, 4),
2025: (AUG, 24),
}
ALI_BIRTHDAY_DATES = {
2001: (OCT, 1),
2002: (SEP, 21),
2003: (SEP, 10),
2004: (AUG, 30),
2005: (AUG, 19),
2006: (AUG, 8),
2007: (JUL, 28),
2008: (JUL, 16),
2009: (JUL, 6),
2010: (JUN, 26),
2011: (JUN, 16),
2012: (JUN, 4),
2013: (MAY, 24),
2014: (MAY, 13),
2015: (MAY, 2),
2016: (APR, 21),
2017: (APR, 11),
2018: (MAR, 31),
2019: (MAR, 20),
2020: (MAR, 8),
2021: (FEB, 25),
2022: (FEB, 15),
2023: (FEB, 4),
2024: (JAN, 25),
2025: (JAN, 14),
}
ALI_DEATH_DATES = {
2001: (DEC, 7),
2002: (NOV, 27),
2003: (NOV, 16),
2004: (NOV, 5),
2005: (OCT, 25),
2006: (OCT, 15),
2007: (OCT, 3),
2008: (SEP, 22),
2009: (SEP, 11),
2010: (SEP, 1),
2011: (AUG, 21),
2012: (AUG, 10),
2013: (JUL, 30),
2014: (JUL, 19),
2015: (JUL, 8),
2016: (JUN, 27),
2017: (JUN, 16),
2018: (JUN, 6),
2019: (MAY, 27),
2020: (MAY, 15),
2021: (MAY, 4),
2022: (APR, 23),
2023: (APR, 12),
2024: (APR, 1),
2025: (MAR, 22),
}
ARBAEEN_DATES = {
2001: (MAY, 14),
2002: (MAY, 3),
2003: (APR, 23),
2004: (APR, 11),
2005: (MAR, 31),
2006: (MAR, 21),
2007: (MAR, 10),
2008: (FEB, 28),
2009: (FEB, 16),
2010: (FEB, 5),
2011: (JAN, 25),
2012: (JAN, 14),
2013: ((JAN, 3), (DEC, 23)),
2014: (DEC, 13),
2015: (DEC, 2),
2016: (NOV, 20),
2017: (NOV, 9),
2018: (OCT, 30),
2019: (OCT, 19),
2020: (OCT, 8),
2021: (SEP, 27),
2022: (SEP, 17),
2023: (SEP, 6),
2024: (AUG, 25),
2025: (AUG, 14),
}
ASHURA_DATES = {
2001: (APR, 5),
2002: (MAR, 25),
2003: (MAR, 14),
2004: (MAR, 2),
2005: (FEB, 20),
2006: (FEB, 9),
2007: (JAN, 30),
2008: (JAN, 19),
2009: ((JAN, 7), (DEC, 27)),
2010: (DEC, 16),
2011: (DEC, 6),
2012: (NOV, 25),
2013: (NOV, 14),
2014: (NOV, 4),
2015: (OCT, 24),
2016: (OCT, 12),
2017: (OCT, 1),
2018: (SEP, 20),
2019: (SEP, 10),
2020: (AUG, 30),
2021: (AUG, 19),
2022: (AUG, 8),
2023: (JUL, 28),
2024: (JUL, 16),
2025: (JUL, 6),
}
EID_AL_ADHA_DATES = {
2001: (MAR, 6),
2002: (FEB, 23),
2003: (FEB, 12),
2004: (FEB, 2),
2005: (JAN, 21),
2006: ((JAN, 11), (DEC, 31)),
2007: (DEC, 21),
2008: (DEC, 9),
2009: (NOV, 28),
2010: (NOV, 17),
2011: (NOV, 7),
2012: (OCT, 26),
2013: (OCT, 16),
2014: (OCT, 5),
2015: (SEP, 24),
2016: (SEP, 12),
2017: (SEP, 1),
2018: (AUG, 22),
2019: (AUG, 12),
2020: (JUL, 31),
2021: (JUL, 21),
2022: (JUL, 10),
2023: (JUN, 29),
2024: (JUN, 17),
2025: (JUN, 6),
}
EID_AL_FITR_DATES = {
2001: (DEC, 16),
2002: (DEC, 6),
2003: (NOV, 26),
2004: (NOV, 14),
2005: (NOV, 4),
2006: (OCT, 24),
2007: (OCT, 13),
2008: (OCT, 1),
2009: (SEP, 20),
2010: (SEP, 10),
2011: (AUG, 31),
2012: (AUG, 19),
2013: (AUG, 9),
2014: (JUL, 29),
2015: (JUL, 18),
2016: (JUL, 6),
2017: (JUN, 26),
2018: (JUN, 15),
2019: (JUN, 5),
2020: (MAY, 24),
2021: (MAY, 13),
2022: (MAY, 3),
2023: (APR, 22),
2024: (APR, 10),
2025: (MAR, 31),
}
EID_AL_GHADIR_DATES = {
2001: (MAR, 14),
2002: (MAR, 3),
2003: (FEB, 20),
2004: (FEB, 10),
2005: (JAN, 29),
2006: (JAN, 19),
2007: ((JAN, 8), (DEC, 29)),
2008: (DEC, 17),
2009: (DEC, 6),
2010: (NOV, 25),
2011: (NOV, 15),
2012: (NOV, 3),
2013: (OCT, 24),
2014: (OCT, 13),
2015: (OCT, 2),
2016: (SEP, 20),
2017: (SEP, 9),
2018: (AUG, 30),
2019: (AUG, 20),
2020: (AUG, 8),
2021: (JUL, 29),
2022: (JUL, 18),
2023: (JUL, 7),
2024: (JUN, 25),
2025: (JUN, 14),
}
FATIMA_DEATH_DATES = {
2001: (AUG, 23),
2002: (AUG, 12),
2003: (AUG, 2),
2004: (JUL, 21),
2005: (JUL, 10),
2006: (JUN, 29),
2007: (JUN, 18),
2008: (JUN, 7),
2009: (MAY, 28),
2010: (MAY, 17),
2011: (MAY, 7),
2012: (APR, 25),
2013: (APR, 14),
2014: (APR, 3),
2015: (MAR, 24),
2016: (MAR, 13),
2017: (MAR, 2),
2018: (FEB, 20),
2019: (FEB, 9),
2020: (JAN, 29),
2021: (JAN, 17),
2022: ((JAN, 6), (DEC, 27)),
2023: (DEC, 17),
2024: (DEC, 5),
2025: (NOV, 24),
}
HASAN_AL_ASKARI_DEATH_DATES = {
2001: (JUN, 1),
2002: (MAY, 21),
2003: (MAY, 10),
2004: (APR, 28),
2005: (APR, 17),
2006: (APR, 7),
2007: (MAR, 28),
2008: (MAR, 16),
2009: (MAR, 6),
2010: (FEB, 23),
2011: (FEB, 12),
2012: (FEB, 1),
2013: (JAN, 20),
2014: ((JAN, 10), (DEC, 31)),
2015: (DEC, 20),
2016: (DEC, 8),
2017: (NOV, 27),
2018: (NOV, 16),
2019: (NOV, 6),
2020: (OCT, 25),
2021: (OCT, 15),
2022: (OCT, 5),
2023: (SEP, 24),
2024: (SEP, 12),
2025: (SEP, 1),
}
IMAM_MAHDI_BIRTHDAY_DATES = {
2001: (NOV, 1),
2002: (OCT, 22),
2003: (OCT, 12),
2004: (OCT, 1),
2005: (SEP, 20),
2006: (SEP, 9),
2007: (AUG, 29),
2008: (AUG, 17),
2009: (AUG, 7),
2010: (JUL, 27),
2011: (JUL, 17),
2012: (JUL, 5),
2013: (JUN, 24),
2014: (JUN, 13),
2015: (JUN, 3),
2016: (MAY, 22),
2017: (MAY, 12),
2018: (MAY, 2),
2019: (APR, 21),
2020: (APR, 9),
2021: (MAR, 29),
2022: (MAR, 18),
2023: (MAR, 8),
2024: (FEB, 25),
2025: (FEB, 14),
}
ISRA_AND_MIRAJ_DATES = {
2001: (OCT, 15),
2002: (OCT, 5),
2003: (SEP, 24),
2004: (SEP, 13),
2005: (SEP, 2),
2006: (AUG, 22),
2007: (AUG, 11),
2008: (JUL, 30),
2009: (JUL, 20),
2010: (JUL, 10),
2011: (JUN, 30),
2012: (JUN, 18),
2013: (JUN, 7),
2014: (MAY, 27),
2015: (MAY, 16),
2016: (MAY, 5),
2017: (APR, 25),
2018: (APR, 14),
2019: (APR, 3),
2020: (MAR, 22),
2021: (MAR, 11),
2022: (MAR, 1),
2023: (FEB, 18),
2024: (FEB, 8),
2025: (JAN, 28),
}
PROPHET_DEATH_DATES = {
2001: (MAY, 22),
2002: (MAY, 11),
2003: (MAY, 1),
2004: (APR, 19),
2005: (APR, 8),
2006: (MAR, 29),
2007: (MAR, 18),
2008: (MAR, 7),
2009: (FEB, 24),
2010: (FEB, 13),
2011: (FEB, 2),
2012: (JAN, 22),
2013: ((JAN, 11), (DEC, 31)),
2014: (DEC, 21),
2015: (DEC, 10),
2016: (NOV, 28),
2017: (NOV, 17),
2018: (NOV, 7),
2019: (OCT, 27),
2020: (OCT, 16),
2021: (OCT, 5),
2022: (SEP, 25),
2023: (SEP, 14),
2024: (SEP, 2),
2025: (AUG, 22),
}
SADIQ_BIRTHDAY_DATES = {
2001: (JUN, 10),
2002: (MAY, 30),
2003: (MAY, 19),
2004: (MAY, 7),
2005: (APR, 26),
2006: (APR, 16),
2007: (APR, 6),
2008: (MAR, 25),
2009: (MAR, 15),
2010: (MAR, 4),
2011: (FEB, 21),
2012: (FEB, 10),
2013: (JAN, 29),
2014: (JAN, 19),
2015: ((JAN, 9), (DEC, 29)),
2016: (DEC, 17),
2017: (DEC, 6),
2018: (NOV, 25),
2019: (NOV, 15),
2020: (NOV, 3),
2021: (OCT, 24),
2022: (OCT, 14),
2023: (OCT, 3),
2024: (SEP, 21),
2025: (SEP, 10),
}
SADIQ_DEATH_DATES = {
2001: (JAN, 20),
2002: ((JAN, 9), (DEC, 30)),
2003: (DEC, 20),
2004: (DEC, 8),
2005: (NOV, 28),
2006: (NOV, 17),
2007: (NOV, 6),
2008: (OCT, 25),
2009: (OCT, 14),
2010: (OCT, 4),
2011: (SEP, 24),
2012: (SEP, 12),
2013: (SEP, 2),
2014: (AUG, 22),
2015: (AUG, 11),
2016: (JUL, 30),
2017: (JUL, 20),
2018: (JUL, 9),
2019: (JUN, 29),
2020: (JUN, 17),
2021: (JUN, 6),
2022: (MAY, 27),
2023: (MAY, 16),
2024: (MAY, 4),
2025: (APR, 24),
}
TASUA_DATES = {
2001: (APR, 4),
2002: (MAR, 24),
2003: (MAR, 13),
2004: (MAR, 1),
2005: (FEB, 19),
2006: (FEB, 8),
2007: (JAN, 29),
2008: (JAN, 18),
2009: ((JAN, 6), (DEC, 26)),
2010: (DEC, 15),
2011: (DEC, 5),
2012: (NOV, 24),
2013: (NOV, 13),
2014: (NOV, 3),
2015: (OCT, 23),
2016: (OCT, 11),
2017: (SEP, 30),
2018: (SEP, 19),
2019: (SEP, 9),
2020: (AUG, 29),
2021: (AUG, 18),
2022: (AUG, 7),
2023: (JUL, 27),
2024: (JUL, 15),
2025: (JUL, 5),
}