holidays 0.78__py3-none-any.whl → 0.80__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 (161) hide show
  1. holidays/calendars/__init__.py +1 -0
  2. holidays/calendars/chinese.py +14 -4
  3. holidays/calendars/ethiopian.py +31 -0
  4. holidays/calendars/hindu.py +1 -0
  5. holidays/calendars/islamic.py +16 -4
  6. holidays/calendars/julian.py +14 -0
  7. holidays/calendars/mandaean.py +59 -0
  8. holidays/calendars/tibetan.py +1466 -0
  9. holidays/constants.py +2 -1
  10. holidays/countries/__init__.py +20 -0
  11. holidays/countries/afghanistan.py +6 -39
  12. holidays/countries/albania.py +3 -22
  13. holidays/countries/argentina.py +7 -18
  14. holidays/countries/australia.py +191 -295
  15. holidays/countries/azerbaijan.py +6 -39
  16. holidays/countries/bahrain.py +29 -38
  17. holidays/countries/bhutan.py +194 -0
  18. holidays/countries/bosnia_and_herzegovina.py +7 -28
  19. holidays/countries/brunei.py +7 -117
  20. holidays/countries/burkina_faso.py +9 -15
  21. holidays/countries/burundi.py +95 -40
  22. holidays/countries/cameroon.py +8 -34
  23. holidays/countries/canada.py +9 -1
  24. holidays/countries/central_african_republic.py +3 -16
  25. holidays/countries/chad.py +9 -17
  26. holidays/countries/chile.py +20 -4
  27. holidays/countries/christmas_island.py +10 -15
  28. holidays/countries/cocos_islands.py +5 -24
  29. holidays/countries/comoros.py +121 -0
  30. holidays/countries/egypt.py +5 -37
  31. holidays/countries/eritrea.py +104 -0
  32. holidays/countries/ethiopia.py +18 -47
  33. holidays/countries/fiji.py +1 -2
  34. holidays/countries/gabon.py +5 -23
  35. holidays/countries/gambia.py +168 -0
  36. holidays/countries/georgia.py +9 -7
  37. holidays/countries/guinea.py +5 -27
  38. holidays/countries/guinea_bissau.py +96 -0
  39. holidays/countries/guyana.py +2 -17
  40. holidays/countries/india.py +12 -25
  41. holidays/countries/indonesia.py +6 -158
  42. holidays/countries/iran.py +16 -126
  43. holidays/countries/iraq.py +276 -0
  44. holidays/countries/kazakhstan.py +2 -18
  45. holidays/countries/kenya.py +2 -8
  46. holidays/countries/kiribati.py +124 -0
  47. holidays/countries/kyrgyzstan.py +2 -0
  48. holidays/countries/lebanon.py +5 -87
  49. holidays/countries/liberia.py +80 -0
  50. holidays/countries/libya.py +5 -37
  51. holidays/countries/macau.py +65 -63
  52. holidays/countries/malaysia.py +9 -130
  53. holidays/countries/maldives.py +2 -0
  54. holidays/countries/mali.py +4 -9
  55. holidays/countries/mauritania.py +2 -0
  56. holidays/countries/mauritius.py +1 -2
  57. holidays/countries/montenegro.py +3 -18
  58. holidays/countries/nepal.py +42 -44
  59. holidays/countries/niger.py +14 -74
  60. holidays/countries/nigeria.py +198 -27
  61. holidays/countries/north_macedonia.py +3 -39
  62. holidays/countries/oman.py +6 -28
  63. holidays/countries/pakistan.py +5 -30
  64. holidays/countries/palestine.py +2 -5
  65. holidays/countries/philippines.py +3 -33
  66. holidays/countries/qatar.py +3 -45
  67. holidays/countries/rwanda.py +162 -0
  68. holidays/countries/saudi_arabia.py +3 -0
  69. holidays/countries/senegal.py +6 -16
  70. holidays/countries/sierra_leone.py +5 -21
  71. holidays/countries/singapore.py +7 -59
  72. holidays/countries/somalia.py +79 -0
  73. holidays/countries/south_georgia_and_the_south_sandwich_islands.py +160 -0
  74. holidays/countries/south_sudan.py +133 -0
  75. holidays/countries/spain.py +7 -10
  76. holidays/countries/sri_lanka.py +3 -14
  77. holidays/countries/suriname.py +11 -19
  78. holidays/countries/syrian_arab_republic.py +134 -0
  79. holidays/countries/tajikistan.py +116 -0
  80. holidays/countries/tanzania.py +291 -153
  81. holidays/countries/timor_leste.py +2 -17
  82. holidays/countries/togo.py +4 -29
  83. holidays/countries/trinidad_and_tobago.py +2 -9
  84. holidays/countries/turkey.py +2 -116
  85. holidays/countries/turkmenistan.py +164 -0
  86. holidays/countries/uganda.py +101 -0
  87. holidays/countries/united_arab_emirates.py +5 -29
  88. holidays/countries/uzbekistan.py +3 -31
  89. holidays/countries/yemen.py +8 -52
  90. holidays/financial/__init__.py +5 -0
  91. holidays/financial/national_stock_exchange_of_india.py +169 -0
  92. holidays/groups/__init__.py +2 -0
  93. holidays/groups/christian.py +48 -12
  94. holidays/groups/eastern.py +1 -1
  95. holidays/groups/international.py +17 -1
  96. holidays/groups/islamic.py +1 -1
  97. holidays/groups/mandaean.py +107 -0
  98. holidays/groups/tibetan.py +153 -0
  99. holidays/holiday_base.py +14 -0
  100. holidays/locale/ar/LC_MESSAGES/BH.mo +0 -0
  101. holidays/locale/ar/LC_MESSAGES/IQ.mo +0 -0
  102. holidays/locale/ar/LC_MESSAGES/SY.mo +0 -0
  103. holidays/locale/bs/LC_MESSAGES/BA.mo +0 -0
  104. holidays/locale/en_GM/LC_MESSAGES/GM.mo +0 -0
  105. holidays/locale/en_GS/LC_MESSAGES/GS.mo +0 -0
  106. holidays/locale/en_IN/LC_MESSAGES/XNSE.mo +0 -0
  107. holidays/locale/en_MO/LC_MESSAGES/MO.mo +0 -0
  108. holidays/locale/en_NG/LC_MESSAGES/NG.mo +0 -0
  109. holidays/locale/en_SG/LC_MESSAGES/SG.mo +0 -0
  110. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  111. holidays/locale/en_US/LC_MESSAGES/BA.mo +0 -0
  112. holidays/locale/en_US/LC_MESSAGES/BH.mo +0 -0
  113. holidays/locale/en_US/LC_MESSAGES/BI.mo +0 -0
  114. holidays/locale/en_US/LC_MESSAGES/CL.mo +0 -0
  115. holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
  116. holidays/locale/en_US/LC_MESSAGES/GE.mo +0 -0
  117. holidays/locale/en_US/LC_MESSAGES/GM.mo +0 -0
  118. holidays/locale/en_US/LC_MESSAGES/GS.mo +0 -0
  119. holidays/locale/en_US/LC_MESSAGES/GW.mo +0 -0
  120. holidays/locale/en_US/LC_MESSAGES/IQ.mo +0 -0
  121. holidays/locale/en_US/LC_MESSAGES/MO.mo +0 -0
  122. holidays/locale/en_US/LC_MESSAGES/NG.mo +0 -0
  123. holidays/locale/en_US/LC_MESSAGES/RW.mo +0 -0
  124. holidays/locale/en_US/LC_MESSAGES/SG.mo +0 -0
  125. holidays/locale/en_US/LC_MESSAGES/SY.mo +0 -0
  126. holidays/locale/en_US/LC_MESSAGES/TJ.mo +0 -0
  127. holidays/locale/en_US/LC_MESSAGES/TM.mo +0 -0
  128. holidays/locale/en_US/LC_MESSAGES/TZ.mo +0 -0
  129. holidays/locale/en_US/LC_MESSAGES/XNSE.mo +0 -0
  130. holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
  131. holidays/locale/es/LC_MESSAGES/ES.mo +0 -0
  132. holidays/locale/fr/LC_MESSAGES/RW.mo +0 -0
  133. holidays/locale/fr_BI/LC_MESSAGES/BI.mo +0 -0
  134. holidays/locale/hi/LC_MESSAGES/XNSE.mo +0 -0
  135. holidays/locale/ka/LC_MESSAGES/GE.mo +0 -0
  136. holidays/locale/pt_GW/LC_MESSAGES/GW.mo +0 -0
  137. holidays/locale/pt_MO/LC_MESSAGES/MO.mo +0 -0
  138. holidays/locale/ru/LC_MESSAGES/TJ.mo +0 -0
  139. holidays/locale/ru/LC_MESSAGES/TM.mo +0 -0
  140. holidays/locale/rw/LC_MESSAGES/RW.mo +0 -0
  141. holidays/locale/sr/LC_MESSAGES/BA.mo +0 -0
  142. holidays/locale/sw/LC_MESSAGES/TZ.mo +0 -0
  143. holidays/locale/tg/LC_MESSAGES/TJ.mo +0 -0
  144. holidays/locale/th/LC_MESSAGES/MO.mo +0 -0
  145. holidays/locale/th/LC_MESSAGES/SG.mo +0 -0
  146. holidays/locale/tk/LC_MESSAGES/TM.mo +0 -0
  147. holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
  148. holidays/locale/uk/LC_MESSAGES/BA.mo +0 -0
  149. holidays/locale/uk/LC_MESSAGES/CL.mo +0 -0
  150. holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
  151. holidays/locale/uk/LC_MESSAGES/GE.mo +0 -0
  152. holidays/locale/zh_CN/LC_MESSAGES/MO.mo +0 -0
  153. holidays/locale/zh_MO/LC_MESSAGES/MO.mo +0 -0
  154. holidays/registry.py +46 -14
  155. holidays/version.py +1 -1
  156. {holidays-0.78.dist-info → holidays-0.80.dist-info}/METADATA +127 -9
  157. {holidays-0.78.dist-info → holidays-0.80.dist-info}/RECORD +161 -113
  158. {holidays-0.78.dist-info → holidays-0.80.dist-info}/licenses/CONTRIBUTORS +2 -0
  159. {holidays-0.78.dist-info → holidays-0.80.dist-info}/WHEEL +0 -0
  160. {holidays-0.78.dist-info → holidays-0.80.dist-info}/licenses/LICENSE +0 -0
  161. {holidays-0.78.dist-info → holidays-0.80.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,7 @@
13
13
  from gettext import gettext as tr
14
14
 
15
15
  from holidays.calendars import _CustomIslamicHolidays
16
- from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
16
+ from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
17
17
  from holidays.groups import (
18
18
  ChristianHolidays,
19
19
  InternationalHolidays,
@@ -167,47 +167,34 @@ class CocosIslands(
167
167
 
168
168
 
169
169
  class CocosIslandsIslamicHolidays(_CustomIslamicHolidays):
170
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025))
170
171
  EID_AL_ADHA_DATES = {
171
- 2007: (DEC, 20),
172
- 2008: (DEC, 8),
173
172
  2009: (NOV, 30),
174
- 2010: (NOV, 16),
175
173
  2013: (OCT, 15),
176
174
  2014: (OCT, 4),
177
175
  2016: (SEP, 13),
178
176
  2017: (SEP, 1),
179
- 2019: (AUG, 11),
180
- 2020: (JUL, 31),
181
- 2021: (JUL, 20),
182
- 2022: (JUL, 9),
183
- 2023: (JUN, 28),
184
177
  2024: (JUN, 17),
185
178
  2025: (JUN, 7),
186
179
  }
187
180
 
181
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025))
188
182
  EID_AL_FITR_DATES = {
189
183
  2007: (OCT, 15),
190
- 2008: (OCT, 1),
191
184
  2009: (SEP, 21),
192
- 2010: (SEP, 10),
193
185
  2013: (AUG, 8),
194
186
  2014: (JUL, 28),
195
187
  2016: (JUL, 6),
196
188
  2017: (JUN, 24),
197
189
  2019: (JUN, 5),
198
- 2020: (MAY, 24),
199
- 2021: (MAY, 13),
200
190
  2022: (MAY, 3),
201
- 2023: (APR, 21),
202
- 2024: (APR, 10),
203
191
  2025: (MAR, 31),
204
192
  }
