holidays 0.55__py3-none-any.whl → 0.57__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 (152) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/thai.py +67 -16
  3. holidays/constants.py +1 -0
  4. holidays/countries/__init__.py +2 -0
  5. holidays/countries/australia.py +180 -144
  6. holidays/countries/austria.py +10 -10
  7. holidays/countries/bahrain.py +4 -4
  8. holidays/countries/bosnia_and_herzegovina.py +8 -12
  9. holidays/countries/brunei.py +8 -2
  10. holidays/countries/cambodia.py +23 -6
  11. holidays/countries/canada.py +6 -6
  12. holidays/countries/croatia.py +1 -1
  13. holidays/countries/cyprus.py +1 -1
  14. holidays/countries/djibouti.py +1 -1
  15. holidays/countries/dominica.py +130 -0
  16. holidays/countries/dominican_republic.py +7 -12
  17. holidays/countries/germany.py +30 -12
  18. holidays/countries/haiti.py +134 -0
  19. holidays/countries/hongkong.py +1 -1
  20. holidays/countries/hungary.py +6 -0
  21. holidays/countries/indonesia.py +1 -1
  22. holidays/countries/iran.py +1 -1
  23. holidays/countries/ireland.py +6 -6
  24. holidays/countries/isle_of_man.py +1 -0
  25. holidays/countries/italy.py +113 -5
  26. holidays/countries/jersey.py +20 -17
  27. holidays/countries/jordan.py +1 -1
  28. holidays/countries/kuwait.py +1 -1
  29. holidays/countries/laos.py +27 -65
  30. holidays/countries/liechtenstein.py +1 -1
  31. holidays/countries/luxembourg.py +1 -1
  32. holidays/countries/malaysia.py +16 -38
  33. holidays/countries/malta.py +3 -3
  34. holidays/countries/new_zealand.py +68 -43
  35. holidays/countries/philippines.py +215 -26
  36. holidays/countries/portugal.py +7 -7
  37. holidays/countries/russia.py +382 -3
  38. holidays/countries/slovakia.py +1 -1
  39. holidays/countries/south_korea.py +2 -0
  40. holidays/countries/spain.py +8 -8
  41. holidays/countries/switzerland.py +3 -3
  42. holidays/countries/tanzania.py +1 -1
  43. holidays/countries/thailand.py +2 -2
  44. holidays/countries/timor_leste.py +2 -2
  45. holidays/countries/united_kingdom.py +12 -22
  46. holidays/countries/united_states.py +9 -2
  47. holidays/groups/christian.py +19 -0
  48. holidays/holiday_base.py +0 -3
  49. holidays/locale/ar/LC_MESSAGES/BH.po +4 -4
  50. holidays/locale/ar/LC_MESSAGES/CA.mo +0 -0
  51. holidays/locale/ar/LC_MESSAGES/CA.po +6 -6
  52. holidays/locale/ar/LC_MESSAGES/DJ.po +1 -1
  53. holidays/locale/ar/LC_MESSAGES/JO.po +1 -1
  54. holidays/locale/ar/LC_MESSAGES/KW.po +1 -1
  55. holidays/locale/de/LC_MESSAGES/AT.po +6 -6
  56. holidays/locale/de/LC_MESSAGES/CH.po +3 -3
  57. holidays/locale/de/LC_MESSAGES/LI.po +1 -1
  58. holidays/locale/de/LC_MESSAGES/LU.po +1 -1
  59. holidays/locale/en_AU/LC_MESSAGES/AU.mo +0 -0
  60. holidays/locale/en_AU/LC_MESSAGES/AU.po +177 -0
  61. holidays/locale/en_CA/LC_MESSAGES/CA.po +6 -6
  62. holidays/locale/en_US/LC_MESSAGES/AT.mo +0 -0
  63. holidays/locale/en_US/LC_MESSAGES/AT.po +14 -14
  64. holidays/locale/en_US/LC_MESSAGES/AU.mo +0 -0
  65. holidays/locale/en_US/LC_MESSAGES/AU.po +177 -0
  66. holidays/locale/en_US/LC_MESSAGES/BG.mo +0 -0
  67. holidays/locale/en_US/LC_MESSAGES/BG.po +3 -3
  68. holidays/locale/en_US/LC_MESSAGES/BH.po +4 -4
  69. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  70. holidays/locale/en_US/LC_MESSAGES/BN.po +8 -8
  71. holidays/locale/en_US/LC_MESSAGES/CA.mo +0 -0
  72. holidays/locale/en_US/LC_MESSAGES/CA.po +11 -11
  73. holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
  74. holidays/locale/en_US/LC_MESSAGES/CH.po +9 -8
  75. holidays/locale/en_US/LC_MESSAGES/DJ.mo +0 -0
  76. holidays/locale/en_US/LC_MESSAGES/DJ.po +5 -5
  77. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  78. holidays/locale/en_US/LC_MESSAGES/ES.po +16 -16
  79. holidays/locale/en_US/LC_MESSAGES/HR.mo +0 -0
  80. holidays/locale/en_US/LC_MESSAGES/HR.po +4 -4
  81. holidays/locale/en_US/LC_MESSAGES/HT.mo +0 -0
  82. holidays/locale/en_US/LC_MESSAGES/HT.po +127 -0
  83. holidays/locale/en_US/LC_MESSAGES/ID.mo +0 -0
  84. holidays/locale/en_US/LC_MESSAGES/ID.po +5 -5
  85. holidays/locale/en_US/LC_MESSAGES/IR.mo +0 -0
  86. holidays/locale/en_US/LC_MESSAGES/IR.po +5 -5
  87. holidays/locale/en_US/LC_MESSAGES/JO.mo +0 -0
  88. holidays/locale/en_US/LC_MESSAGES/JO.po +6 -5
  89. holidays/locale/en_US/LC_MESSAGES/KW.mo +0 -0
  90. holidays/locale/en_US/LC_MESSAGES/KW.po +6 -5
  91. holidays/locale/en_US/LC_MESSAGES/LI.mo +0 -0
  92. holidays/locale/en_US/LC_MESSAGES/LI.po +4 -4
  93. holidays/locale/en_US/LC_MESSAGES/LU.mo +0 -0
  94. holidays/locale/en_US/LC_MESSAGES/LU.po +4 -4
  95. holidays/locale/en_US/LC_MESSAGES/MT.mo +0 -0
  96. holidays/locale/en_US/LC_MESSAGES/MT.po +8 -8
  97. holidays/locale/en_US/LC_MESSAGES/PT.mo +0 -0
  98. holidays/locale/en_US/LC_MESSAGES/PT.po +16 -16
  99. holidays/locale/en_US/LC_MESSAGES/SK.mo +0 -0
  100. holidays/locale/en_US/LC_MESSAGES/SK.po +4 -4
  101. holidays/locale/en_US/LC_MESSAGES/TL.mo +0 -0
  102. holidays/locale/en_US/LC_MESSAGES/TL.po +8 -8
  103. holidays/locale/en_US/LC_MESSAGES/TZ.mo +0 -0
  104. holidays/locale/en_US/LC_MESSAGES/TZ.po +6 -6
  105. holidays/locale/es/LC_MESSAGES/ES.po +7 -7
  106. holidays/locale/es/LC_MESSAGES/HT.mo +0 -0
  107. holidays/locale/es/LC_MESSAGES/HT.po +127 -0
  108. holidays/locale/fa/LC_MESSAGES/IR.po +1 -1
  109. holidays/locale/fr/LC_MESSAGES/CA.mo +0 -0
  110. holidays/locale/fr/LC_MESSAGES/CA.po +6 -6
  111. holidays/locale/fr/LC_MESSAGES/CH.po +3 -3
  112. holidays/locale/fr/LC_MESSAGES/DJ.po +1 -1
  113. holidays/locale/fr/LC_MESSAGES/LU.mo +0 -0
  114. holidays/locale/fr/LC_MESSAGES/LU.po +2 -2
  115. holidays/locale/fr_HT/LC_MESSAGES/HT.mo +0 -0
  116. holidays/locale/fr_HT/LC_MESSAGES/HT.po +127 -0
  117. holidays/locale/hr/LC_MESSAGES/HR.po +1 -1
  118. holidays/locale/ht/LC_MESSAGES/HT.mo +0 -0
  119. holidays/locale/ht/LC_MESSAGES/HT.po +127 -0
  120. holidays/locale/id/LC_MESSAGES/ID.po +1 -1
  121. holidays/locale/it/LC_MESSAGES/CH.po +3 -3
  122. holidays/locale/lb/LC_MESSAGES/LU.po +1 -1
  123. holidays/locale/ms/LC_MESSAGES/BN.po +2 -2
  124. holidays/locale/mt/LC_MESSAGES/MT.po +3 -3
  125. holidays/locale/pt_PT/LC_MESSAGES/PT.po +7 -7
  126. holidays/locale/pt_TL/LC_MESSAGES/TL.po +2 -2
  127. holidays/locale/sk/LC_MESSAGES/SK.po +1 -1
  128. holidays/locale/sw/LC_MESSAGES/TZ.po +1 -1
  129. holidays/locale/tet/LC_MESSAGES/TL.po +2 -2
  130. holidays/locale/th/LC_MESSAGES/AU.mo +0 -0
  131. holidays/locale/th/LC_MESSAGES/AU.po +177 -0
  132. holidays/locale/th/LC_MESSAGES/BN.po +2 -2
  133. holidays/locale/th/LC_MESSAGES/CA.mo +0 -0
  134. holidays/locale/th/LC_MESSAGES/CA.po +6 -6
  135. holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
  136. holidays/locale/th/LC_MESSAGES/DE.po +113 -0
  137. holidays/locale/uk/LC_MESSAGES/AT.po +6 -6
  138. holidays/locale/uk/LC_MESSAGES/CH.po +3 -3
  139. holidays/locale/uk/LC_MESSAGES/ES.po +7 -7
  140. holidays/locale/uk/LC_MESSAGES/HR.po +1 -1
  141. holidays/locale/uk/LC_MESSAGES/ID.po +1 -1
  142. holidays/locale/uk/LC_MESSAGES/LI.po +1 -1
  143. holidays/locale/uk/LC_MESSAGES/LU.po +1 -1
  144. holidays/locale/uk/LC_MESSAGES/PT.po +7 -7
  145. holidays/locale/uk/LC_MESSAGES/SK.po +1 -1
  146. holidays/registry.py +2 -0
  147. {holidays-0.55.dist-info → holidays-0.57.dist-info}/AUTHORS +1 -0
  148. {holidays-0.55.dist-info → holidays-0.57.dist-info}/METADATA +21 -11
  149. {holidays-0.55.dist-info → holidays-0.57.dist-info}/RECORD +152 -134
  150. {holidays-0.55.dist-info → holidays-0.57.dist-info}/WHEEL +1 -1
  151. {holidays-0.55.dist-info → holidays-0.57.dist-info}/LICENSE +0 -0
  152. {holidays-0.55.dist-info → holidays-0.57.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,134 @@
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 AUTHORS 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/python-holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.constants import OPTIONAL, PUBLIC
16
+ from holidays.groups import ChristianHolidays, InternationalHolidays
17
+ from holidays.holiday_base import HolidayBase
18
+
19
+
20
+ class Haiti(HolidayBase, ChristianHolidays, InternationalHolidays):
21
+ """
22
+ References:
23
+ - https://www.wipo.int/wipolex/en/legislation/details/7837
24
+ - https://haitiwonderland.com/haiti/histoire/jours-feries-en-haiti/27
25
+ - https://www.haiti-reference.info/pages/plan/generalites/calendrier-dhaiti/
26
+ """
27
+
28
+ country = "HT"
29
+ supported_categories = (OPTIONAL, PUBLIC)
30
+ default_language = "fr_HT"
31
+ supported_languages = ("en_US", "es", "fr_HT", "ht")
32
+
33
+ def __init__(self, *args, **kwargs):
34
+ ChristianHolidays.__init__(self)
35
+ InternationalHolidays.__init__(self)
36
+ super().__init__(*args, **kwargs)
37
+
38
+ def _populate_public_holidays(self):
39
+ # 1987 Constitution.
40
+ if self._year <= 1986:
41
+ return None
42
+
43
+ # ARTICLE 275.1 : National Holidays.
44
+ # Both Battle of Vertieres Day and Armed Forces Day are on Nov 18, declared discretely.
45
+
46
+ # National Independence Day.
47
+ self._add_holiday_jan_1(tr("Fête de l'Indépendance Nationale"))
48
+
49
+ # Ancestry Day.
50
+ self._add_holiday_jan_2(tr("Jour des Aïeux"))
51
+
52
+ # Agriculture and Labor Day.
53
+ self._add_labor_day(tr("Fête de l'Agriculture et du Travail"))
54
+
55
+ # Flag Day and University Day.
56
+ self._add_holiday_may_18(tr("Fête du Drapeau et de l'Université"))
57
+
58
+ # Commemoration of the Battle of Vertieres.
59
+ self._add_holiday_nov_18(tr("Commémoration de la Bataille de Vertières"))
60
+
61
+ # Armed Forces Day.
62
+ self._add_holiday_nov_18(tr("Jour des Forces Armées"))
63
+
64
+ # Other Common Holidays.
65
+
66
+ # New Year's Day.
67
+ self._add_new_years_day(tr("Nouvel An"))
68
+
69
+ # Carnival.
70
+ self._add_carnival_sunday(tr("Carnaval"))
71
+
72
+ # Shrove Monday.
73
+ self._add_carnival_monday(tr("Lundi Gras"))
74
+
75
+ # Fat Tuesday.
76
+ self._add_carnival_tuesday(tr("Mardi Gras"))
77
+
78
+ # Good Friday.
79
+ self._add_good_friday(tr("Vendredi Saint"))
80
+
81
+ # Easter.
82
+ self._add_easter_sunday(tr("Pâques"))
83
+
84
+ # Corpus Christi.
85
+ self._add_corpus_christi_day(tr("Fête-Dieu"))
86
+
87
+ # Assumption of Mary.
88
+ self._add_assumption_of_mary_day(tr("Assomption de Marie"))
89
+
90
+ # Death of Dessalines.
91
+ self._add_holiday_oct_17(tr("Mort de Dessalines"))
92
+
93
+ # All Saints' Day.
94
+ self._add_all_saints_day(tr("La Toussaint"))
95
+
96
+ # Day of the Dead.
97
+ self._add_all_souls_day(tr("Fête des Morts"))
98
+
99
+ # Christmas Day.
100
+ self._add_christmas_day(tr("Noël"))
101
+
102
+ def _populate_optional_holidays(self):
103
+ # 1987 Constitution.
104
+ if self._year <= 1986:
105
+ return None
106
+
107
+ # Ash Wednesday.
108
+ self._add_ash_wednesday(tr("Mercredi des Cendres"))
109
+
110
+ # Maundy Thursday.
111
+ self._add_holy_thursday(tr("Jeudi Saint"))
112
+
113
+ # National Sovereignty Day.
114
+ self._add_holiday_may_23(tr("Fête de la Souveraineté Nationale"))
115
+
116
+ # Feast of Lady of Perpetual Help, Patroness of Haiti.
117
+ self._add_holiday_jun_27(tr("Fête de Notre-Dame du Perpétuel Secours, patronne d'Haiti"))
118
+
119
+ # Ascension.
120
+ self._add_ascension_thursday(tr("Ascension"))
121
+
122
+ # Birth Anniversary of Jean-Jacques Dessalines.
123
+ self._add_holiday_sep_20(tr("Anniversaire de Naissance de Jean-Jacques Dessalines"))
124
+
125
+ # Discovery Day.
126
+ self._add_holiday_dec_5(tr("Jour de la Découverte"))
127
+
128
+
129
+ class HT(Haiti):
130
+ pass
131
+
132
+
133
+ class HTI(Haiti):
134
+ pass
@@ -277,7 +277,7 @@ class HongKong(
277
277
  # Easter Monday.
278
278
  if self._year >= 1968 and dt_qingming == self._easter_sunday:
279
279
  # 復活節星期一翌日.
280
- self._add_holiday_2_days_past_easter("The day following Easter Monday")
280
+ self._add_easter_tuesday("The day following Easter Monday")
281
281
  else:
282
282
  # 復活節星期一.
283
283
  self._add_easter_monday("Easter Monday")
@@ -39,6 +39,7 @@ class Hungary(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
39
39
  - `2021 <https://njt.hu/jogszabaly/2020-14-20-7Q>`_
40
40
  - `2022 <https://njt.hu/jogszabaly/2021-23-20-7Q>`_
41
41
  - `2024 <https://njt.hu/jogszabaly/2023-15-20-8P>`_
42
+ - `2025 <https://njt.hu/jogszabaly/2024-11-20-2X>`_
42
43
  """
43
44
 
44
45
  country = "HU"
@@ -193,4 +194,9 @@ class HungaryStaticHolidays:
193
194
  (DEC, 24, DEC, 7),
194
195
  (DEC, 27, DEC, 14),
195
196
  ),
197
+ 2025: (
198
+ (MAY, 2, MAY, 17),
199
+ (OCT, 24, OCT, 18),
200
+ (DEC, 24, DEC, 13),
201
+ ),
196
202
  }
@@ -161,7 +161,7 @@ class Indonesia(
161
161
  # Prophet's Birthday.
162
162
  self._add_mawlid_day(tr("Maulid Nabi Muhammad"))
163
163
 
164
- # Isra and Miraj.
164
+ # Isra' and Mi'raj.
165
165
  self._add_isra_and_miraj_day(tr("Isra Mikraj Nabi Muhammad"))
166
166
 
167
167
  if 1953 <= self._year <= 1962:
@@ -90,7 +90,7 @@ class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
90
90
  # Birthday of Ali.
91
91
  self._add_ali_birthday_day(tr("زادروز علی بن ابی‌طالب"))
92
92
 
93
- # Ascension of Muhammad.
93
+ # Isra' and Mi'raj.
94
94
  self._add_isra_and_miraj_day(tr("مبعث"))
95
95
 
96
96
  # Birthday of Mahdi.
@@ -38,17 +38,17 @@ class Ireland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
38
38
  if self._year >= 1975:
39
39
  self._add_new_years_day("New Year's Day")
40
40
 
41
- # St. Brigid's Day.
41
+ # Saint Brigid's Day.
42
42
  if self._year >= 2023:
43
- name = "St. Brigid's Day"
43
+ name = "Saint Brigid's Day"
44
44
  if self._is_friday(FEB, 1):
45
45
  self._add_holiday_feb_1(name)
46
46
  else:
47
47
  self._add_holiday_1st_mon_from_feb_1(name)
48
48
 
49
- # St. Patrick's Day.
49
+ # Saint Patrick's Day.
50
50
  if self._year >= 1903:
51
- self._add_holiday_mar_17("St. Patrick's Day")
51
+ self._add_holiday_mar_17("Saint Patrick's Day")
52
52
 
53
53
  # Easter Monday.
54
54
  self._add_easter_monday("Easter Monday")
@@ -78,8 +78,8 @@ class Ireland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
78
78
  # Christmas Day.
79
79
  self._add_christmas_day("Christmas Day")
80
80
 
81
- # St. Stephen's Day.
82
- self._add_christmas_day_two("St. Stephen's Day")
81
+ # Saint Stephen's Day.
82
+ self._add_christmas_day_two("Saint Stephen's Day")
83
83
 
84
84
 
85
85
  class IE(Ireland):
@@ -20,6 +20,7 @@ class IsleOfMan(UnitedKingdom):
20
20
 
21
21
  country = "IM"
22
22
  subdivisions = () # Override UnitedKingdom subdivisions.
23
+ subdivisions_aliases = {} # Override UnitedKingdom subdivisions aliases.
23
24
 
24
25
  def __init__(self, *args, **kwargs): # Override UnitedKingdom __init__().
25
26
  ChristianHolidays.__init__(self)
@@ -141,8 +141,119 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoliday
141
141
  "Trani",
142
142
  "Urbino",
143
143
  )
144
-
145
- _deprecated_subdivisions = ("Forlì",)
144
+ subdivisions_aliases = {
145
+ # Provinces.
146
+ "Agrigento": "AG",
147
+ "Alessandria": "AL",
148
+ "Ancona": "AN",
149
+ "Aosta": "AO",
150
+ "Ascoli Piceno": "AP",
151
+ "L'Aquila": "AQ",
152
+ "Arezzo": "AR",
153
+ "Asti": "AT",
154
+ "Avellino": "AV",
155
+ "Bari": "BA",
156
+ "Bergamo": "BG",
157
+ "Biella": "BI",
158
+ "Belluno": "BL",
159
+ "Benevento": "BN",
160
+ "Bologna": "BO",
161
+ "Brindisi": "BR",
162
+ "Brescia": "BS",
163
+ "Barletta-Andria-Trani": "BT",
164
+ "Bolzano": "BZ",
165
+ "Cagliari": "CA",
166
+ "Campobasso": "CB",
167
+ "Caserta": "CE",
168
+ "Chieti": "CH",
169
+ "Caltanissetta": "CL",
170
+ "Cuneo": "CN",
171
+ "Como": "CO",
172
+ "Cremona": "CR",
173
+ "Cosenza": "CS",
174
+ "Catania": "CT",
175
+ "Catanzaro": "CZ",
176
+ "Enna": "EN",
177
+ "Forli-Cesena": "FC",
178
+ "Forlì-Cesena": "FC",
179
+ "Ferrara": "FE",
180
+ "Foggia": "FG",
181
+ "Firenze": "FI",
182
+ "Fermo": "FM",
183
+ "Frosinone": "FR",
184
+ "Genova": "GE",
185
+ "Gorizia": "GO",
186
+ "Grosseto": "GR",
187
+ "Imperia": "IM",
188
+ "Isernia": "IS",
189
+ "Crotone": "KR",
190
+ "Lecco": "LC",
191
+ "Lecce": "LE",
192
+ "Livorno": "LI",
193
+ "Lodi": "LO",
194
+ "Latina": "LT",
195
+ "Lucca": "LU",
196
+ "Monza e Brianza": "MB",
197
+ "Macerata": "MC",
198
+ "Messina": "ME",
199
+ "Milano": "MI",
200
+ "Mantova": "MN",
201
+ "Modena": "MO",
202
+ "Massa-Carrara": "MS",
203
+ "Matera": "MT",
204
+ "Napoli": "NA",
205
+ "Novara": "NO",
206
+ "Nuoro": "NU",
207
+ "Oristano": "OR",
208
+ "Palermo": "PA",
209
+ "Piacenza": "PC",
210
+ "Padova": "PD",
211
+ "Pescara": "PE",
212
+ "Perugia": "PG",
213
+ "Pisa": "PI",
214
+ "Pordenone": "PN",
215
+ "Prato": "PO",
216
+ "Parma": "PR",
217
+ "Pistoia": "PT",
218
+ "Pesaro e Urbino": "PU",
219
+ "Pavia": "PV",
220
+ "Potenza": "PZ",
221
+ "Ravenna": "RA",
222
+ "Reggio Calabria": "RC",
223
+ "Reggio Emilia": "RE",
224
+ "Ragusa": "RG",
225
+ "Rieti": "RI",
226
+ "Roma": "RM",
227
+ "Rimini": "RN",
228
+ "Rovigo": "RO",
229
+ "Salerno": "SA",
230
+ "Siena": "SI",
231
+ "Sondrio": "SO",
232
+ "La Spezia": "SP",
233
+ "Siracusa": "SR",
234
+ "Sassari": "SS",
235
+ "Sud Sardegna": "SU",
236
+ "Savona": "SV",
237
+ "Taranto": "TA",
238
+ "Teramo": "TE",
239
+ "Trento": "TN",
240
+ "Torino": "TO",
241
+ "Trapani": "TP",
242
+ "Terni": "TR",
243
+ "Trieste": "TS",
244
+ "Treviso": "TV",
245
+ "Udine": "UD",
246
+ "Varese": "VA",
247
+ "Verbano-Cusio-Ossola": "VB",
248
+ "Vercelli": "VC",
249
+ "Venezia": "VE",
250
+ "Vicenza": "VI",
251
+ "Verona": "VR",
252
+ "Viterbo": "VT",
253
+ "Vibo Valentia": "VV",
254
+ # Cities.
255
+ "Forlì": "Forli",
256
+ }
146
257
 
147
258
  def __init__(self, *args, **kwargs):
148
259
  ChristianHolidays.__init__(self)
@@ -208,9 +319,6 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoliday
208
319
  # Saint Stephen's Day.
209
320
  self._add_christmas_day_two("Santo Stefano")
210
321
 
211
- if self.subdiv == "Forlì":
212
- self._populate_subdiv_forli_public_holidays()
213
-
214
322
  def _populate_subdiv_ag_public_holidays(self):
215
323
  self._add_holiday_feb_25("San Gerlando")
216
324
 
@@ -32,7 +32,7 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
32
32
  - https://www.jerseylaw.je/laws/superseded/Pages/2006/15.560.20.aspx # 1952 Revision
33
33
  - https://www.jerseylaw.je/laws/enacted/Pages/RO-3038.aspx # 1952 as enacted
34
34
  - https://www.jerseylaw.je/laws/enacted/Pages/Jersey%20RO%205331.aspx # Bank Holidays
35
- - https://www.jerseylaw.je/laws/enacted/Pages/Jersey%20RO%206795.aspx # May Day
35
+ - https://www.jerseylaw.je/laws/enacted/Pages/Jersey%20RO%206795.aspx # May Bank Holiday
36
36
  Checked with:
37
37
  - https://www.gov.je/Leisure/Events/WhatsOn/pages/bankholidaydates.aspx # From 2010 onwards
38
38
 
@@ -47,7 +47,7 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
47
47
  """
48
48
 
49
49
  country = "JE"
50
- observed_label = "%s (observed)"
50
+ observed_label = "%s (substitute day)"
51
51
 
52
52
  def __init__(self, *args, **kwargs):
53
53
  ChristianHolidays.__init__(self)
@@ -82,13 +82,14 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
82
82
  # Easter Monday
83
83
  self._add_easter_monday("Easter Monday")
84
84
 
85
- # May Day
85
+ # Early May Bank Holiday
86
86
  # This only starts in 1980 (instead of 1978) for Jersey.
87
87
  # The date is not moved in 2020 (unlike in the UK) as there's already VE Day Celebrations.
88
+ # In 2024 this was called "May Bank Holiday" instead.
88
89
 
89
- # May Day bank holiday (first Monday in May)
90
+ # Early May bank holiday (first Monday in May)
90
91
  if self._year >= 1980:
91
- name = "May Day"
92
+ name = "May Bank Holiday" if self._year == 2024 else "Early May Bank Holiday"
92
93
  if self._year == 1995:
93
94
  self._add_holiday_may_8(name)
94
95
  else:
@@ -117,11 +118,11 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
117
118
  # Whit Monday.
118
119
  self._add_whit_monday("Whit Monday")
119
120
 
120
- # Late Summer Bank Holiday
121
+ # Summer Bank Holiday
121
122
  # Current Pattern started in 1970. Was previously first Monday of September for Jersey.
122
123
 
123
- # Late Summer bank holiday (last Monday in August)
124
- summer_bank_holiday = "Late Summer Bank Holiday"
124
+ # Summer bank holiday (last Monday in August)
125
+ summer_bank_holiday = "Summer Bank Holiday"
125
126
  if self._year >= 1970:
126
127
  self._add_holiday_last_mon_of_aug(summer_bank_holiday)
127
128
  else:
@@ -175,6 +176,7 @@ class JerseyStaticHolidays:
175
176
  - https://www.jerseylaw.je/laws/enacted/Pages/RO-050-2021.aspx
176
177
  - https://www.jerseylaw.je/laws/enacted/Pages/RO-108-2009.aspx
177
178
  - https://www.jerseylaw.je/laws/enacted/Pages/RO-3038.aspx
179
+ - https://www.jerseylaw.je/laws/enacted/Pages/RO-036-2024.aspx
178
180
  """
179
181
 
180
182
  # Mostly a direct copy of UnitedKingdomStaticHolidays.
@@ -195,29 +197,30 @@ class JerseyStaticHolidays:
195
197
  # Boxing Day
196
198
  boxing_day_in_lieu = "Boxing Day"
197
199
 
198
- # Elizabeth II's Royal Visit.
199
- elizabeth_2_royal_visit = "Elizabeth II's Royal Visit"
200
+ # The visit of Her Majesty Queen Elizabeth II.
201
+ elizabeth_2_royal_visit = "The visit of Her Majesty Queen Elizabeth II"
200
202
 
201
203
  special_public_holidays = {
202
204
  1957: (JUL, 26, elizabeth_2_royal_visit),
203
- 1977: (JUN, 7, "Silver Jubilee of Elizabeth II"),
205
+ 1977: (JUN, 7, "Queen's Silver Jubilee"),
204
206
  1978: (JUN, 27, elizabeth_2_royal_visit),
205
207
  1981: (JUL, 29, "Wedding of Charles and Diana"),
206
208
  1989: (MAY, 25, elizabeth_2_royal_visit),
207
209
  1999: (DEC, 31, "Millennium Celebrations"),
208
210
  2001: (JUL, 13, elizabeth_2_royal_visit),
209
- 2002: (JUN, 3, "Golden Jubilee of Elizabeth II"),
211
+ 2002: (JUN, 3, "Queen's Golden Jubilee"),
210
212
  # Specially held in 2010 on Sunday for the 65th Anniversary.
211
213
  2010: (MAY, 9, "Liberation Day"),
212
214
  2011: (APR, 29, "Wedding of William and Catherine"),
213
- 2012: (JUN, 5, "Diamond Jubilee of Elizabeth II"),
215
+ 2012: (JUN, 5, "Queen's Diamond Jubilee"),
214
216
  2020: (MAY, 8, "75th Anniversary of VE Day"),
215
- 2021: (SEP, 27, "250th Anniversary of the 1769 Corn Riots"),
217
+ 2021: (SEP, 27, "Corn Riots Anniversary"),
216
218
  2022: (
217
- (JUN, 3, "Platinum Jubilee of Elizabeth II"),
218
- (SEP, 19, "State Funeral of Queen Elizabeth II"),
219
+ (JUN, 3, "Queen's Platinum Jubilee"),
220
+ (SEP, 19, "Funeral of Her Majesty Queen Elizabeth II"),
219
221
  ),
220
- 2023: (MAY, 8, "Coronation of Charles III"),
222
+ 2023: (MAY, 8, "Coronation of His Majesty King Charles III"),
223
+ 2024: (JUL, 15, "The visit of His Majesty King Charles III and Queen Camilla"),
221
224
  }
222
225
  special_public_holidays_observed = {
223
226
  1976: (DEC, 28, boxing_day_in_lieu),
@@ -59,7 +59,7 @@ class Jordan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolid
59
59
  # Prophet's Birthday.
60
60
  self._add_mawlid_day(tr("عيد المولد النبوي"))
61
61
 
62
- # Isra and Miraj.
62
+ # Isra' and Mi'raj.
63
63
  self._add_isra_and_miraj_day(tr("ليلة المعراج"))
64
64
 
65
65
  # Eid al-Fitr.
@@ -56,7 +56,7 @@ class Kuwait(HolidayBase, InternationalHolidays, IslamicHolidays):
56
56
  # Prophet's Birthday.
57
57
  self._add_mawlid_day(tr("عيد المولد النبوي"))
58
58
 
59
- # Isra and Miraj.
59
+ # Isra' and Mi'raj.
60
60
  self._add_isra_and_miraj_day(tr("ليلة المعراج"))
61
61
 
62
62
  # Eid al-Fitr.
@@ -12,18 +12,11 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUL, OCT, DEC
15
+ from holidays.calendars.gregorian import JAN, APR, JUL
16
16
  from holidays.calendars.thai import KHMER_CALENDAR
17
17
  from holidays.constants import BANK, PUBLIC, SCHOOL, WORKDAY
18
18
  from holidays.groups import InternationalHolidays, ThaiCalendarHolidays, StaticHolidays
19
- from holidays.observed_holiday_base import (
20
- ObservedHolidayBase,
21
- THU_FRI_TO_NEXT_MON,
22
- FRI_TO_NEXT_TUE,
23
- SAT_TO_NEXT_TUE,
24
- SAT_SUN_TO_NEXT_MON,
25
- SAT_SUN_TO_NEXT_WED,
26
- )
19
+ from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY
27
20
 
28
21
 
29
22
  class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarHolidays):
@@ -40,7 +33,8 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
40
33
  https://asean.org/wp-content/uploads/2022/12/ASEAN-Public-Holidays-2023.pdf
41
34
  https://www.timeanddate.com/holidays/laos/
42
35
  https://www.bcel.com.la/bcel/bcel-calendar.html?y=2022
43
- https://www.bcel.com.la/bcel/bcel-calendar.html?year=2023
36
+ https://www.bcel.com.la/bcel/bcel-calendar.html?y=2023
37
+ https://www.bcel.com.la/bcel/bcel-calendar.html?y=2024
44
38
  http://www.lsx.com.la/cal/getStockCalendar.do?lang=lo (from 2011 onwards)
45
39
 
46
40
  !!! If Public Holiday falls on weekends, (in lieu) on workday !!!
@@ -51,12 +45,14 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
51
45
  - Saturdays and Sundays shall be restdays each week.
52
46
  - In-Lieu holidays shall be given if it fall on the weekends.
53
47
 
48
+ Although in-lieus has been de facto observed since at least 2012.
49
+
54
50
  Limitations:
55
51
 
56
52
  - Laotian holidays only works from 1976 onwards, and are only 100% accurate from 2018 onwards.
57
53
 
58
- - Laotian Lunar Calendar Holidays only work from 1941 (B.E. 2485) onwards until 2057
59
- (B.E. 2601) as we only have Thai year-type data for cross-checking until then.
54
+ - Laotian Lunar Calendar Holidays only work from 1941 (B.E. 2485) onwards until 2157
55
+ (B.E. 2701) as we only have Thai year-type data for cross-checking until then.
60
56
 
61
57
 
62
58
  Country created by: `PPsyrius <https://github.com/PPsyrius>`__
@@ -75,8 +71,8 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
75
71
  InternationalHolidays.__init__(self)
76
72
  ThaiCalendarHolidays.__init__(self, KHMER_CALENDAR)
77
73
  StaticHolidays.__init__(self, cls=LaosStaticHolidays)
78
- kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
79
- kwargs.setdefault("observed_since", 2018)
74
+ kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
75
+ kwargs.setdefault("observed_since", 2012)
80
76
  super().__init__(*args, **kwargs)
81
77
 
82
78
  def _populate_bank_holidays(self):
@@ -126,27 +122,31 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
126
122
  # ວັນແມ່ຍິງສາກົນ
127
123
  # Status: In-Use.
128
124
  # Only acts as day off for Women.
125
+ # No in-lieus are observed in 2014.
129
126
 
130
127
  # International Women's Rights Day.
131
- self._add_observed(self._add_womens_day(tr("ວັນແມ່ຍິງສາກົນ")))
128
+ womens_day = self._add_womens_day(tr("ວັນແມ່ຍິງສາກົນ"))
129
+ if self._year != 2014:
130
+ self._add_observed(womens_day)
132
131
 
133
132
  # ບຸນປີໃໝ່ລາວ
134
133
  # Status: In-Use.
135
134
  # Celebrated for 3 days from 14-16 April annualy.
136
135
  # Observed dates prior to 2018 are assigned manually.
137
- # - CASE 1: THU-FRI-SAT -> in lieu on MON.
138
- # - CASE 2: FRI-SAT-SUN -> in lieu on MON-TUE.
139
- # - CASE 3: SAT-SUN-MON -> in lieu on TUE-WED.
140
- # - CASE 4: SUN-MON-TUE -> in lieu on WED.
141
136
 
142
137
  # Lao New Year's Day.
143
138
  name = tr("ບຸນປີໃໝ່ລາວ")
144
- dt = self._add_holiday_apr_14(name)
145
- self._add_holiday_apr_15(name)
146
- self._add_holiday_apr_16(name)
147
-
148
- self._add_observed(dt, rule=THU_FRI_TO_NEXT_MON + SAT_TO_NEXT_TUE)
149
- self._add_observed(dt, rule=FRI_TO_NEXT_TUE + SAT_SUN_TO_NEXT_WED)
139
+ songkran_years_apr_13_15 = {2012, 2017}
140
+ songkran_years_apr_13_16 = {2016, 2020, 2024}
141
+ dts_observed = set()
142
+ if self._year in songkran_years_apr_13_15.union(songkran_years_apr_13_16):
143
+ dts_observed.add(self._add_holiday_apr_13(name))
144
+ dts_observed.add(self._add_holiday_apr_14(name))
145
+ dts_observed.add(self._add_holiday_apr_15(name))
146
+ if self._year not in songkran_years_apr_13_15:
147
+ dts_observed.add(self._add_holiday_apr_16(name))
148
+ for dt in dts_observed:
149
+ self._add_observed(dt)
150
150
 
151
151
  # ວັນກຳມະກອນສາກົນ
152
152
  # Status: In-Use.
@@ -177,7 +177,7 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
177
177
  # Unofficial, but observed by schools and most business holidays;
178
178
  # As such, no in lieu observance are in place for these holidays.
179
179
 
180
- # Laotian Lunar Calendar Holidays only work from 1941 to 2057.
180
+ # Laotian Lunar Calendar Holidays only work from 1941 to 2157.
181
181
  if self._year <= 1975:
182
182
  return None
183
183
 
@@ -377,9 +377,6 @@ class LaosStaticHolidays:
377
377
  # Special Bank Holiday.
378
378
  special_bank_day_off = tr("ມື້ປິດການໃຫ້ບໍລິການຂອງທະນາຄານຕົວແທນ")
379
379
 
380
- # New Year's Day.
381
- new_year_day = tr("ວັນປີໃໝ່ສາກົນ")
382
-
383
380
  # International Women's Rights Day.
384
381
  international_womens_rights_day = tr("ວັນແມ່ຍິງສາກົນ")
385
382
 
@@ -389,55 +386,20 @@ class LaosStaticHolidays:
389
386
  # Lao New Year's Day (Special).
390
387
  lao_new_year_special = tr("ພັກບຸນປີໃໝ່ລາວ")
391
388
 
392
- # International Labor Day.
393
- international_labor_day = tr("ວັນກຳມະກອນສາກົນ")
394
-
395
389
  # Establishment Day of the Lao Women's Union.
396
390
  lao_womens_union = tr("ວັນສ້າງຕັ້ງສະຫະພັນແມ່ຍິງລາວ")
397
391
 
398
- # Establishment Day of the BOL.
399
- establishment_day_of_bol = tr("ວັນສ້າງຕັ້ງທະນາຄານແຫ່ງ ສປປ ລາວ")
400
-
401
- # Lao National Day.
402
- lao_national_day = tr("ວັນຊາດ")
403
-
404
392
  special_bank_holidays = {
405
393
  2015: (JAN, 2, special_bank_day_off),
406
394
  }
407
395
 
408
- special_bank_holidays_observed = {
409
- 2017: (OCT, 9, establishment_day_of_bol),
410
- }
411
-
412
396
  special_public_holidays = {
413
397
  2015: (APR, 17, lao_new_year_special),
414
- 2016: (
415
- (APR, 13, lao_new_year_special),
416
- (APR, 18, lao_new_year_special),
417
- ),
418
- 2020: (
419
- (APR, 13, lao_new_year_special),
420
- (APR, 17, lao_new_year_special),
421
- ),
422
398
  }
423
399
 
424
400
  special_public_holidays_observed = {
425
401
  2011: (APR, 13, lao_new_year),
426
- 2012: (
427
- (JAN, 2, new_year_day),
428
- (APR, 13, lao_new_year),
429
- (APR, 17, lao_new_year),
430
- (DEC, 3, lao_national_day),
431
- ),
432
- 2013: (APR, 17, lao_new_year),
433
- 2015: (MAR, 9, international_womens_rights_day),
434
- 2016: (MAY, 2, international_labor_day),
435
- 2017: (
436
- (JAN, 2, new_year_day),
437
- (APR, 13, lao_new_year),
438
- (APR, 17, lao_new_year),
439
- (DEC, 4, lao_national_day),
440
- ),
402
+ 2020: (APR, 17, lao_new_year),
441
403
  }
442
404
 
443
405
  special_workday_holidays_observed = {
@@ -84,7 +84,7 @@ class Liechtenstein(HolidayBase, ChristianHolidays, InternationalHolidays):
84
84
  # Christmas Day.
85
85
  self._add_christmas_day(tr("Weihnachten"))
86
86
 
87
- # St. Stephen's Day.
87
+ # Saint Stephen's Day.
88
88
  self._add_christmas_day_two(tr("Stephanstag"))
89
89
 
90
90
  def _populate_bank_holidays(self):
@@ -62,7 +62,7 @@ class Luxembourg(HolidayBase, ChristianHolidays, InternationalHolidays):
62
62
  # Christmas Day.
63
63
  self._add_christmas_day(tr("Chrëschtdag"))
64
64
 
65
- # St. Stephen's Day.
65
+ # Saint Stephen's Day.
66
66
  self._add_christmas_day_two(tr("Stiefesdag"))
67
67
 
68
68