holidays 0.66__py3-none-any.whl → 0.68__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 (100) hide show
  1. holidays/calendars/chinese.py +1 -1
  2. holidays/countries/__init__.py +2 -0
  3. holidays/countries/australia.py +6 -6
  4. holidays/countries/azerbaijan.py +18 -2
  5. holidays/countries/cambodia.py +1 -1
  6. holidays/countries/chile.py +1 -1
  7. holidays/countries/cuba.py +1 -1
  8. holidays/countries/denmark.py +1 -1
  9. holidays/countries/finland.py +19 -19
  10. holidays/countries/greenland.py +22 -19
  11. holidays/countries/guatemala.py +1 -1
  12. holidays/countries/haiti.py +3 -3
  13. holidays/countries/hongkong.py +124 -174
  14. holidays/countries/isle_of_man.py +15 -11
  15. holidays/countries/kazakhstan.py +1 -1
  16. holidays/countries/kenya.py +201 -45
  17. holidays/countries/laos.py +2 -2
  18. holidays/countries/malaysia.py +21 -3
  19. holidays/countries/nicaragua.py +1 -1
  20. holidays/countries/panama.py +69 -31
  21. holidays/countries/peru.py +1 -1
  22. holidays/countries/saint_lucia.py +88 -0
  23. holidays/countries/seychelles.py +4 -4
  24. holidays/countries/singapore.py +1 -1
  25. holidays/countries/spain.py +9 -9
  26. holidays/countries/sri_lanka.py +1 -1
  27. holidays/countries/switzerland.py +1 -1
  28. holidays/countries/tuvalu.py +174 -0
  29. holidays/countries/united_kingdom.py +72 -56
  30. holidays/countries/united_states.py +141 -10
  31. holidays/countries/uruguay.py +1 -1
  32. holidays/financial/brasil_bolsa_balcao.py +1 -1
  33. holidays/holiday_base.py +62 -13
  34. holidays/locale/da/LC_MESSAGES/GL.mo +0 -0
  35. holidays/locale/en_GB/LC_MESSAGES/GB.mo +0 -0
  36. holidays/locale/en_GB/LC_MESSAGES/IM.mo +0 -0
  37. holidays/locale/en_GB/LC_MESSAGES/TV.mo +0 -0
  38. holidays/locale/en_HK/LC_MESSAGES/HK.mo +0 -0
  39. holidays/locale/en_KE/LC_MESSAGES/KE.mo +0 -0
  40. holidays/locale/en_LC/LC_MESSAGES/LC.mo +0 -0
  41. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  42. holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
  43. holidays/locale/en_US/LC_MESSAGES/CL.mo +0 -0
  44. holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
  45. holidays/locale/en_US/LC_MESSAGES/CU.mo +0 -0
  46. holidays/locale/en_US/LC_MESSAGES/DK.mo +0 -0
  47. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  48. holidays/locale/en_US/LC_MESSAGES/FI.mo +0 -0
  49. holidays/locale/en_US/LC_MESSAGES/GB.mo +0 -0
  50. holidays/locale/en_US/LC_MESSAGES/GL.mo +0 -0
  51. holidays/locale/en_US/LC_MESSAGES/GT.mo +0 -0
  52. holidays/locale/en_US/LC_MESSAGES/HK.mo +0 -0
  53. holidays/locale/en_US/LC_MESSAGES/HT.mo +0 -0
  54. holidays/locale/en_US/LC_MESSAGES/IM.mo +0 -0
  55. holidays/locale/en_US/LC_MESSAGES/KE.mo +0 -0
  56. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  57. holidays/locale/en_US/LC_MESSAGES/KZ.mo +0 -0
  58. holidays/locale/en_US/LC_MESSAGES/LA.mo +0 -0
  59. holidays/locale/en_US/LC_MESSAGES/LC.mo +0 -0
  60. holidays/locale/en_US/LC_MESSAGES/LK.mo +0 -0
  61. holidays/locale/en_US/LC_MESSAGES/MY.mo +0 -0
  62. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  63. holidays/locale/en_US/LC_MESSAGES/PA.mo +0 -0
  64. holidays/locale/en_US/LC_MESSAGES/PE.mo +0 -0
  65. holidays/locale/en_US/LC_MESSAGES/RU.mo +0 -0
  66. holidays/locale/en_US/LC_MESSAGES/SC.mo +0 -0
  67. holidays/locale/en_US/LC_MESSAGES/TV.mo +0 -0
  68. holidays/locale/en_US/LC_MESSAGES/UY.mo +0 -0
  69. holidays/locale/es/LC_MESSAGES/PA.mo +0 -0
  70. holidays/locale/fi/LC_MESSAGES/GL.mo +0 -0
  71. holidays/locale/is/LC_MESSAGES/GL.mo +0 -0
  72. holidays/locale/kl/LC_MESSAGES/GL.mo +0 -0
  73. holidays/locale/ms_MY/LC_MESSAGES/MY.mo +0 -0
  74. holidays/locale/no/LC_MESSAGES/GL.mo +0 -0
  75. holidays/locale/sv/LC_MESSAGES/GL.mo +0 -0
  76. holidays/locale/sw/LC_MESSAGES/KE.mo +0 -0
  77. holidays/locale/th/LC_MESSAGES/GB.mo +0 -0
  78. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  79. holidays/locale/th/LC_MESSAGES/IM.mo +0 -0
  80. holidays/locale/th/LC_MESSAGES/MY.mo +0 -0
  81. holidays/locale/tvl/LC_MESSAGES/TV.mo +0 -0
  82. holidays/locale/uk/LC_MESSAGES/CR.mo +0 -0
  83. holidays/locale/uk/LC_MESSAGES/DK.mo +0 -0
  84. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  85. holidays/locale/uk/LC_MESSAGES/GE.mo +0 -0
  86. holidays/locale/uk/LC_MESSAGES/GL.mo +0 -0
  87. holidays/locale/uk/LC_MESSAGES/MC.mo +0 -0
  88. holidays/locale/uk/LC_MESSAGES/MG.mo +0 -0
  89. holidays/locale/uk/LC_MESSAGES/PA.mo +0 -0
  90. holidays/locale/uk/LC_MESSAGES/RO.mo +0 -0
  91. holidays/locale/zh_CN/LC_MESSAGES/HK.mo +0 -0
  92. holidays/locale/zh_HK/LC_MESSAGES/HK.mo +0 -0
  93. holidays/registry.py +2 -0
  94. holidays/version.py +1 -1
  95. {holidays-0.66.dist-info → holidays-0.68.dist-info}/AUTHORS +1 -0
  96. {holidays-0.66.dist-info → holidays-0.68.dist-info}/METADATA +35 -19
  97. {holidays-0.66.dist-info → holidays-0.68.dist-info}/RECORD +100 -71
  98. {holidays-0.66.dist-info → holidays-0.68.dist-info}/WHEEL +1 -1
  99. {holidays-0.66.dist-info → holidays-0.68.dist-info}/LICENSE +0 -0
  100. {holidays-0.66.dist-info → holidays-0.68.dist-info}/top_level.txt +0 -0
