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,22 +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
- NOV,
27
- DEC,
28
- THU,
29
- FRI,
30
- SAT,
31
- )
16
+ from holidays.calendars.gregorian import JAN, JUL, AUG, SEP, OCT, NOV, DEC, THU, FRI, SAT
32
17
  from holidays.constants import BANK, PUBLIC
33
18
  from holidays.groups import InternationalHolidays, IslamicHolidays, StaticHolidays
34
19
  from holidays.holiday_base import HolidayBase
@@ -109,52 +94,25 @@ class QAT(Qatar):
109
94
 
110
95
  class QatarIslamicHolidays(_CustomIslamicHolidays):
111
96
  # https://web.archive.org/web/20250422212912/https://www.timeanddate.com/holidays/qatar/eid-al-adha
97
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2005, 2024)
112
98
  EID_AL_ADHA_DATES = {
113
- 2005: (JAN, 21),
114
- 2006: ((JAN, 10), (DEC, 31)),
115
- 2007: (DEC, 20),
116
99
  2008: (DEC, 9),
117
100
  2009: (NOV, 28),
118
101
  2010: (NOV, 15),
119
- 2011: (NOV, 6),
120
- 2012: (OCT, 26),
121
- 2013: (OCT, 15),
122
- 2014: (OCT, 4),
123
- 2015: (SEP, 23),
124
102
  2016: (SEP, 10),
125
103
  2017: (AUG, 31),
126
104
  2018: (AUG, 22),
127
- 2019: (AUG, 11),
128
- 2020: (JUL, 31),
129
- 2021: (JUL, 20),
130
- 2022: (JUL, 9),
131
- 2023: (JUN, 28),
132
- 2024: (JUN, 16),
133
105
  }
134
106
 
135
107
  # https://web.archive.org/web/20241207022523/https://www.timeanddate.com/holidays/qatar/eid-al-fitr
108
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2005, 2025)
136
109
  EID_AL_FITR_DATES = {
137
110
  2005: (NOV, 4),
138
111
  2006: (OCT, 24),
139
- 2007: (OCT, 13),
140
112
  2008: (OCT, 2),
141
113
  2009: (SEP, 21),
142
- 2010: (SEP, 10),
143
114
  2011: (AUG, 31),
144
- 2012: (AUG, 19),
145
- 2013: (AUG, 8),
146
- 2014: (JUL, 28),
147
115
  2015: (JUL, 18),
148
- 2016: (JUL, 6),
149
- 2017: (JUN, 25),
150
- 2018: (JUN, 15),
151
- 2019: (JUN, 4),
152
- 2020: (MAY, 24),
153
- 2021: (MAY, 13),
154
- 2022: (MAY, 2),
155
- 2023: (APR, 21),
156
- 2024: (APR, 10),
157
- 2025: (MAR, 30),
158
116
  }
159
117
 
160
118
 
