holidays 0.76__py3-none-any.whl → 0.78__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. holidays/calendars/islamic.py +32 -1
  2. holidays/countries/__init__.py +20 -0
  3. holidays/countries/australia.py +6 -8
  4. holidays/countries/british_virgin_islands.py +6 -6
  5. holidays/countries/cabo_verde.py +293 -0
  6. holidays/countries/cayman_islands.py +162 -0
  7. holidays/countries/central_african_republic.py +143 -0
  8. holidays/countries/christmas_island.py +215 -0
  9. holidays/countries/cocos_islands.py +4 -4
  10. holidays/countries/dr_congo.py +139 -0
  11. holidays/countries/egypt.py +203 -47
  12. holidays/countries/faroe_islands.py +102 -0
  13. holidays/countries/georgia.py +11 -5
  14. holidays/countries/germany.py +41 -0
  15. holidays/countries/gibraltar.py +219 -0
  16. holidays/countries/guernsey.py +6 -6
  17. holidays/countries/indonesia.py +5 -2
  18. holidays/countries/japan.py +6 -8
  19. holidays/countries/jersey.py +2 -2
  20. holidays/countries/lebanon.py +448 -0
  21. holidays/countries/luxembourg.py +13 -0
  22. holidays/countries/mali.py +151 -0
  23. holidays/countries/montserrat.py +177 -0
  24. holidays/countries/nepal.py +8 -8
  25. holidays/countries/new_zealand.py +2 -2
  26. holidays/countries/niue.py +115 -0
  27. holidays/countries/norfolk_island.py +129 -0
  28. holidays/countries/pakistan.py +7 -5
  29. holidays/countries/palau.py +1 -1
  30. holidays/countries/palestine.py +177 -0
  31. holidays/countries/peru.py +12 -0
  32. holidays/countries/pitcairn_islands.py +85 -0
  33. holidays/countries/saint_vincent_and_the_grenadines.py +130 -0
  34. holidays/countries/saudi_arabia.py +43 -35
  35. holidays/countries/seychelles.py +1 -1
  36. holidays/countries/solomon_islands.py +2 -2
  37. holidays/countries/tokelau.py +66 -0
  38. holidays/countries/turks_and_caicos_islands.py +2 -2
  39. holidays/countries/united_kingdom.py +2 -2
  40. holidays/countries/united_states.py +2 -5
  41. holidays/groups/christian.py +10 -10
  42. holidays/groups/hebrew.py +2 -2
  43. holidays/groups/islamic.py +17 -10
  44. holidays/holiday_base.py +73 -92
  45. holidays/locale/ar/LC_MESSAGES/LB.mo +0 -0
  46. holidays/locale/ar/LC_MESSAGES/PS.mo +0 -0
  47. holidays/locale/{ar → ar_EG}/LC_MESSAGES/EG.mo +0 -0
  48. holidays/locale/da/LC_MESSAGES/FO.mo +0 -0
  49. holidays/locale/de/LC_MESSAGES/CV.mo +0 -0
  50. holidays/locale/de/LC_MESSAGES/DE.mo +0 -0
  51. holidays/locale/de/LC_MESSAGES/LU.mo +0 -0
  52. holidays/locale/en_CX/LC_MESSAGES/CX.mo +0 -0
  53. holidays/locale/en_GB/LC_MESSAGES/GI.mo +0 -0
  54. holidays/locale/en_GB/LC_MESSAGES/KY.mo +0 -0
  55. holidays/locale/en_MS/LC_MESSAGES/MS.mo +0 -0
  56. holidays/locale/en_NF/LC_MESSAGES/NF.mo +0 -0
  57. holidays/locale/en_NU/LC_MESSAGES/NU.mo +0 -0
  58. holidays/locale/en_TK/LC_MESSAGES/TK.mo +0 -0
  59. holidays/locale/en_US/LC_MESSAGES/CD.mo +0 -0
  60. holidays/locale/en_US/LC_MESSAGES/CF.mo +0 -0
  61. holidays/locale/en_US/LC_MESSAGES/CV.mo +0 -0
  62. holidays/locale/en_US/LC_MESSAGES/CX.mo +0 -0
  63. holidays/locale/en_US/LC_MESSAGES/DE.mo +0 -0
  64. holidays/locale/en_US/LC_MESSAGES/EG.mo +0 -0
  65. holidays/locale/en_US/LC_MESSAGES/FO.mo +0 -0
  66. holidays/locale/en_US/LC_MESSAGES/GI.mo +0 -0
  67. holidays/locale/en_US/LC_MESSAGES/KY.mo +0 -0
  68. holidays/locale/en_US/LC_MESSAGES/LB.mo +0 -0
  69. holidays/locale/en_US/LC_MESSAGES/LU.mo +0 -0
  70. holidays/locale/en_US/LC_MESSAGES/ML.mo +0 -0
  71. holidays/locale/en_US/LC_MESSAGES/MS.mo +0 -0
  72. holidays/locale/en_US/LC_MESSAGES/NF.mo +0 -0
  73. holidays/locale/en_US/LC_MESSAGES/NU.mo +0 -0
  74. holidays/locale/en_US/LC_MESSAGES/PE.mo +0 -0
  75. holidays/locale/en_US/LC_MESSAGES/PS.mo +0 -0
  76. holidays/locale/en_US/LC_MESSAGES/TK.mo +0 -0
  77. holidays/locale/en_US/LC_MESSAGES/VC.mo +0 -0
  78. holidays/locale/en_VC/LC_MESSAGES/VC.mo +0 -0
  79. holidays/locale/es/LC_MESSAGES/CV.mo +0 -0
  80. holidays/locale/fo/LC_MESSAGES/FO.mo +0 -0
  81. holidays/locale/fr/LC_MESSAGES/CD.mo +0 -0
  82. holidays/locale/fr/LC_MESSAGES/CF.mo +0 -0
  83. holidays/locale/fr/LC_MESSAGES/CV.mo +0 -0
  84. holidays/locale/fr/LC_MESSAGES/EG.mo +0 -0
  85. holidays/locale/fr/LC_MESSAGES/LU.mo +0 -0
  86. holidays/locale/fr/LC_MESSAGES/ML.mo +0 -0
  87. holidays/locale/is/LC_MESSAGES/FO.mo +0 -0
  88. holidays/locale/lb/LC_MESSAGES/LU.mo +0 -0
  89. holidays/locale/no/LC_MESSAGES/FO.mo +0 -0
  90. holidays/locale/pt_CV/LC_MESSAGES/CV.mo +0 -0
  91. holidays/locale/sv/LC_MESSAGES/FO.mo +0 -0
  92. holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
  93. holidays/locale/tkl/LC_MESSAGES/TK.mo +0 -0
  94. holidays/locale/uk/LC_MESSAGES/DE.mo +0 -0
  95. holidays/locale/uk/LC_MESSAGES/LU.mo +0 -0
  96. holidays/locale/uk/LC_MESSAGES/PE.mo +0 -0
  97. holidays/observed_holiday_base.py +3 -1
  98. holidays/registry.py +16 -0
  99. holidays/utils.py +18 -18
  100. holidays/version.py +1 -1
  101. {holidays-0.76.dist-info → holidays-0.78.dist-info}/METADATA +118 -6
  102. {holidays-0.76.dist-info → holidays-0.78.dist-info}/RECORD +106 -51
  103. {holidays-0.76.dist-info → holidays-0.78.dist-info}/licenses/CONTRIBUTORS +4 -0
  104. {holidays-0.76.dist-info → holidays-0.78.dist-info}/WHEEL +0 -0
  105. {holidays-0.76.dist-info → holidays-0.78.dist-info}/licenses/LICENSE +0 -0
  106. {holidays-0.76.dist-info → holidays-0.78.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,177 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars import _CustomIslamicHolidays
16
+ from holidays.calendars.gregorian import GREGORIAN_CALENDAR, SEP
17
+ from holidays.calendars.julian import JULIAN_CALENDAR
18
+ from holidays.constants import CATHOLIC, ORTHODOX, PUBLIC
19
+ from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
20
+ from holidays.holiday_base import HolidayBase
21
+
22
+
23
+ class Palestine(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
24
+ """Palestine holidays.
25
+
26
+ References:
27
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Palestine>
28
+ * <https://web.archive.org/web/20250705114216/https://info.wafa.ps/pages/details/29601>
29
+ * [Declaration of Palestine independence](https://en.wikipedia.org/wiki/Palestine#Uprising,_declaration_and_peace_treaty)
30
+ """
31
+
32
+ country = "PS"
33
+ default_language = "ar"
34
+ # %s (estimated).
35
+ estimated_label = tr("%s (المقدرة)")
36
+ # State of Palestine declared in November 1988.
37
+ start_year = 1989
38
+ supported_categories = (CATHOLIC, ORTHODOX, PUBLIC)
39
+ supported_languages = ("ar", "en_US")
40
+
41
+ def __init__(self, *args, islamic_show_estimated: bool = False, **kwargs):
42
+ """
43
+ Args:
44
+ islamic_show_estimated:
45
+ Whether to add "estimated" label to Islamic holidays name
46
+ if holiday date is estimated.
47
+ """
48
+ ChristianHolidays.__init__(self, calendar=JULIAN_CALENDAR)
49
+ InternationalHolidays.__init__(self)
50
+ IslamicHolidays.__init__(
51
+ self, cls=PalestineIslamicHolidays, show_estimated=islamic_show_estimated
52
+ )
53
+ super().__init__(*args, **kwargs)
54
+
55
+ def _populate_public_holidays(self):
56
+ # New Year's Day.
57
+ self._add_new_years_day(tr("رأس السنة الميلادي"))
58
+
59
+ # Orthodox Christmas Day.
60
+ self._add_christmas_day(tr("عيد الميلاد المجيد الشرقي"))
61
+
62
+ # International Women's Day.
63
+ self._add_womens_day(tr("يوم المراة العالمي"))
64
+
65
+ # Easter.
66
+ self._add_easter_sunday(tr("عيد الفصح المجيد"), GREGORIAN_CALENDAR)
67
+
68
+ # Easter.
69
+ self._add_easter_sunday(tr("عيد الفصح المجيد"))
70
+
71
+ # Labor Day.
72
+ self._add_labor_day(tr("عيد العمال"))
73
+
74
+ # Independence Day.
75
+ self._add_holiday_nov_15(tr("عيد الإستقلال"))
76
+
77
+ # Catholic Christmas Day.
78
+ self._add_christmas_day(tr("عيد الميلاد المجيد الغربي"), GREGORIAN_CALENDAR)
79
+
80
+ # Hijri New Year.
81
+ self._add_islamic_new_year_day(tr("رأس السنة الهجرية"))
82
+
83
+ # Prophet's Birthday.
84
+ self._add_mawlid_day(tr("ذكرى المولد النبوي الشريف"))
85
+
86
+ # Isra' and Mi'raj.
87
+ self._add_isra_and_miraj_day(tr("ذكرى الإسراء والمعراج"))
88
+
89
+ # Eid al-Fitr.
90
+ name = tr("عيد الفطر السعيد")
91
+ self._add_eid_al_fitr_day(name)
92
+ self._add_eid_al_fitr_day_two(name)
93
+ self._add_eid_al_fitr_day_three(name)
94
+
95
+ # Eid al-Adha.
96
+ name = tr("عيد الأضحى المبارك")
97
+ self._add_eid_al_adha_day(name)
98
+ self._add_eid_al_adha_day_two(name)
99
+ self._add_eid_al_adha_day_three(name)
100
+ self._add_eid_al_adha_day_four(name)
101
+
102
+ def _populate_catholic_holidays(self):
103
+ # New Year's Day.
104
+ self._add_new_years_day(tr("رأس السنة الميلادي"))
105
+
106
+ # Epiphany.
107
+ self._add_epiphany_day(tr("عيد الغطاس"), GREGORIAN_CALENDAR)
108
+
109
+ # Palm Sunday.
110
+ self._add_palm_sunday(tr("أحد الشعانين"), GREGORIAN_CALENDAR)
111
+
112
+ # Holy Thursday.
113
+ self._add_holy_thursday(tr("خميس الغسل"), GREGORIAN_CALENDAR)
114
+
115
+ # Good Friday.
116
+ self._add_good_friday(tr("الجمعة العظيمة"), GREGORIAN_CALENDAR)
117
+
118
+ # Holy Saturday.
119
+ self._add_holy_saturday(tr("سبت النور"), GREGORIAN_CALENDAR)
120
+
121
+ # Easter.
122
+ self._add_easter_monday(tr("عيد الفصح المجيد"), GREGORIAN_CALENDAR)
123
+
124
+ # Ascension Day.
125
+ self._add_ascension_thursday(tr("خميس الصعود"), GREGORIAN_CALENDAR)
126
+
127
+ # Pentecost.
128
+ self._add_whit_sunday(tr("أحد العنصرة"), GREGORIAN_CALENDAR)
129
+
130
+ # Catholic Christmas Day.
131
+ self._add_christmas_day_two(tr("عيد الميلاد المجيد الغربي"), GREGORIAN_CALENDAR)
132
+
133
+ def _populate_orthodox_holidays(self):
134
+ # Orthodox New Year's Day.
135
+ self._add_holiday_jan_14(tr("عيد رأس السنة الشرقي"))
136
+
137
+ # Orthodox Christmas Day.
138
+ self._add_christmas_day_two(tr("عيد الميلاد المجيد الشرقي"))
139
+
140
+ # Epiphany.
141
+ self._add_epiphany_day(tr("عيد الغطاس"))
142
+
143
+ # Palm Sunday.
144
+ self._add_palm_sunday(tr("أحد الشعانين"))
145
+
146
+ # Holy Thursday.
147
+ self._add_holy_thursday(tr("خميس الغسل"))
148
+
149
+ # Good Friday.
150
+ self._add_good_friday(tr("الجمعة العظيمة"))
151
+
152
+ # Holy Saturday.
153
+ self._add_holy_saturday(tr("سبت النور"))
154
+
155
+ # Easter.
156
+ self._add_easter_monday(tr("عيد الفصح المجيد"))
157
+
158
+ # Ascension Day.
159
+ self._add_ascension_thursday(tr("خميس الصعود"))
160
+
161
+ # Pentecost.
162
+ self._add_whit_sunday(tr("أحد العنصرة"))
163
+
164
+
165
+ class PS(Palestine):
166
+ pass
167
+
168
+
169
+ class PSE(Palestine):
170
+ pass
171
+
172
+
173
+ class PalestineIslamicHolidays(_CustomIslamicHolidays):
174
+ # All other dates follow Umm al-Qura calendar.
175
+ MAWLID_DATES = {
176
+ 2023: (SEP, 27),
177
+ }
@@ -22,6 +22,8 @@ class Peru(HolidayBase, ChristianHolidays, InternationalHolidays):
22
22
  References:
23
23
  * <https://web.archive.org/web/20250414165243/https://www.gob.pe/feriados/>
24
24
  * <https://es.wikipedia.org/wiki/Anexo:Días_feriados_en_el_Perú>
25
+ * [Ley N° 31788](https://web.archive.org/web/20250716164223/https://img.lpderecho.pe/wp-content/uploads/2023/06/Ley-31788-LPDerecho.pdf)
26
+ * [Ley N° 31822](https://web.archive.org/web/20250716164455/https://img.lpderecho.pe/wp-content/uploads/2023/07/Ley-31822-LPDerecho.pdf)
25
27
  """
26
28
 
27
29
  country = "PE"
@@ -49,9 +51,19 @@ class Peru(HolidayBase, ChristianHolidays, InternationalHolidays):
49
51
  # Labor Day.
50
52
  self._add_labor_day(tr("Día del Trabajo"))
51
53
 
54
+ # Added via Ley N° 31788 on June 15th, 2023.
55
+ if self._year >= 2024:
56
+ # Battle of Arica and Flag Day.
57
+ self._add_holiday_jun_7(tr("Batalla de Arica y Día de la Bandera"))
58
+
52
59
  # Saint Peter and Saint Paul's Day.
53
60
  self._add_saints_peter_and_paul_day(tr("San Pedro y San Pablo"))
54
61
 
62
+ # Added via Ley N° 31822 on July 8th, 2023.
63
+ if self._year >= 2023:
64
+ # Peruvian Air Force Day.
65
+ self._add_holiday_jul_23(tr("Día de la Fuerza Aérea del Perú"))
66
+
55
67
  # Independence Day.
56
68
  self._add_holiday_jul_28(tr("Día de la Independencia"))
57
69
 
@@ -0,0 +1,85 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from holidays.constants import GOVERNMENT, PUBLIC, WORKDAY
14
+ from holidays.groups import ChristianHolidays, InternationalHolidays
15
+ from holidays.holiday_base import HolidayBase
16
+
17
+
18
+ class PitcairnIslands(HolidayBase, ChristianHolidays, InternationalHolidays):
19
+ """Pitcairn Islands holidays.
20
+
21
+ References:
22
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Pitcairn_Islands>
23
+ * [Public Holidays & Commemoration Days (2016)](https://web.archive.org/web/20161112174923/https://www.government.pn/policies/GPI%20-%20Approved%20Public%20Holidays%20&%20Commemoration%20Days.pdf)
24
+ * [Public Holidays & Commemoration Days (2024)](https://web.archive.org/web/20250517050245/https://static1.squarespace.com/static/6526ff6fef608a3828c13d05/t/6673d53b1c0e2f660cc31848/1718867262145/GPI_Policy_Public_Holidays_&_Commemoration_Days_June_2024.pdf)
25
+ * [The Laws of Pitcairn, Henderson, Ducie and Oeno Islands - Volume I](https://web.archive.org/web/20240418043000/https://static1.squarespace.com/static/6526ff6fef608a3828c13d05/t/65585fca2ce3972fb3bc8da3/1700290563094/Revised+Laws+of+Pitcairn,+Henderson,+Ducie+and+Oeno+Islands,+2017+Rev.+Ed.+-+Volume+1.pdf)
26
+ * [CIA The World Factbook](https://web.archive.org/web/20211217233431/https://www.cia.gov/the-world-factbook/countries/pitcairn-islands/)
27
+ """
28
+
29
+ country = "PN"
30
+ supported_categories = (GOVERNMENT, PUBLIC, WORKDAY)
31
+ # First available online source.
32
+ start_year = 2016
33
+
34
+ def __init__(self, *args, **kwargs):
35
+ ChristianHolidays.__init__(self)
36
+ InternationalHolidays.__init__(self)
37
+ super().__init__(*args, **kwargs)
38
+
39
+ def _populate_public_holidays(self):
40
+ # New Year's Day.
41
+ self._add_new_years_day("New Year's Day")
42
+
43
+ # Bounty Day.
44
+ self._add_holiday_jan_23("Bounty Day")
45
+
46
+ # Good Friday.
47
+ self._add_good_friday("Good Friday")
48
+
49
+ # Easter Monday.
50
+ self._add_easter_monday("Easter Monday")
51
+
52
+ if self._year >= 2023:
53
+ # King's Birthday.
54
+ self._add_holiday_1st_mon_of_jun("King's Birthday")
55
+ else:
56
+ # Queen's Birthday.
57
+ self._add_holiday_2nd_sat_of_jun("Queen's Birthday")
58
+
59
+ # Pitcairn Day.
60
+ self._add_holiday_jul_2("Pitcairn Day")
61
+
62
+ # Christmas Day.
63
+ self._add_christmas_day("Christmas Day")
64
+
65
+ # Boxing Day.
66
+ self._add_christmas_day_two("Boxing Day")
67
+
68
+ def _populate_government_holidays(self):
69
+ # New Year's Day.
70
+ self._add_new_years_day_two("New Year's Day")
71
+
72
+ def _populate_workday_holidays(self):
73
+ # ANZAC Day.
74
+ self._add_anzac_day("ANZAC Day")
75
+
76
+ # Remembrance Day.
77
+ self._add_remembrance_day("Remembrance Day")
78
+
79
+
80
+ class PN(PitcairnIslands):
81
+ pass
82
+
83
+
84
+ class PCN(PitcairnIslands):
85
+ pass
@@ -0,0 +1,130 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars.gregorian import JAN, JUL, AUG, SEP, _timedelta
16
+ from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
17
+ from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON, SUN_TO_NEXT_TUE
18
+
19
+
20
+ class SaintVincentAndTheGrenadines(
21
+ ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays
22
+ ):
23
+ """Saint Vincent and the Grenadines holidays.
24
+
25
+ References:
26
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Saint_Vincent_and_the_Grenadines>
27
+ * [2013](https://web.archive.org/web/20240225145904/https://www.bosvg.com/wp-content/uploads/2021/10/bosvg_calendar2013-9x12_ver2-2.pdf)
28
+ * [2014](https://web.archive.org/web/20250610053913/https://www.bosvg.com/wp-content/uploads/2021/10/BOSVG-Calendar-2014-5th-draft.pdf)
29
+ * [2015](https://web.archive.org/web/20240225145904/https://www.bosvg.com/wp-content/uploads/2021/10/BOSVG-Bklet-Calendar-2015_21_11-3.pdf)
30
+ * [2016](https://web.archive.org/web/20240225145903/https://www.bosvg.com/wp-content/uploads/2021/10/BOSVG-2016_pgs_sm_fin.pdf)
31
+ * [2022](https://web.archive.org/web/20230426000952/https://www.bosvg.com/wp-content/uploads/2022/05/Tent-Calendar.pdf)
32
+ * [2023](https://web.archive.org/web/20240225145904/https://www.bosvg.com/wp-content/uploads/2023/03/BOSVG-CALENDAR-TENT_F_REPRINT_TENT-EXCLUDED-FINAL.pdf)
33
+ * [2019-2025](https://web.archive.org/web/20250214232128/https://pmoffice.gov.vc/pmoffice/index.php/public-holidays)
34
+ * [2020 Carnival Monday](https://web.archive.org/web/20250607111242/https://www.stvincenttimes.com/august-3rd-and-4th-2020-declared-public-holidays-in-svg/)
35
+ * [2025 National Spiritual Baptist Day](https://web.archive.org/web/20250513011200/https://www.gov.vc/images/pdf_documents/VINCENTIANS-PREPARE-FOR-MAY-21--SPIRITUAL-BAPTIST-LIBERATION-DAY-NATIONAL-HOLIDAY.pdf)
36
+ """
37
+
38
+ country = "VC"
39
+ default_language = "en_VC"
40
+ # %s (observed).
41
+ observed_label = tr("%s (observed)")
42
+ supported_languages = ("en_US", "en_VC")
43
+ start_year = 1979
44
+
45
+ def __init__(self, *args, **kwargs):
46
+ ChristianHolidays.__init__(self)
47
+ InternationalHolidays.__init__(self)
48
+ StaticHolidays.__init__(self, cls=SaintVincentAndTheGrenadinesStaticHolidays)
49
+ kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
50
+ super().__init__(*args, **kwargs)
51
+
52
+ def _populate_public_holidays(self):
53
+ # New Year's Day.
54
+ self._add_observed(self._add_new_years_day(tr("New Year's Day")))
55
+
56
+ # National Heroes' Day.
57
+ self._add_observed(self._add_holiday_mar_14(tr("National Heroes' Day")))
58
+
59
+ # Good Friday.
60
+ self._add_good_friday(tr("Good Friday"))
61
+
62
+ # Easter Monday.
63
+ self._add_easter_monday(tr("Easter Monday"))
64
+
65
+ # National Workers' Day.
66
+ self._add_observed(self._add_labor_day(tr("National Workers' Day")))
67
+
68
+ if self._year >= 2025:
69
+ # National Spiritual Baptist Day.
70
+ self._add_holiday_may_21(tr("National Spiritual Baptist Day"))
71
+
72
+ # Whit Monday.
73
+ self._add_whit_monday(tr("Whit Monday"))
74
+
75
+ # Carnival Monday.
76
+ name = tr("Carnival Monday")
77
+ carnival_monday_dates = {
78
+ 2013: (JUL, 8),
79
+ 2018: (JUL, 9),
80
+ 2019: (JUL, 8),
81
+ 2020: (AUG, 3),
82
+ 2021: (SEP, 6),
83
+ 2023: (JUL, 10),
84
+ 2024: (JUL, 8),
85
+ }
86
+ dt = (
87
+ self._add_holiday(name, dt)
88
+ if (dt := carnival_monday_dates.get(self._year))
89
+ else self._add_holiday_1st_mon_of_jul(name)
90
+ )
91
+
92
+ # Carnival Tuesday.
93
+ self._add_holiday(tr("Carnival Tuesday"), _timedelta(dt, +1))
94
+
95
+ # Emancipation Day.
96
+ self._add_observed(self._add_holiday_aug_1(tr("Emancipation Day")))
97
+
98
+ # Independence Day.
99
+ self._add_observed(self._add_holiday_oct_27(tr("Independence Day")))
100
+
101
+ # Christmas Day.
102
+ self._add_observed(self._add_christmas_day(tr("Christmas Day")), rule=SUN_TO_NEXT_TUE)
103
+
104
+ # Boxing Day.
105
+ self._add_observed(self._add_christmas_day_two(tr("Boxing Day")))
106
+
107
+
108
+ class VC(SaintVincentAndTheGrenadines):
109
+ pass
110
+
111
+
112
+ class VCT(SaintVincentAndTheGrenadines):
113
+ pass
114
+
115
+
116
+ class SaintVincentAndTheGrenadinesStaticHolidays:
117
+ """Saint Vincent and the Grenadines special holidays.
118
+
119
+ References:
120
+ * [Statutory Rules and Orders 2021 No.1](https://web.archive.org/web/20250613051716/https://pmoffice.gov.vc/pmoffice/images/PDF/Gazettes/No_1_Proclamation_Delcaring_Friday_the_22nd_and_Monday_25th_day_of_January_2021_to_be_Public_Holidays_in_Saint_Vincent_and_the_Grenadines_19th_January_2021.pdf)
121
+ """
122
+
123
+ # Public Health Holiday.
124
+ name = tr("Public Health Holiday")
125
+ special_public_holidays = {
126
+ 2021: (
127
+ (JAN, 22, name),
128
+ (JAN, 25, name),
129
+ ),
130
+ }
@@ -13,7 +13,8 @@
13
13
  from datetime import date
14
14
  from gettext import gettext as tr
15
15
 
16
- from holidays.calendars.gregorian import JAN, FEB, SEP, NOV, THU, FRI, SAT, _timedelta
16
+ from holidays.calendars import _CustomIslamicHolidays
17
+ from holidays.calendars.gregorian import SEP, NOV, THU, FRI, SAT, _timedelta
17
18
  from holidays.groups import IslamicHolidays, StaticHolidays
18
19
  from holidays.observed_holiday_base import (
19
20
  ObservedHolidayBase,
@@ -30,9 +31,10 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
30
31
  """Saudi Arabia holidays.
31
32
 
32
33
  References:
33
- * <https://laboreducation.hrsd.gov.sa/en/gallery/274>
34
+ * <https://ar.wikipedia.org/wiki/قائمة_العطل_الرسمية_في_السعودية>
34
35
  * <https://web.archive.org/web/20240610223551/http://laboreducation.hrsd.gov.sa/en/labor-education/322>
35
36
  * <https://web.archive.org/web/20250329052253/https://english.alarabiya.net/News/gulf/2022/01/27/Saudi-Arabia-to-commemorate-Founding-Day-on-Feb-22-annually-Royal-order>
37
+ * [2015 (1436 AH) Dhu al-Hijjah begin on September 15](https://web.archive.org/web/20250430191246/https://qna.org.qa/en/news/news-details?id=saudi-arabia-eid-aladha-to-start-on-september-24&date=14/09/2015)
36
38
  """
37
39
 
38
40
  country = "SA"
@@ -45,26 +47,29 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
45
47
  observed_estimated_label = tr("%s (المقدرة، ملاحظة)")
46
48
  supported_languages = ("ar", "en_US")
47
49
 
48
- def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
49
- """
50
+ def __init__(self, *args, islamic_show_estimated: bool = False, **kwargs):
51
+ """Saudi Arabia has traditionally used the Umm al-Qura calendar
52
+ for administrative purposes.
53
+
50
54
  Args:
51
55
  islamic_show_estimated:
52
56
  Whether to add "estimated" label to Islamic holidays name
53
57
  if holiday date is estimated.
54
58
  """
55
- IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
59
+ IslamicHolidays.__init__(
60
+ self, cls=SaudiArabiaIslamicHolidays, show_estimated=islamic_show_estimated
61
+ )
56
62
  StaticHolidays.__init__(self, SaudiArabiaStaticHolidays)
57
63
  kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_NEXT_SUN)
58
64
  super().__init__(*args, **kwargs)
59
65
 
60
- def _add_islamic_observed(self, dts: set[date]) -> None:
66
+ def _add_islamic_observed(self, dt: date) -> None:
61
67
  # Observed days are added to make up for any days falling on a weekend.
62
68
  if not self.observed:
63
69
  return None
64
70
  observed_rule = THU_FRI_TO_NEXT_WORKDAY if self._year <= 2012 else FRI_SAT_TO_NEXT_WORKDAY
65
- for dt in dts:
66
- for i in range(4):
67
- self._add_observed(_timedelta(dt, -i), name=self[dt], rule=observed_rule)
71
+ for i in range(4):
72
+ self._add_observed(_timedelta(dt, -i), name=self[dt], rule=observed_rule)
68
73
 
69
74
  def _populate_public_holidays(self):
70
75
  # Weekend used to be THU, FRI before June 28th, 2013.
@@ -77,36 +82,38 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
77
82
  )
78
83
  self.weekend = {THU, FRI} if self._year <= 2012 else {FRI, SAT}
79
84
 
80
- # Eid al-Fitr Holiday
85
+ # Eid al-Fitr Holiday.
81
86
  eid_al_fitr_name = tr("عطلة عيد الفطر")
82
- self._add_eid_al_fitr_day(eid_al_fitr_name)
87
+ eid_al_fitr_dates = self._add_eid_al_fitr_day(eid_al_fitr_name)
83
88
  self._add_eid_al_fitr_day_two(eid_al_fitr_name)
84
89
  self._add_eid_al_fitr_day_three(eid_al_fitr_name)
85
- self._add_islamic_observed(self._add_eid_al_fitr_day_four(eid_al_fitr_name))
86
90
 
87
- # Arafat Day
91
+ for dt in eid_al_fitr_dates:
92
+ if self._islamic_calendar._is_long_ramadan(dt):
93
+ # Add 30 Ramadan.
94
+ self._add_holiday(eid_al_fitr_name, _timedelta(dt, -1))
95
+ self._add_islamic_observed(_timedelta(dt, +2))
96
+ else:
97
+ # Add 4 Shawwal.
98
+ self._add_islamic_observed(self._add_holiday(eid_al_fitr_name, _timedelta(dt, +3)))
99
+
100
+ # Arafat Day.
88
101
  self._add_arafah_day(tr("يوم عرفة"))
89
- # Eid al-Adha Holiday
102
+
103
+ # Eid al-Adha Holiday.
90
104
  name = tr("عطلة عيد الأضحى")
91
105
  self._add_eid_al_adha_day(name)
92
106
  self._add_eid_al_adha_day_two(name)
93
- self._add_islamic_observed(self._add_eid_al_adha_day_three(name))
94
-
95
- # If National Day happens within the Eid al-Fitr Holiday or
96
- # Eid al-Adha Holiday, there is no extra holidays given for it.
97
- if self._year >= 2005:
98
- dt = date(self._year, SEP, 23)
99
- if dt not in self:
100
- # National Day Holiday
101
- self._add_observed(self._add_holiday(tr("اليوم الوطني"), dt))
107
+ for dt in self._add_eid_al_adha_day_three(name):
108
+ self._add_islamic_observed(dt)
102
109
 
103
- # If Founding Day happens within the Eid al-Fitr Holiday or
104
- # Eid al-Adha Holiday, there is no extra holidays given for it.
105
110
  if self._year >= 2022:
106
- dt = date(self._year, FEB, 22)
107
- if dt not in self:
108
- # Founding Day
109
- self._add_observed(self._add_holiday(tr("يوم التأسيسي"), dt))
111
+ # Founding Day.
112
+ self._add_observed(self._add_holiday_feb_22(tr("يوم التأسيسي")))
113
+
114
+ if self._year >= 2005:
115
+ # National Day.
116
+ self._add_observed(self._add_holiday_sep_23(tr("اليوم الوطني")))
110
117
 
111
118
 
112
119
  class SA(SaudiArabia):
@@ -117,13 +124,14 @@ class SAU(SaudiArabia):
117
124
  pass
118
125
 
119
126
 
127
+ class SaudiArabiaIslamicHolidays(_CustomIslamicHolidays):
128
+ EID_AL_ADHA_DATES = {
129
+ 2015: (SEP, 24),
130
+ }
131
+
132
+
120
133
  class SaudiArabiaStaticHolidays:
121
134
  special_public_holidays = {
122
- # Celebrate the country's win against Argentina in the World Cup
135
+ # Celebrate the country's win against Argentina in the World Cup.
123
136
  2022: (NOV, 23, tr("يوم وطني")),
124
137
  }
125
-
126
- special_public_holidays_observed = {
127
- # Eid al-Fitr Holiday
128
- 2001: (JAN, 1, tr("عطلة عيد الفطر")),
129
- }
@@ -17,7 +17,7 @@ from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHoli
17
17
  from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON
18
18
 
19
19
 
20
- class Seychelles(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
20
+ class Seychelles(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
21
21
  """Seychelles holidays.
22
22
 
23
23
  References:
@@ -126,8 +126,8 @@ class SolomonIslands(
126
126
  2022: (JUN, 3),
127
127
  2025: (JUN, 13),
128
128
  }
129
- if self._year in sovereign_birthday_dates:
130
- self._add_holiday(name, sovereign_birthday_dates[self._year])
129
+ if dt := sovereign_birthday_dates.get(self._year):
130
+ self._add_holiday(name, dt)
131
131
  elif self._year == 2024:
132
132
  self._add_observed(self._add_holiday_3rd_sat_of_jun(name))
133
133
  elif self._year >= 2023:
@@ -0,0 +1,66 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars.gregorian import SUN
16
+ from holidays.groups import ChristianHolidays, InternationalHolidays
17
+ from holidays.holiday_base import HolidayBase
18
+
19
+
20
+ class Tokelau(HolidayBase, ChristianHolidays, InternationalHolidays):
21
+ """Tokelau holidays.
22
+
23
+ References:
24
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Tokelau>
25
+ * <https://web.archive.org/web/20250715060109/https://www.tokelau.org.nz/About+Us/Culture.html>
26
+ * [Interpretation Rules 2003](https://web.archive.org/web/20250715065528/https://paclii.org/tk/legis/consol_act_2016/ir2003240.pdf)
27
+ """
28
+
29
+ country = "TK"
30
+ default_language = "en_TK"
31
+ supported_languages = ("en_TK", "en_US", "tkl")
32
+ # Interpretation Rules 2003.
33
+ start_year = 2003
34
+ weekend = {SUN}
35
+
36
+ def __init__(self, *args, **kwargs):
37
+ ChristianHolidays.__init__(self)
38
+ InternationalHolidays.__init__(self)
39
+ super().__init__(*args, **kwargs)
40
+
41
+ def _populate_public_holidays(self):
42
+ # New Year's Day.
43
+ self._add_new_years_day(tr("New Year's Day"))
44
+
45
+ # Good Friday.
46
+ self._add_good_friday(tr("Good Friday"))
47
+
48
+ # Easter Monday.
49
+ self._add_easter_monday(tr("Easter Monday"))
50
+
51
+ # Tokehega Day.
52
+ self._add_holiday_sep_3(tr("Tokehega Day"))
53
+
54
+ # Christmas Day.
55
+ self._add_christmas_day(tr("Christmas Day"))
56
+
57
+ # Boxing Day.
58
+ self._add_christmas_day_two(tr("Boxing Day"))
59
+
60
+
61
+ class TK(Tokelau):
62
+ pass
63
+
64
+
65
+ class TKL(Tokelau):
66
+ pass
@@ -91,8 +91,8 @@ class TurksAndCaicosIslands(ObservedHolidayBase, ChristianHolidays, Internationa
91
91
  2024: (JUN, 17),
92
92
  2025: (JUN, 23),
93
93
  }
94
- if self._year in dates_obs:
95
- self._add_holiday(name, dates_obs.get(self._year))
94
+ if dt := dates_obs.get(self._year):
95
+ self._add_holiday(name, dt)
96
96
  else:
97
97
  self._add_holiday_2nd_mon_of_jun(name)
98
98
 
@@ -88,8 +88,8 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
88
88
  }
89
89
  # Spring Bank Holiday.
90
90
  name = tr("Spring Bank Holiday")
91
- if self._year in spring_bank_dates:
92
- self._add_holiday(name, spring_bank_dates[self._year])
91
+ if dt := spring_bank_dates.get(self._year):
92
+ self._add_holiday(name, dt)
93
93
  else:
94
94
  self._add_holiday_last_mon_of_may(name)
95
95