@@ -10,65 +10,134 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- from holidays.calendars.gregorian import FEB, APR, AUG, SEP
14
- from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
15
- from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON, SUN_TO_NEXT_TUE
16
-
17
-
18
- class Kenya(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars import _CustomHinduHolidays, _CustomIslamicHolidays
16
+ from holidays.calendars.gregorian import FEB, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
17
+ from holidays.constants import HINDU, ISLAMIC, PUBLIC
18
+ from holidays.groups import (
19
+ ChristianHolidays,
20
+ HinduCalendarHolidays,
21
+ InternationalHolidays,
22
+ IslamicHolidays,
23
+ StaticHolidays,
24
+ )
25
+ from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_WORKDAY
26
+
27
+
28
+ class Kenya(
29
+ ObservedHolidayBase,
30
+ ChristianHolidays,
31
+ HinduCalendarHolidays,
32
+ InternationalHolidays,
33
+ IslamicHolidays,
34
+ StaticHolidays,
35
+ ):
19
36
  """
20
- https://en.wikipedia.org/wiki/Public_holidays_in_Kenya
21
- http://kenyaembassyberlin.de/Public-Holidays-in-Kenya.48.0.html
22
- https://www.officeholidays.com/holidays/kenya/moi-day
37
+ References:
38
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Kenya
39
+ - `Public Holidays Act Cap. 110 <https://new.kenyalaw.org/akn/ke/act/1912/21/eng@2024-04-26>`_
40
+ - `Constitution of Kenya (Art. 9) <https://new.kenyalaw.org/akn/ke/act/2010/constitution/eng@2010-09-03#chp_Two__sec_9>`_
23
41
  """
24
42
 
25
43
  country = "KE"
26
- observed_label = "%s (observed)"
27
- start_year = 1963
44
+ default_language = "en_KE"
45
+ # %s (estimated).
46
+ estimated_label = tr("%s (estimated)")
47
+ # %s (observed).
48
+ observed_label = tr("%s (observed)")
49
+ # %s (observed, estimated).
50
+ observed_estimated_label = tr("%s (observed, estimated)")
51
+ supported_categories = (HINDU, ISLAMIC, PUBLIC)
52
+ supported_languages = ("en_KE", "en_US", "sw")
53
+ # Kenya gained independence on December 12, 1963.
54
+ start_year = 1964
28
55
 
29
56
  def __init__(self, *args, **kwargs):
30
57
  ChristianHolidays.__init__(self)
58
+ HinduCalendarHolidays.__init__(self, cls=KenyaHinduHolidays)
31
59
  InternationalHolidays.__init__(self)
60
+ IslamicHolidays.__init__(self, cls=KenyaIslamicHolidays)
32
61
  StaticHolidays.__init__(self, cls=KenyaStaticHolidays)
33
- kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
62
+ kwargs.setdefault("observed_rule", SUN_TO_NEXT_WORKDAY)
63
+ kwargs.setdefault("observed_since", 1985)
34
64
  super().__init__(*args, **kwargs)
35
65
 
36
66
  def _populate_public_holidays(self):
37
- # New Year's Day
38
- self._add_observed(self._add_new_years_day("New Year's Day"))
67
+ dts_observed = set()
68
+
69
+ # New Year's Day.
70
+ dts_observed.add(self._add_new_years_day(tr("New Year's Day")))
71
+
72
+ # Good Friday.
73
+ self._add_good_friday(tr("Good Friday"))
74
+
75
+ # Easter Monday.
76
+ self._add_easter_monday(tr("Easter Monday"))
77
+
78
+ # Labor Day.
79
+ dts_observed.add(self._add_labor_day(tr("Labour Day")))
80
+
81
+ if self._year >= 2011:
82
+ # Madaraka Day.
83
+ dts_observed.add(self._add_holiday_jun_1(tr("Madaraka Day")))
84
+
85
+ if 1990 <= self._year <= 2009 or self._year >= 2018:
86
+ if self._year >= 2025:
87
+ # Mazingira Day.
88
+ name = tr("Mazingira Day")
89
+ elif self._year >= 2021:
90
+ # Utamaduni Day.
91
+ name = tr("Utamaduni Day")
92
+ else:
93
+ # Moi Day.
94
+ name = tr("Moi Day")
95
+ dts_observed.add(self._add_holiday_oct_10(name))
96
+
97
+ dts_observed.add(
98
+ self._add_holiday_oct_20(
99
+ # Mashujaa Day.
100
+ tr("Mashujaa Day")
101
+ if self._year >= 2011
102
+ # Kenyatta Day.
103
+ else tr("Kenyatta Day")
104
+ )
105
+ )
39
106
 
40
- # Good Friday
41
- self._add_good_friday("Good Friday")
107
+ dts_observed.add(
108
+ self._add_holiday_dec_12(
109
+ # Jamhuri Day.
110
+ tr("Jamhuri Day")
111
+ if self._year >= 2011
112
+ # Independence Day.
113
+ else tr("Independence Day")
114
+ )
115
+ )
42
116
 
43
- # Easter Monday
44
- self._add_easter_monday("Easter Monday")
117
+ # Christmas Day.
118
+ dts_observed.add(self._add_christmas_day(tr("Christmas Day")))
45
119
 
46
- # Labour Day
47
- self._add_observed(self._add_labor_day("Labour Day"))
120
+ # Boxing Day.
121
+ dts_observed.add(self._add_christmas_day_two(tr("Boxing Day")))
48
122
 
49
- if self._year >= 2010:
50
- # Mandaraka Day
51
- self._add_observed(self._add_holiday_jun_1("Madaraka Day"))
123
+ # Eid-al-Fitr.
124
+ dts_observed.update(self._add_eid_al_fitr_day(tr("Idd-ul-Fitr")))
52
125
 
53
- if 2002 <= self._year <= 2009 or self._year >= 2018:
54
- self._add_observed(
55
- # Utamaduni/Moi Day
56
- self._add_holiday_oct_10("Utamaduni Day" if self._year >= 2021 else "Moi Day")
57
- )
126
+ if self.observed:
127
+ self._populate_observed(dts_observed)
58
128
 
59
- self._add_observed(
60
- # Mashuja/Kenyatta Day
61
- self._add_holiday_oct_20("Mashujaa Day" if self._year >= 2010 else "Kenyatta Day")
62
- )
129
+ def _populate_hindu_holidays(self):
130
+ """Additional Hindu public holidays."""
63
131
 
64
- # Jamhuri Day
65
- self._add_observed(self._add_holiday_dec_12("Jamhuri Day"))
132
+ if self._year >= 1984:
133
+ # Diwali.
134
+ self._add_diwali(tr("Diwali"))
66
135
 
67
- # Christmas Day
68
- self._add_observed(self._add_christmas_day("Christmas Day"), rule=SUN_TO_NEXT_TUE)
136
+ def _populate_islamic_holidays(self):
137
+ """Additional Islamic public holidays."""
69
138
 
70
- # Boxing Day
71
- self._add_observed(self._add_christmas_day_two("Boxing Day"))
139
+ # Eid-al-Adha.
140
+ self._add_eid_al_adha_day(tr("Idd-ul-Azha"))
72
141
 
73
142
 
74
143
  class KE(Kenya):
@@ -79,15 +148,102 @@ class KEN(Kenya):
79
148
  pass
80
149
 
81
150
 
151
+ class KenyaHinduHolidays(_CustomHinduHolidays):
152
+ DIWALI_DATES = {
153
+ 2014: (OCT, 22),
154
+ 2015: (NOV, 10),
155
+ 2016: (OCT, 29),
156
+ 2017: (OCT, 18),
157
+ 2018: (NOV, 6),
158
+ 2019: (OCT, 28),
159
+ 2020: (NOV, 14),
160
+ 2021: (NOV, 4),
161
+ 2022: (OCT, 24),
162
+ 2023: (NOV, 12),
163
+ 2024: (OCT, 31),
164
+ }
165
+
166
+
167
+ class KenyaIslamicHolidays(_CustomIslamicHolidays):
168
+ EID_AL_ADHA_DATES = {
169
+ 2014: (OCT, 6),
170
+ 2015: (SEP, 24),
171
+ 2016: (SEP, 12),
172
+ 2017: (SEP, 1),
173
+ 2018: (AUG, 21),
174
+ 2019: (AUG, 12),
175
+ 2020: (JUL, 31),
176
+ 2021: (JUL, 20),
177
+ 2022: (JUL, 11),
178
+ 2023: (JUN, 28),
179
+ 2024: (JUN, 17),
180
+ }
181
+
182
+ EID_AL_FITR_DATES = {
183
+ 2014: (JUL, 29),
184
+ 2015: (JUL, 18),
185
+ 2016: (JUL, 7),
186
+ 2017: (JUN, 26),
187
+ 2018: (JUN, 15),
188
+ 2019: (JUN, 5),
189
+ 2020: (MAY, 25),
190
+ 2021: (MAY, 14),
191
+ 2022: (MAY, 3),
192
+ 2023: (APR, 21),
193
+ 2024: (APR, 10),
194
+ }
195
+
196
+
82
197
  class KenyaStaticHolidays:
198
+ """
199
+ References:
200
+ - https://new.kenyalaw.org/akn/ke/officialGazette/2015-11-24/129/eng@2015-11-24
201
+ - https://new.kenyalaw.org/akn/ke/officialGazette/2017-08-01/107/eng@2017-08-01
202
+ - https://new.kenyalaw.org/akn/ke/officialGazette/2017-10-19/156/eng@2017-10-19
203
+ - https://new.kenyalaw.org/akn/ke/officialGazette/2017-10-24/159/eng@2017-10-24
204
+ - https://new.kenyalaw.org/akn/ke/officialGazette/2017-11-23/174/eng@2017-11-23
205
+ - https://new.kenyalaw.org/akn/ke/officialGazette/gazette/2022-07-29/147/eng@2022-07-29
206
+ - https://new.kenyalaw.org/akn/ke/officialGazette/gazette/2022-09-08/182/eng@2022-09-08
207
+ - https://new.kenyalaw.org/akn/ke/officialGazette/gazette/2023-11-06/238/eng@2023-11-06
208
+ - https://new.kenyalaw.org/akn/ke/officialGazette/gazette/2024-05-08/61/eng@2024-05-08
209
+ - https://new.kenyalaw.org/akn/ke/officialGazette/2024-10-31/184/eng@2024-10-31
210
+ """
211
+
212
+ # Election Day.
213
+ election_day = tr("Election Day")
214
+
215
+ # Inauguration Day.
216
+ inauguration_day = tr("Inauguration Day")
217
+
218
+ # Day of Mourning for Queen Elizabeth II.
219
+ mourning_for_queen_elizabeth = tr("Day of Mourning for Queen Elizabeth II")
220
+
221
+ # National Tree Growing Day.
222
+ national_tree_growing_day = tr("National Tree Growing Day")
223
+
83
224
  special_public_holidays = {
84
- 2020: (FEB, 11, "President Moi Celebration of Life Day"),
225
+ # Visit of Pope Francis to Kenya.
226
+ 2015: (NOV, 26, tr("Visit of Pope Francis to Kenya")),
227
+ 2017: (
228
+ (AUG, 8, election_day),
229
+ (OCT, 25, election_day),
230
+ (OCT, 26, election_day),
231
+ (NOV, 28, inauguration_day),
232
+ ),
233
+ # President Moi Memorial Day.
234
+ 2020: (FEB, 11, tr("President Moi Memorial Day")),
85
235
  2022: (
86
- (APR, 29, "State Funeral for Former President Mwai Kibaki"),
87
- (AUG, 9, "Election Day"),
88
- (SEP, 10, "Day of Mourning for Queen Elizabeth II"),
89
- (SEP, 11, "Day of Mourning for Queen Elizabeth II"),
90
- (SEP, 12, "Day of Mourning for Queen Elizabeth II"),
91
- (SEP, 13, "Inauguration Day"),
236
+ # State Funeral for Former President Mwai Kibaki.
237
+ (APR, 29, tr("State Funeral for Former President Mwai Kibaki")),
238
+ (AUG, 9, election_day),
239
+ (SEP, 10, mourning_for_queen_elizabeth),
240
+ (SEP, 11, mourning_for_queen_elizabeth),
241
+ (SEP, 12, mourning_for_queen_elizabeth),
242
+ (SEP, 13, inauguration_day),
243
+ ),
244
+ 2023: (NOV, 13, national_tree_growing_day),
245
+ 2024: (
246
+ (MAY, 10, national_tree_growing_day),
247
+ (NOV, 1, inauguration_day),
92
248
  ),
93
249
  }
@@ -156,7 +156,7 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
156
156
  # Became defunct from 2018 onwards. Still accessible in `WORKDAY` category.
157
157
 
158
158
  if 1990 <= self._year <= 2017:
159
- # International Children Day.
159
+ # International Children's Day.
160
160
  self._add_childrens_day(tr("ວັນເດັກສາກົນ"))
161
161
 
162
162
  # ວັນຊາດ
@@ -281,7 +281,7 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
281
281
  # Became defunct from 2018 onwards. Still accessible in `WORKDAY` category.
282
282
 
283
283
  if self._year >= 2018:
284
- # International Children Day.
284
+ # International Children's Day.
285
285
  self._add_childrens_day(tr("ວັນເດັກສາກົນ"))
286
286
 
287
287
  # ວັນປູກຕົ້ນໄມ້ແຫ່ງຊາດ
@@ -139,7 +139,8 @@ class Malaysia(
139
139
  "If any day specified in the Schedule falls on Sunday then the day following shall be
140
140
  a public holiday and if such day is already a public holiday, then the day following
141
141
  shall be a public holiday".
142
- In Johor and Kedah it's Friday to Sunday, in Kelantan and Terengganu - Saturday to Sunday.
142
+ In Johor (until 1994 and in 2014-2024) and Kedah it's Friday to Sunday,
143
+ in Kelantan and Terengganu - Saturday to Sunday.
143
144
  """
144
145
  BuddhistCalendarHolidays.__init__(self, cls=MalaysiaBuddhistHolidays, show_estimated=True)
145
146
  ChineseCalendarHolidays.__init__(self, cls=MalaysiaChineseHolidays, show_estimated=True)
@@ -321,8 +322,14 @@ class Malaysia(
321
322
  else self._add_holiday_2nd_fri_of_oct(name)
322
323
  )
323
324
 
324
- # Beginning of Ramadan.
325
- self.dts_observed.update(self._add_ramadan_beginning_day(tr("Awal Ramadan")))
325
+ if self._year >= 2025:
326
+ self.dts_observed.update(
327
+ # Eid al-Fitr (Third Day).
328
+ self._add_eid_al_fitr_day_three(tr("Hari Raya Puasa (Hari Ketiga)"))
329
+ )
330
+ else:
331
+ # Beginning of Ramadan.
332
+ self.dts_observed.update(self._add_ramadan_beginning_day(tr("Awal Ramadan")))
326
333
 
327
334
  def _populate_subdiv_05_public_holidays(self):
328
335
  # New Year's Day.
@@ -589,6 +596,7 @@ class MalaysiaBuddhistHolidays(_CustomBuddhistHolidays):
589
596
  2022: (MAY, 15),
590
597
  2023: (MAY, 4),
591
598
  2024: (MAY, 22),
599
+ 2025: (MAY, 12),
592
600
  }
593
601
 
594
602
 
@@ -618,6 +626,7 @@ class MalaysiaChineseHolidays(_CustomChineseHolidays):
618
626
  2022: (FEB, 1),
619
627
  2023: (JAN, 22),
620
628
  2024: (FEB, 10),
629
+ 2025: (JAN, 29),
621
630
  }
622
631
 
623
632
 
@@ -647,6 +656,7 @@ class MalaysiaHinduHolidays(_CustomHinduHolidays):
647
656
  2022: (OCT, 24),
648
657
  2023: (NOV, 12),
649
658
  2024: (OCT, 31),
659
+ 2025: (OCT, 20),
650
660
  }
651
661
 
652
662
  THAIPUSAM_DATES = {
@@ -689,6 +699,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
689
699
  2022: (JUL, 10),
690
700
  2023: (JUN, 29),
691
701
  2024: (JUN, 17),
702
+ 2025: (JUN, 7),
692
703
  }
693
704
 
694
705
  EID_AL_FITR_DATES = {
@@ -716,6 +727,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
716
727
  2022: (MAY, 2),
717
728
  2023: (APR, 22),
718
729
  2024: (APR, 10),
730
+ 2025: (MAR, 31),
719
731
  }
720
732
 
721
733
  HARI_HOL_JOHOR_DATES = {
@@ -733,6 +745,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
733
745
  2022: (SEP, 3),
734
746
  2023: (AUG, 23),
735
747
  2024: (AUG, 11),
748
+ 2025: (JUL, 31),
736
749
  }
737
750
 
738
751
  HIJRI_NEW_YEAR_DATES = {
@@ -760,6 +773,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
760
773
  2022: (JUL, 30),
761
774
  2023: (JUL, 19),
762
775
  2024: (JUL, 7),
776
+ 2025: (JUN, 27),
763
777
  }
764
778
 
765
779
  ISRA_AND_MIRAJ_DATES = {
@@ -787,6 +801,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
787
801
  2022: (MAR, 1),
788
802
  2023: (FEB, 18),
789
803
  2024: (FEB, 8),
804
+ 2025: (JAN, 27),
790
805
  }
791
806
 
792
807
  MAWLID_DATES = {
@@ -814,6 +829,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
814
829
  2022: (OCT, 10),
815
830
  2023: (SEP, 28),
816
831
  2024: (SEP, 16),
832
+ 2025: (SEP, 5),
817
833
  }
818
834
 
819
835
  NUZUL_AL_QURAN_DATES = {
@@ -841,6 +857,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
841
857
  2022: (APR, 19),
842
858
  2023: (APR, 8),
843
859
  2024: (MAR, 28),
860
+ 2025: (MAR, 18),
844
861
  }
845
862
 
846
863
  RAMADAN_BEGINNING_DATES = {
@@ -868,6 +885,7 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays):
868
885
  2022: (APR, 3),
869
886
  2023: (MAR, 23),
870
887
  2024: (MAR, 12),
888
+ 2025: (MAR, 2),
871
889
  }
872
890
 
873
891
 
@@ -98,7 +98,7 @@ class Nicaragua(HolidayBase, ChristianHolidays, InternationalHolidays):
98
98
  # Independence Day.
99
99
  self._add_holiday_sep_15(tr("Día de la Independencia"))
100
100
 
101
- # Virgin's Day.
101
+ # Immaculate Conception.
102
102
  self._add_immaculate_conception_day(tr("Concepción de María"))
103
103
 
104
104
  # Christmas Day.
@@ -10,66 +10,94 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- from holidays.groups import ChristianHolidays, InternationalHolidays
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars.gregorian import JUL
16
+ from holidays.constants import BANK, PUBLIC
17
+ from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
14
18
  from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON
15
19
 
16
20
 
17
- class Panama(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
21
+ class Panama(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
18
22
  """
19
23
  References:
20
- - https://en.wikipedia.org/wiki/Public_holidays_in_Panama
21
- - https://publicholidays.com.pa/
24
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Panama
25
+ - `Labor Code 1947 <https://docs.panama.justia.com/federales/leyes/67-de-1947-nov-26-1947.pdf>`_
26
+ - `Cabinet Decree #347 of 1969 <https://docs.panama.justia.com/federales/decretos-de-gabinete/decreto-de-gabinete-347-de-1969-nov-14-1969.pdf>`_
27
+ - `Labor Code 1971 <https://www.mitradel.gob.pa/wp-content/uploads/2016/12/c%C3%B3digo-detrabajo.pdf>`_
28
+ - `Law #4 of Jun 25, 1990 <https://s3-legispan.asamblea.gob.pa/legispan/NORMAS/1990/1990/LEY/Administrador%20Legispan_21570_1990_7_2_ASAMBLEA%20LEGISLATIVA_4.pdf>`_
29
+ - `Law #55 of Nov 7, 2001 <https://docs.panama.justia.com/federales/leyes/55-de-2001-nov-14-2001.pdf>`_
22
30
  """
23
31
 
24
32
  country = "PA"
25
- observed_label = "%s (observed)"
33
+ default_language = "es"
34
+ # %s (observed).
35
+ observed_label = tr("%s (puente)")
36
+ supported_categories = (BANK, PUBLIC)
37
+ supported_languages = ("en_US", "es", "uk")
38
+ start_year = 1948
26
39
 
27
40
  def __init__(self, *args, **kwargs):
28
41
  ChristianHolidays.__init__(self)
29
42
  InternationalHolidays.__init__(self)
43
+ StaticHolidays.__init__(self, PanamaStaticHolidays)
30
44
  kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
45
+ kwargs.setdefault("observed_since", 1972)
31
46
  super().__init__(*args, **kwargs)
32
47
 
33
48
  def _populate_public_holidays(self):
34
- # New Year's Day
35
- self._add_observed(self._add_new_years_day("New Year's Day"))
49
+ # New Year's Day.
50
+ self._add_observed(self._add_new_years_day(tr("Año Nuevo")))
36
51
 
37
- # Martyrs' Day
38
- self._add_observed(self._add_holiday_jan_9("Martyrs' Day"))
52
+ if self._year >= 1972:
53
+ # Martyrs' Day.
54
+ self._add_observed(self._add_holiday_jan_9(tr("Día de los Mártires")))
39
55
 
40
- # Carnival
41
- self._add_carnival_tuesday("Carnival")
56
+ if self._year <= 1971:
57
+ # Constitution Day.
58
+ self._add_holiday_mar_1(tr("Día de la Constitución"))
42
59
 
43
- # Good Friday
44
- self._add_good_friday("Good Friday")
60
+ # Carnival Tuesday.
61
+ self._add_carnival_tuesday(tr("Martes de Carnaval"))
45
62
 
46
- # Labour Day
47
- self._add_observed(self._add_labor_day("Labour Day"))
63
+ # Good Friday.
64
+ self._add_good_friday(tr("Viernes Santo"))
48
65
 
49
- # Separation Day
50
- self._add_holiday_nov_3("Separation Day")
66
+ # Labor Day.
67
+ self._add_observed(self._add_labor_day(tr("Día del Trabajo")))
51
68
 
52
- # National Symbols Day
53
- self._add_holiday_nov_4("National Symbols Day")
69
+ # Separation Day.
70
+ self._add_observed(self._add_holiday_nov_3(tr("Separación de Panamá de Colombia")))
54
71
 
55
- # Colon Day
56
- self._add_holiday_nov_5("Colon Day")
72
+ # Law #55 of Nov 7, 2001.
73
+ if self._year >= 2002:
74
+ # Colon Day.
75
+ self._add_observed(self._add_holiday_nov_5(tr("Día de Colón")))
57
76
 
58
- # Los Santos Uprising Day
59
- self._add_holiday_nov_10("Los Santos Uprising Day")
77
+ # Cabinet Decree #347 of 1969.
78
+ if self._year >= 1969:
79
+ # Los Santos Uprising Day.
80
+ self._add_observed(self._add_holiday_nov_10(tr("Primer Grito de Independencia")))
60
81
 
61
- # Independence Day
62
- self._add_observed(self._add_holiday_nov_28("Independence Day"))
82
+ # Independence Day.
83
+ self._add_observed(self._add_holiday_nov_28(tr("Independencia de Panamá de España")))
63
84
 
64
- # Mother's Day
65
- self._add_observed(self._add_holiday_dec_8("Mother's Day"))
85
+ # Mother's Day.
86
+ self._add_observed(self._add_holiday_dec_8(tr("Día de la Madre")))
66
87
 
67
- # National Mourning Day
68
88
  if self._year >= 2022:
69
- self._add_observed(self._add_holiday_dec_20("National Mourning Day"))
89
+ # National Mourning Day.
90
+ self._add_observed(self._add_holiday_dec_20(tr("Día de Duelo Nacional")))
91
+
92
+ # Christmas Day.
93
+ self._add_observed(self._add_christmas_day(tr("Navidad")))
94
+
95
+ def _populate_bank_holidays(self):
96
+ # Carnival Monday.
97
+ self._add_carnival_monday(tr("Lunes de Carnaval"))
70
98
 
71
- # Christmas Day
72
- self._add_observed(self._add_christmas_day("Christmas Day"))
99
+ # National Symbols Day.
100
+ self._add_holiday_nov_4(tr("Día de los Símbolos Patrios"))
73
101
 
74
102
 
75
103
  class PA(Panama):
@@ -78,3 +106,13 @@ class PA(Panama):
78
106
 
79
107
  class PAN(Panama):
80
108
  pass
109
+
110
+
111
+ class PanamaStaticHolidays:
112
+ # Presidential Inauguration Day.
113
+ presidential_inauguration_day = tr("Toma posesión del Presidente de la república")
114
+ special_public_holidays = {
115
+ 2014: (JUL, 1, presidential_inauguration_day),
116
+ 2019: (JUL, 1, presidential_inauguration_day),
117
+ 2024: (JUL, 1, presidential_inauguration_day),
118
+ }
@@ -50,7 +50,7 @@ class Peru(HolidayBase, ChristianHolidays, InternationalHolidays):
50
50
  # Labor Day.
51
51
  self._add_labor_day(tr("Día del Trabajo"))
52
52
 
53
- # Saint Peter and Saint Paul.
53
+ # Saint Peter and Saint Paul's Day.
54
54
  self._add_saints_peter_and_paul_day(tr("San Pedro y San Pablo"))
55
55
 
56
56
  # Independence Day.
@@ -0,0 +1,88 @@
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/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.groups import ChristianHolidays, InternationalHolidays
16
+ from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON, SUN_TO_NEXT_TUE
17
+
18
+
19
+ class SaintLucia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
20
+ """
21
+ References:
22
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Saint_Lucia
23
+ - https://www.timeanddate.com/holidays/saint-lucia/
24
+ - https://archive.stlucia.gov.lc/saint_lucia/public_holidays.htm
25
+ - https://archive.stlucia.gov.lc/stluciasilver/national_holidays.htm
26
+ - https://web.archive.org/web/20160314100648/http://www.stluciachamber.org/uploadedImages/contentImg/file/List%20of%20Holidays%20for%202015%20(1).pdf
27
+ """
28
+
29
+ country = "LC"
30
+ default_language = "en_LC"
31
+ # %s (observed).
32
+ observed_label = tr("%s (observed)")
33
+ supported_languages = ("en_LC", "en_US")
34
+ start_year = 1979
35
+
36
+ def __init__(self, *args, **kwargs):
37
+ ChristianHolidays.__init__(self)
38
+ InternationalHolidays.__init__(self)
39
+ kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
40
+ super().__init__(*args, **kwargs)
41
+
42
+ def _populate_public_holidays(self):
43
+ # New Year's Day.
44
+ self._add_observed(self._add_new_years_day(tr("New Year's Day")), rule=SUN_TO_NEXT_TUE)
45
+
46
+ # New Year's Holiday.
47
+ self._add_observed(self._add_new_years_day_two(tr("New Year's Holiday")))
48
+
49
+ # Independence Day.
50
+ self._add_observed(self._add_holiday_feb_22(tr("Independence Day")))
51
+
52
+ # Good Friday.
53
+ self._add_good_friday(tr("Good Friday"))
54
+
55
+ # Easter Monday.
56
+ self._add_easter_monday(tr("Easter Monday"))
57
+
58
+ # Labor Day.
59
+ self._add_observed(self._add_labor_day(tr("Labour Day")))
60
+
61
+ # Whit Monday.
62
+ self._add_whit_monday(tr("Whit Monday"))
63
+
64
+ # Corpus Christi.
65
+ self._add_corpus_christi_day(tr("Corpus Christi"))
66
+
67
+ # Emancipation Day.
68
+ self._add_observed(self._add_holiday_aug_1(tr("Emancipation Day")))
69
+
70
+ # Thanksgiving Day.
71
+ self._add_holiday_1st_mon_of_oct(tr("Thanksgiving Day"))
72
+
73
+ # National Day.
74
+ self._add_observed(self._add_holiday_dec_13(tr("National Day")))
75
+
76
+ # Christmas Day.
77
+ self._add_observed(self._add_christmas_day(tr("Christmas Day")), rule=SUN_TO_NEXT_TUE)
78
+
79
+ # Boxing Day.
80
+ self._add_observed(self._add_christmas_day_two(tr("Boxing Day")))
81
+
82
+
83
+ class LC(SaintLucia):
84
+ pass
85
+
86
+
87
+ class LCA(SaintLucia):
88
+ pass