@@ -0,0 +1,162 @@
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 datetime import date
14
+ from gettext import gettext as tr
15
+
16
+ from holidays.calendars import _CustomIslamicHolidays
17
+ from holidays.calendars.gregorian import MAR, JUN, JUL, AUG
18
+ from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
19
+ from holidays.observed_holiday_base import (
20
+ ObservedHolidayBase,
21
+ SAT_TO_NEXT_WORKDAY,
22
+ SAT_SUN_TO_NEXT_WORKDAY,
23
+ )
24
+
25
+
26
+ class Rwanda(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
27
+ """Rwanda holidays.
28
+
29
+ References:
30
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Rwanda>
31
+ * [Presidential Order N° 06/01 of 16/02/2011](https://web.archive.org/web/20250601161219/https://archive.gazettes.africa/archive/rw/2011/rw-government-gazette-dated-2011-03-07-no-10.pdf)
32
+ * [Presidential Order N° 42/03 of 30/06/2015](https://web.archive.org/web/20180417062635/http://www.igihe.com/IMG/pdf/iteka_rya_perezida_rigena_iminsi_y_ikiruhuko_rusange.pdf)
33
+ * [Presidential Order N° 54/01 of 24/02/2017](https://web.archive.org/web/20220626143357/https://www.ngoma.gov.rw/index.php?eID=dumpFile&t=f&f=44336&token=fc82c76109af7950f8895d40ddd3e15bd8c57e8c)
34
+ * [Presidential Order N° 62/01 of 19/10/2022](https://web.archive.org/web/20250815032533/https://mifotra.prod.risa.rw/index.php?eID=dumpFile&t=f&f=85230&token=bcf0bf166638c11f4bf3d2f8c629052db26d38b6)
35
+ """
36
+
37
+ country = "RW"
38
+ default_language = "rw"
39
+ # %s (estimated).
40
+ estimated_label = tr("%s (yagereranijwe)")
41
+ # %s (observed).
42
+ observed_label = tr("%s (yizihijwe)")
43
+ # %s (observed, estimated).
44
+ observed_estimated_label = tr("%s (yizihijwe, yagereranijwe)")
45
+ supported_languages = ("en_US", "fr", "rw")
46
+ # Presidential Order N° 06/01 of 16/02/2011.
47
+ start_year = 2012
48
+
49
+ def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
50
+ ChristianHolidays.__init__(self)
51
+ InternationalHolidays.__init__(self)
52
+ IslamicHolidays.__init__(
53
+ self, cls=RwandaIslamicHolidays, show_estimated=islamic_show_estimated
54
+ )
55
+ kwargs.setdefault("observed_since", 2017)
56
+ super().__init__(*args, **kwargs)
57
+
58
+ def _populate_observed(self, dts: set[date], multiple: bool = False) -> None:
59
+ """
60
+ Applies `SAT_TO_NEXT_WORKDAY` instead of `SAT_SUN_TO_NEXT_WORKDAY`
61
+ observed_rule for Day after New Year's Day and Boxing Day.
62
+ """
63
+ special_cases = {
64
+ # Day after New Year's Day.
65
+ self.tr("Umunsi ukurikira Ubunani"),
66
+ # Boxing Day.
67
+ self.tr("Umunsi ukurikira Noheli"),
68
+ }
69
+ for dt in sorted(dts):
70
+ for name in self.get_list(dt):
71
+ self._add_observed(
72
+ dt,
73
+ name,
74
+ SAT_TO_NEXT_WORKDAY if name in special_cases else SAT_SUN_TO_NEXT_WORKDAY,
75
+ )
76
+
77
+ def _populate_public_holidays(self):
78
+ dts_observed = set()
79
+
80
+ # New Year's Day.
81
+ dt = self._add_new_years_day(tr("Ubunani"))
82
+ if self._year >= 2018:
83
+ dts_observed.add(dt)
84
+
85
+ # Added via Presidential Order N° 42/03 of 30/06/2015.
86
+ if self._year >= 2016:
87
+ # Day after New Year's Day.
88
+ dts_observed.add(self._add_new_years_day_two(tr("Umunsi ukurikira Ubunani")))
89
+
90
+ # National Heroes' Day.
91
+ dts_observed.add(self._add_holiday_feb_1(tr("Umunsi w'Intwari")))
92
+
93
+ # Memorial Day of Genocide perpetrated against the Tutsi in 1994.
94
+ self._add_holiday_apr_7(tr("Umunsi wo Kwibuka Jenoside yakorewe Abatutsi mu 1994"))
95
+
96
+ # Good Friday.
97
+ self._add_good_friday(tr("Umunsi wa Gatanu Mutagatifu"))
98
+
99
+ # Added via Presidential Order N° 54/01 of 24/02/2017.
100
+ if self._year >= 2017:
101
+ # Easter Monday.
102
+ self._add_easter_monday(tr("Ku wa mbere wa Pasika"))
103
+
104
+ # Labor Day.
105
+ dts_observed.add(self._add_labor_day(tr("Umunsi Mukuru w'Umurimo")))
106
+
107
+ # Independence Day.
108
+ dts_observed.add(self._add_holiday_jul_1(tr("Umunsi w'Ubwigenge")))
109
+
110
+ # Liberation Day.
111
+ dts_observed.add(self._add_holiday_jul_4(tr("Umunsi wo Kwibohora")))
112
+
113
+ # Added via Presidential Order N° 42/03 of 30/06/2015.
114
+ if self._year >= 2015:
115
+ # Umuganura Day.
116
+ self._add_holiday_1st_fri_of_aug(tr("Umunsi w'Umuganura"))
117
+
118
+ # Assumption Day.
119
+ dts_observed.add(self._add_assumption_of_mary_day(tr("Ijyanwa mu Ijuru rya Bikiramariya")))
120
+
121
+ # Christmas Day.
122
+ dts_observed.add(self._add_christmas_day(tr("Noheli")))
123
+
124
+ # Boxing Day.
125
+ dts_observed.add(self._add_christmas_day_two(tr("Umunsi ukurikira Noheli")))
126
+
127
+ # Eid al-Fitr.
128
+ dts_observed.update(self._add_eid_al_fitr_day(tr("Eid El Fitr")))
129
+
130
+ # Added via Presidential Order N° 42/03 of 30/06/2015.
131
+ if self._year >= 2015:
132
+ # Eid al-Adha.
133
+ dts_observed.update(self._add_eid_al_adha_day(tr("Eid al-Adha")))
134
+
135
+ if self.observed:
136
+ self._populate_observed(dts_observed)
137
+
138
+
139
+ class RW(Rwanda):
140
+ pass
141
+
142
+
143
+ class RWA(Rwanda):
144
+ pass
145
+
146
+
147
+ class RwandaIslamicHolidays(_CustomIslamicHolidays):
148
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2018, 2025)
149
+ EID_AL_ADHA_DATES = {
150
+ 2018: (AUG, 22),
151
+ 2019: (AUG, 12),
152
+ 2022: (JUL, 11),
153
+ }
154
+
155
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2012, 2025)
156
+ EID_AL_FITR_DATES = {
157
+ 2014: (JUL, 29),
158
+ 2015: (JUL, 18),
159
+ 2016: (JUL, 7),
160
+ 2017: (JUN, 26),
161
+ 2025: (MAR, 31),
162
+ }
@@ -125,10 +125,13 @@ class SAU(SaudiArabia):
125
125
 
