holidays 0.83__py3-none-any.whl → 0.85__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 (112) hide show
  1. holidays/__init__.py +0 -2
  2. holidays/calendars/__init__.py +0 -2
  3. holidays/calendars/balinese_saka.py +2 -3
  4. holidays/calendars/buddhist.py +3 -4
  5. holidays/calendars/burmese.py +9 -10
  6. holidays/calendars/chinese.py +8 -9
  7. holidays/calendars/hebrew.py +10 -11
  8. holidays/calendars/hindu.py +27 -28
  9. holidays/calendars/mandaean.py +2 -3
  10. holidays/calendars/mongolian.py +4 -5
  11. holidays/calendars/persian.py +2 -3
  12. holidays/calendars/sinhala.py +25 -14
  13. holidays/calendars/thai.py +13 -14
  14. holidays/calendars/tibetan.py +12 -13
  15. holidays/constants.py +0 -2
  16. holidays/countries/__init__.py +0 -2
  17. holidays/countries/aland_islands.py +4 -4
  18. holidays/countries/american_samoa.py +4 -4
  19. holidays/countries/angola.py +1 -2
  20. holidays/countries/austria.py +1 -1
  21. holidays/countries/azerbaijan.py +2 -0
  22. holidays/countries/china.py +10 -1
  23. holidays/countries/ecuador.py +12 -4
  24. holidays/countries/french_guiana.py +4 -4
  25. holidays/countries/french_polynesia.py +4 -4
  26. holidays/countries/french_southern_territories.py +4 -4
  27. holidays/countries/guadeloupe.py +4 -4
  28. holidays/countries/guam.py +4 -4
  29. holidays/countries/guernsey.py +1 -2
  30. holidays/countries/italy.py +2 -2
  31. holidays/countries/jersey.py +1 -2
  32. holidays/countries/malta.py +1 -1
  33. holidays/countries/marshall_islands.py +8 -6
  34. holidays/countries/martinique.py +4 -4
  35. holidays/countries/mauritania.py +2 -4
  36. holidays/countries/mayotte.py +4 -4
  37. holidays/countries/new_caledonia.py +4 -4
  38. holidays/countries/northern_mariana_islands.py +4 -4
  39. holidays/countries/portugal.py +6 -3
  40. holidays/countries/puerto_rico.py +4 -4
  41. holidays/countries/reunion.py +4 -4
  42. holidays/countries/saint_barthelemy.py +4 -4
  43. holidays/countries/saint_martin.py +4 -4
  44. holidays/countries/saint_pierre_and_miquelon.py +4 -4
  45. holidays/countries/samoa.py +1 -3
  46. holidays/countries/sint_maarten.py +1 -1
  47. holidays/countries/spain.py +418 -214
  48. holidays/countries/sri_lanka.py +37 -33
  49. holidays/countries/svalbard_and_jan_mayen.py +4 -4
  50. holidays/countries/taiwan.py +2 -2
  51. holidays/countries/thailand.py +4 -1
  52. holidays/countries/turkey.py +7 -4
  53. holidays/countries/united_kingdom.py +1 -2
  54. holidays/countries/united_states.py +5 -2
  55. holidays/countries/united_states_minor_outlying_islands.py +4 -4
  56. holidays/countries/united_states_virgin_islands.py +4 -4
  57. holidays/countries/wallis_and_futuna.py +4 -4
  58. holidays/financial/__init__.py +1 -3
  59. holidays/financial/ice_futures_europe.py +6 -2
  60. holidays/financial/national_stock_exchange_of_india.py +141 -38
  61. holidays/groups/__init__.py +0 -2
  62. holidays/groups/balinese_saka.py +2 -3
  63. holidays/groups/buddhist.py +4 -5
  64. holidays/groups/burmese.py +11 -12
  65. holidays/groups/chinese.py +18 -19
  66. holidays/groups/christian.py +20 -0
  67. holidays/groups/eastern.py +2 -3
  68. holidays/groups/hebrew.py +7 -10
  69. holidays/groups/hindu.py +36 -37
  70. holidays/groups/mandaean.py +13 -14
  71. holidays/groups/mongolian.py +7 -8
  72. holidays/groups/persian.py +14 -15
  73. holidays/groups/sinhala.py +13 -14
  74. holidays/groups/thai.py +12 -13
  75. holidays/groups/tibetan.py +16 -17
  76. holidays/holiday_base.py +34 -33
  77. holidays/ical.py +1 -2
  78. holidays/locale/ca/LC_MESSAGES/ES.mo +0 -0
  79. holidays/locale/en_IN/LC_MESSAGES/XNSE.mo +0 -0
  80. holidays/locale/en_US/LC_MESSAGES/EC.mo +0 -0
  81. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  82. holidays/locale/en_US/LC_MESSAGES/LK.mo +0 -0
  83. holidays/locale/en_US/LC_MESSAGES/TR.mo +0 -0
  84. holidays/locale/en_US/LC_MESSAGES/US.mo +0 -0
  85. holidays/locale/en_US/LC_MESSAGES/XNSE.mo +0 -0
  86. holidays/locale/es/LC_MESSAGES/EC.mo +0 -0
  87. holidays/locale/es/LC_MESSAGES/ES.mo +0 -0
  88. holidays/locale/hi/LC_MESSAGES/XNSE.mo +0 -0
  89. holidays/locale/si_LK/LC_MESSAGES/LK.mo +0 -0
  90. holidays/locale/ta_LK/LC_MESSAGES/LK.mo +0 -0
  91. holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
  92. holidays/locale/th/LC_MESSAGES/ES.mo +0 -0
  93. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  94. holidays/locale/th/LC_MESSAGES/KR.mo +0 -0
  95. holidays/locale/th/LC_MESSAGES/MO.mo +0 -0
  96. holidays/locale/th/LC_MESSAGES/US.mo +0 -0
  97. holidays/locale/tr/LC_MESSAGES/TR.mo +0 -0
  98. holidays/locale/uk/LC_MESSAGES/EC.mo +0 -0
  99. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  100. holidays/locale/uk/LC_MESSAGES/TR.mo +0 -0
  101. holidays/mixins/__init__.py +0 -2
  102. holidays/mixins/child_entity.py +1 -3
  103. holidays/observed_holiday_base.py +12 -13
  104. holidays/registry.py +4 -4
  105. holidays/utils.py +13 -14
  106. holidays/version.py +1 -1
  107. {holidays-0.83.dist-info → holidays-0.85.dist-info}/METADATA +4 -5
  108. {holidays-0.83.dist-info → holidays-0.85.dist-info}/RECORD +112 -111
  109. {holidays-0.83.dist-info → holidays-0.85.dist-info}/licenses/CONTRIBUTORS +2 -0
  110. {holidays-0.83.dist-info → holidays-0.85.dist-info}/WHEEL +0 -0
  111. {holidays-0.83.dist-info → holidays-0.85.dist-info}/licenses/LICENSE +0 -0
  112. {holidays-0.83.dist-info → holidays-0.85.dist-info}/top_level.txt +0 -0
