holidays 0.26__py3-none-any.whl → 0.27__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 (256) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/__init__.py +5 -7
  3. holidays/calendars/buddhist.py +1 -3
  4. holidays/calendars/chinese.py +1 -3
  5. holidays/calendars/custom.py +1 -3
  6. holidays/calendars/hindu.py +1 -3
  7. holidays/calendars/islamic.py +1341 -1345
  8. holidays/calendars/thai.py +217 -26
  9. holidays/countries/__init__.py +4 -0
  10. holidays/countries/albania.py +6 -17
  11. holidays/countries/andorra.py +2 -6
  12. holidays/countries/angola.py +53 -39
  13. holidays/countries/argentina.py +13 -24
  14. holidays/countries/aruba.py +109 -48
  15. holidays/countries/australia.py +31 -69
  16. holidays/countries/azerbaijan.py +30 -38
  17. holidays/countries/bahrain.py +5 -5
  18. holidays/countries/bangladesh.py +1 -3
  19. holidays/countries/belarus.py +1 -3
  20. holidays/countries/belize.py +4 -16
  21. holidays/countries/bolivia.py +2 -6
  22. holidays/countries/bosnia_and_herzegovina.py +5 -17
  23. holidays/countries/botswana.py +9 -18
  24. holidays/countries/brazil.py +2 -5
  25. holidays/countries/brunei.py +427 -0
  26. holidays/countries/bulgaria.py +2 -6
  27. holidays/countries/burkina_faso.py +141 -0
  28. holidays/countries/burundi.py +2 -5
  29. holidays/countries/cambodia.py +323 -0
  30. holidays/countries/cameroon.py +71 -77
  31. holidays/countries/canada.py +19 -28
  32. holidays/countries/chad.py +133 -0
  33. holidays/countries/chile.py +4 -11
  34. holidays/countries/china.py +1 -2
  35. holidays/countries/colombia.py +17 -15
  36. holidays/countries/costa_rica.py +2 -6
  37. holidays/countries/curacao.py +100 -46
  38. holidays/countries/cyprus.py +2 -6
  39. holidays/countries/czechia.py +4 -12
  40. holidays/countries/denmark.py +1 -3
  41. holidays/countries/dominican_republic.py +1 -3
  42. holidays/countries/ecuador.py +54 -54
  43. holidays/countries/egypt.py +2 -5
  44. holidays/countries/eswatini.py +34 -44
  45. holidays/countries/ethiopia.py +5 -14
  46. holidays/countries/finland.py +1 -3
  47. holidays/countries/gabon.py +49 -53
  48. holidays/countries/greece.py +1 -2
  49. holidays/countries/honduras.py +16 -13
  50. holidays/countries/hongkong.py +7 -8
  51. holidays/countries/hungary.py +93 -92
  52. holidays/countries/india.py +4 -11
  53. holidays/countries/indonesia.py +120 -114
  54. holidays/countries/ireland.py +5 -15
  55. holidays/countries/isle_of_man.py +9 -4
  56. holidays/countries/israel.py +6 -18
  57. holidays/countries/italy.py +1 -2
  58. holidays/countries/jamaica.py +10 -18
  59. holidays/countries/japan.py +10 -16
  60. holidays/countries/kazakhstan.py +7 -22
  61. holidays/countries/kenya.py +1 -3
  62. holidays/countries/kyrgyzstan.py +2 -5
  63. holidays/countries/latvia.py +2 -6
  64. holidays/countries/lesotho.py +52 -32
  65. holidays/countries/lithuania.py +4 -12
  66. holidays/countries/madagascar.py +3 -9
  67. holidays/countries/malawi.py +34 -26
  68. holidays/countries/malaysia.py +223 -248
  69. holidays/countries/marshall_islands.py +4 -9
  70. holidays/countries/mexico.py +1 -3
  71. holidays/countries/moldova.py +3 -6
  72. holidays/countries/monaco.py +16 -26
  73. holidays/countries/montenegro.py +23 -19
  74. holidays/countries/morocco.py +2 -5
  75. holidays/countries/mozambique.py +35 -31
  76. holidays/countries/namibia.py +54 -35
  77. holidays/countries/new_zealand.py +11 -21
  78. holidays/countries/nicaragua.py +26 -22
  79. holidays/countries/nigeria.py +6 -17
  80. holidays/countries/north_macedonia.py +3 -8
  81. holidays/countries/norway.py +1 -3
  82. holidays/countries/pakistan.py +71 -72
  83. holidays/countries/panama.py +25 -24
  84. holidays/countries/paraguay.py +54 -47
  85. holidays/countries/philippines.py +6 -2
  86. holidays/countries/poland.py +3 -9
  87. holidays/countries/portugal.py +3 -11
  88. holidays/countries/romania.py +3 -5
  89. holidays/countries/saudi_arabia.py +8 -22
  90. holidays/countries/serbia.py +19 -29
  91. holidays/countries/singapore.py +70 -74
  92. holidays/countries/slovakia.py +1 -4
  93. holidays/countries/south_africa.py +60 -62
  94. holidays/countries/south_korea.py +14 -23
  95. holidays/countries/spain.py +2 -5
  96. holidays/countries/sweden.py +1 -3
  97. holidays/countries/taiwan.py +2 -5
  98. holidays/countries/thailand.py +34 -81
  99. holidays/countries/turkey.py +1 -3
  100. holidays/countries/ukraine.py +6 -18
  101. holidays/countries/united_arab_emirates.py +21 -29
  102. holidays/countries/united_kingdom.py +47 -67
  103. holidays/countries/united_states.py +42 -72
  104. holidays/countries/vatican_city.py +1 -3
  105. holidays/countries/venezuela.py +8 -6
  106. holidays/countries/vietnam.py +6 -18
  107. holidays/countries/zambia.py +63 -33
  108. holidays/countries/zimbabwe.py +56 -37
  109. holidays/financial/european_central_bank.py +1 -3
  110. holidays/financial/ny_stock_exchange.py +31 -48
  111. holidays/groups/__init__.py +18 -0
  112. holidays/groups/buddhist.py +71 -0
  113. holidays/groups/chinese.py +235 -0
  114. holidays/groups/christian.py +483 -0
  115. holidays/groups/hindu.py +71 -0
  116. holidays/groups/international.py +157 -0
  117. holidays/groups/islamic.py +288 -0
  118. holidays/groups/thai.py +157 -0
  119. holidays/helpers.py +20 -0
  120. holidays/holiday_base.py +49 -75
  121. holidays/holiday_groups.py +11 -1190
  122. holidays/locale/am/LC_MESSAGES/ET.po +18 -15
  123. holidays/locale/ar/LC_MESSAGES/CA.po +43 -43
  124. holidays/locale/ar/LC_MESSAGES/ET.po +18 -15
  125. holidays/locale/ar/LC_MESSAGES/UA.po +16 -14
  126. holidays/locale/be/LC_MESSAGES/BY.po +9 -8
  127. holidays/locale/bg/LC_MESSAGES/BG.po +14 -12
  128. holidays/locale/da/LC_MESSAGES/DK.po +7 -6
  129. holidays/locale/el/LC_MESSAGES/CY.po +5 -3
  130. holidays/locale/el/LC_MESSAGES/GR.po +13 -13
  131. holidays/locale/en/LC_MESSAGES/CA.po +43 -43
  132. holidays/locale/en_US/LC_MESSAGES/AR.po +26 -25
  133. holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
  134. holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
  135. holidays/locale/en_US/LC_MESSAGES/BG.po +14 -12
  136. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  137. holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
  138. holidays/locale/en_US/LC_MESSAGES/BY.po +9 -8
  139. holidays/locale/en_US/LC_MESSAGES/CA.po +43 -43
  140. holidays/locale/en_US/LC_MESSAGES/CL.po +18 -18
  141. holidays/locale/en_US/LC_MESSAGES/CO.po +19 -19
  142. holidays/locale/en_US/LC_MESSAGES/CR.po +6 -5
  143. holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
  144. holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
  145. holidays/locale/en_US/LC_MESSAGES/CY.po +5 -3
  146. holidays/locale/en_US/LC_MESSAGES/DK.po +7 -6
  147. holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
  148. holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
  149. holidays/locale/en_US/LC_MESSAGES/ET.po +18 -15
  150. holidays/locale/en_US/LC_MESSAGES/FI.po +13 -13
  151. holidays/locale/en_US/LC_MESSAGES/GR.po +13 -13
  152. holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
  153. holidays/locale/en_US/LC_MESSAGES/HN.po +13 -13
  154. holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
  155. holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
  156. holidays/locale/en_US/LC_MESSAGES/JP.po +19 -17
  157. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  158. holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
  159. holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
  160. holidays/locale/en_US/LC_MESSAGES/MC.po +16 -15
  161. holidays/locale/en_US/LC_MESSAGES/MD.po +5 -5
  162. holidays/locale/en_US/LC_MESSAGES/MX.po +3 -2
  163. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  164. holidays/locale/en_US/LC_MESSAGES/NI.po +13 -13
  165. holidays/locale/en_US/LC_MESSAGES/NO.po +1 -1
  166. holidays/locale/en_US/LC_MESSAGES/PL.po +23 -21
  167. holidays/locale/en_US/LC_MESSAGES/PT.po +31 -31
  168. holidays/locale/en_US/LC_MESSAGES/PY.po +13 -11
  169. holidays/locale/en_US/LC_MESSAGES/RO.po +4 -3
  170. holidays/locale/en_US/LC_MESSAGES/RS.po +10 -10
  171. holidays/locale/en_US/LC_MESSAGES/SE.po +1 -1
  172. holidays/locale/en_US/LC_MESSAGES/SK.po +14 -14
  173. holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
  174. holidays/locale/en_US/LC_MESSAGES/UA.po +16 -14
  175. holidays/locale/en_US/LC_MESSAGES/VE.po +6 -6
  176. holidays/locale/es/LC_MESSAGES/AR.po +26 -25
  177. holidays/locale/es/LC_MESSAGES/CL.po +18 -18
  178. holidays/locale/es/LC_MESSAGES/CO.po +19 -19
  179. holidays/locale/es/LC_MESSAGES/CR.po +6 -5
  180. holidays/locale/es/LC_MESSAGES/DO.po +12 -12
  181. holidays/locale/es/LC_MESSAGES/EC.po +11 -12
  182. holidays/locale/es/LC_MESSAGES/HN.po +12 -12
  183. holidays/locale/es/LC_MESSAGES/MX.po +3 -2
  184. holidays/locale/es/LC_MESSAGES/NI.po +10 -10
  185. holidays/locale/es/LC_MESSAGES/PY.po +13 -11
  186. holidays/locale/es/LC_MESSAGES/VE.po +6 -6
  187. holidays/locale/fi/LC_MESSAGES/FI.po +13 -13
  188. holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
  189. holidays/locale/fr/LC_MESSAGES/MC.po +15 -14
  190. holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
  191. holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
  192. holidays/locale/ja/LC_MESSAGES/JP.po +19 -17
  193. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  194. holidays/locale/km/LC_MESSAGES/KH.po +139 -0
  195. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  196. holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
  197. holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
  198. holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
  199. holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
  200. holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
  201. holidays/locale/no/LC_MESSAGES/NO.po +1 -1
  202. holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
  203. holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
  204. holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
  205. holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
  206. holidays/locale/pl/LC_MESSAGES/PL.po +23 -21
  207. holidays/locale/pt_PT/LC_MESSAGES/PT.po +31 -31
  208. holidays/locale/ro/LC_MESSAGES/MD.po +5 -5
  209. holidays/locale/ro/LC_MESSAGES/RO.po +4 -3
  210. holidays/locale/sk/LC_MESSAGES/SK.po +14 -14
  211. holidays/locale/sr/LC_MESSAGES/RS.po +10 -10
  212. holidays/locale/sv/LC_MESSAGES/FI.po +13 -13
  213. holidays/locale/sv/LC_MESSAGES/SE.po +1 -1
  214. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  215. holidays/locale/th/LC_MESSAGES/BN.po +96 -0
  216. holidays/locale/th/LC_MESSAGES/CA.po +43 -43
  217. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  218. holidays/locale/th/LC_MESSAGES/KH.po +145 -0
  219. holidays/locale/th/LC_MESSAGES/TH.po +41 -41
  220. holidays/locale/uk/LC_MESSAGES/AR.po +26 -25
  221. holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
  222. holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
  223. holidays/locale/uk/LC_MESSAGES/CL.po +18 -18
  224. holidays/locale/uk/LC_MESSAGES/CO.po +19 -19
  225. holidays/locale/uk/LC_MESSAGES/CR.po +6 -5
  226. holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
  227. holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
  228. holidays/locale/uk/LC_MESSAGES/DK.po +7 -6
  229. holidays/locale/uk/LC_MESSAGES/DO.po +12 -12
  230. holidays/locale/uk/LC_MESSAGES/EC.po +11 -12
  231. holidays/locale/uk/LC_MESSAGES/FI.po +13 -13
  232. holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
  233. holidays/locale/uk/LC_MESSAGES/HN.po +13 -13
  234. holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
  235. holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
  236. holidays/locale/uk/LC_MESSAGES/MC.po +15 -14
  237. holidays/locale/uk/LC_MESSAGES/MD.po +5 -5
  238. holidays/locale/uk/LC_MESSAGES/MX.po +3 -2
  239. holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
  240. holidays/locale/uk/LC_MESSAGES/NI.po +13 -13
  241. holidays/locale/uk/LC_MESSAGES/NO.po +1 -1
  242. holidays/locale/uk/LC_MESSAGES/PL.po +23 -21
  243. holidays/locale/uk/LC_MESSAGES/PY.po +13 -11
  244. holidays/locale/uk/LC_MESSAGES/RO.po +4 -3
  245. holidays/locale/uk/LC_MESSAGES/SE.po +1 -1
  246. holidays/locale/uk/LC_MESSAGES/SK.po +14 -14
  247. holidays/locale/uk/LC_MESSAGES/UA.po +16 -14
  248. holidays/locale/uk/LC_MESSAGES/VE.po +6 -6
  249. holidays/registry.py +7 -11
  250. holidays/utils.py +5 -15
  251. {holidays-0.26.dist-info → holidays-0.27.dist-info}/METADATA +25 -7
  252. holidays-0.27.dist-info/RECORD +449 -0
  253. holidays-0.26.dist-info/RECORD +0 -402
  254. {holidays-0.26.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
  255. {holidays-0.26.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
  256. {holidays-0.26.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
@@ -14,8 +14,7 @@ from datetime import timedelta as td
14
14
  from gettext import gettext as tr
15
15
 
16
16
  from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
17
- from holidays.constants import FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT
18
- from holidays.constants import SUN, MON
17
+ from holidays.constants import FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, SUN, MON
19
18
  from holidays.holiday_base import HolidayBase
20
19
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
21
20
 
@@ -53,17 +52,13 @@ class Canada(HolidayBase, ChristianHolidays, InternationalHolidays):
53
52
  1 if self._is_friday(dt) or self._is_weekend(dt) else -1, MON, dt
54
53
  )
55
54
 
56
- def _add_observed(self, hol_date: date, include_sat: bool = True) -> None:
55
+ def _add_observed(self, dt: date, include_sat: bool = True, days: int = +1) -> None:
57
56
  if not self.observed:
58
57
  return None
59
- if self._is_sunday(hol_date) or (
60
- self._is_saturday(hol_date) and include_sat
61
- ):
62
- obs_date = _get_nth_weekday_from(1, MON, hol_date)
63
- if obs_date in self:
64
- obs_date += td(days=+1)
58
+ if self._is_sunday(dt) or (include_sat and self._is_saturday(dt)):
65
59
  self._add_holiday(
66
- self.tr("%s (Observed)") % self[hol_date], obs_date
60
+ self.tr("%s (Observed)") % self[dt],
61
+ dt + td(days=+2 if self._is_saturday(dt) else days),
67
62
  )
68
63
 
69
64
  def _populate(self, year):
@@ -91,14 +86,17 @@ class Canada(HolidayBase, ChristianHolidays, InternationalHolidays):
91
86
  _get_nth_weekday_of_month(1, MON, SEP, self._year),
92
87
  )
93
88
 
94
- # Christmas Day.
95
- dec_25 = self._add_christmas_day(tr("Christmas Day"))
96
-
97
- # Boxing Day.
98
- dec_26 = self._add_christmas_day_two(tr("Boxing Day"))
89
+ self._add_observed(
90
+ # Christmas Day.
91
+ self._add_christmas_day(tr("Christmas Day")),
92
+ days=+2,
93
+ )
99
94
 
100
- self._add_observed(dec_25)
101
- self._add_observed(dec_26)
95
+ self._add_observed(
96
+ # Boxing Day.
97
+ self._add_christmas_day_two(tr("Boxing Day")),
98
+ days=+2,
99
+ )
102
100
 
103
101
  def _add_family_day(self):
104
102
  self._add_holiday(
@@ -172,9 +170,7 @@ class Canada(HolidayBase, ChristianHolidays, InternationalHolidays):
172
170
 
173
171
  def _add_subdiv_bc_holidays(self):
174
172
  if self._year >= 2013:
175
- dt = _get_nth_weekday_of_month(
176
- 3 if self._year >= 2019 else 2, MON, FEB, self._year
177
- )
173
+ dt = _get_nth_weekday_of_month(3 if self._year >= 2019 else 2, MON, FEB, self._year)
178
174
  self._add_holiday(tr("Family Day"), dt)
179
175
 
180
176
  if self._year >= 1953:
@@ -227,9 +223,7 @@ class Canada(HolidayBase, ChristianHolidays, InternationalHolidays):
227
223
  # Civic Holiday.
228
224
  else tr("Civic Holiday")
229
225
  )
230
- self._add_holiday(
231
- name, _get_nth_weekday_of_month(1, MON, AUG, self._year)
232
- )
226
+ self._add_holiday(name, _get_nth_weekday_of_month(1, MON, AUG, self._year))
233
227
 
234
228
  if self._year >= 2021:
235
229
  self._add_holiday(
@@ -397,9 +391,7 @@ class Canada(HolidayBase, ChristianHolidays, InternationalHolidays):
397
391
 
398
392
  def _add_subdiv_pe_holidays(self):
399
393
  if self._year >= 2009:
400
- dt = _get_nth_weekday_of_month(
401
- 3 if self._year >= 2010 else 2, MON, FEB, self._year
402
- )
394
+ dt = _get_nth_weekday_of_month(3 if self._year >= 2010 else 2, MON, FEB, self._year)
403
395
  # Islander Day.
404
396
  self._add_holiday(tr("Islander Day"), dt)
405
397
 
@@ -465,8 +457,7 @@ class Canada(HolidayBase, ChristianHolidays, InternationalHolidays):
465
457
  if self._year >= 1974:
466
458
  self._add_holiday(
467
459
  tr("Heritage Day"),
468
- _get_nth_weekday_of_month(-1, SUN, FEB, self._year)
469
- + td(days=-2),
460
+ _get_nth_weekday_of_month(-1, SUN, FEB, self._year) + td(days=-2),
470
461
  )
471
462
 
472
463
  if self._year >= 1953:
@@ -0,0 +1,133 @@
1
+ # python-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: dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
8
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
9
+ # Website: https://github.com/dr-prodigy/python-holidays
10
+ # License: MIT (see LICENSE file)
11
+
12
+ from datetime import date
13
+ from datetime import timedelta as td
14
+
15
+ from holidays.calendars import _CustomIslamicCalendar
16
+ from holidays.constants import JAN, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
17
+ from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
19
+
20
+
21
+ class Chad(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
22
+ """
23
+ References:
24
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Chad
25
+ - https://www.ilo.org/dyn/natlex/docs/ELECTRONIC/97323/115433/F-316075167/TCD-97323.pdf # noqa: E501
26
+ """
27
+
28
+ country = "TD"
29
+ special_holidays = {
30
+ 2021: (APR, 23, "Funeral of Idriss Déby Itno"),
31
+ }
32
+
33
+ def __init__(self, *args, **kwargs) -> None:
34
+ ChristianHolidays.__init__(self)
35
+ InternationalHolidays.__init__(self)
36
+ IslamicHolidays.__init__(self, calendar=ChadIslamicCalendar())
37
+ super().__init__(*args, **kwargs)
38
+
39
+ def _add_observed(self, dt: date) -> None:
40
+ if self.observed and self._is_sunday(dt):
41
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=+1))
42
+
43
+ def _populate(self, year):
44
+ # On 11 August 1960, Chad gained independence from France.
45
+ if year <= 1960:
46
+ return None
47
+
48
+ super()._populate(year)
49
+
50
+ # New Year's Day.
51
+ self._add_observed(self._add_new_years_day("New Year's Day"))
52
+
53
+ # International Women's Day.
54
+ self._add_observed(self._add_womens_day("International Women's Day"))
55
+
56
+ # Easter Monday.
57
+ self._add_easter_monday("Easter Monday")
58
+
59
+ # Labour Day.
60
+ self._add_observed(self._add_labor_day("Labour Day"))
61
+
62
+ # Independence Day.
63
+ self._add_observed(self._add_holiday("Independence Day", AUG, 11))
64
+
65
+ # All Saints' Day.
66
+ self._add_all_saints_day("All Saints' Day")
67
+
68
+ self._add_observed(
69
+ # Republic Day.
70
+ self._add_holiday("Republic Day", NOV, 28)
71
+ )
72
+
73
+ if year >= 1991:
74
+ self._add_observed(
75
+ # Freedom and Democracy Day.
76
+ self._add_holiday("Freedom and Democracy Day", DEC, 1)
77
+ )
78
+
79
+ # Christmas Day.
80
+ self._add_christmas_day("Christmas Day")
81
+
82
+ # Eid al-Fitr.
83
+ self._add_eid_al_fitr_day("Eid al-Fitr")
84
+
85
+ # Eid al-Adha.
86
+ self._add_eid_al_adha_day("Eid al-Adha")
87
+
88
+ # Mawlid.
89
+ self._add_mawlid_day("Mawlid")
90
+
91
+
92
+ class TD(Chad):
93
+ pass
94
+
95
+
96
+ class TCD(Chad):
97
+ pass
98
+
99
+
100
+ class ChadIslamicCalendar(_CustomIslamicCalendar):
101
+ EID_AL_ADHA_DATES = {
102
+ 2015: (SEP, 24),
103
+ 2016: (SEP, 13),
104
+ 2017: (SEP, 2),
105
+ 2018: (AUG, 22),
106
+ 2019: (AUG, 11),
107
+ 2020: (JUL, 31),
108
+ 2021: (JUL, 20),
109
+ 2022: (JUL, 9),
110
+ }
111
+
112
+ EID_AL_FITR_DATES = {
113
+ 2015: (JUL, 18),
114
+ 2016: (JUL, 7),
115
+ 2017: (JUN, 26),
116
+ 2018: (JUN, 15),
117
+ 2019: (JUN, 4),
118
+ 2020: (MAY, 24),
119
+ 2021: (MAY, 13),
120
+ 2022: (MAY, 2),
121
+ 2023: (APR, 21),
122
+ }
123
+
124
+ MAWLID_DATES = {
125
+ 2015: ((JAN, 3), (DEC, 24)),
126
+ 2016: (DEC, 12),
127
+ 2017: (DEC, 1),
128
+ 2018: (NOV, 21),
129
+ 2019: (NOV, 9),
130
+ 2020: (OCT, 29),
131
+ 2021: (OCT, 18),
132
+ 2022: (OCT, 8),
133
+ }
@@ -30,7 +30,7 @@ class Chile(HolidayBase, ChristianHolidays, InternationalHolidays):
30
30
  country = "CL"
31
31
  default_language = "es"
32
32
  special_holidays = {
33
- 2022: ((SEP, 16, tr("Feriado nacional")),),
33
+ 2022: (SEP, 16, tr("Feriado nacional")),
34
34
  }
35
35
  subdivisions = (
36
36
  "AI",
@@ -113,9 +113,7 @@ class Chile(HolidayBase, ChristianHolidays, InternationalHolidays):
113
113
 
114
114
  # Saint Peter and Saint Paul (Law 16.840, Law 18.432)
115
115
  if year <= 1967 or year >= 1986:
116
- self._add_holiday(
117
- tr("San Pedro y San Pablo"), _get_movable(date(year, JUN, 29))
118
- )
116
+ self._add_holiday(tr("San Pedro y San Pablo"), _get_movable(date(year, JUN, 29)))
119
117
 
120
118
  # Day of Virgin of Carmen (Law 20.148)
121
119
  if year >= 2007:
@@ -160,9 +158,7 @@ class Chile(HolidayBase, ChristianHolidays, InternationalHolidays):
160
158
  # Columbus day (Law 3.810).
161
159
  if year >= 1922 and year != 1973:
162
160
  self._add_holiday(
163
- tr("Día del Encuentro de dos Mundos")
164
- if year >= 2000
165
- else tr("Día de la Raza"),
161
+ tr("Día del Encuentro de dos Mundos") if year >= 2000 else tr("Día de la Raza"),
166
162
  _get_movable(date(year, OCT, 12)),
167
163
  )
168
164
 
@@ -205,10 +201,7 @@ class Chile(HolidayBase, ChristianHolidays, InternationalHolidays):
205
201
  if self._year >= 2014:
206
202
  # Región de Ñuble
207
203
  self._add_holiday(
208
- tr(
209
- "Nacimiento del Prócer de la Independencia "
210
- "(Chillán y Chillán Viejo)"
211
- ),
204
+ tr("Nacimiento del Prócer de la Independencia (Chillán y Chillán Viejo)"),
212
205
  AUG,
213
206
  20,
214
207
  )
@@ -13,8 +13,7 @@ from datetime import timedelta as td
13
13
 
14
14
  from holidays.constants import OCT
15
15
  from holidays.holiday_base import HolidayBase
16
- from holidays.holiday_groups import ChineseCalendarHolidays
17
- from holidays.holiday_groups import InternationalHolidays
16
+ from holidays.holiday_groups import ChineseCalendarHolidays, InternationalHolidays
18
17
 
19
18
 
20
19
  class China(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
@@ -13,14 +13,13 @@ from datetime import date
13
13
  from datetime import timedelta as td
14
14
  from gettext import gettext as tr
15
15
 
16
- from dateutil.easter import easter
17
-
18
16
  from holidays.calendars import _get_nth_weekday_from
19
- from holidays.constants import JAN, MAR, MAY, JUN, JUL, AUG, OCT, NOV, DEC, MON
17
+ from holidays.constants import JAN, MAR, JUN, JUL, AUG, OCT, NOV, MON
20
18
  from holidays.holiday_base import HolidayBase
19
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
21
20
 
22
21
 
23
- class Colombia(HolidayBase):
22
+ class Colombia(HolidayBase, ChristianHolidays, InternationalHolidays):
24
23
  """
25
24
  Colombia has 18 holidays. The establishing of these are by:
26
25
  Ley 35 de 1939 (DEC 4): https://bit.ly/3PJwk7B
@@ -33,6 +32,11 @@ class Colombia(HolidayBase):
33
32
  default_language = "es"
34
33
  supported_languages = ("en_US", "es", "uk")
35
34
 
35
+ def __init__(self, *args, **kwargs):
36
+ ChristianHolidays.__init__(self)
37
+ InternationalHolidays.__init__(self)
38
+ super().__init__(*args, **kwargs)
39
+
36
40
  def _add_with_bridge(self, dt: date, name: str) -> None:
37
41
  """
38
42
  On the 6th of December 1983, the government of Colombia declared which
@@ -61,7 +65,7 @@ class Colombia(HolidayBase):
61
65
  super()._populate(year)
62
66
 
63
67
  # New Year's Day
64
- self._add_holiday(tr("Año Nuevo"), JAN, 1)
68
+ self._add_new_years_day(tr("Año Nuevo"))
65
69
 
66
70
  if year >= 1951:
67
71
  # Epiphany
@@ -77,7 +81,7 @@ class Colombia(HolidayBase):
77
81
  )
78
82
 
79
83
  # Labor Day
80
- self[date(year, MAY, 1)] = tr("Día del Trabajo")
84
+ self._add_labor_day(tr("Día del Trabajo"))
81
85
 
82
86
  if year >= 1951:
83
87
  # Saint Peter and Saint Paul's Day
@@ -120,36 +124,34 @@ class Colombia(HolidayBase):
120
124
 
121
125
  if year >= 1951:
122
126
  # Immaculate Conception
123
- self._add_holiday(tr("La Inmaculada Concepción"), DEC, 8)
127
+ self._add_immaculate_conception_day(tr("La Inmaculada Concepción"))
124
128
 
125
129
  # Christmas
126
- self._add_holiday(tr("Navidad"), DEC, 25)
127
-
128
- easter_date = easter(year)
130
+ self._add_christmas_day(tr("Navidad"))
129
131
 
130
132
  if year >= 1951:
131
133
  # Maundy Thursday
132
- self._add_holiday(tr("Jueves Santo"), easter_date + td(days=-3))
134
+ self._add_holy_thursday(tr("Jueves Santo"))
133
135
 
134
136
  # Good Friday
135
- self._add_holiday(tr("Viernes Santo"), easter_date + td(days=-2))
137
+ self._add_good_friday(tr("Viernes Santo"))
136
138
 
137
139
  # Ascension of Jesus
138
140
  self._add_with_bridge(
139
- easter_date + td(days=+39),
141
+ self._easter_sunday + td(days=+39),
140
142
  tr("Ascensión del señor"),
141
143
  )
142
144
 
143
145
  # Corpus Christi
144
146
  self._add_with_bridge(
145
- easter_date + td(days=+60),
147
+ self._easter_sunday + td(days=+60),
146
148
  tr("Corpus Christi"),
147
149
  )
148
150
 
149
151
  if year >= 1984:
150
152
  # Sacred Heart
151
153
  self._add_with_bridge(
152
- easter_date + td(days=+68),
154
+ self._easter_sunday + td(days=+68),
153
155
  tr("Sagrado Corazón"),
154
156
  )
155
157
 
@@ -118,9 +118,7 @@ class CostaRica(HolidayBase, ChristianHolidays, InternationalHolidays):
118
118
  if year >= 2022:
119
119
  dt = date(year, AUG, 31)
120
120
  # Day of the Black Person and Afro-Costa Rican Culture.
121
- name = self.tr(
122
- "Día de la Persona Negra y la Cultura Afrocostarricense"
123
- )
121
+ name = self.tr("Día de la Persona Negra y la Cultura Afrocostarricense")
124
122
  if self.observed and year in {2022, 2023}:
125
123
  dt = _get_nth_weekday_from(1, SUN, dt)
126
124
  name = self.tr("%s (Observado)") % name
@@ -137,9 +135,7 @@ class CostaRica(HolidayBase, ChristianHolidays, InternationalHolidays):
137
135
  # Law #9803 from 19.05.2020
138
136
  if year <= 2019:
139
137
  # Cultures Day.
140
- add_observed_holiday(
141
- tr("Día de las Culturas"), date(year, OCT, 12)
142
- )
138
+ add_observed_holiday(tr("Día de las Culturas"), date(year, OCT, 12))
143
139
 
144
140
  # Law #9803 from 19.05.2020
145
141
  if year >= 2020:
@@ -11,81 +11,135 @@
11
11
 
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
+ from gettext import gettext as tr
14
15
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, APR, MAY, JUL, AUG, OCT, DEC
16
+ from holidays.constants import APR, MAY, JUL, OCT
18
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
19
 
20
20
 
21
- class Curacao(HolidayBase):
21
+ class Curacao(HolidayBase, ChristianHolidays, InternationalHolidays):
22
22
  """
23
- https://loketdigital.gobiernu.cw/Loket/product/571960bbe1e5fe8712b10a1323630e70
23
+ https://loketdigital.gobiernu.cw/Loket/product/571960bbe1e5fe8712b10a1323630e70 # noqa: E501
24
+ https://en.wikipedia.org/wiki/Public_holidays_in_Cura%C3%A7ao
25
+
26
+ New Year's Eve (Vispu di Aña Nobo) is a half-day public holiday, though
27
+ this isn't supported by Python Holidays so it won't be implemented.
24
28
  """
25
29
 
26
30
  country = "CW"
31
+ default_language = "pap"
32
+ supported_languages = ("en_US", "nl", "pap", "uk")
33
+
34
+ def __init__(self, *args, **kwargs):
35
+ ChristianHolidays.__init__(self)
36
+ InternationalHolidays.__init__(self)
37
+ super().__init__(*args, **kwargs)
27
38
 
28
39
  def _populate(self, year):
40
+ # 1954: Creation of the Netherlands Antilles.
41
+ if year <= 1953:
42
+ return None
43
+
29
44
  super()._populate(year)
30
45
 
46
+ # Aña Nobo.
47
+ # Status: In-Use.
48
+
31
49
  # New Year's Day
32
- self[date(year, JAN, 1)] = "Nieuwjaarsdag [New Year's Day]"
50
+ self._add_new_years_day(tr("Aña Nobo"))
51
+
52
+ # Dialuna despues di Carnaval Grandi.
53
+ # Status: In-Use.
54
+ # Started in 1947.
55
+
56
+ # Carnival Monday
57
+ self._add_ash_monday(tr("Dialuna despues di Carnaval Grandi"))
33
58
 
34
- easter_date = easter(year)
35
- # Carnaval Monday
36
- self[
37
- easter_date + td(days=-48)
38
- ] = "Maandag na de Grote Karnaval [Carnaval Monday]"
59
+ # Bièrnèsantu.
60
+ # Status: In-Use.
39
61
 
40
62
  # Good Friday
41
- self[easter_date + td(days=-2)] = "Goede Vrijdag [Good Friday]"
63
+ self._add_good_friday(tr("Bièrnèsantu"))
42
64
 
43
- # Easter Monday
44
- self[
45
- easter_date + td(days=+1)
46
- ] = "Di Dos Dia di Pasku di Resureccion [Easter Monday]"
65
+ # Pasku di Resurekshon.
66
+ # Status: In-Use
47
67
 
48
- # King's Day
49
- if year >= 2014:
50
- kings_day = date(year, APR, 27)
51
- if self._is_sunday(kings_day):
52
- kings_day += td(days=-1)
68
+ # Easter Sunday
69
+ self._add_easter_sunday(tr("Pasku di Resurekshon"))
53
70
 
54
- self[kings_day] = "Koningsdag [King's Day]"
71
+ # Di dos dia di Pasku di Resurekshon.
72
+ # Status: In-Use.
55
73
 
56
- # Queen's Day
57
- if 1891 <= year <= 2013:
58
- queens_day = date(year, APR, 30)
59
- if year <= 1948:
60
- queens_day = date(year, AUG, 31)
74
+ # Easter Monday
75
+ self._add_easter_monday(tr("Di dos dia di Pasku di Resurekshon"))
76
+
77
+ # Dia di la Reina/Dia di Rey.
78
+ # Status: In-Use.
79
+ # Started under Queen Wilhelmina in 1891.
80
+ # Queen Beatrix kept Queen Juliana's Birthday after her coronation.
81
+ # Switched to Aña di Rey in 2014 for King Willem-Alexander.
82
+ # Have its name changed again to Dia di Rey from 2021 onwards.
83
+
84
+ # King's / Queen's Day
85
+ name = (
86
+ # King's Day.
87
+ tr("Dia di Rey")
88
+ if year >= 2014
89
+ # Queen's Day.
90
+ else tr("Dia di la Reina")
91
+ )
92
+ if year >= 2014:
93
+ dt = date(year, APR, 27)
94
+ else:
95
+ dt = date(year, APR, 30)
96
+ if self._is_sunday(dt):
97
+ dt += td(days=-1) if year >= 1980 else td(days=+1)
98
+ self._add_holiday(name, dt)
99
+
100
+ # Dia di Obrero.
101
+ # Status: In-Use.
102
+ # If fall on Sunday, then this will be move to next working day.
103
+
104
+ dt = date(year, MAY, 1)
105
+ if self._is_sunday(dt) or (self._is_monday(dt) and year <= 1979):
106
+ dt += td(days=+1)
107
+ # Labor Day
108
+ self._add_holiday(tr("Dia di Obrero"), dt)
109
+
110
+ # Dia di Asenshon.
111
+ # Status: In-Use.
61
112
 
62
- if self._is_sunday(queens_day):
63
- queens_day += td(days=1) if year < 1980 else td(days=-1)
113
+ # Ascension Day
114
+ self._add_ascension_thursday(tr("Dia di Asenshon"))
64
115
 
65
- self[queens_day] = "Anja di La Reina [Queen's Day]"
116
+ # Dia di Himno i Bandera.
117
+ # Status: In-Use.
118
+ # Starts in 1984.
66
119
 
67
- # Labour Day
68
- labour_day = date(year, MAY, 1)
69
- if self._is_sunday(labour_day):
70
- labour_day += td(days=+1)
71
- self[labour_day] = "Dia di Obrero [Labour Day]"
120
+ if year >= 1984:
121
+ # National Anthem and Flag Day
122
+ self._add_holiday(tr("Dia di Himno i Bandera"), JUL, 2)
72
123
 
73
- # Ascension Day
74
- self[easter_date + td(days=+39)] = "Hemelvaartsdag [Ascension Day]"
124
+ # Dia di Pais Kòrsou / Dia di autonomia.
125
+ # Status: In-Use.
126
+ # Starts in 2010.
75
127
 
76
- # Dia di Himno y Bandera
77
- self[
78
- date(year, JUL, 2)
79
- ] = "Dia di Himno y Bandera [National Anthem & Flag Day]"
128
+ if year >= 2010:
129
+ # Curaçao Day
130
+ self._add_holiday(tr("Dia di Pais Kòrsou"), OCT, 10)
80
131
 
81
- # Dia di Pais Kòrsou
82
- self[date(year, OCT, 10)] = "Dia di Pais Kòrsou [Curaçao Day]"
132
+ # Pasku di Nasementu.
133
+ # Status: In-Use.
83
134
 
84
135
  # Christmas Day
85
- self[date(year, DEC, 25)] = "Kerstdag [Christmas]"
136
+ self._add_christmas_day(tr("Pasku di Nasementu"))
137
+
138
+ # Di dos dia di Pasku di Nasementu.
139
+ # Status: In-Use.
86
140
 
87
- # Second Christmas
88
- self[date(year, DEC, 26)] = "2de Kerstdag [Second Christmas]"
141
+ # Second Day of Christmas
142
+ self._add_christmas_day_two(tr("Di dos dia di Pasku di Nasementu"))
89
143
 
90
144
 
91
145
  class CW(Curacao):
@@ -78,17 +78,13 @@ class Cyprus(HolidayBase, ChristianHolidays, InternationalHolidays):
78
78
  self._add_holiday(tr("Ημέρα του Όχι"), OCT, 28)
79
79
 
80
80
  # Christmas Eve.
81
- self._add_christmas_eve(
82
- tr("Παραμονή Χριστουγέννων"), GREGORIAN_CALENDAR
83
- )
81
+ self._add_christmas_eve(tr("Παραμονή Χριστουγέννων"), GREGORIAN_CALENDAR)
84
82
 
85
83
  # Christmas Day.
86
84
  self._add_christmas_day(tr("Χριστούγεννα"), GREGORIAN_CALENDAR)
87
85
 
88
86
  # Day After Christmas.
89
- self._add_christmas_day_two(
90
- tr("Δεύτερη μέρα Χριστουγέννων"), GREGORIAN_CALENDAR
91
- )
87
+ self._add_christmas_day_two(tr("Δεύτερη μέρα Χριστουγέννων"), GREGORIAN_CALENDAR)
92
88
 
93
89
 
94
90
  class CY(Cyprus):
@@ -29,9 +29,7 @@ class Czechia(HolidayBase):
29
29
  super()._populate(year)
30
30
 
31
31
  self[date(year, JAN, 1)] = (
32
- "Den obnovy samostatného českého" " státu"
33
- if year >= 2000
34
- else "Nový rok"
32
+ "Den obnovy samostatného českého státu" if year >= 2000 else "Nový rok"
35
33
  )
36
34
 
37
35
  easter_date = easter(year)
@@ -44,20 +42,14 @@ class Czechia(HolidayBase):
44
42
  if year >= 1992:
45
43
  self[date(year, MAY, 8)] = "Den vítězství"
46
44
  elif year >= 1947:
47
- self[date(year, MAY, 9)] = (
48
- "Den vítězství nad hitlerovským" " fašismem"
49
- )
45
+ self[date(year, MAY, 9)] = "Den vítězství nad hitlerovským fašismem"
50
46
  if year >= 1951:
51
- self[date(year, JUL, 5)] = (
52
- "Den slovanských věrozvěstů " "Cyrila a Metoděje"
53
- )
47
+ self[date(year, JUL, 5)] = "Den slovanských věrozvěstů Cyrila a Metoděje"
54
48
  self[date(year, JUL, 6)] = "Den upálení mistra Jana Husa"
55
49
  if year >= 2000:
56
50
  self[date(year, SEP, 28)] = "Den české státnosti"
57
51
  if year >= 1951:
58
- self[date(year, OCT, 28)] = (
59
- "Den vzniku samostatného " "československého státu"
60
- )
52
+ self[date(year, OCT, 28)] = "Den vzniku samostatného československého státu"
61
53
  if year >= 1990:
62
54
  self[date(year, NOV, 17)] = "Den boje za svobodu a demokracii"
63
55
 
@@ -55,9 +55,7 @@ class Denmark(HolidayBase, ChristianHolidays, InternationalHolidays):
55
55
  # See https://www.ft.dk/samling/20222/lovforslag/l13/index.htm
56
56
  if year <= 2023:
57
57
  # Great Day of Prayers.
58
- self._add_holiday(
59
- tr("Store bededag"), self._easter_sunday + td(days=+26)
60
- )
58
+ self._add_holiday(tr("Store bededag"), self._easter_sunday + td(days=+26))
61
59
 
62
60
  # Ascension Day.
63
61
  self._add_ascension_thursday(tr("Kristi himmelfartsdag"))
@@ -28,9 +28,7 @@ class DominicanRepublic(HolidayBase, ChristianHolidays, InternationalHolidays):
28
28
  default_language = "es"
29
29
  supported_languages = ("en_US", "es", "uk")
30
30
 
31
- def _add_movable_holiday(
32
- self, name: str, dt: date, include_sun: bool = False
33
- ) -> None:
31
+ def _add_movable_holiday(self, name: str, dt: date, include_sun: bool = False) -> None:
34
32
  # Law No. 139-97 - Holidays Dominican Republic - Jun 27, 1997
35
33
  if dt >= date(1997, JUN, 27):
36
34
  if self._is_tuesday(dt) or self._is_wednesday(dt):