126
126
 
127
127
  class SaudiArabiaIslamicHolidays(_CustomIslamicHolidays):
128
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2025)
128
129
  EID_AL_ADHA_DATES = {
129
130
  2015: (SEP, 24),
130
131
  }
131
132
 
133
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2025)
134
+
132
135
 
133
136
  class SaudiArabiaStaticHolidays:
134
137
  special_public_holidays = {
@@ -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 MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC
16
+ from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC
17
17
  from holidays.groups import (
18
18
  ChristianHolidays,
19
19
  InternationalHolidays,
@@ -131,15 +131,13 @@ class SEN(Senegal):
131
131
 
132
132
  class SenegalIslamicHolidays(_CustomIslamicHolidays):
133
133
  # https://web.archive.org/web/20250609044648/https://www.timeanddate.com/holidays/senegal/tamkharit
134
+ ASHURA_DATES_CONFIRMED_YEARS = (2020, 2024)
134
135
  ASHURA_DATES = {
135
- 2020: (AUG, 29),
136
- 2021: (AUG, 18),
137
- 2022: (AUG, 8),
138
- 2023: (JUL, 28),
139
136
  2024: (JUL, 17),
140
137
  }
141
138
 
142
139
  # https://web.archive.org/web/20250609061446/https://www.timeanddate.com/holidays/senegal/grand-magal-de-touba
140
+ GRAND_MAGAL_OF_TOUBA_DATES_CONFIRMED_YEARS = (2020, 2024)
143
141
  GRAND_MAGAL_OF_TOUBA_DATES = {
144
142
  2020: (OCT, 6),
145
143
  2021: (SEP, 26),
@@ -149,27 +147,19 @@ class SenegalIslamicHolidays(_CustomIslamicHolidays):
149
147
  }
150
148
 
151
149
  # https://web.archive.org/web/20250609091559/https://www.timeanddate.com/holidays/senegal/maouloud
152
- MAWLID_DATES = {
153
- 2020: (OCT, 29),
154
- 2021: (OCT, 18),
155
- 2022: (OCT, 8),
156
- 2023: (SEP, 27),
157
- 2024: (SEP, 15),
158
- }
150
+ MAWLID_DATES_CONFIRMED_YEARS = (2020, 2024)
159
151
 
160
152
  # https://web.archive.org/web/20250609092813/https://www.timeanddate.com/holidays/senegal/korite
153
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025)
161
154
  EID_AL_FITR_DATES = {
162
- 2020: (MAY, 24),
163
155
  2021: (MAY, 12),
164
156
  2022: (MAY, 1),
165
157
  2023: (APR, 22),
166
- 2024: (APR, 10),
167
- 2025: (MAR, 30),
168
158
  }
169
159
 
170
160
  # https://web.archive.org/web/20250609102658/https://www.timeanddate.com/holidays/senegal/tabaski
161
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2024)
171
162
  EID_AL_ADHA_DATES = {
172
- 2020: (JUL, 31),
173
163
  2021: (JUL, 21),
174
164
  2022: (JUL, 10),
175
165
  2023: (JUN, 29),
@@ -12,8 +12,8 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
16
- from holidays.calendars.islamic import _CustomIslamicHolidays
15
+ from holidays.calendars import _CustomIslamicHolidays
16
+ from holidays.calendars.gregorian import JUN, AUG, NOV
17
17
  from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
18
18
  from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY
19
19
 
@@ -115,35 +115,19 @@ class SierraLeoneIslamicHolidays(_CustomIslamicHolidays):
115
115
  * <https://web.archive.org/web/20250408204431/https://www.timeanddate.com/holidays/sierra-leone/>
116
116
  """
117
117
 
118
- # Prophet's Birthday
118
+ MAWLID_DATES_CONFIRMED_YEARS = (2018, 2024)
119
119
  MAWLID_DATES = {
120
120
  2018: (NOV, 21),
121
121
  2019: (NOV, 10),
122
- 2020: (OCT, 29),
123
- 2021: (OCT, 18),
124
- 2022: (OCT, 8),
125
- 2023: (SEP, 27),
126
- 2024: (SEP, 15),
127
122
  }
128
123
 
129
- # Eid al-Fitr
124
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2018, 2024)
130
125
  EID_AL_FITR_DATES = {
131
- 2018: (JUN, 15),
132
126
  2019: (JUN, 5),
133
- 2020: (MAY, 24),
134
- 2021: (MAY, 13),
135
- 2022: (MAY, 2),
136
- 2023: (APR, 21),
137
- 2024: (APR, 10),
138
127
  }
139
128
 
140
- # Eid al-Adha
129
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2018, 2024)
141
130
  EID_AL_ADHA_DATES = {
142
131
  2018: (AUG, 22),
143
132
  2019: (AUG, 12),
144
- 2020: (JUL, 31),
145
- 2021: (JUL, 20),
146
- 2022: (JUL, 9),
147
- 2023: (JUN, 28),
148
- 2024: (JUN, 16),
149
133
  }
@@ -60,7 +60,11 @@ class Singapore(
60
60
  """
61
61
 
62
62
  country = "SG"
63
+ # %s (estimated).
64
+ estimated_label = tr("%s (estimated)")
63
65
  default_language = "en_SG"
66
+ # %s (observed, estimated).
67
+ observed_estimated_label = tr("%s (observed, estimated)")
64
68
  # %s (observed).
65
69
  observed_label = tr("%s (observed)")
66
70
  supported_languages = ("en_SG", "en_US", "th")
@@ -182,33 +186,10 @@ class SingaporeBuddhistHolidays(_CustomBuddhistHolidays):
182
186
 
183
187
 
184
188
  class SingaporeChineseHolidays(_CustomChineseHolidays):
189
+ LUNAR_NEW_YEAR_DATES_CONFIRMED_YEARS = (2001, 2026)
185
190
  LUNAR_NEW_YEAR_DATES = {
186
- 2001: (JAN, 24),
187
- 2002: (FEB, 12),
188
- 2003: (FEB, 1),
189
- 2004: (JAN, 22),
190
- 2005: (FEB, 9),
191
191
  2006: (JAN, 30),
192
192
  2007: (FEB, 19),
193
- 2008: (FEB, 7),
194
- 2009: (JAN, 26),
195
- 2010: (FEB, 14),
196
- 2011: (FEB, 3),
197
- 2012: (JAN, 23),
198
- 2013: (FEB, 10),
199
- 2014: (JAN, 31),
200
- 2015: (FEB, 19),
201
- 2016: (FEB, 8),
202
- 2017: (JAN, 28),
203
- 2018: (FEB, 16),
204
- 2019: (FEB, 5),
205
- 2020: (JAN, 25),
206
- 2021: (FEB, 12),
207
- 2022: (FEB, 1),
208
- 2023: (JAN, 22),
209
- 2024: (FEB, 10),
210
- 2025: (JAN, 29),
211
- 2026: (FEB, 17),
212
193
  }
213
194
 
214
195
 
@@ -245,62 +226,29 @@ class SingaporeHinduHolidays(_CustomHinduHolidays):
245
226
 
246
227
 
247
228
  class SingaporeIslamicHolidays(_CustomIslamicHolidays):
248
- # Hari Raya Haji
229
+ EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2026)
249
230
  EID_AL_ADHA_DATES = {
250
231
  2001: (MAR, 6),
251
232
  2002: (FEB, 23),
252
233
  2003: (FEB, 12),
253
- 2004: (FEB, 1),
254
- 2005: (JAN, 21),
255
- 2006: ((JAN, 10), (DEC, 31)),
256
- 2007: (DEC, 20),
257
- 2008: (DEC, 8),
258
- 2009: (NOV, 27),
259
234
  2010: (NOV, 17),
260
- 2011: (NOV, 6),
261
- 2012: (OCT, 26),
262
- 2013: (OCT, 15),
263
235
  2014: (OCT, 5),
264
236
  2015: (SEP, 24),
265
237
  2016: (SEP, 12),
266
- 2017: (SEP, 1),
267
238
  2018: (AUG, 22),
268
- 2019: (AUG, 11),
269
- 2020: (JUL, 31),
270
- 2021: (JUL, 20),
271
239
  2022: (JUL, 10),
272
240
  2023: (JUN, 29),
273
241
  2024: (JUN, 17),
274
242
  2025: (JUN, 7),
275
- 2026: (MAY, 27),
276
243
  }