205
193
 
194
+ HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2007, 2010)
206
195
  HIJRI_NEW_YEAR_DATES = {
207
196
  2007: (JAN, 22),
208
197
  2008: (JAN, 10),
209
- 2009: (DEC, 18),
210
- 2010: (DEC, 7),
211
198
  2013: (NOV, 4),
212
199
  2014: (OCT, 25),
213
200
  2016: (OCT, 3),
@@ -215,20 +202,14 @@ class CocosIslandsIslamicHolidays(_CustomIslamicHolidays):
215
202
  2019: (SEP, 1),
216
203
  }
217
204
 
205
+ MAWLID_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025))
218
206
  MAWLID_DATES = {
219
207
  2007: (APR, 2),
220
- 2008: (MAR, 20),
221
- 2009: (MAR, 9),
222
- 2010: (FEB, 26),
223
208
  2013: (JAN, 24),
224
209
  2014: (JAN, 13),
225
210
  2016: (DEC, 12),
226
211
  2017: (DEC, 1),
227
- 2019: (NOV, 9),
228
- 2020: (OCT, 29),
229
212
  2021: (OCT, 19),
230
- 2022: (OCT, 8),
231
- 2023: (SEP, 27),
232
213
  2024: (SEP, 16),
233
214
  2025: (SEP, 5),
234
215
  }