@@ -13,14 +13,14 @@
13
13
  from gettext import gettext as tr
14
14
 
15
15
  from holidays.calendars import _CustomIslamicHolidays
16
- from holidays.calendars.gregorian import MAR, MAY, JUN, AUG, SEP, OCT, NOV
16
+ from holidays.calendars.gregorian import JAN, MAR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
17
17
  from holidays.groups import (
18
18
  ChristianHolidays,
19
19
  IslamicHolidays,
20
20
  InternationalHolidays,
21
21
  StaticHolidays,
22
22
  )
23
- from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON
23
+ from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON, SUN_TO_NONE
24
24
 
25
25
 
26
26
  class Spain(
@@ -29,7 +29,9 @@ class Spain(
29
29
  """Spain holidays.
30
30
 
31
31
  References:
32
- * <https://web.archive.org/web/20250407130530/https://administracion.gob.es/pag_Home/atencionCiudadana/calendarios.html>
32
+ * <https://web.archive.org/web/20230307043804/https://administracion.gob.es/pag_Home/atencionCiudadana/calendarios.html>
33
+ * [2008](https://web.archive.org/web/20251029052726/https://www.boe.es/diario_boe/txt.php?id=BOE-A-2007-18306)
34
+ * [2009](https://web.archive.org/web/20250427104921/https://www.boe.es/buscar/doc.php?id=BOE-A-2008-18411)
33
35
  * [2010](https://web.archive.org/web/20250427181827/https://www.boe.es/buscar/doc.php?id=BOE-A-2009-18477)
34
36
  * [2011](https://web.archive.org/web/20231121065830/https://www.boe.es/buscar/doc.php?id=BOE-A-2010-15722)
35
37
  * [2012](https://web.archive.org/web/20250427181838/https://www.boe.es/buscar/doc.php?id=BOE-A-2011-16116)
@@ -46,9 +48,32 @@ class Spain(
46
48
  * [2023](https://web.archive.org/web/20240811035605/https://www.boe.es/buscar/doc.php?id=BOE-A-2022-16755)
47
49
  * [2024](https://web.archive.org/web/20240401192304/https://www.boe.es/buscar/doc.php?id=BOE-A-2023-22014)
48
50
  * [2025](https://web.archive.org/web/20241226214918/https://www.boe.es/buscar/doc.php?id=BOE-A-2024-21316)
51
+ * [2026](https://web.archive.org/web/20251028115438/https://www.boe.es/diario_boe/txt.php?id=BOE-A-2025-21667)
49
52
 
50
53
  Subdivisions Holidays References:
54
+ * Ceuta:
55
+ * [2018](https://web.archive.org/web/20251029132255/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2018)
56
+ * [2019](https://web.archive.org/web/20210506145356/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2019)
57
+ * [2020](https://web.archive.org/web/20210413221634/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2020)
58
+ * [2021](https://web.archive.org/web/20251029131434/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2021)
59
+ * [2022](https://web.archive.org/web/20250115161923/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2022)
60
+ * [2023](https://web.archive.org/web/20241211133010/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2023)
61
+ * [2024](https://web.archive.org/web/20240419004114/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2024)
62
+ * [2025](https://web.archive.org/web/20250315132943/https://sede.ceuta.es/controlador/controlador?modulo=info&cmd=calendario&year=2025)
63
+ * Melilla:
64
+ * [2017](https://web.archive.org/web/20251029145828/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=23611&nivel=1400&tipo=2)
65
+ * [2018](https://web.archive.org/web/20251029144310/https://www.melilla.es/melillaPortal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=25713&nivel=1400&tipo=2)
66
+ * [2019](https://web.archive.org/web/20251029132642/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=27481&nivel=1400&tipo=2)
67
+ * [2020](https://web.archive.org/web/20251028181240/https://www.melilla.es/melillaPortal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=29323&nivel=1400&tipo=2)
68
+ * [2021](https://web.archive.org/web/20251028181807/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=30529&nivel=1400&tipo=2)
69
+ * [2022](https://web.archive.org/web/20251029030735/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=32051&nivel=1400&tipo=2)
70
+ * [2023](https://web.archive.org/web/20251029030355/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=33685&nivel=1400&tipo=2)
71
+ * [2024](https://web.archive.org/web/20241208104853/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=34997&nivel=1400&tipo=2)
72
+ * [2025](https://web.archive.org/web/20250113015447/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=37491&nivel=1400&tipo=2)
73
+ * [2026](https://web.archive.org/web/20251029045506/https://www.melilla.es/melillaportal/contenedor.jsp?seccion=s_fact_d4_v1.jsp&contenido=41767&nivel=1400&tipo=2)
51
74
  * Navarra:
75
+ * [2008](https://web.archive.org/web/20100407160735/http://www.lexnavarra.navarra.es/detalle.asp?r=29465)
76
+ * [2009](https://web.archive.org/web/20130615075729/http://www.lexnavarra.navarra.es/detalle.asp?r=29761)
52
77
  * [2010](https://web.archive.org/web/20250903095706/https://www.lexnavarra.navarra.es/detalle.asp?r=8402)
53
78
  * [2011](https://web.archive.org/web/20250903095217/https://www.lexnavarra.navarra.es/detalle.asp?r=8403)
54
79
  * [2012](https://web.archive.org/web/20250903095133/https://www.lexnavarra.navarra.es/detalle.asp?r=12993)
@@ -65,8 +90,9 @@ class Spain(
65
90
  * [2023](https://web.archive.org/web/20250623010106/https://www.lexnavarra.navarra.es/detalle.asp?r=55481)
66
91
  * [2024](https://web.archive.org/web/20250623001355/https://www.lexnavarra.navarra.es/detalle.asp?r=56116)
67
92
  * [2025](https://web.archive.org/web/20250622235218/https://www.lexnavarra.navarra.es/detalle.asp?r=57122)
93
+ * [2026](https://web.archive.org/web/20251028120003/https://www.lexnavarra.navarra.es/detalle.asp?r=57937)
68
94
 
69
- Holidays checked with official sources for 2010-2025 only.
95
+ Holidays checked with official sources for 2008-2026 only.
70
96
  """
71
97
 
72
98
  country = "ES"
@@ -77,6 +103,8 @@ class Spain(
77
103
  observed_estimated_label = tr("Lunes siguiente a %s (estimado)")
78
104
  # Monday following %s.
79
105
  observed_label = tr("Lunes siguiente a %s")
106
+ # Earliest available online sources for all of Spain's subdivisions.
107
+ start_year = 2008
80
108
  subdivisions = (
81
109
  "AN", # Andalucía.
82
110
  "AR", # Aragón.
@@ -121,7 +149,7 @@ class Spain(
121
149
  "La Rioja": "RI",
122
150
  "Valenciana": "VC",
123
151
  }
124
- supported_languages = ("ca", "en_US", "es", "uk")
152
+ supported_languages = ("ca", "en_US", "es", "th", "uk")
125
153
 
126
154
  def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
127
155
  """
@@ -140,50 +168,54 @@ class Spain(
140
168
  super().__init__(*args, **kwargs)
141
169
 
142
170
  def _populate_public_holidays(self):
143
- if self._year not in {2012, 2017, 2023}:
144
- # New Year's Day.
145
- self._add_new_years_day(tr("Año Nuevo"))
171
+ # New Year's Day.
172
+ self._add_observed(self._add_new_years_day(tr("Año Nuevo")), rule=SUN_TO_NONE)
146
173
 
147
- if self._year not in {2013, 2019}:
148
- # Epiphany.
149
- self._add_epiphany_day(tr("Epifanía del Señor"))
174
+ # Epiphany.
175
+ self._add_observed(self._add_epiphany_day(tr("Epifanía del Señor")), rule=SUN_TO_NONE)
150
176
 
151
177
  # Good Friday.
152
178
  self._add_good_friday(tr("Viernes Santo"))
153
179
 
154
- if self._year not in {2011, 2016, 2022}:
155
- # Labor Day.
156
- self._add_labor_day(tr("Fiesta del Trabajo"))
180
+ # Labor Day.
181
+ self._add_observed(self._add_labor_day(tr("Fiesta del Trabajo")), rule=SUN_TO_NONE)
157
182
 
158
- if self._year not in {2010, 2021}:
183
+ self._add_observed(
159
184
  # Assumption Day.
160
- self._add_assumption_of_mary_day(tr("Asunción de la Virgen"))
185
+ self._add_assumption_of_mary_day(tr("Asunción de la Virgen")),
186
+ rule=SUN_TO_NONE,
187
+ )
161
188
 
162
- if self._year not in {2014, 2025}:
189
+ self._add_observed(
163
190
  # National Day.
164
- self._add_holiday_oct_12(tr("Fiesta Nacional de España"))
191
+ self._add_holiday_oct_12(tr("Fiesta Nacional de España")),
192
+ rule=SUN_TO_NONE,
193
+ )
165
194
 
166
- if self._year not in {2015, 2020}:
167
- # All Saints' Day.
168
- self._add_all_saints_day(tr("Todos los Santos"))
195
+ # All Saints' Day.
196
+ self._add_observed(self._add_all_saints_day(tr("Todos los Santos")), rule=SUN_TO_NONE)
169
197
 
198
+ self._add_observed(
170
199
  # Constitution Day.
171
- self._add_holiday_dec_6(tr("Día de la Constitución Española"))
200
+ self._add_holiday_dec_6(tr("Día de la Constitución Española")),
201
+ rule=SUN_TO_NONE,
202
+ )
172
203
 
173
- if self._year not in {2013, 2019, 2024}:
204
+ self._add_observed(
174
205
  # Immaculate Conception.
175
- self._add_immaculate_conception_day(tr("Inmaculada Concepción"))
206
+ self._add_immaculate_conception_day(tr("Inmaculada Concepción")),
207
+ rule=SUN_TO_NONE,
208
+ )
176
209
 
177
- if self._year not in {2011, 2016, 2022}:
178
- # Christmas Day.
179
- self._add_christmas_day(tr("Natividad del Señor"))
210
+ # Christmas Day.
211
+ self._add_observed(self._add_christmas_day(tr("Natividad del Señor")), rule=SUN_TO_NONE)
180
212
 
181
213
  def _populate_subdiv_an_public_holidays(self):
182
- if self._year in {2012, 2017, 2023}:
183
- self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
214
+ # New Year's Day.
215
+ self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
184
216
 
185
- if self._year in {2013, 2019}:
186
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
217
+ # Epiphany.
218
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
187
219
 
188
220
  # Andalusia Day.
189
221
  self._move_holiday(self._add_holiday_feb_28(tr("Día de Andalucía")))
@@ -191,161 +223,192 @@ class Spain(
191
223
  # Maundy Thursday.
192
224
  self._add_holy_thursday(tr("Jueves Santo"))
193
225
 
194
- if self._year in {2011, 2016, 2022}:
195
- self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
226
+ # Labor Day.
227
+ self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
196
228
 
197
- if self._year in {2010, 2021}:
198
- self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
229
+ # Assumption Day.
230
+ self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
199
231
 
200
- if self._year in {2014, 2025}:
201
- self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
232
+ # National Day.
233
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
202
234
 
203
- if self._year in {2015, 2020}:
204
- self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
235
+ # All Saints' Day.
236
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
205
237
 
206
- if self._year in {2015, 2020}:
207
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
238
+ # Constitution Day.
239
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
208
240
 
209
- if self._year in {2013, 2019, 2024}:
210
- self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
241
+ # Immaculate Conception.
242
+ self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
211
243
 
212
- if self._year in {2011, 2016, 2022}:
213
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
244
+ # Christmas Day.
245
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
214
246
 
215
247
  def _populate_subdiv_ar_public_holidays(self):
216
- if self._year in {2012, 2017, 2023}:
217
- self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
248
+ # New Year's Day.
249
+ self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
218
250
 
219
- if self._year in {2013, 2019}:
220
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
251
+ # Epiphany.
252
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
221
253
 
254
+ # Maundy Thursday.
222
255
  self._add_holy_thursday(tr("Jueves Santo"))
223
256
 
224
257
  # Saint George's Day.
225
258
  self._move_holiday(self._add_saint_georges_day(tr("Día de San Jorge")))
226
259
 
227
- if self._year in {2011, 2016, 2022}:
228
- self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
260
+ # Labor Day.
261
+ self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
229
262
 
230
- if self._year in {2010, 2021}:
231
- self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
263
+ # Assumption Day.
264
+ self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
232
265
 
233
- if self._year in {2014, 2025}:
234
- self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
266
+ # National Day.
267
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
235
268
 
236
- if self._year in {2015, 2020}:
237
- self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
269
+ # All Saints' Day.
270
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
238
271
 
239
- if self._year in {2015, 2020}:
240
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
272
+ # Constitution Day.
273
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
241
274
 
242
- if self._year in {2013, 2019, 2024}:
243
- self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
275
+ # Immaculate Conception.
276
+ self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
244
277
 
245
- if self._year in {2011, 2016, 2022}:
246
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
278
+ # Christmas Day.
279
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
247
280
 
248
281
  def _populate_subdiv_as_public_holidays(self):
249
- if self._year in {2012, 2017, 2023}:
250
- self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
282
+ # New Year's Day.
283
+ self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
251
284
 
252
- if self._year in {2013, 2019}:
253
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
285
+ # Epiphany.
286
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
254
287
 
288
+ # Maundy Thursday.
255
289
  self._add_holy_thursday(tr("Jueves Santo"))
256
290
 
257
- if self._year in {2011, 2016, 2022}:
258
- self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
291
+ # Labor Day.
292
+ self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
259
293
 
260
- if self._year in {2010, 2021}:
261
- self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
294
+ # Assumption Day.
295
+ self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
262
296
 
263
297
  # Asturias Day.
264
298
  self._move_holiday(self._add_holiday_sep_8(tr("Día de Asturias")))
265
299
 
266
- if self._year in {2014, 2025}:
267
- self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
300
+ # National Day.
301
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
268
302
 
269
- if self._year in {2015, 2020}:
270
- self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
303
+ # All Saints' Day.
304
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
271
305
 
272
- if self._year in {2015, 2020}:
273
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
306
+ # Constitution Day.
307
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
274
308
 
275
- if self._year in {2013, 2019, 2024}:
276
- self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
309
+ # Immaculate Conception.
310
+ self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
277
311
 
278
- if self._year in {2011, 2016, 2022}:
279
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
312
+ # Christmas Day.
313
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
280
314
 
281
315
  def _populate_subdiv_cb_public_holidays(self):
282
316
  if self._year == 2013:
317
+ # Epiphany.
283
318
  self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
284
319
 
285
320
  if self._year != 2018:
321
+ # Maundy Thursday.
286
322
  self._add_holy_thursday(tr("Jueves Santo"))
287
323
 
288
- if self._year in {2013, 2015, 2019, 2020, 2024}:
324
+ # Add when Cantabria Institutions Day is on Sunday.
325
+ if self._is_sunday(JUL, 28) or self._year in {2015, 2020}:
289
326
  # Easter Monday.
290
327
  self._add_easter_monday(tr("Lunes de Pascua"))
291
328
 
292
329
  if self._year == 2011:
330
+ # Labor Day.
293
331
  self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
294
332
 
295
- if self._year in {2012, 2013, 2014, 2019, 2024}:
333
+ # Add when Our Lady of Bien Aparecida is on Sunday.
334
+ if self._is_sunday(SEP, 15) or self._year in {2012, 2014}:
296
335
  # Saint James' Day.
297
336
  self._add_saint_james_day(tr("Santiago Apóstol"))
298
337
 
299
- if self._year not in {2012, 2015, 2019, 2024}:
300
- # Cantabria Institutions Day.
301
- self._add_holiday_jul_28(tr("Día de las Instituciones de Cantabria"))
338
+ if self._year not in {2012, 2015}:
339
+ self._add_observed(
340
+ # Cantabria Institutions Day.
341
+ self._add_holiday_jul_28(tr("Día de las Instituciones de Cantabria")),
342
+ rule=SUN_TO_NONE,
343
+ )
302
344
 
303
- if self._year not in {2013, 2019, 2024}:
304
- # Our Lady of Bien Aparecida.
305
- self._add_holiday_sep_15(tr("La Bien Aparecida"))
345
+ # Our Lady of Bien Aparecida.
346
+ self._add_observed(self._add_holiday_sep_15(tr("La Bien Aparecida")), rule=SUN_TO_NONE)
347
+
348
+ if self._year == 2008:
349
+ # National Day.
350
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
306
351
 
307
352
  if self._year == 2015:
353
+ # All Saints' Day.
308
354
  self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
309
355
 
356
+ if self._year == 2009 or self._year >= 2026:
357
+ # Constitution Day.
358
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
359
+
310
360
  if self._year == 2019:
361
+ # Immaculate Conception.
311
362
  self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
312
363
 
313
- if self._year in {2016, 2022}:
364
+ if self._year >= 2016:
365
+ # Christmas Day.
314
366
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
315
367
 
316
368
  def _populate_subdiv_ce_public_holidays(self):
317
369
  if self._year == 2012:
370
+ # New Year's Day.
318
371
  self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
319
372
 
320
- if self._year in {2013, 2019}:
321
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
373
+ # Epiphany.
374
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
322
375
 
376
+ # Maundy Thursday.
323
377
  self._add_holy_thursday(tr("Jueves Santo"))
324
378
 
325
379
  if self._year == 2011:
380
+ # Labor Day.
326
381
  self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
327
382
 
383
+ # Saint Anthony's Day.
384
+ self._move_holiday(self._add_saint_anthonys_day(tr("San Antonio")))
385
+
328
386
  if self._year >= 2022:
329
387
  # Santa Maria of Africa.
330
388
  self._add_holiday_aug_5(tr("Nuestra Señora de África"))
331
389
 
332
- if self._year not in {2011, 2012, 2015, 2018, 2025}:
390
+ if self._year not in {2011, 2015, 2025}:
333
391
  # Ceuta Day.
334
- self._add_holiday_sep_2(tr("Día de Ceuta"))
392
+ self._add_observed(self._add_holiday_sep_2(tr("Día de Ceuta")), rule=SUN_TO_NONE)
335
393
 
336
- if self._year == 2014:
394
+ if self._year <= 2014:
395
+ # National Day.
337
396
  self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
338
397
 
339
- if self._year == 2015:
398
+ if self._year <= 2015:
399
+ # All Saints' Day.
340
400
  self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
341
401
 
342
- if self._year in {2015, 2020}:
402
+ if self._year <= 2020:
403
+ # Constitution Day.
343
404
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
344
405
 
345
406
  if self._year == 2013:
407
+ # Immaculate Conception.
346
408
  self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
347
409
 
348
- if self._year in {2011, 2016}:
410
+ if self._year <= 2016:
411
+ # Christmas Day.
349
412
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
350
413
 
351
414
  # Eid al-Adha.
@@ -358,122 +421,150 @@ class Spain(
358
421
  self._add_eid_al_adha_day(name)
359
422
 
360
423
  def _populate_subdiv_cl_public_holidays(self):
361
- if self._year in {2017, 2023}:
424
+ if self._year >= 2017:
425
+ # New Year's Day.
362
426
  self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
363
427
 
364
- if self._year in {2013, 2019}:
365
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
428
+ # Epiphany.
429
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
366
430
 
367
- if self._year in {2010, 2012}:
431
+ if self._year in {2009, 2010, 2012}:
432
+ # Saint Joseph's Day.
368
433
  self._add_saint_josephs_day(tr("San José"))
369
434
 
435
+ # Maundy Thursday.
370
436
  self._add_holy_thursday(tr("Jueves Santo"))
371
437
 
372
438
  if self._year != 2023:
373
439
  # Castile and León Day.
374
440
  self._move_holiday(self._add_holiday_apr_23(tr("Fiesta de Castilla y León")))
375
441
 
376
- if self._year in {2016, 2022}:
442
+ if self._year >= 2016:
443
+ # Labor Day.
377
444
  self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
378
445
 
379
446
  if self._year in {2011, 2023}:
447
+ # Saint James' Day.
380
448
  self._add_saint_james_day(tr("Santiago Apóstol"))
381
449
 
382
- if self._year == 2021:
450
+ if self._year >= 2021:
451
+ # Assumption Day.
383
452
  self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
384
453
 
385
- if self._year in {2014, 2025}:
386
- self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
454
+ # National Day.
455
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
387
456
 
388
- if self._year in {2015, 2020}:
389
- self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
457
+ # All Saints' Day.
458
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
390
459
 
391
- if self._year in {2015, 2020}:
460
+ if self._year >= 2015:
461
+ # Constitution Day.
392
462
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
393
463
 
394
- if self._year in {2013, 2019, 2024}:
395
- self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
464
+ # Immaculate Conception.
465
+ self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
396
466
 
397
- if self._year in {2011, 2016, 2022}:
398
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
467
+ # Christmas Day.
468
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
399
469
 
400
470
  def _populate_subdiv_cm_public_holidays(self):
401
- if self._year == 2013:
471
+ if self._year <= 2013:
472
+ # Epiphany.
402
473
  self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
403
474
 
404
- if self._year in {2010, 2011, 2020}:
475
+ if self._year in {2008, 2009, 2010, 2011, 2020}:
405
476
  # Saint Joseph's Day.
406
477
  self._add_saint_josephs_day(tr("San José"))
407
478
 
479
+ # Maundy Thursday.
408
480
  self._add_holy_thursday(tr("Jueves Santo"))
409
481
 
410
- if self._year in {2014, 2015, 2019, 2020}:
482
+ if self._year in {2014, 2015, 2019, 2020, 2026}:
483
+ # Easter Monday.
411
484
  self._add_easter_monday(tr("Lunes de Pascua"))
412
485
 
413
- if self._year not in {2010, 2018}:
486
+ if self._year not in {2009, 2010, 2018}:
414
487
  # Corpus Christi.
415
488
  self._add_corpus_christi_day(tr("Corpus Christi"))
416
489
 
417
- if self._year not in {2015, 2020}:
418
- # Castilla-La Mancha Day.
419
- self._add_holiday_may_31(tr("Día de Castilla-La Mancha"))
490
+ # Castilla-La Mancha Day.
491
+ may_31 = self._add_holiday_may_31(tr("Día de Castilla-La Mancha"))
492
+ if self._year <= 2009:
493
+ self._move_holiday(may_31, show_observed_label=False)
494
+ else:
495
+ self._add_observed(may_31, rule=SUN_TO_NONE)
420
496
 
421
- if self._year == 2015:
497
+ if self._year >= 2026:
498
+ # All Saints' Day.
499
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
500
+
501
+ if self._year <= 2015:
502
+ # Constitution Day.
422
503
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
423
504
 
424
- if self._year in {2016, 2022}:
505
+ if self._year >= 2016:
506
+ # Christmas Day.
425
507
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
426
508
 
427
509
  def _populate_subdiv_cn_public_holidays(self):
428
- if self._year in {2013, 2019}:
429
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
510
+ # Epiphany.
511
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
430
512
 
513
+ # Maundy Thursday.
431
514
  self._add_holy_thursday(tr("Jueves Santo"))
432
515
 
433
516
  if self._year == 2016:
517
+ # Labor Day.
434
518
  self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
435
519
 
436
520
  if self._year != 2021:
437
521
  # Day of the Canary Islands.
438
522
  self._move_holiday(self._add_holiday_may_30(tr("Día de Canarias")))
439
523
 
440
- if self._year == 2021:
524
+ if self._year >= 2021:
525
+ # Assumption Day.
441
526
  self._move_holiday(self._add_assumption_of_mary_day(tr("Asunción de la Virgen")))
442
527
 
443
- if self._year == 2015:
528
+ if self._year == 2015 or self._year >= 2026:
529
+ # All Saints' Day.
444
530
  self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
445
531
 
446
- if self._year == 2020:
532
+ if self._year in {2009, 2020}:
533
+ # Constitution Day.
447
534
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
448
535
 
449
- if self._year in {2011, 2022}:
536
+ if self._year == 2011 or self._year >= 2022:
537
+ # Christmas Day.
450
538
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
451
539
 
452
540
  def _populate_subdiv_ct_public_holidays(self):
541
+ # Easter Monday.
453
542
  self._add_easter_monday(tr("Lunes de Pascua"))
454
543
 
455
- if self._year in {2011, 2016, 2022}:
544
+ # Add when Labor Day or Christmas Day falls on Sunday.
545
+ if self._is_sunday(MAY, 1):
456
546
  # Whit Monday.
457
547
  self._add_whit_monday(tr("Día de la Pascua Granada"))
458
548
 
459
- if self._year not in {2012, 2018}:
460
- # Saint John the Baptist.
461
- self._add_saint_johns_day(tr("San Juan"))
549
+ # Saint John the Baptist.
550
+ self._add_observed(self._add_saint_johns_day(tr("San Juan")), rule=SUN_TO_NONE)
462
551
 
463
- if self._year not in {2011, 2022}:
552
+ self._add_observed(
464
553
  # National Day of Catalonia.
465
- self._add_holiday_sep_11(tr("Fiesta Nacional de Cataluña"))
554
+ self._add_holiday_sep_11(tr("Fiesta Nacional de Cataluña")),
555
+ rule=SUN_TO_NONE,
556
+ )
466
557
 
467
- if self._year not in {2010, 2021}:
468
- # Saint Stephen's Day.
469
- self._add_christmas_day_two(tr("San Esteban"))
558
+ # Saint Stephen's Day.
559
+ self._add_observed(self._add_christmas_day_two(tr("San Esteban")), rule=SUN_TO_NONE)
470
560
 
471
561
  def _populate_subdiv_ex_public_holidays(self):
472
562
  if self._year == 2012:
563
+ # New Year's Day.
473
564
  self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
474
565
 
475
- if self._year in {2013, 2019}:
476
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
566
+ # Epiphany.
567
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
477
568
 
478
569
  if self._year in {2023, 2024}:
479
570
  # Shrove Tuesday.
@@ -483,157 +574,230 @@ class Spain(
483
574
  # Saint Joseph's Day.
484
575
  self._move_holiday(self._add_saint_josephs_day(tr("San José")))
485
576
 
577
+ # Maundy Thursday.
486
578
  self._add_holy_thursday(tr("Jueves Santo"))
487
579
 
488
- if self._year in {2011, 2016, 2022}:
489
- self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
580
+ # Labor Day.
581
+ self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
490
582
 
491
583
  if self._year != 2024:
492
584
  # Extremadura Day.
493
585
  self._move_holiday(self._add_holiday_sep_8(tr("Día de Extremadura")))
494
586
 
495
- if self._year in {2014, 2025}:
496
- self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
587
+ # National Day.
588
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
497
589
 
498
- if self._year in {2015, 2020}:
499
- self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
590
+ # All Saints' Day.
591
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
500
592
 
501
- if self._year in {2015, 2020}:
502
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
593
+ # Constitution Day.
594
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
503
595
 
504
- if self._year in {2013, 2019, 2024}:
505
- self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
596
+ # Immaculate Conception.
597
+ self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
506
598
 
507
- if self._year in {2011, 2016, 2022}:
508
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
599
+ # Christmas Day.
600
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
509
601
 
510
602
  def _populate_subdiv_ga_public_holidays(self):
511
- if self._year in {2010, 2011} or 2019 <= self._year <= 2021:
603
+ if self._year in {2008, 2009, 2010, 2011, 2019, 2020, 2021, 2026}:
604
+ # Saint Joseph's Day.
512
605
  self._move_holiday(self._add_saint_josephs_day(tr("San José")))
513
606
 
607
+ # Maundy Thursday.
514
608
  self._add_holy_thursday(tr("Jueves Santo"))
515
609
 
516
- if self._year not in {2015, 2020}:
610
+ self._add_observed(
517
611
  # Galician Literature Day.
518
- self._add_holiday_may_17(tr("Día de las Letras Gallegas"))
612
+ self._add_holiday_may_17(tr("Día de las Letras Gallegas")),
613
+ rule=SUN_TO_NONE,
614
+ )
519
615
 
520
- if self._year in {2013, 2016, 2020, 2022}:
616
+ if self._year in {2013, 2016, 2020, 2022, 2026}:
617
+ # Saint John the Baptist.
521
618
  self._add_saint_johns_day(tr("San Juan"))
522
619
 
523
- if self._year != 2021:
620
+ self._add_observed(
524
621
  # Galician National Day.
525
- self._add_holiday_jul_25(tr("Día Nacional de Galicia"))
622
+ self._add_holiday_jul_25(tr("Día Nacional de Galicia")),
623
+ rule=SUN_TO_NONE,
624
+ )
526
625
 
527
626
  if self._year == 2015:
627
+ # All Saints' Day.
528
628
  self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
529
629
 
630
+ if self._year == 2009:
631
+ # Constitution Day.
632
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
633
+
530
634
  def _populate_subdiv_ib_public_holidays(self):
531
- if self._year not in {2015, 2020}:
532
- # Day of the Balearic Islands.
533
- self._add_holiday_mar_1(tr("Día de las Islas Baleares"))
635
+ # Day of the Balearic Islands.
636
+ mar_1 = self._add_holiday_mar_1(tr("Día de las Islas Baleares"))
637
+ if self._year >= 2026:
638
+ self._move_holiday(mar_1)
639
+ else:
640
+ self._add_observed(mar_1, rule=SUN_TO_NONE)
534
641
 
642
+ # Maundy Thursday.
535
643
  self._add_holy_thursday(tr("Jueves Santo"))
536
644
 
537
645
  if self._year not in {2014, 2025}:
646
+ # Easter Monday.
538
647
  self._add_easter_monday(tr("Lunes de Pascua"))
539
648
 
649
+ if self._year == 2008:
650
+ # National Day.
651
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
652
+
540
653
  if self._year == 2015:
654
+ # All Saints' Day.
541
655
  self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
542
656
 
543
- if self._year in {2015, 2020}:
657
+ if self._year <= 2020:
658
+ # Constitution Day.
544
659
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
545
660
 
546
- if self._year in {2011, 2016, 2022}:
547
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
661
+ # Christmas Day.
662
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
548
663
 
549
- if self._year in {2013, 2014, 2019, 2020, 2025}:
664
+ if self._year in {2008, 2009, 2013, 2014, 2019, 2020, 2025, 2026}:
665
+ # Saint Stephen's Day.
550
666
  self._add_christmas_day_two(tr("San Esteban"))
551
667
 
552
668
  def _populate_subdiv_mc_public_holidays(self):
553
- if self._year in {2017, 2023}:
669
+ if self._year >= 2017:
670
+ # New Year's Day.
554
671
  self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
555
672
 
556
- if self._year in {2013, 2019}:
673
+ if self._year >= 2013:
674
+ # Epiphany.
557
675
  self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
558
676
 
559
- if (self._year <= 2021 and self._year != 2017) or self._year in {2024, 2025}:
560
- self._move_holiday(self._add_saint_josephs_day(tr("San José")))
677
+ if self._year != 2022:
678
+ # Saint Joseph's Day.
679
+ self._add_observed(self._add_saint_josephs_day(tr("San José")), rule=SUN_TO_NONE)
561
680
 
681
+ # Maundy Thursday.
562
682
  self._add_holy_thursday(tr("Jueves Santo"))
563
683
 
564
- if self._year in {2011, 2022}:
684
+ if self._year == 2011 or self._year >= 2022:
685
+ # Labor Day.
565
686
  self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
566
687
 
567
688
  if self._year not in {2013, 2024}:
568
689
  # Murcia Day.
569
690
  self._move_holiday(self._add_holiday_jun_9(tr("Día de la Región de Murcia")))
570
691
 
571
- if self._year in {2015, 2020}:
572
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
692
+ if self._year == 2008:
693
+ # National Day.
694
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
695
+
696
+ # Constitution Day.
697
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
573
698
 
574
- if self._year in {2013, 2024}:
699
+ if self._year == 2013 or self._year >= 2024:
700
+ # Immaculate Conception.
575
701
  self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
576
702
 
577
- if self._year in {2016, 2022}:
703
+ if self._year >= 2016:
704
+ # Christmas Day.
578
705
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
579
706
 
580
707
  def _populate_subdiv_md_public_holidays(self):
581
- if self._year in {2013, 2019}:
582
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
583
-
584
- if self._year in {2010, 2012, 2015, 2017, 2021, 2023}:
708
+ # Epiphany.
709
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
710
+
711
+ # Add when New Year's Day, Assumption Day, or All Saints' Day (until 2015) falls on Sunday.
712
+ if (
713
+ self._is_sunday(JAN, 1)
714
+ or self._is_sunday(AUG, 15)
715
+ or (self._year <= 2015 and self._is_sunday(NOV, 1))
716
+ ):
717
+ # Saint Joseph's Day.
585
718
  self._move_holiday(self._add_saint_josephs_day(tr("San José")))
586
719
 
720
+ # Maundy Thursday.
587
721
  self._add_holy_thursday(tr("Jueves Santo"))
588
722
 
589
723
  if self._year != 2010:
590
724
  # Madrid Day.
591
725
  self._move_holiday(self._add_holiday_may_2(tr("Fiesta de la Comunidad de Madrid")))
592
726
 
593
- if self._year in {2010, 2011, 2014}:
727
+ if self._year in {2009, 2010, 2011, 2014}:
728
+ # Corpus Christi.
594
729
  self._add_corpus_christi_day(tr("Corpus Christi"))
595
730
 
596
- if self._year in {2011, 2016, 2022, 2024, 2025}:
731
+ # Add when Labor Day falls on Sunday.
732
+ if self._is_sunday(MAY, 1) or self._year in {2008, 2024, 2025}:
733
+ # Saint James' Day.
597
734
  self._add_saint_james_day(tr("Santiago Apóstol"))
598
735
 
599
- if self._year == 2020:
736
+ if self._year >= 2020:
737
+ # All Saints' Day.
600
738
  self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
601
739
 
602
- if self._year == 2020:
740
+ # Constitution Day.
603
741
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
604
742
 
605
743
  if self._year == 2019:
744
+ # Immaculate Conception.
606
745
  self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
607
746
 
608
- if self._year in {2016, 2022}:
747
+ if self._year >= 2016:
748
+ # Christmas Day.
609
749
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
610
750
 
611
751
  def _populate_subdiv_ml_public_holidays(self):
612
752
  if self._year == 2017:
753
+ # New Year's Day.
613
754
  self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
614
755
 
615
- if self._year in {2013, 2019}:
616
- self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
756
+ # Epiphany.
757
+ self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
617
758
 
618
- if self._year in {2020, 2021}:
759
+ if self._year in {2020, 2021, 2023}:
619
760
  # Statute of Autonomy of Melilla Day.
620
761
  self._add_holiday_mar_13(tr("Estatuto de Autonomía de la Ciudad de Melilla"))
621
762
 
622
763
  if self._year <= 2016:
764
+ # Saint Joseph's Day.
623
765
  self._add_saint_josephs_day(tr("San José"))
624
766
 
767
+ # Maundy Thursday.
625
768
  self._add_holy_thursday(tr("Jueves Santo"))
626
769
 
627
- if self._year in {2015, 2020}:
628
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
770
+ if self._year != 2024:
771
+ self._move_holiday(
772
+ self._add_nativity_of_mary_day(
773
+ # Day of Our Lady of Victory.
774
+ tr("Día de Nuestra Señora la Virgen de la Victoria")
775
+ )
776
+ )
777
+
778
+ if self._year != 2023:
779
+ # Melilla Day.
780
+ self._move_holiday(self._add_holiday_sep_17(tr("Día de Melilla")))
781
+
782
+ if self._year == 2008:
783
+ # National Day.
784
+ self._move_holiday(self._add_holiday_oct_12(tr("Fiesta Nacional de España")))
629
785
 
630
- if self._year in {2019, 2024}:
786
+ if self._year == 2009:
787
+ # All Saints' Day.
788
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
789
+
790
+ # Constitution Day.
791
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
792
+
793
+ if self._year >= 2019:
794
+ # Immaculate Conception.
631
795
  self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
632
796
 
633
- if self._year in {2011, 2016, 2022}:
634
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
797
+ # Christmas Day.
798
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
635
799
 
636
- if self._year in {2022, 2023, 2025}:
800
+ if self._year >= 2022:
637
801
  # Eid al-Fitr.
638
802
  self._add_eid_al_fitr_day(tr("Fiesta del Eid Fitr"))
639
803
 
@@ -647,90 +811,130 @@ class Spain(
647
811
  self._add_eid_al_adha_day(name)
648
812
 
649
813
  def _populate_subdiv_nc_public_holidays(self):
650
- if self._year in {2013, 2019}:
814
+ if self._year >= 2013:
815
+ # Epiphany.
651
816
  self._move_holiday(self._add_epiphany_day(tr("Epifanía del Señor")))
652
817
 
653
- if self._year in {2010, 2012, 2014, 2015, 2019, 2020, 2021}:
818
+ if self._year in {2008, 2009, 2010, 2012, 2014, 2015, 2019, 2020, 2021, 2026}:
819
+ # Saint Joseph's Day.
654
820
  self._add_saint_josephs_day(tr("San José"))
655
821
 
822
+ # Maundy Thursday.
656
823
  self._add_holy_thursday(tr("Jueves Santo"))
657
824
 
825
+ # Easter Monday.
658
826
  self._add_easter_monday(tr("Lunes de Pascua"))
659
827
 
660
- if self._year in {2011, 2013, 2015, 2016, 2017} or self._year >= 2022:
828
+ if self._year in {2008, 2009, 2011, 2013, 2015, 2016, 2017, 2022, 2023, 2024, 2025}:
829
+ # Saint James' Day.
661
830
  self._add_saint_james_day(tr("Santiago Apóstol"))
662
831
 
832
+ if self._year >= 2026:
833
+ # All Saints' Day.
834
+ self._move_holiday(self._add_all_saints_day(tr("Todos los Santos")))
835
+
663
836
  # Saint Francis Xavier's Day.
664
837
  self._move_holiday(self._add_holiday_dec_3(tr("San Francisco Javier")))
665
838
 
666
839
  if self._year == 2020:
840
+ # Constitution Day.
667
841
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
668
842
 
669
- if self._year in {2011, 2016, 2022}:
670
- self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
843
+ # Christmas Day.
844
+ self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
671
845
 
672
846
  def _populate_subdiv_pv_public_holidays(self):
673
- if self._year in {2010, 2015, 2019, 2020, 2021}:
847
+ # Add when Epiphany (non-País Vasco Day years), Assumption Day,
848
+ # or All Saints' Day falls on Sunday.
849
+ if (
850
+ ((self._year <= 2010 or self._year >= 2015) and self._is_sunday(JAN, 6))
851
+ or self._is_sunday(AUG, 15)
852
+ or self._is_sunday(NOV, 1)
853
+ ):
854
+ # Saint Joseph's Day.
674
855
  self._add_saint_josephs_day(tr("San José"))
675
856
 
857
+ # Maundy Thursday.
676
858
  self._add_holy_thursday(tr("Jueves Santo"))
677
859
 
860
+ # Easter Monday.
678
861
  self._add_easter_monday(tr("Lunes de Pascua"))
679
862
 
680
- if self._year not in {2010, 2012, 2014, 2018, 2021}:
681
- self._add_saint_james_day(tr("Santiago Apóstol"))
863
+ if self._year not in {2012, 2014, 2018}:
864
+ # Saint James' Day.
865
+ self._add_observed(self._add_saint_james_day(tr("Santiago Apóstol")), rule=SUN_TO_NONE)
682
866
 
683
867
  if 2011 <= self._year <= 2014:
684
868
  # País Vasco Day.
685
869
  self._add_holiday_oct_25(tr("Día del País Vasco"))
686
870
 
687
871
  def _populate_subdiv_ri_public_holidays(self):
688
- if self._year in {2010, 2012}:
872
+ if self._year in {2009, 2010, 2012}:
873
+ # Saint Joseph's Day.
689
874
  self._add_saint_josephs_day(tr("San José"))
690
875
 
876
+ # Maundy Thursday.
691
877
  self._add_holy_thursday(tr("Jueves Santo"))
692
878
 
693
- if self._year not in {2010, 2012, 2018}:
879
+ if self._year not in {2009, 2010, 2012, 2018}:
880
+ # Easter Monday.
694
881
  self._add_easter_monday(tr("Lunes de Pascua"))
695
882
 
696
883
  # La Rioja Day.
697
884
  self._move_holiday(self._add_holiday_jun_9(tr("Día de La Rioja")))
698
885
 
699
- if self._year in {2011, 2016}:
886
+ # Add when Christmas Day (until 2016) falls on Sunday.
887
+ if (self._year <= 2016 and self._is_sunday(DEC, 25)) or self._year == 2008:
888
+ # Saint James' Day.
700
889
  self._add_saint_james_day(tr("Santiago Apóstol"))
701
890
 
702
- if self._year in {2015, 2020}:
703
- self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
891
+ # Constitution Day.
892
+ self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
704
893
 
705
- if self._year in {2013, 2019}:
894
+ if self._year <= 2019:
895
+ # Immaculate Conception.
706
896
  self._move_holiday(self._add_immaculate_conception_day(tr("Inmaculada Concepción")))
707
897
 
708
- if self._year == 2022:
898
+ if self._year >= 2022:
899
+ # Christmas Day.
709
900
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
710
901
 
711
902
  def _populate_subdiv_vc_public_holidays(self):
712
- if (self._year <= 2022 and self._year != 2017) or self._year in {2024, 2025}:
713
- self._add_saint_josephs_day(tr("San José"))
714
-
715
- if self._year in {2011, 2016, 2017, 2022}:
903
+ # Saint Joseph's Day.
904
+ self._add_observed(self._add_saint_josephs_day(tr("San José")), rule=SUN_TO_NONE)
905
+
906
+ # Add when Saint Joseph's Day (until 2017) or Valencian Community Day falls on Sunday.
907
+ if (
908
+ (self._year <= 2017 and self._is_sunday(MAR, 19))
909
+ or self._is_sunday(OCT, 9)
910
+ or self._year in {2008, 2009}
911
+ ):
912
+ # Maundy Thursday.
716
913
  self._add_holy_thursday(tr("Jueves Santo"))
717
914
 
915
+ # Easter Monday.
718
916
  self._add_easter_monday(tr("Lunes de Pascua"))
719
917
 
720
918
  if self._year == 2011:
919
+ # Labor Day.
721
920
  self._move_holiday(self._add_labor_day(tr("Fiesta del Trabajo")))
722
921
 
723
922
  if self._year >= 2019:
923
+ # Saint John the Baptist.
724
924
  self._add_saint_johns_day(tr("San Juan"))
725
925
 
726
- if self._year not in {2011, 2016, 2022}:
926
+ self._add_observed(
727
927
  # Valencian Community Day.
728
- self._add_holiday_oct_9(tr("Día de la Comunidad Valenciana"))
928
+ self._add_holiday_oct_9(tr("Día de la Comunidad Valenciana")),
929
+ rule=SUN_TO_NONE,
930
+ )
729
931
 
730
932
  if self._year == 2015:
933
+ # Constitution Day.
731
934
  self._move_holiday(self._add_holiday_dec_6(tr("Día de la Constitución Española")))
732
935
 
733
936
  if self._year == 2016:
937
+ # Christmas Day.
734
938
  self._move_holiday(self._add_christmas_day(tr("Natividad del Señor")))
735
939
 
736
940
 
@@ -743,7 +947,7 @@ class ESP(Spain):
743
947
 
744
948
 
745
949
  class SpainIslamicHolidays(_CustomIslamicHolidays):
746
- EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2025)
950
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2026)
747
951
  EID_AL_ADHA_DATES = {
748
952
  2010: (NOV, 17),
749
953
  2012: (OCT, 25),
@@ -755,7 +959,7 @@ class SpainIslamicHolidays(_CustomIslamicHolidays):
755
959
  2024: (JUN, 17),
756
960
  }
757
961
 
758
- EID_AL_FITR_DATES_CONFIRMED_YEARS = (2022, 2025)
962
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2022, 2026)
759
963
  EID_AL_FITR_DATES = {
760
964
  2022: (MAY, 3),
761
965
  2025: (MAR, 31),