277
244
 
278
- # Hari Raya Puasa
245
+ EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2026)
279
246
  EID_AL_FITR_DATES = {
280
- 2001: (DEC, 16),
281
247
  2002: (DEC, 6),
282
- 2003: (NOV, 25),
283
- 2004: (NOV, 14),
284
- 2005: (NOV, 3),
285
248
  2006: (OCT, 24),
286
- 2007: (OCT, 13),
287
- 2008: (OCT, 1),
288
- 2009: (SEP, 20),
289
- 2010: (SEP, 10),
290
- 2011: (AUG, 30),
291
- 2012: (AUG, 19),
292
- 2013: (AUG, 8),
293
- 2014: (JUL, 28),
294
- 2015: (JUL, 17),
295
- 2016: (JUL, 6),
296
- 2017: (JUN, 25),
297
- 2018: (JUN, 15),
298
249
  2019: (JUN, 5),
299
- 2020: (MAY, 24),
300
- 2021: (MAY, 13),
301
250
  2022: (MAY, 3),
302
251
  2023: (APR, 22),
303
- 2024: (APR, 10),
304
252
  2025: (MAR, 31),
305
253
  2026: (MAR, 21),
306
254
  }
@@ -0,0 +1,79 @@
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.groups import InternationalHolidays, IslamicHolidays
14
+ from holidays.holiday_base import HolidayBase
15
+
16
+
17
+ class Somalia(HolidayBase, InternationalHolidays, IslamicHolidays):
18
+ """Somalia holidays.
19
+
20
+ References:
21
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Somalia>
22
+ * <https://web.archive.org/web/20250522034818/https://usa.mfa.gov.so/about-somalia/>
23
+ """
24
+
25
+ country = "SO"
26
+ # %s (estimated).
27
+ estimated_label = "%s (estimated)"
28
+ # Unification of Somaliland and Italian Somaliland into the Somali Republic on July 1st, 1960.
29
+ start_year = 1961
30
+
31
+ def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
32
+ """
33
+ Args:
34
+ islamic_show_estimated:
35
+ Whether to add "estimated" label to Islamic holidays name
36
+ if holiday date is estimated.
37
+ """
38
+ InternationalHolidays.__init__(self)
39
+ IslamicHolidays.__init__(self, show_estimated=islamic_show_estimated)
40
+ super().__init__(*args, **kwargs)
41
+
42
+ def _populate_public_holidays(self):
43
+ # New Year's Day.
44
+ self._add_new_years_day("New Year's Day")
45
+
46
+ # Labor Day.
47
+ self._add_labor_day("Labour Day")
48
+
49
+ # Independence Day.
50
+ self._add_holiday_jun_26("Independence Day")
51
+
52
+ # Republic Day.
53
+ self._add_holiday_jul_1("Republic Day")
54
+
55
+ # Islamic New Year.
56
+ self._add_islamic_new_year_day("Islamic New Year")
57
+
58
+ # Ashura.
59
+ self._add_ashura_day("Ashura")
60
+
61
+ # Prophet's Birthday.
62
+ self._add_mawlid_day("Prophet's Birthday")
63
+
64
+ # Isra' and Mi'raj.
65
+ self._add_isra_and_miraj_day("Isra' and Mi'raj")
66
+
67
+ # Eid al-Fitr.
68
+ self._add_eid_al_fitr_day("Eid al-Fitr")
69
+
70
+ # Eid al-Adha.
71
+ self._add_eid_al_adha_day("Eid al-Adha")
72
+
73
+
74
+ class SO(Somalia):
75
+ pass
76
+
77
+
78
+ class SOM(Somalia):
79
+ pass