@@ -0,0 +1,121 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from holidays.calendars import _CustomIslamicHolidays
14
+ from holidays.calendars.gregorian import JAN, APR, OCT
15
+ from holidays.groups import (
16
+ ChristianHolidays,
17
+ IslamicHolidays,
18
+ InternationalHolidays,
19
+ StaticHolidays,
20
+ )
21
+ from holidays.holiday_base import HolidayBase
22
+
23
+
24
+ class Comoros(
25
+ HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays, StaticHolidays
26
+ ):
27
+ """Comoros holidays.
28
+
29
+ References:
30
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_the_Comoros>
31
+ * [Prophet's Birthday 2021](https://web.archive.org/web/20250712053206/https://scontent-del1-2.xx.fbcdn.net/v/t39.30808-6/471586197_1113861707132176_3696210890184034016_n.jpg?_nc_cat=100&ccb=1-7&_nc_sid=833d8c&_nc_ohc=3hfvuVNGVbMQ7kNvwHvrgbW&_nc_oc=AdnuDzvtcvdBJMoN-qSW7Pnx2fnzj2TFgwMSRklpM_Na-5AaB9y8D0U5BINcxL-vVL0&_nc_zt=23&_nc_ht=scontent-del1-2.xx&_nc_gid=HWC_59SRsyDfwGxku5bqXw&oh=00_AfSk0LCPS7PARPjdX5-vfM_lr7WxZnrkA9jRyrdUFhoyMQ&oe=68736290)
32
+ """
33
+
34
+ country = "KM"
35
+ # %s (estimated).
36
+ estimated_label = "%s (estimated)"
37
+ # Independence from France on July 6, 1975.
38
+ start_year = 1976
39
+
40
+ def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
41
+ """
42
+ Args:
43
+ islamic_show_estimated:
44
+ Whether to add "estimated" label to Islamic holidays name
45
+ if holiday date is estimated.
46
+ """
47
+ ChristianHolidays.__init__(self)
48
+ InternationalHolidays.__init__(self)
49
+ IslamicHolidays.__init__(
50
+ self, cls=ComorosIslamicHolidays, show_estimated=islamic_show_estimated
51
+ )
52
+ StaticHolidays.__init__(self, ComorosStaticHolidays)
53
+ super().__init__(*args, **kwargs)
54
+
55
+ def _populate_public_holidays(self):
56
+ # New Year's Day.
57
+ self._add_new_years_day("New Year's Day")
58
+
59
+ # Cheikh al Maarouf Day.
60
+ self._add_holiday_mar_18("Cheikh al Maarouf Day")
61
+
62
+ # Labor Day.
63
+ self._add_labor_day("Labour Day")
64
+
65
+ # National Day.
66
+ self._add_holiday_jul_6("National Day")
67
+
68
+ if self._year >= 2006:
69
+ # Maore Day.
70
+ self._add_holiday_nov_12("Maore Day")
71
+
72
+ # Christmas Day.
73
+ self._add_christmas_day("Christmas Day")
74
+
75
+ # Islamic New Year.
76
+ self._add_islamic_new_year_day("Islamic New Year")
77
+
78
+ # Prophet's Birthday.
79
+ self._add_mawlid_day("Prophet's Birthday")
80
+
81
+ # Isra' and Mi'raj.
82
+ self._add_isra_and_miraj_day("Isra' and Mi'raj")
83
+
84
+ # Eid al-Fitr.
85
+ name = "Eid al-Fitr"
86
+ self._add_eid_al_fitr_day(name)
87
+ self._add_eid_al_fitr_day_two(name)
88
+ self._add_eid_al_fitr_day_three(name)
89
+
90
+ # Eid al-Adha.
91
+ name = "Eid al-Adha"
92
+ self._add_eid_al_adha_day(name)
93
+ self._add_eid_al_adha_day_two(name)
94
+
95
+
96
+ class KM(Comoros):
97
+ pass
98
+
99
+
100
+ class COM(Comoros):
101
+ pass
102
+
103
+
104
+ class ComorosIslamicHolidays(_CustomIslamicHolidays):
105
+ MAWLID_DATES = {
106
+ 2021: (OCT, 19),
107
+ }
108
+
109
+
110
+ class ComorosStaticHolidays:
111
+ """Comoros special holidays.
112
+
113
+ References:
114
+ * [Décret N°24-056PR](https://web.archive.org/web/20250717033820/https://munganyo.km/decrees/225)
115
+ * [Décret N°25-008PR](https://web.archive.org/web/20250715223159/https://munganyo.km/decrees/374)
116
+ """
117
+
118
+ special_public_holidays = {
119
+ 2024: (APR, 13, "National Holiday"),
120
+ 2025: (JAN, 30, "Election Partial Day Holiday"),
121
+ }
@@ -13,23 +13,7 @@
13
13
  from gettext import gettext as tr
