holidays 0.81__py3-none-any.whl → 0.83__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 (141) hide show
  1. holidays/calendars/__init__.py +1 -0
  2. holidays/calendars/burmese.py +319 -0
  3. holidays/calendars/hebrew.py +2 -2
  4. holidays/calendars/islamic.py +26 -6
  5. holidays/calendars/thai.py +49 -2
  6. holidays/countries/__init__.py +11 -0
  7. holidays/countries/afghanistan.py +7 -5
  8. holidays/countries/algeria.py +89 -24
  9. holidays/countries/antarctica.py +58 -0
  10. holidays/countries/azerbaijan.py +1 -1
  11. holidays/countries/bouvet_island.py +31 -0
  12. holidays/countries/brazil.py +1 -1
  13. holidays/countries/british_indian_ocean_territory.py +31 -0
  14. holidays/countries/bulgaria.py +6 -1
  15. holidays/countries/canada.py +27 -13
  16. holidays/countries/chile.py +9 -8
  17. holidays/countries/cuba.py +3 -4
  18. holidays/countries/denmark.py +18 -6
  19. holidays/countries/djibouti.py +1 -1
  20. holidays/countries/fiji.py +2 -3
  21. holidays/countries/finland.py +3 -6
  22. holidays/countries/guyana.py +24 -32
  23. holidays/countries/heard_island_and_mcdonald_islands.py +31 -0
  24. holidays/countries/hungary.py +4 -5
  25. holidays/countries/india.py +27 -78
  26. holidays/countries/iran.py +133 -269
  27. holidays/countries/ireland.py +1 -1
  28. holidays/countries/israel.py +1 -1
  29. holidays/countries/japan.py +22 -18
  30. holidays/countries/jordan.py +6 -3
  31. holidays/countries/kuwait.py +6 -3
  32. holidays/countries/macau.py +5 -8
  33. holidays/countries/malaysia.py +14 -3
  34. holidays/countries/mauritius.py +10 -9
  35. holidays/countries/montserrat.py +1 -1
  36. holidays/countries/myanmar.py +194 -0
  37. holidays/countries/nepal.py +11 -30
  38. holidays/countries/netherlands.py +28 -24
  39. holidays/countries/new_zealand.py +75 -31
  40. holidays/countries/nigeria.py +53 -75
  41. holidays/countries/north_korea.py +161 -0
  42. holidays/countries/norway.py +24 -9
  43. holidays/countries/oman.py +6 -2
  44. holidays/countries/paraguay.py +70 -23
  45. holidays/countries/portugal.py +5 -6
  46. holidays/countries/qatar.py +5 -2
  47. holidays/countries/rwanda.py +8 -3
  48. holidays/countries/saudi_arabia.py +6 -5
  49. holidays/countries/serbia.py +5 -0
  50. holidays/countries/slovakia.py +23 -4
  51. holidays/countries/south_africa.py +96 -53
  52. holidays/countries/south_korea.py +6 -1
  53. holidays/countries/spain.py +4 -4
  54. holidays/countries/sri_lanka.py +21 -58
  55. holidays/countries/sudan.py +6 -3
  56. holidays/countries/suriname.py +1 -2
  57. holidays/countries/sweden.py +1 -1
  58. holidays/countries/switzerland.py +255 -6
  59. holidays/countries/taiwan.py +23 -3
  60. holidays/countries/tanzania.py +25 -30
  61. holidays/countries/thailand.py +29 -7
  62. holidays/countries/tonga.py +6 -1
  63. holidays/countries/trinidad_and_tobago.py +7 -2
  64. holidays/countries/ukraine.py +1 -1
  65. holidays/countries/united_arab_emirates.py +9 -2
  66. holidays/countries/united_kingdom.py +1 -1
  67. holidays/countries/united_states.py +18 -2
  68. holidays/countries/uruguay.py +6 -1
  69. holidays/countries/vietnam.py +6 -1
  70. holidays/countries/western_sahara.py +92 -0
  71. holidays/countries/yemen.py +6 -3
  72. holidays/groups/__init__.py +1 -0
  73. holidays/groups/balinese_saka.py +1 -1
  74. holidays/groups/buddhist.py +3 -3
  75. holidays/groups/burmese.py +273 -0
  76. holidays/groups/chinese.py +30 -2
  77. holidays/groups/christian.py +10 -0
  78. holidays/groups/custom.py +8 -2
  79. holidays/groups/eastern.py +26 -0
  80. holidays/groups/hebrew.py +16 -14
  81. holidays/groups/hindu.py +23 -15
  82. holidays/groups/international.py +1 -1
  83. holidays/groups/islamic.py +52 -50
  84. holidays/groups/mongolian.py +6 -3
  85. holidays/groups/sinhala.py +9 -11
  86. holidays/groups/tibetan.py +8 -6
  87. holidays/holiday_base.py +26 -26
  88. holidays/ical.py +6 -4
  89. holidays/locale/ar/LC_MESSAGES/DZ.mo +0 -0
  90. holidays/locale/ar/LC_MESSAGES/EH.mo +0 -0
  91. holidays/locale/ca/LC_MESSAGES/ES.mo +0 -0
  92. holidays/locale/de/LC_MESSAGES/CH.mo +0 -0
  93. holidays/locale/en_IN/LC_MESSAGES/IN.mo +0 -0
  94. holidays/locale/en_US/LC_MESSAGES/BR.mo +0 -0
  95. holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
  96. holidays/locale/en_US/LC_MESSAGES/DZ.mo +0 -0
  97. holidays/locale/en_US/LC_MESSAGES/EH.mo +0 -0
  98. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  99. holidays/locale/en_US/LC_MESSAGES/IN.mo +0 -0
  100. holidays/locale/en_US/LC_MESSAGES/JP.mo +0 -0
  101. holidays/locale/en_US/LC_MESSAGES/KP.mo +0 -0
  102. holidays/locale/en_US/LC_MESSAGES/MM.mo +0 -0
  103. holidays/locale/en_US/LC_MESSAGES/NL.mo +0 -0
  104. holidays/locale/en_US/LC_MESSAGES/PY.mo +0 -0
  105. holidays/locale/en_US/LC_MESSAGES/US.mo +0 -0
  106. holidays/locale/es/LC_MESSAGES/EH.mo +0 -0
  107. holidays/locale/es/LC_MESSAGES/ES.mo +0 -0
  108. holidays/locale/es/LC_MESSAGES/PY.mo +0 -0
  109. holidays/locale/fr/LC_MESSAGES/CH.mo +0 -0
  110. holidays/locale/fr/LC_MESSAGES/DZ.mo +0 -0
  111. holidays/locale/fr/LC_MESSAGES/EH.mo +0 -0
  112. holidays/locale/fy/LC_MESSAGES/NL.mo +0 -0
  113. holidays/locale/hi/LC_MESSAGES/IN.mo +0 -0
  114. holidays/locale/it/LC_MESSAGES/CH.mo +0 -0
  115. holidays/locale/ja/LC_MESSAGES/JP.mo +0 -0
  116. holidays/locale/ko_KP/LC_MESSAGES/KP.mo +0 -0
  117. holidays/locale/my/LC_MESSAGES/MM.mo +0 -0
  118. holidays/locale/nl/LC_MESSAGES/NL.mo +0 -0
  119. holidays/locale/pt_BR/LC_MESSAGES/BR.mo +0 -0
  120. holidays/locale/th/LC_MESSAGES/CH.mo +0 -0
  121. holidays/locale/th/LC_MESSAGES/DK.mo +0 -0
  122. holidays/locale/th/LC_MESSAGES/JP.mo +0 -0
  123. holidays/locale/th/LC_MESSAGES/MM.mo +0 -0
  124. holidays/locale/th/LC_MESSAGES/NL.mo +0 -0
  125. holidays/locale/th/LC_MESSAGES/US.mo +0 -0
  126. holidays/locale/uk/LC_MESSAGES/BR.mo +0 -0
  127. holidays/locale/uk/LC_MESSAGES/CH.mo +0 -0
  128. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  129. holidays/locale/uk/LC_MESSAGES/NL.mo +0 -0
  130. holidays/locale/uk/LC_MESSAGES/PY.mo +0 -0
  131. holidays/no_holiday_base.py +21 -0
  132. holidays/observed_holiday_base.py +16 -4
  133. holidays/registry.py +8 -0
  134. holidays/utils.py +5 -5
  135. holidays/version.py +1 -1
  136. {holidays-0.81.dist-info → holidays-0.83.dist-info}/METADATA +63 -19
  137. {holidays-0.81.dist-info → holidays-0.83.dist-info}/RECORD +141 -118
  138. {holidays-0.81.dist-info → holidays-0.83.dist-info}/licenses/CONTRIBUTORS +2 -0
  139. {holidays-0.81.dist-info → holidays-0.83.dist-info}/WHEEL +0 -0
  140. {holidays-0.81.dist-info → holidays-0.83.dist-info}/licenses/LICENSE +0 -0
  141. {holidays-0.81.dist-info → holidays-0.83.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,7 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC
15
+ from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC, SUN
16
16
  from holidays.constants import GOVERNMENT, PUBLIC
17
17
  from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
18
18
  from holidays.holiday_base import HolidayBase
@@ -28,7 +28,9 @@ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
28
28
  * [Ley 1.723/2001](https://web.archive.org/web/20250427173914/https://www.bacn.gov.py/leyes-paraguayas/634/ley-n-1723--autoriza-al-poder-ejecutivo-a-trasladar-los-feriados-nacionales-al-dia-lunes)
29
29
  * [Ley 4.531/2011](https://web.archive.org/web/20250420210317/https://www.bacn.gov.py/leyes-paraguayas/3831/ley-n-4531-restablece-el-dia-14-de-mayo-de-cada-ano-como-feriado-nacional)
30
30
  * <https://es.wikipedia.org/wiki/Anexo:Días_festivos_en_Paraguay>
31
- * <https://web.archive.org/web/20250427131220/https://www.calendarioparaguay.com/>
31
+ * <https://web.archive.org/web/20131212214628/https://www.abc.com.py/nacionales/feriados-de-2013-se-trasladaran-al-dia-lunes-494705.html>
32
+ * <https://web.archive.org/web/20241207131557/https://www.ultimahora.com/establecen-traslados-feriados-el-2017-n1042098>
33
+ * <https://web.archive.org/web/20250913135012/https://foco.lanacion.com.py/2025/01/01/feriados-2025-paraguay-tendra-6-fines-de-semana-largos/>
32
34
  """
33
35
 
34
36
  country = "PY"
@@ -37,6 +39,7 @@ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
37
39
  supported_languages = ("en_US", "es", "uk")
38
40
  # Ley 8/1990.
39
41
  start_year = 1991
42
+ weekend = {SUN}
40
43
 
41
44
  def __init__(self, *args, **kwargs):
42
45
  ChristianHolidays.__init__(self)
@@ -51,10 +54,12 @@ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
51
54
  dates_obs = {
52
55
  2013: (MAR, 4),
53
56
  2016: (FEB, 29),
57
+ 2017: (FEB, 27),
54
58
  2018: (FEB, 26),
55
59
  2019: (MAR, 4),
56
60
  2022: (FEB, 28),
57
61
  2023: (FEB, 27),
62
+ 2025: (MAR, 3),
58
63
  }
59
64
  self._add_holiday(
60
65
  # Patriots Day.
@@ -82,16 +87,23 @@ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
82
87
  self._add_holiday_may_15(tr("Día de la Independencia Nacional"))
83
88
 
84
89
  dates_obs = {
90
+ 2013: (JUN, 10),
85
91
  2014: (JUN, 16),
86
92
  2018: (JUN, 11),
87
93
  2019: (JUN, 17),
88
94
  2024: (JUN, 10),
95
+ 2025: (JUN, 16),
89
96
  }
90
97
  # Chaco Armistice Day.
91
98
  self._add_holiday(tr("Día de la Paz del Chaco"), dates_obs.get(self._year, (JUN, 12)))
92
99
 
93
100
  # Asuncion Foundation's Day.
94
- self._add_holiday_aug_15(tr("Día de la Fundación de Asunción"))
101
+ name = tr("Día de la Fundación de Asunción")
102
+ # Decreto N° 6292.
103
+ if self._year == 2017:
104
+ self._add_holiday_aug_14(name)
105
+ else:
106
+ self._add_holiday_aug_15(name)
95
107
 
96
108
  # Ley 715/1995, 1.601/2000.
97
109
  if self._year >= 1995:
@@ -125,31 +137,43 @@ class PRY(Paraguay):
125
137
 
126
138
 
127
139
  class ParaguayStaticHolidays:
140
+ """Paraguay special holidays.
141
+
142
+ References:
143
+ * <https://web.archive.org/web/20250917075450/https://www.pgr.gov.py/wp-content/uploads/2013/12/DECRETO-991-ASUETO-EL-24-Y-EL-31-DE-DICIEMBRE.pdf>
144
+ * <https://web.archive.org/web/20250917074759/https://www.ultimahora.com/ejecutivo-declara-asueto-el-23-y-30-diciembre-sector-publico-n3040041>
145
+ * <https://web.archive.org/web/20231003173505/https://www.lanacion.com.py/politica/2023/03/24/decretan-asueto-de-funcionarios-publicos-el-miercoles-5-de-abril-por-semana-santa/>
146
+ * <https://web.archive.org/web/20250917042124/https://informacionpublica.paraguay.gov.py/public/1046579-RESPUESTAAIPN79397pdf-RESPUESTAAIPN79397.pdf>
147
+ * <https://web.archive.org/web/20250416092842/https://www.radionacional.gov.py/2024/03/22/ejecutivo-declara-asueto-el-miercoles-27-de-marzo-para-funcionarios-publicos/>
148
+ * <https://web.archive.org/web/20241225185947/https://www.abc.com.py/politica/2024/12/20/declaran-asueto-para-funcionarios-publicos-el-24-y-31-de-diciembre/>
149
+ * <https://web.archive.org/web/20250917075032/https://portal.ips.gov.py/sistemas/ipsportal/archivos/archivos/1744391513.pdf>
150
+ """
151
+
128
152
  # Public holiday.
129
- public_holiday = tr("Asueto adicionale")
153
+ public_holiday = tr("Asueto adicional")
130
154
  # Public sector holiday.
131
155
  public_sector_holiday = tr("Asueto de la Administración Pública")
132
156
 
133
157
  special_public_holidays = {
134
- # public holiday for business purposes, in view of the recently increased risk
158
+ # Public holiday for business purposes, in view of the recently increased risk
135
159
  # of Dengue fever.
136
160
  2007: (JAN, 29, public_holiday),
137
- # public sector holiday to celebrate Paraguay's football team's qualification
161
+ # Public sector holiday to celebrate Paraguay's football team's qualification
138
162
  # for the 2010 World Cup.
139
163
  2009: (SEP, 10, public_holiday),
140
- # public holiday to coincide with the Paraguay-Italy game of the current World Cup.
164
+ # Public holiday to coincide with the Paraguay-Italy game of the current World Cup.
141
165
  2010: (JUN, 14, public_holiday),
142
166
  2011: (
143
- # public holiday to coincide with the current anti-Dengue drive.
167
+ # Public holiday to coincide with the current anti-Dengue drive.
144
168
  (APR, 19, public_holiday),
145
- # public holidays to commemorate the Bicentennial of Paraguay's independence.
169
+ # Public holidays to commemorate the Bicentennial of Paraguay's independence.
146
170
  (MAY, 14, public_holiday),
147
171
  (MAY, 16, public_holiday),
148
172
  ),
149
- # date of the inauguration of President-elect Horacio Cartes.
173
+ # Date of the inauguration of President-elect Horacio Cartes.
150
174
  2013: (AUG, 14, public_holiday),
151
175
  2015: (
152
- # public holidays in Paraguay on account of the upcoming visit of Pope Francis
176
+ # Public holidays in Paraguay on account of the upcoming visit of Pope Francis
153
177
  # in Paraguay.
154
178
  (JUL, 10, public_holiday),
155
179
  (JUL, 11, public_holiday),
@@ -163,38 +187,43 @@ class ParaguayStaticHolidays:
163
187
  (DEC, 31, public_sector_holiday),
164
188
  ),
165
189
  2011: (
166
- # public sector holiday to let civil servants begin their Holy Week earlier.
190
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
167
191
  (APR, 20, public_sector_holiday),
168
192
  # 2 year-end public sector holidays.
169
193
  (DEC, 23, public_sector_holiday),
170
194
  (DEC, 30, public_sector_holiday),
171
195
  ),
172
196
  2012: (
173
- # public sector holiday to let civil servants begin their Holy Week earlier.
197
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
174
198
  (APR, 4, public_sector_holiday),
175
199
  # 2 year-end public sector holidays.
176
200
  (DEC, 24, public_sector_holiday),
177
201
  (DEC, 31, public_sector_holiday),
178
202
  ),
179
- # public sector holiday to let civil servants begin their Holy Week earlier.
180
- 2013: (MAR, 27, public_sector_holiday),
203
+ 2013: (
204
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
205
+ (MAR, 27, public_sector_holiday),
206
+ # 2 year-end public sector holidays.
207
+ (DEC, 24, public_sector_holiday),
208
+ (DEC, 31, public_sector_holiday),
209
+ ),
181
210
  2014: (
182
- # public sector holiday to let civil servants begin their Holy Week earlier.
211
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
183
212
  (APR, 16, public_sector_holiday),
184
213
  # 2 year-end public sector holidays.
185
214
  (DEC, 24, public_sector_holiday),
186
215
  (DEC, 31, public_sector_holiday),
187
216
  ),
188
217
  2015: (
189
- # public sector holiday to let civil servants begin their Holy Week earlier.
218
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
190
219
  (APR, 1, public_sector_holiday),
191
220
  # 2 year-end public sector holidays.
192
221
  (DEC, 24, public_sector_holiday),
193
222
  (DEC, 31, public_sector_holiday),
194
223
  ),
195
- # public sector holiday to let civil servants begin their Holy Week earlier.
224
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
196
225
  2016: (MAR, 23, public_sector_holiday),
197
- # public sector holiday to let civil servants begin their Holy Week earlier.
226
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
198
227
  2017: (MAR, 28, public_sector_holiday),
199
228
  2018: (
200
229
  # 2 year-end public sector holidays.
@@ -202,13 +231,13 @@ class ParaguayStaticHolidays:
202
231
  (DEC, 31, public_sector_holiday),
203
232
  ),
204
233
  2019: (
205
- # public sector holiday to let civil servants begin their Holy Week earlier.
234
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
206
235
  (APR, 17, public_sector_holiday),
207
236
  # 2 year-end public sector holidays.
208
237
  (DEC, 24, public_sector_holiday),
209
238
  (DEC, 31, public_sector_holiday),
210
239
  ),
211
- # public sector holiday to let civil servants begin their Holy Week earlier.
240
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
212
241
  2020: (APR, 8, public_sector_holiday),
213
242
  2021: (
214
243
  # 2 year-end public sector holidays.
@@ -216,9 +245,27 @@ class ParaguayStaticHolidays:
216
245
  (DEC, 31, public_sector_holiday),
217
246
  ),
218
247
  2022: (
219
- # public sector holiday to let civil servants begin their Holy Week earlier.
248
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
220
249
  (APR, 13, public_sector_holiday),
221
- # public sector holiday due to the annual May 1st public holiday falling on a Sunday.
250
+ # Public sector holiday due to the annual May 1st public holiday falling on a Sunday.
222
251
  (MAY, 2, public_sector_holiday),
252
+ # 2 year-end public sector holidays.
253
+ (DEC, 23, public_sector_holiday),
254
+ (DEC, 30, public_sector_holiday),
255
+ ),
256
+ 2023: (
257
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
258
+ (APR, 5, public_sector_holiday),
259
+ # Public sector holiday from resolution no. 1045.
260
+ (DEC, 7, public_sector_holiday),
261
+ ),
262
+ 2024: (
263
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
264
+ (MAR, 27, public_sector_holiday),
265
+ # 2 year-end public sector holidays.
266
+ (DEC, 24, public_sector_holiday),
267
+ (DEC, 31, public_sector_holiday),
223
268
  ),
269
+ # Public sector holiday to let civil servants begin their Holy Week earlier.
270
+ 2025: (APR, 16, public_sector_holiday),
224
271
  }
@@ -129,15 +129,14 @@ class Portugal(HolidayBase, ChristianHolidays, InternationalHolidays):
129
129
  if self._year >= 1911:
130
130
  if 1933 <= self._year <= 1973:
131
131
  # Day of Camões, Portugal, and the Portuguese Race.
132
- self._add_holiday_jun_10(tr("Dia de Camões, de Portugal e da Raça"))
132
+ name = tr("Dia de Camões, de Portugal e da Raça")
133
133
  elif self._year >= 1978:
134
- self._add_holiday_jun_10(
135
- # Day of Portugal, Camões, and the Portuguese Communities.
136
- tr("Dia de Portugal, de Camões e das Comunidades Portuguesas")
137
- )
134
+ # Day of Portugal, Camões, and the Portuguese Communities.
135
+ name = tr("Dia de Portugal, de Camões e das Comunidades Portuguesas")
138
136
  else:
139
137
  # Portugal Day.
140
- self._add_holiday_jun_10(tr("Dia de Portugal"))
138
+ name = tr("Dia de Portugal")
139
+ self._add_holiday_jun_10(name)
141
140
 
142
141
  # Assumption Day.
143
142
  self._add_assumption_of_mary_day(tr("Assunção de Nossa Senhora"))
@@ -10,6 +10,7 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
+ from datetime import date
13
14
  from gettext import gettext as tr
14
15
 
15
16
  from holidays.calendars import _CustomIslamicHolidays
@@ -36,6 +37,7 @@ class Qatar(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays)
36
37
  start_year = 1971
37
38
  supported_categories = (BANK, PUBLIC)
38
39
  supported_languages = ("ar_QA", "en_US")
40
+ weekend = {FRI, SAT}
39
41
 
40
42
  def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
41
43
  """
@@ -51,10 +53,11 @@ class Qatar(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays)
51
53
  StaticHolidays.__init__(self, QatarStaticHolidays)
52
54
  super().__init__(*args, **kwargs)
53
55
 
54
- def _populate_public_holidays(self):
56
+ def _get_weekend(self, dt: date) -> set[int]:
55
57
  # Qatar switches from THU-FRI to FRI-SAT on Aug 1, 2003.
56
- self.weekend = {THU, FRI} if self._year <= 2003 else {FRI, SAT}
58
+ return {FRI, SAT} if dt >= date(2003, AUG, 1) else {THU, FRI}
57
59
 
60
+ def _populate_public_holidays(self):
58
61
  if self._year >= 2012:
59
62
  # National Sports Day.
60
63
  self._add_holiday_2nd_tue_of_feb(tr("اليوم الوطني للرياضة"))
@@ -10,8 +10,10 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- from datetime import date
13
+ from __future__ import annotations
14
+
14
15
  from gettext import gettext as tr
16
+ from typing import TYPE_CHECKING
15
17
 
16
18
  from holidays.calendars import _CustomIslamicHolidays
17
19
  from holidays.calendars.gregorian import MAR, JUN, JUL, AUG
@@ -22,6 +24,9 @@ from holidays.observed_holiday_base import (
22
24
  SAT_SUN_TO_NEXT_WORKDAY,
23
25
  )
24
26
 
27
+ if TYPE_CHECKING:
28
+ from datetime import date
29
+
25
30
 
26
31
  class Rwanda(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
27
32
  """Rwanda holidays.
@@ -55,7 +60,7 @@ class Rwanda(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isla
55
60
  kwargs.setdefault("observed_since", 2017)
56
61
  super().__init__(*args, **kwargs)
57
62
 
58
- def _populate_observed(self, dts: set[date], multiple: bool = False) -> None:
63
+ def _populate_observed(self, dts: set[date], *, multiple: bool = False) -> None:
59
64
  """
60
65
  Applies `SAT_TO_NEXT_WORKDAY` instead of `SAT_SUN_TO_NEXT_WORKDAY`
61
66
  observed_rule for Day after New Year's Day and Boxing Day.
@@ -71,7 +76,7 @@ class Rwanda(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isla
71
76
  self._add_observed(
72
77
  dt,
73
78
  name,
74
- SAT_TO_NEXT_WORKDAY if name in special_cases else SAT_SUN_TO_NEXT_WORKDAY,
79
+ rule=SAT_TO_NEXT_WORKDAY if name in special_cases else SAT_SUN_TO_NEXT_WORKDAY,
75
80
  )
76
81
 
77
82
  def _populate_public_holidays(self):
@@ -14,7 +14,7 @@ from datetime import date
14
14
  from gettext import gettext as tr
15
15
 
16
16
  from holidays.calendars import _CustomIslamicHolidays
17
- from holidays.calendars.gregorian import SEP, NOV, THU, FRI, SAT, _timedelta
17
+ from holidays.calendars.gregorian import JUN, SEP, NOV, THU, FRI, SAT, _timedelta
18
18
  from holidays.groups import IslamicHolidays, StaticHolidays
19
19
  from holidays.observed_holiday_base import (
20
20
  ObservedHolidayBase,
@@ -46,6 +46,7 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
46
46
  # %s (observed, estimated).
47
47
  observed_estimated_label = tr("%s (المقدرة، ملاحظة)")
48
48
  supported_languages = ("ar", "en_US")
49
+ weekend = {FRI, SAT}
49
50
 
50
51
  def __init__(self, *args, islamic_show_estimated: bool = False, **kwargs):
51
52
  """Saudi Arabia has traditionally used the Umm al-Qura calendar
@@ -71,16 +72,16 @@ class SaudiArabia(ObservedHolidayBase, IslamicHolidays, StaticHolidays):
71
72
  for i in range(4):
72
73
  self._add_observed(_timedelta(dt, -i), name=self[dt], rule=observed_rule)
73
74
 
74
- def _populate_public_holidays(self):
75
+ def _get_weekend(self, dt: date) -> set[int]:
75
76
  # Weekend used to be THU, FRI before June 28th, 2013.
76
- # On that year both Eids were after that date, and Founding day
77
- # holiday started at 2022; so what below works.
77
+ return {FRI, SAT} if dt >= date(2013, JUN, 28) else {THU, FRI}
78
+
79
+ def _populate_public_holidays(self):
78
80
  self._observed_rule = (
79
81
  THU_TO_PREV_WED + FRI_TO_NEXT_SAT
80
82
  if self._year <= 2012
81
83
  else FRI_TO_PREV_THU + SAT_TO_NEXT_SUN
82
84
  )
83
- self.weekend = {THU, FRI} if self._year <= 2012 else {FRI, SAT}
84
85
 
85
86
  # Eid al-Fitr Holiday.
86
87
  eid_al_fitr_name = tr("عطلة عيد الفطر")
@@ -28,6 +28,8 @@ class Serbia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
28
28
  default_language = "sr"
29
29
  # %s (observed).
30
30
  observed_label = tr("%s (слободан дан)")
31
+ # Independence Restored on June 5th, 2006.
32
+ start_year = 2007
31
33
  supported_languages = ("en_US", "sr")
32
34
 
33
35
  def __init__(self, *args, **kwargs):
@@ -64,10 +66,13 @@ class Serbia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
64
66
 
65
67
  # Good Friday.
66
68
  self._add_good_friday(tr("Велики петак"))
69
+
67
70
  # Holy Saturday.
68
71
  self._add_holy_saturday(tr("Велика субота"))
72
+
69
73
  # Easter Sunday.
70
74
  self._add_easter_sunday(tr("Васкрс"))
75
+
71
76
  # Easter Monday.
72
77
  self._add_easter_monday(tr("Други дан Васкрса"))
73
78
 
@@ -25,6 +25,9 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
25
25
  * <https://en.wikipedia.org/wiki/Public_holidays_in_Slovakia>
26
26
  * <https://sk.wikipedia.org/wiki/Zoznam_sviatkov_na_Slovensku>
27
27
  * <https://web.archive.org/web/20250413192257/https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/1993/241/>
28
+ * [Law 326/2020](https://web.archive.org/web/20250713005858/https://static.slov-lex.sk/static/SK/ZZ/2020/326/20210101.html)
29
+ * [Law 530/2023](https://web.archive.org/web/20250424165411/https://static.slov-lex.sk/static/SK/ZZ/2023/530/20240101.html)
30
+ * [Law 261/2025](https://web.archive.org/web/20251014224441/https://static.slov-lex.sk/static/SK/ZZ/2025/261/20251101.html)
28
31
  """
29
32
 
30
33
  country = "SK"
@@ -58,7 +61,7 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
58
61
  # Labor Day.
59
62
  self._add_labor_day(tr("Sviatok práce"))
60
63
 
61
- if self._year >= 1997:
64
+ if self._year >= 1997 and self._year != 2026:
62
65
  # Day of Victory over Fascism.
63
66
  self._add_world_war_two_victory_day(tr("Deň víťazstva nad fašizmom"))
64
67
 
@@ -72,13 +75,14 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
72
75
  # Constitution Day.
73
76
  self._add_holiday_sep_1(tr("Deň Ústavy Slovenskej republiky"))
74
77
 
75
- # Day of Our Lady of the Seven Sorrows.
76
- self._add_holiday_sep_15(tr("Sedembolestná Panna Mária"))
78
+ if self._year != 2026:
79
+ # Day of Our Lady of the Seven Sorrows.
80
+ self._add_holiday_sep_15(tr("Sedembolestná Panna Mária"))
77
81
 
78
82
  # All Saints' Day.
79
83
  self._add_all_saints_day(tr("Sviatok Všetkých svätých"))
80
84
 
81
- if self._year >= 2001:
85
+ if 2001 <= self._year <= 2024:
82
86
  # Struggle for Freedom and Democracy Day.
83
87
  self._add_holiday_nov_17(tr("Deň boja za slobodu a demokraciu"))
84
88
 
@@ -94,14 +98,29 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
94
98
  def _populate_workday_holidays(self):
95
99
  # According to Law 241/1993, these state holidays are not non-working days.
96
100
 
101
+ # Law 261/2025.
102
+ if self._year == 2026:
103
+ # Day of Victory over Fascism.
104
+ self._add_world_war_two_victory_day(tr("Deň víťazstva nad fašizmom"))
105
+
106
+ # Day of Our Lady of the Seven Sorrows.
107
+ self._add_holiday_sep_15(tr("Sedembolestná Panna Mária"))
108
+
109
+ # Law 530/2023.
97
110
  if self._year >= 2024:
98
111
  # Constitution Day.
99
112
  self._add_holiday_sep_1(tr("Deň Ústavy Slovenskej republiky"))
100
113
 
114
+ # Law 326/2020.
101
115
  if self._year >= 2021:
102
116
  # Day of the Establishment of the Independent Czech-Slovak State.
103
117
  self._add_holiday_oct_28(tr("Deň vzniku samostatného česko-slovenského štátu"))
104
118
 
119
+ # Law 261/2025.
120
+ if self._year >= 2025:
121
+ # Struggle for Freedom and Democracy Day.
122
+ self._add_holiday_nov_17(tr("Deň boja za slobodu a demokraciu"))
123
+
105
124
 
106
125
  class SK(Slovakia):
107
126
  pass
@@ -20,15 +20,18 @@ class SouthAfrica(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
20
20
 
21
21
  References:
22
22
  * <https://web.archive.org/web/20250424073852/https://www.gov.za/about-sa/public-holidays>
23
+ * [Act No. 36, 1994](https://web.archive.org/web/20250914045710/https://www.gov.za/sites/default/files/gcis_document/201409/act36of1994.pdf)
24
+ * <https://web.archive.org/web/20250914050022/https://www.ancestors.co.za/origins-of-public-holidays-in-south-africa/>
23
25
  * <https://en.wikipedia.org/wiki/Public_holidays_in_South_Africa>
24
26
  * <https://web.archive.org/web/20240715110800/https://www.gov.za/speeches/president-cyril-ramaphosa-progress-economic-recovery-30-oct-2023-0000>
25
27
  * <https://web.archive.org/web/20250427184315/https://www.gov.za/documents/notices/public-holidays-act-declaration-29-may-2024-public-holiday-23-feb-2024>
26
28
  """
27
29
 
28
30
  country = "ZA"
31
+ # %s (observed).
29
32
  observed_label = "%s (observed)"
30
- # Observed since 1910, with a few name changes
31
- start_year = 1910
33
+ # Public Holidays Act (No. 3 of 1910) came in effect on January 1st, 1911.
34
+ start_year = 1911
32
35
 
33
36
  def __init__(self, *args, **kwargs):
34
37
  ChristianHolidays.__init__(self)
@@ -39,75 +42,113 @@ class SouthAfrica(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
39
42
  super().__init__(*args, **kwargs)
40
43
 
41
44
  def _populate_public_holidays(self):
45
+ # New Year's Day.
42
46
  self._add_observed(self._add_new_years_day("New Year's Day"))
43
47
 
48
+ if 1980 <= self._year <= 1994:
49
+ # Founder's Day.
50
+ self._add_holiday_apr_6("Founder's Day")
51
+ elif 1952 <= self._year <= 1973:
52
+ # Van Riebeeck's Day.
53
+ self._add_holiday_apr_6("Van Riebeeck's Day")
54
+
55
+ # Good Friday.
44
56
  self._add_good_friday("Good Friday")
45
57
 
46
- self._add_easter_monday("Family Day" if self._year >= 1980 else "Easter Monday")
58
+ if self._year <= 1979:
59
+ # Easter Monday.
60
+ self._add_easter_monday("Easter Monday")
47
61
 
48
- if self._year <= 1951:
49
- name = "Dingaan's Day"
50
- elif self._year <= 1979:
51
- name = "Day of the Covenant"
52
- elif self._year <= 1994:
53
- name = "Day of the Vow"
54
- else:
55
- name = "Day of Reconciliation"
56
- self._add_observed(self._add_holiday_dec_16(name))
62
+ # Family Day.
63
+ name = "Family Day"
64
+ if self._year >= 1980:
65
+ self._add_easter_monday(name)
66
+ elif 1961 <= self._year <= 1973:
67
+ self._add_holiday_jul_10(name)
57
68
 
58
- self._add_christmas_day("Christmas Day")
59
-
60
- self._add_observed(
61
- self._add_christmas_day_two("Day of Goodwill" if self._year >= 1980 else "Boxing Day")
62
- )
69
+ # Workers' Day.
70
+ name = "Workers' Day"
71
+ if self._year >= 1995:
72
+ self._add_observed(self._add_labor_day(name))
73
+ elif 1987 <= self._year <= 1989:
74
+ self._add_holiday_1st_fri_of_may(name)
63
75
 
64
76
  if self._year >= 1995:
77
+ # Human Rights Day.
65
78
  self._add_observed(self._add_holiday_mar_21("Human Rights Day"))
66
79
 
80
+ # Freedom Day.
67
81
  self._add_observed(self._add_holiday_apr_27("Freedom Day"))
68
82
 
69
- self._add_observed(self._add_labor_day("Workers' Day"))
70
-
83
+ # Youth Day.
71
84
  self._add_observed(self._add_holiday_jun_16("Youth Day"))
72
85
 
86
+ # National Women's Day.
73
87
  self._add_observed(self._add_holiday_aug_9("National Women's Day"))
74
88
 
89
+ # Heritage Day.
75
90
  self._add_observed(self._add_holiday_sep_24("Heritage Day"))
76
-
77
- # Historic public holidays no longer observed
78
- if 1952 <= self._year <= 1973:
79
- self._add_holiday_apr_6("Van Riebeeck's Day")
80
- elif 1980 <= self._year <= 1994:
81
- self._add_holiday_apr_6("Founder's Day")
82
-
83
- if 1987 <= self._year <= 1989:
84
- self._add_holiday_1st_fri_of_may("Workers' Day")
85
-
86
- if self._year <= 1993:
91
+ elif self._year <= 1993:
92
+ self._add_holiday_may_31(
93
+ # Republic Day.
94
+ "Republic Day"
95
+ if self._year >= 1961
96
+ # Union Day.
97
+ else "Union Day"
98
+ )
99
+
100
+ # Ascension Day.
87
101
  self._add_ascension_thursday("Ascension Day")
88
102
 
89
- if self._year <= 1951:
90
- self._add_holiday_may_24("Empire Day")
103
+ if self._year >= 1952:
104
+ # Kruger Day.
105
+ self._add_holiday_oct_10("Kruger Day")
91
106
 
92
- if self._year <= 1960:
93
- self._add_holiday_may_31("Union Day")
94
- elif self._year <= 1993:
95
- self._add_holiday_may_31("Republic Day")
107
+ if self._year >= 1952:
108
+ if self._year <= 1960:
109
+ # Queen's Birthday.
110
+ self._add_holiday_2nd_mon_of_jul("Queen's Birthday")
96
111
 
97
- if 1952 <= self._year <= 1960:
98
- self._add_holiday_2nd_mon_of_jul("Queen's Birthday")
112
+ if self._year <= 1979:
113
+ # Settlers' Day.
114
+ self._add_holiday_1st_mon_of_sep("Settlers' Day")
115
+ else:
116
+ # According to our sources, Act No. 3 of 1910 supposedly uses the term "Victoria Day"
117
+ # but as we can't find the original document and that Empire Day was supposed
118
+ # instituted empire-wide circa 1904 - we'll stick with its latter name for now.
99
119
 
100
- if 1961 <= self._year <= 1973:
101
- self._add_holiday_jul_10("Family Day")
120
+ # Empire Day.
121
+ self._add_holiday_may_24("Empire Day")
102
122
 
103
- if self._year <= 1951:
123
+ # King's Birthday.
104
124
  self._add_holiday_1st_mon_of_aug("King's Birthday")
105
125
 
106
- if 1952 <= self._year <= 1979:
107
- self._add_holiday_1st_mon_of_sep("Settlers' Day")
126
+ if self._year >= 1995:
127
+ # Day of Reconciliation.
128
+ name = "Day of Reconciliation"
129
+ elif self._year >= 1980:
130
+ # Day of the Vow.
131
+ name = "Day of the Vow"
132
+ elif self._year >= 1952:
133
+ # Day of the Covenant.
134
+ name = "Day of the Covenant"
135
+ else:
136
+ # Dingaan's Day.
137
+ name = "Dingaan's Day"
138
+ self._add_observed(self._add_holiday_dec_16(name))
139
+
140
+ # Christmas Day.
141
+ self._add_christmas_day("Christmas Day")
108
142
 
109
- if 1952 <= self._year <= 1993:
110
- self._add_holiday_oct_10("Kruger Day")
143
+ self._add_observed(
144
+ self._add_christmas_day_two(
145
+ # Day of Goodwill.
146
+ "Day of Goodwill"
147
+ if self._year >= 1980
148
+ # Boxing Day.
149
+ else "Boxing Day"
150
+ )
151
+ )
111
152
 
112
153
 
113
154
  class ZA(SouthAfrica):
@@ -119,11 +160,14 @@ class ZAF(SouthAfrica):
119
160
 
120
161
 
121
162
  class SouthAfricaStaticHolidays:
122
- local_elections = "Local government elections"
123
- municipal_elections = "Municipal elections"
124
- national_and_provincial_elections = "National and provincial government elections"
125
- presidential_decree_holiday = "Public holiday by presidential decree"
126
- y2k_changeover = "Y2K changeover"
163
+ # Local Government Elections.
164
+ local_elections = "Local Government Elections"
165
+ # National and Provincial Government Elections.
166
+ national_and_provincial_elections = "National and Provincial Government Elections"
167
+ # Public Holiday by Presidential Decree.
168
+ presidential_decree_holiday = "Public Holiday by Presidential Decree"
169
+ # Y2K Changeover.
170
+ y2k_changeover = "Y2K Changeover"
127
171
  special_public_holidays = {
128
172
  1999: (
129
173
  (JUN, 2, national_and_provincial_elections),
@@ -144,13 +188,12 @@ class SouthAfricaStaticHolidays:
144
188
  (DEC, 27, presidential_decree_holiday),
145
189
  ),
146
190
  2019: (MAY, 8, national_and_provincial_elections),
147
- 2021: (NOV, 1, municipal_elections),
191
+ # Municipal elections.
192
+ 2021: (NOV, 1, "Municipal elections"),
148
193
  2022: (DEC, 27, presidential_decree_holiday),
149
- # Winning the 2023 Rugby World Cup
150
194
  2023: (DEC, 15, presidential_decree_holiday),
151
195
  2024: (MAY, 29, national_and_provincial_elections),
152
196
  }
153
-
154
197
  special_public_holidays_observed = {
155
198
  # https://web.archive.org/web/20120328122217/http://www.info.gov.za/speeches/1999/991028409p1002.htm
156
199
  2000: (JAN, 3, y2k_changeover),