14
14
 
15
15
  from holidays.calendars import _CustomIslamicHolidays
16
- from holidays.calendars.gregorian import (
17
- JAN,
18
- MAR,
19
- APR,
20
- MAY,
21
- JUN,
22
- JUL,
23
- AUG,
24
- SEP,
25
- OCT,
26
- MON,
27
- TUE,
28
- WED,
29
- FRI,
30
- SAT,
31
- SUN,
32
- )
16
+ from holidays.calendars.gregorian import JAN, APR, MAY, JUL, AUG, SEP, MON, TUE, WED, FRI, SAT, SUN
33
17
  from holidays.calendars.julian import JULIAN_CALENDAR
34
18
  from holidays.constants import GOVERNMENT, PUBLIC, SCHOOL
35
19
  from holidays.groups import (
@@ -183,40 +167,24 @@ class EGY(Egypt):
183
167
 
184
168
 
185
169
  class EgyptIslamicHolidays(_CustomIslamicHolidays):
170
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2025)
186
171
  EID_AL_ADHA_DATES = {
187
- 2020: (JUL, 31),
188
- 2021: (JUL, 20),
189
172
  2022: (JUL, 10),
190
- 2023: (JUN, 28),
191
- 2024: (JUN, 16),
192
- 2025: (JUN, 6),
193
173
  }
194
174
 
175
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025)
195
176
  EID_AL_FITR_DATES = {
196
- 2020: (MAY, 24),
197
- 2021: (MAY, 13),
198
177
  2022: (MAY, 1),
199
- 2023: (APR, 21),
200
- 2024: (APR, 10),
201
- 2025: (MAR, 30),
202
178
  }
203
179
 
180
+ HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2020, 2025)
204
181
  HIJRI_NEW_YEAR_DATES = {
205
- 2020: (AUG, 20),
206
182
  2021: (AUG, 11),
207
- 2022: (JUL, 30),
208
- 2023: (JUL, 19),
209
- 2024: (JUL, 7),
210
- 2025: (JUN, 26),
211
183
  }
212
184
 
185
+ MAWLID_DATES_CONFIRMED_YEARS = (2020, 2025)
213
186
  MAWLID_DATES = {
214
- 2020: (OCT, 29),
215
- 2021: (OCT, 18),
216
- 2022: (OCT, 8),
217
187
  2023: (SEP, 28),
218
- 2024: (SEP, 15),
219
- 2025: (SEP, 4),
220
188
  }
221
189
 
222
190
 
@@ -0,0 +1,104 @@
1
+ # holidays
2
+ # --------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8
+ # dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
9
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
10
+ # Website: https://github.com/vacanza/holidays
11
+ # License: MIT (see LICENSE file)
12
+
13
+ from holidays.calendars.ethiopian import ETHIOPIAN_CALENDAR
14
+ from holidays.constants import GOVERNMENT, PUBLIC
15
+ from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
16
+ from holidays.holiday_base import HolidayBase
17
+
18
+
19
+ class Eritrea(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
20
+ """Eritrea holidays.
21
+
22
+ References:
23
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Eritrea>
24
+ * <https://web.archive.org/web/20230313234629/https://explore-eritrea.com/working-hours-and-holidays/>
25
+ * <https://web.archive.org/web/20110903130335/http://www.eritrea.be/old/eritrea-religions.htm>
26
+ * <https://web.archive.org/web/20250820085307/https://www.mintageworld.com/media/detail/11411-fenkil-day-in-eritrea/>
27
+ """
28
+
29
+ country = "ER"
30
+ # %s (estimated).
31
+ estimated_label = "%s (estimated)"
32
+ # On 28 May 1993, Eritrea was admitted into the United Nations as the 182nd member state.
33
+ start_year = 1994
34
+ supported_categories = (GOVERNMENT, PUBLIC)
35
+
36
+ def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
37
+ """
38
+ Args:
39
+ islamic_show_estimated:
40
+ Whether to add "estimated" label to Islamic holidays name
41
+ if holiday date is estimated.
42
+ """
43
+ ChristianHolidays.__init__(self, ETHIOPIAN_CALENDAR)
44
+ InternationalHolidays.__init__(self)
45
+ IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
46
+ super().__init__(*args, **kwargs)
47
+
48
+ def _populate_public_holidays(self):
49
+ # New Year's Day.
50
+ self._add_new_years_day("New Year's Day")
51
+
52
+ # Orthodox Christmas.
53
+ self._add_christmas_day("Orthodox Christmas")
54
+
55
+ # Epiphany.
56
+ self._add_epiphany_day("Epiphany")
57
+
58
+ # Women's Day.
59
+ self._add_womens_day("Women's Day")
60
+
61
+ # Good Friday.
62
+ self._add_good_friday("Good Friday")
63
+
64
+ # Orthodox Easter.
65
+ self._add_easter_sunday("Orthodox Easter")
66
+
67
+ # International Workers' Day.
68
+ self._add_labor_day("International Workers' Day")
69
+
70
+ # Independence Day.
71
+ self._add_holiday_may_24("Independence Day")
72
+
73
+ # Martyrs' Day.
74
+ self._add_holiday_jun_20("Martyrs' Day")
75
+
76
+ # Revolution Day.
77
+ self._add_holiday_sep_1("Revolution Day")
78
+
79
+ # Ethiopian New Year.
80
+ self._add_ethiopian_new_year("Ethiopian New Year")
81
+
82
+ # Finding of the True Cross.
83
+ self._add_finding_of_true_cross("Finding of the True Cross")
84
+
85
+ # Prophet's Birthday.
86
+ self._add_mawlid_day("Prophet's Birthday")
87
+
88
+ # Eid al-Fitr.
89
+ self._add_eid_al_fitr_day("Eid al-Fitr")
90
+
91
+ # Eid al-Adha.
92
+ self._add_eid_al_adha_day("Eid al-Adha")
93
+
94
+ def _populate_government_holidays(self):
95
+ # Fenkil Day.
96
+ self._add_holiday_feb_10("Fenkil Day")
97
+
98
+
99
+ class ER(Eritrea):
100
+ pass
101
+
102
+
103
+ class ERI(Eritrea):
104
+ pass
@@ -10,12 +10,11 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- from calendar import isleap
14
13
  from gettext import gettext as tr
15
14
 
16
15
  from holidays.calendars import _CustomIslamicHolidays
17
- from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
18
- from holidays.calendars.julian import JULIAN_CALENDAR
16
+ from holidays.calendars.ethiopian import ETHIOPIAN_CALENDAR, is_ethiopian_leap_year
17
+ from holidays.calendars.gregorian import AUG, SEP, NOV
19
18
  from holidays.constants import PUBLIC, WORKDAY
20
19
  from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
21
20
  from holidays.holiday_base import HolidayBase
@@ -30,7 +29,7 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
30
29
  * <https://web.archive.org/web/20250427173714/https://www.edarabia.com/ethiopia/public-holidays/>
31
30
  * <https://en.wikipedia.org/wiki/Public_holidays_in_Ethiopia>
32
31
  * <https://en.wikipedia.org/wiki/Nations,_Nationalities_and_Peoples'_Day>
33
- * <https://web.archive.org/web/20250408213218/https://www.timeanddate.com/holidays/ethiopia/>
32
+ * <https://web.archive.org/web/20250811041201/https://www.timeanddate.com/holidays/ethiopia/2025>
34
33
  """
35
34
 
36
35
  country = "ET"
@@ -42,22 +41,6 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
42
41
  supported_categories = (PUBLIC, WORKDAY)
43
42
  supported_languages = ("am", "ar", "en_ET", "en_US")
44
43
 
45
- def _is_leap_year(self) -> bool:
46
- """Determine if the Ethiopian calendar year is a leap year.
47
-
48
- Ethiopian leap years generally align with Gregorian leap years until
49
- February 2100. However, the Ethiopian calendar starts earlier (on September 11),
50
- which affects holidays between September 11 and January 1.
51
-
52
- To account for this shift, the method checks whether next year is a leap year
53
- in the Gregorian calendar.
54
-
55
- Returns:
56
- `True` if the Ethiopian year is a leap year, `False` otherwise.
57
- """
58
-
59
- return isleap(self._year + 1)
60
-
61
44
  def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
62
45
  """
63
46
  Args:
@@ -65,7 +48,7 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
65
48
  Whether to add "estimated" label to Islamic holidays name
66
49
  if holiday date is estimated.
67
50
  """
68
- ChristianHolidays.__init__(self, JULIAN_CALENDAR)
51
+ ChristianHolidays.__init__(self, ETHIOPIAN_CALENDAR)
69
52
  InternationalHolidays.__init__(self)
70
53
  IslamicHolidays.__init__(
71
54
  self, cls=EthiopiaIslamicHolidays, show_estimated=islamic_show_estimated
@@ -77,7 +60,7 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
77
60
  self._add_christmas_day(tr("የገና ወይም የልደት በዓል"))
78
61
 
79
62
  # Epiphany.
80
- self._add_holiday(tr("የጥምቀት በዓል"), JAN, 20 if super()._is_leap_year() else 19)
63
+ self._add_epiphany_day(tr("የጥምቀት በዓል"))
81
64
 
82
65
  if self._year >= 1996:
83
66
  # Adwa Victory Day.
@@ -100,14 +83,19 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
100
83
  self._add_holiday_may_28(tr("ደርግ የወደቀበት ቀን"))
101
84
 
102
85
  # Ethiopian New Year.
103
- self._add_holiday(tr("የዘመን መለወጫ (እንቁጣጣሽ) በዓል"), SEP, 12 if self._is_leap_year() else 11)
86
+ self._add_ethiopian_new_year(tr("የዘመን መለወጫ (እንቁጣጣሽ) በዓል"))
104
87
 
105
88
  # Finding of True Cross.
106
- self._add_holiday(tr("የመስቀል በዓል"), SEP, 28 if self._is_leap_year() else 27)
89
+ self._add_finding_of_true_cross(tr("የመስቀል በዓል"))
107
90
 
108
91
  if self._year <= 1990:
109
- # Popular Revolution Commemoration Day.
110
- self._add_holiday(tr("የአብዮት ቀን"), SEP, 13 if self._is_leap_year() else 12)
92
+ # Julian Date Drift shouldn't affect this one.
93
+ self._add_holiday(
94
+ # Popular Revolution Commemoration Day.
95
+ tr("የአብዮት ቀን"),
96
+ SEP,
97
+ 13 if is_ethiopian_leap_year(self._year) else 12,
98
+ )
111
99
 
112
100
  # October Revolution Day.
113
101
  self._add_holiday_nov_7(tr("የጥቅምት አብዮት ቀን"))
@@ -139,33 +127,16 @@ class ETH(Ethiopia):
139
127
 
140
128
 
141
129
  class EthiopiaIslamicHolidays(_CustomIslamicHolidays):
130
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2018, 2025)
142
131
  EID_AL_ADHA_DATES = {
143
132
  2018: (AUG, 22),
144
- 2019: (AUG, 11),
145
- 2020: (JUL, 31),
146
- 2021: (JUL, 20),
147
- 2022: (JUL, 9),
148
- 2023: (JUN, 28),
149
- 2024: (JUN, 16),
150
133
  }
151
134
 
152
- EID_AL_FITR_DATES = {
153
- 2018: (JUN, 15),
154
- 2019: (JUN, 4),
155
- 2020: (MAY, 24),
156
- 2021: (MAY, 13),
157
- 2022: (MAY, 2),
158
- 2023: (APR, 21),
159
- 2024: (APR, 10),
160
- 2025: (MAR, 30),
161
- }
135
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2018, 2025)
162
136
 
137
+ MAWLID_DATES_CONFIRMED_YEARS = (2018, 2025)
163
138
  MAWLID_DATES = {
164
139
  2018: (NOV, 21),
165
140
  2019: (NOV, 10),
166
- 2020: (OCT, 29),
167
- 2021: (OCT, 18),
168
- 2022: (OCT, 8),
169
- 2023: (SEP, 27),
170
- 2024: (SEP, 15),
141
+ 2025: (SEP, 5),
171
142
  }
@@ -169,13 +169,12 @@ class FijiHinduHolidays(_CustomHinduHolidays):
169
169
 
170
170
 
171
171
  class FijiIslamicHolidays(_CustomIslamicHolidays):
172
+ MAWLID_DATES_CONFIRMED_YEARS = (2016, 2025)
172
173
  MAWLID_DATES = {
173
174
  2016: (DEC, 12),
174
175
  2017: (DEC, 2),
175
176
  2018: (NOV, 19),
176
- 2019: (NOV, 9),
177
177
  2020: (OCT, 31),
178
- 2021: (OCT, 18),
179
178
  2022: (OCT, 7), # looks like observed on FRI
180
179
  2023: (SEP, 30),
181
180
  2024: (SEP, 16),
@@ -11,7 +11,7 @@
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
13
  from holidays.calendars import _CustomIslamicHolidays
14
- from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
14
+ from holidays.calendars.gregorian import FEB, MAR, JUN, JUL, AUG, SEP, OCT, NOV, DEC
15
15
  from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
16
16
  from holidays.holiday_base import HolidayBase
17
17
 
@@ -27,6 +27,8 @@ class Gabon(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolida
27
27
  """
28
28
 
29
29
  country = "GA"
30
+ # %s (estimated).
31
+ estimated_label = "%s (estimated)"
30
32
  # On 17 August 1960, Gabon gained independence from France.
31
33
  start_year = 1961
32
34
 
@@ -93,55 +95,35 @@ class GAB(Gabon):
93
95
 
94
96
 
95
97
  class GabonIslamicHolidays(_CustomIslamicHolidays):
98
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2023)
96
99
  EID_AL_ADHA_DATES = {
97
100
  2001: (MAR, 6),
98
101
  2002: (FEB, 23),
99
102
  2003: (FEB, 12),
100
103
  2004: (FEB, 2),
101
- 2005: (JAN, 21),
102
- 2006: ((JAN, 10), (DEC, 31)),
103
- 2007: (DEC, 20),
104
104
  2008: (DEC, 9),
105
105
  2009: (NOV, 28),
106
106
  2010: (NOV, 17),
107
107
  2011: (NOV, 7),
108
- 2012: (OCT, 26),
109
- 2013: (OCT, 15),
110
108
  2014: (OCT, 5),
111
109
  2015: (SEP, 24),
112
110
  2016: (SEP, 13),
113
111
  2017: (SEP, 2),
114
112
  2018: (AUG, 22),
115
- 2019: (AUG, 11),
116
- 2020: (JUL, 31),
117
- 2021: (JUL, 20),
118
- 2022: (JUL, 9),
119
- 2023: (JUN, 28),
120
113
  }
121
114
 
115
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2024)
122
116
  EID_AL_FITR_DATES = {
123
117
  2001: (DEC, 17),
124
118
  2002: (DEC, 6),
125
119
  2003: (NOV, 26),
126
- 2004: (NOV, 14),
127
120
  2005: (NOV, 4),
128
121
  2006: (OCT, 24),
129
- 2007: (OCT, 13),
130
122
  2008: (OCT, 2),
131
123
  2009: (SEP, 21),
132
- 2010: (SEP, 10),
133
124
  2011: (AUG, 31),
134
- 2012: (AUG, 19),
135
- 2013: (AUG, 8),
136
125
  2014: (JUL, 29),
137
126
  2015: (JUL, 18),
138
127
  2016: (JUL, 7),
139
128
  2017: (JUN, 26),
140
- 2018: (JUN, 15),
141
- 2019: (JUN, 4),
142
- 2020: (MAY, 24),
143
- 2021: (MAY, 13),
144
- 2022: (MAY, 2),
145
- 2023: (APR, 21),
146
- 2024: (APR, 10),
147
129
  }