holidays 0.25__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 (331) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/__init__.py +9 -7
  3. holidays/calendars/buddhist.py +445 -0
  4. holidays/calendars/chinese.py +1238 -431
  5. holidays/calendars/custom.py +1 -3
  6. holidays/calendars/hebrew.py +2 -2
  7. holidays/calendars/hindu.py +445 -0
  8. holidays/calendars/islamic.py +1347 -1347
  9. holidays/calendars/thai.py +229 -38
  10. holidays/countries/__init__.py +8 -0
  11. holidays/countries/albania.py +6 -17
  12. holidays/countries/andorra.py +2 -6
  13. holidays/countries/angola.py +53 -39
  14. holidays/countries/argentina.py +25 -35
  15. holidays/countries/armenia.py +1 -0
  16. holidays/countries/aruba.py +109 -48
  17. holidays/countries/australia.py +31 -69
  18. holidays/countries/austria.py +1 -0
  19. holidays/countries/azerbaijan.py +44 -71
  20. holidays/countries/bahrain.py +7 -7
  21. holidays/countries/bangladesh.py +1 -3
  22. holidays/countries/belarus.py +2 -3
  23. holidays/countries/belize.py +128 -0
  24. holidays/countries/bolivia.py +2 -6
  25. holidays/countries/bosnia_and_herzegovina.py +5 -17
  26. holidays/countries/botswana.py +37 -44
  27. holidays/countries/brazil.py +4 -7
  28. holidays/countries/brunei.py +427 -0
  29. holidays/countries/bulgaria.py +3 -6
  30. holidays/countries/burkina_faso.py +141 -0
  31. holidays/countries/burundi.py +2 -5
  32. holidays/countries/cambodia.py +323 -0
  33. holidays/countries/cameroon.py +183 -0
  34. holidays/countries/canada.py +20 -28
  35. holidays/countries/chad.py +133 -0
  36. holidays/countries/chile.py +6 -13
  37. holidays/countries/china.py +21 -25
  38. holidays/countries/colombia.py +18 -15
  39. holidays/countries/costa_rica.py +25 -27
  40. holidays/countries/cuba.py +28 -15
  41. holidays/countries/curacao.py +100 -46
  42. holidays/countries/cyprus.py +3 -6
  43. holidays/countries/czechia.py +4 -12
  44. holidays/countries/denmark.py +2 -3
  45. holidays/countries/dominican_republic.py +2 -3
  46. holidays/countries/ecuador.py +55 -54
  47. holidays/countries/egypt.py +2 -5
  48. holidays/countries/el_salvador.py +101 -0
  49. holidays/countries/eswatini.py +34 -44
  50. holidays/countries/ethiopia.py +7 -14
  51. holidays/countries/finland.py +2 -3
  52. holidays/countries/france.py +1 -0
  53. holidays/countries/gabon.py +139 -0
  54. holidays/countries/georgia.py +1 -0
  55. holidays/countries/germany.py +1 -0
  56. holidays/countries/greece.py +7 -6
  57. holidays/countries/honduras.py +17 -13
  58. holidays/countries/hongkong.py +117 -126
  59. holidays/countries/hungary.py +93 -92
  60. holidays/countries/iceland.py +1 -0
  61. holidays/countries/india.py +4 -11
  62. holidays/countries/indonesia.py +178 -142
  63. holidays/countries/ireland.py +5 -15
  64. holidays/countries/isle_of_man.py +23 -5
  65. holidays/countries/israel.py +12 -24
  66. holidays/countries/italy.py +6 -7
  67. holidays/countries/jamaica.py +10 -18
  68. holidays/countries/japan.py +11 -16
  69. holidays/countries/kazakhstan.py +7 -22
  70. holidays/countries/kenya.py +44 -26
  71. holidays/countries/kyrgyzstan.py +2 -5
  72. holidays/countries/latvia.py +2 -6
  73. holidays/countries/lesotho.py +52 -32
  74. holidays/countries/liechtenstein.py +1 -0
  75. holidays/countries/lithuania.py +4 -12
  76. holidays/countries/madagascar.py +3 -9
  77. holidays/countries/malawi.py +34 -26
  78. holidays/countries/malaysia.py +335 -343
  79. holidays/countries/marshall_islands.py +4 -9
  80. holidays/countries/mexico.py +2 -3
  81. holidays/countries/moldova.py +4 -6
  82. holidays/countries/monaco.py +17 -26
  83. holidays/countries/montenegro.py +34 -24
  84. holidays/countries/morocco.py +8 -5
  85. holidays/countries/mozambique.py +35 -31
  86. holidays/countries/namibia.py +54 -35
  87. holidays/countries/netherlands.py +1 -0
  88. holidays/countries/new_zealand.py +166 -134
  89. holidays/countries/nicaragua.py +27 -22
  90. holidays/countries/nigeria.py +6 -17
  91. holidays/countries/north_macedonia.py +3 -8
  92. holidays/countries/norway.py +2 -3
  93. holidays/countries/pakistan.py +73 -75
  94. holidays/countries/panama.py +25 -24
  95. holidays/countries/paraguay.py +55 -47
  96. holidays/countries/peru.py +1 -0
  97. holidays/countries/philippines.py +6 -2
  98. holidays/countries/poland.py +4 -9
  99. holidays/countries/portugal.py +4 -11
  100. holidays/countries/romania.py +4 -5
  101. holidays/countries/russia.py +1 -0
  102. holidays/countries/san_marino.py +26 -27
  103. holidays/countries/saudi_arabia.py +8 -22
  104. holidays/countries/serbia.py +22 -31
  105. holidays/countries/singapore.py +181 -189
  106. holidays/countries/slovakia.py +2 -4
  107. holidays/countries/south_africa.py +60 -62
  108. holidays/countries/south_korea.py +59 -26
  109. holidays/countries/spain.py +7 -10
  110. holidays/countries/sweden.py +2 -3
  111. holidays/countries/switzerland.py +1 -0
  112. holidays/countries/taiwan.py +20 -20
  113. holidays/countries/thailand.py +36 -82
  114. holidays/countries/turkey.py +1 -3
  115. holidays/countries/ukraine.py +7 -18
  116. holidays/countries/united_arab_emirates.py +23 -31
  117. holidays/countries/united_kingdom.py +124 -116
  118. holidays/countries/united_states.py +42 -72
  119. holidays/countries/uruguay.py +1 -0
  120. holidays/countries/vatican_city.py +64 -32
  121. holidays/countries/venezuela.py +9 -6
  122. holidays/countries/vietnam.py +6 -20
  123. holidays/countries/zambia.py +63 -33
  124. holidays/countries/zimbabwe.py +56 -37
  125. holidays/financial/european_central_bank.py +15 -16
  126. holidays/financial/ny_stock_exchange.py +80 -86
  127. holidays/groups/__init__.py +18 -0
  128. holidays/groups/buddhist.py +71 -0
  129. holidays/groups/chinese.py +235 -0
  130. holidays/groups/christian.py +483 -0
  131. holidays/groups/hindu.py +71 -0
  132. holidays/groups/international.py +157 -0
  133. holidays/groups/islamic.py +288 -0
  134. holidays/groups/thai.py +157 -0
  135. holidays/helpers.py +20 -0
  136. holidays/holiday_base.py +54 -76
  137. holidays/holiday_groups.py +11 -1053
  138. holidays/locale/am/LC_MESSAGES/ET.mo +0 -0
  139. holidays/locale/am/LC_MESSAGES/ET.po +20 -15
  140. holidays/locale/ar/LC_MESSAGES/CA.mo +0 -0
  141. holidays/locale/ar/LC_MESSAGES/CA.po +184 -0
  142. holidays/locale/ar/LC_MESSAGES/ET.mo +0 -0
  143. holidays/locale/ar/LC_MESSAGES/ET.po +92 -0
  144. holidays/locale/ar/LC_MESSAGES/UA.mo +0 -0
  145. holidays/locale/ar/LC_MESSAGES/UA.po +97 -0
  146. holidays/locale/be/LC_MESSAGES/BY.po +11 -13
  147. holidays/locale/bg/LC_MESSAGES/BG.po +13 -15
  148. holidays/locale/da/LC_MESSAGES/DK.po +13 -12
  149. holidays/locale/de/LC_MESSAGES/AT.po +14 -14
  150. holidays/locale/de/LC_MESSAGES/CH.po +91 -56
  151. holidays/locale/de/LC_MESSAGES/DE.po +32 -32
  152. holidays/locale/de/LC_MESSAGES/LI.po +23 -23
  153. holidays/locale/el/LC_MESSAGES/CY.po +16 -16
  154. holidays/locale/el/LC_MESSAGES/GR.mo +0 -0
  155. holidays/locale/el/LC_MESSAGES/GR.po +21 -17
  156. holidays/locale/en/LC_MESSAGES/CA.po +43 -43
  157. holidays/locale/en_US/LC_MESSAGES/AM.mo +0 -0
  158. holidays/locale/en_US/LC_MESSAGES/AM.po +20 -20
  159. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  160. holidays/locale/en_US/LC_MESSAGES/AR.po +34 -33
  161. holidays/locale/en_US/LC_MESSAGES/AT.po +13 -13
  162. holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
  163. holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
  164. holidays/locale/en_US/LC_MESSAGES/BG.po +13 -15
  165. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  166. holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
  167. holidays/locale/en_US/LC_MESSAGES/BY.po +11 -13
  168. holidays/locale/en_US/LC_MESSAGES/CA.mo +0 -0
  169. holidays/locale/en_US/LC_MESSAGES/CA.po +70 -37
  170. holidays/locale/en_US/LC_MESSAGES/CH.po +91 -56
  171. holidays/locale/en_US/LC_MESSAGES/CL.po +39 -38
  172. holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
  173. holidays/locale/en_US/LC_MESSAGES/CO.po +27 -27
  174. holidays/locale/en_US/LC_MESSAGES/CR.mo +0 -0
  175. holidays/locale/en_US/LC_MESSAGES/CR.po +19 -19
  176. holidays/locale/en_US/LC_MESSAGES/CU.po +10 -10
  177. holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
  178. holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
  179. holidays/locale/en_US/LC_MESSAGES/CY.po +16 -16
  180. holidays/locale/en_US/LC_MESSAGES/DE.po +30 -30
  181. holidays/locale/en_US/LC_MESSAGES/DK.po +12 -11
  182. holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
  183. holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
  184. holidays/locale/en_US/LC_MESSAGES/ET.mo +0 -0
  185. holidays/locale/en_US/LC_MESSAGES/ET.po +20 -15
  186. holidays/locale/en_US/LC_MESSAGES/FI.po +15 -15
  187. holidays/locale/en_US/LC_MESSAGES/FR.po +27 -24
  188. holidays/locale/en_US/LC_MESSAGES/GE.po +23 -27
  189. holidays/locale/en_US/LC_MESSAGES/GR.mo +0 -0
  190. holidays/locale/en_US/LC_MESSAGES/GR.po +21 -17
  191. holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
  192. holidays/locale/en_US/LC_MESSAGES/HN.po +17 -12
  193. holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
  194. holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
  195. holidays/locale/en_US/LC_MESSAGES/IS.po +17 -17
  196. holidays/locale/en_US/LC_MESSAGES/JP.po +25 -25
  197. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  198. holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
  199. holidays/locale/en_US/LC_MESSAGES/LI.po +22 -22
  200. holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
  201. holidays/locale/en_US/LC_MESSAGES/MC.po +27 -27
  202. holidays/locale/en_US/LC_MESSAGES/MD.po +13 -13
  203. holidays/locale/en_US/LC_MESSAGES/MX.po +9 -12
  204. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  205. holidays/locale/en_US/LC_MESSAGES/NI.po +15 -15
  206. holidays/locale/en_US/LC_MESSAGES/NL.po +12 -12
  207. holidays/locale/en_US/LC_MESSAGES/NO.po +13 -13
  208. holidays/locale/en_US/LC_MESSAGES/PE.po +30 -30
  209. holidays/locale/en_US/LC_MESSAGES/PL.po +38 -21
  210. holidays/locale/en_US/LC_MESSAGES/PT.po +39 -36
  211. holidays/locale/en_US/LC_MESSAGES/PY.po +16 -16
  212. holidays/locale/en_US/LC_MESSAGES/RO.po +12 -12
  213. holidays/locale/en_US/LC_MESSAGES/RS.mo +0 -0
  214. holidays/locale/en_US/LC_MESSAGES/RS.po +17 -19
  215. holidays/locale/en_US/LC_MESSAGES/RU.po +11 -10
  216. holidays/locale/en_US/LC_MESSAGES/SE.po +19 -19
  217. holidays/locale/en_US/LC_MESSAGES/SK.po +17 -18
  218. holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
  219. holidays/locale/en_US/LC_MESSAGES/UA.po +18 -19
  220. holidays/locale/en_US/LC_MESSAGES/UY.po +15 -15
  221. holidays/locale/en_US/LC_MESSAGES/VE.po +16 -16
  222. holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
  223. holidays/locale/es/LC_MESSAGES/AR.po +34 -33
  224. holidays/locale/es/LC_MESSAGES/CL.po +39 -38
  225. holidays/locale/es/LC_MESSAGES/CO.mo +0 -0
  226. holidays/locale/es/LC_MESSAGES/CO.po +24 -24
  227. holidays/locale/es/LC_MESSAGES/CR.mo +0 -0
  228. holidays/locale/es/LC_MESSAGES/CR.po +19 -19
  229. holidays/locale/es/LC_MESSAGES/CU.po +10 -10
  230. holidays/locale/es/LC_MESSAGES/DO.po +12 -12
  231. holidays/locale/es/LC_MESSAGES/EC.po +11 -12
  232. holidays/locale/es/LC_MESSAGES/HN.mo +0 -0
  233. holidays/locale/es/LC_MESSAGES/HN.po +17 -12
  234. holidays/locale/es/LC_MESSAGES/MX.po +9 -12
  235. holidays/locale/es/LC_MESSAGES/NI.po +12 -12
  236. holidays/locale/es/LC_MESSAGES/PE.po +30 -30
  237. holidays/locale/es/LC_MESSAGES/PY.po +16 -16
  238. holidays/locale/es/LC_MESSAGES/UY.po +15 -15
  239. holidays/locale/es/LC_MESSAGES/VE.po +16 -16
  240. holidays/locale/fi/LC_MESSAGES/FI.po +16 -16
  241. holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
  242. holidays/locale/fr/LC_MESSAGES/CH.po +91 -56
  243. holidays/locale/fr/LC_MESSAGES/FR.po +27 -24
  244. holidays/locale/fr/LC_MESSAGES/MC.po +23 -23
  245. holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
  246. holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
  247. holidays/locale/hy/LC_MESSAGES/AM.po +16 -16
  248. holidays/locale/is/LC_MESSAGES/IS.po +18 -18
  249. holidays/locale/it/LC_MESSAGES/CH.po +91 -56
  250. holidays/locale/ja/LC_MESSAGES/JP.po +25 -25
  251. holidays/locale/ka/LC_MESSAGES/GE.po +23 -27
  252. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  253. holidays/locale/km/LC_MESSAGES/KH.po +139 -0
  254. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  255. holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
  256. holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
  257. holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
  258. holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
  259. holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
  260. holidays/locale/nl/LC_MESSAGES/NL.po +13 -13
  261. holidays/locale/no/LC_MESSAGES/NO.po +14 -14
  262. holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
  263. holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
  264. holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
  265. holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
  266. holidays/locale/pl/LC_MESSAGES/PL.po +38 -21
  267. holidays/locale/pt_PT/LC_MESSAGES/PT.po +39 -36
  268. holidays/locale/ro/LC_MESSAGES/MD.po +14 -15
  269. holidays/locale/ro/LC_MESSAGES/RO.po +13 -14
  270. holidays/locale/ru/LC_MESSAGES/RU.po +11 -9
  271. holidays/locale/sk/LC_MESSAGES/SK.po +17 -18
  272. holidays/locale/sr/LC_MESSAGES/RS.mo +0 -0
  273. holidays/locale/sr/LC_MESSAGES/RS.po +15 -17
  274. holidays/locale/sv/LC_MESSAGES/FI.po +16 -16
  275. holidays/locale/sv/LC_MESSAGES/SE.po +20 -20
  276. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  277. holidays/locale/th/LC_MESSAGES/BN.po +96 -0
  278. holidays/locale/th/LC_MESSAGES/CA.po +42 -42
  279. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  280. holidays/locale/th/LC_MESSAGES/KH.po +145 -0
  281. holidays/locale/th/LC_MESSAGES/TH.po +41 -41
  282. holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
  283. holidays/locale/uk/LC_MESSAGES/AR.po +35 -35
  284. holidays/locale/uk/LC_MESSAGES/AT.po +15 -16
  285. holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
  286. holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
  287. holidays/locale/uk/LC_MESSAGES/CH.po +92 -58
  288. holidays/locale/uk/LC_MESSAGES/CL.po +40 -40
  289. holidays/locale/uk/LC_MESSAGES/CO.mo +0 -0
  290. holidays/locale/uk/LC_MESSAGES/CO.po +28 -29
  291. holidays/locale/uk/LC_MESSAGES/CR.mo +0 -0
  292. holidays/locale/uk/LC_MESSAGES/CR.po +20 -21
  293. holidays/locale/uk/LC_MESSAGES/CU.po +11 -12
  294. holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
  295. holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
  296. holidays/locale/uk/LC_MESSAGES/DE.po +33 -34
  297. holidays/locale/uk/LC_MESSAGES/DK.po +14 -14
  298. holidays/locale/uk/LC_MESSAGES/DO.po +13 -14
  299. holidays/locale/uk/LC_MESSAGES/EC.po +12 -14
  300. holidays/locale/uk/LC_MESSAGES/FI.po +17 -18
  301. holidays/locale/uk/LC_MESSAGES/FR.po +28 -26
  302. holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
  303. holidays/locale/uk/LC_MESSAGES/HN.po +18 -14
  304. holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
  305. holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
  306. holidays/locale/uk/LC_MESSAGES/IS.po +19 -20
  307. holidays/locale/uk/LC_MESSAGES/LI.po +24 -25
  308. holidays/locale/uk/LC_MESSAGES/MC.po +27 -28
  309. holidays/locale/uk/LC_MESSAGES/MD.po +14 -15
  310. holidays/locale/uk/LC_MESSAGES/MX.po +10 -14
  311. holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
  312. holidays/locale/uk/LC_MESSAGES/NI.po +16 -17
  313. holidays/locale/uk/LC_MESSAGES/NL.po +14 -15
  314. holidays/locale/uk/LC_MESSAGES/NO.po +15 -16
  315. holidays/locale/uk/LC_MESSAGES/PE.po +31 -32
  316. holidays/locale/uk/LC_MESSAGES/PL.po +38 -21
  317. holidays/locale/uk/LC_MESSAGES/PY.po +17 -18
  318. holidays/locale/uk/LC_MESSAGES/RO.po +13 -14
  319. holidays/locale/uk/LC_MESSAGES/SE.po +21 -22
  320. holidays/locale/uk/LC_MESSAGES/SK.po +18 -20
  321. holidays/locale/uk/LC_MESSAGES/UA.po +17 -17
  322. holidays/locale/uk/LC_MESSAGES/UY.po +16 -17
  323. holidays/locale/uk/LC_MESSAGES/VE.po +17 -18
  324. holidays/registry.py +21 -12
  325. holidays/utils.py +87 -17
  326. {holidays-0.25.dist-info → holidays-0.27.dist-info}/METADATA +282 -265
  327. holidays-0.27.dist-info/RECORD +449 -0
  328. holidays-0.25.dist-info/RECORD +0 -390
  329. {holidays-0.25.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
  330. {holidays-0.25.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
  331. {holidays-0.25.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
@@ -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):
@@ -28,6 +28,7 @@ class Cyprus(HolidayBase, ChristianHolidays, InternationalHolidays):
28
28
 
29
29
  country = "CY"
30
30
  default_language = "el"
31
+ supported_languages = ("el", "en_US")
31
32
 
32
33
  def __init__(self, *args, **kwargs):
33
34
  ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -77,17 +78,13 @@ class Cyprus(HolidayBase, ChristianHolidays, InternationalHolidays):
77
78
  self._add_holiday(tr("Ημέρα του Όχι"), OCT, 28)
78
79
 
79
80
  # Christmas Eve.
80
- self._add_christmas_eve(
81
- tr("Παραμονή Χριστουγέννων"), GREGORIAN_CALENDAR
82
- )
81
+ self._add_christmas_eve(tr("Παραμονή Χριστουγέννων"), GREGORIAN_CALENDAR)
83
82
 
84
83
  # Christmas Day.
85
84
  self._add_christmas_day(tr("Χριστούγεννα"), GREGORIAN_CALENDAR)
86
85
 
87
86
  # Day After Christmas.
88
- self._add_christmas_day_two(
89
- tr("Δεύτερη μέρα Χριστουγέννων"), GREGORIAN_CALENDAR
90
- )
87
+ self._add_christmas_day_two(tr("Δεύτερη μέρα Χριστουγέννων"), GREGORIAN_CALENDAR)
91
88
 
92
89
 
93
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
 
@@ -27,6 +27,7 @@ class Denmark(HolidayBase, ChristianHolidays, InternationalHolidays):
27
27
 
28
28
  country = "DK"
29
29
  default_language = "da"
30
+ supported_languages = ("da", "en_US", "uk")
30
31
 
31
32
  def __init__(self, *args, **kwargs):
32
33
  ChristianHolidays.__init__(self)
@@ -54,9 +55,7 @@ class Denmark(HolidayBase, ChristianHolidays, InternationalHolidays):
54
55
  # See https://www.ft.dk/samling/20222/lovforslag/l13/index.htm
55
56
  if year <= 2023:
56
57
  # Great Day of Prayers.
57
- self._add_holiday(
58
- tr("Store bededag"), self._easter_sunday + td(days=+26)
59
- )
58
+ self._add_holiday(tr("Store bededag"), self._easter_sunday + td(days=+26))
60
59
 
61
60
  # Ascension Day.
62
61
  self._add_ascension_thursday(tr("Kristi himmelfartsdag"))
@@ -26,10 +26,9 @@ class DominicanRepublic(HolidayBase, ChristianHolidays, InternationalHolidays):
26
26
 
27
27
  country = "DO"
28
28
  default_language = "es"
29
+ supported_languages = ("en_US", "es", "uk")
29
30
 
30
- def _add_movable_holiday(
31
- self, name: str, dt: date, include_sun: bool = False
32
- ) -> None:
31
+ def _add_movable_holiday(self, name: str, dt: date, include_sun: bool = False) -> None:
33
32
  # Law No. 139-97 - Holidays Dominican Republic - Jun 27, 1997
34
33
  if dt >= date(1997, JUN, 27):
35
34
  if self._is_tuesday(dt) or self._is_wednesday(dt):
@@ -27,19 +27,56 @@ class Ecuador(HolidayBase, ChristianHolidays, InternationalHolidays):
27
27
 
28
28
  country = "EC"
29
29
  default_language = "es"
30
+ supported_languages = ("en_US", "es", "uk")
30
31
 
31
32
  def __init__(self, *args, **kwargs):
32
33
  ChristianHolidays.__init__(self)
33
34
  InternationalHolidays.__init__(self)
34
35
  super().__init__(*args, **kwargs)
35
36
 
37
+ def _add_observed(
38
+ self,
39
+ dt: date,
40
+ weekend_only: bool = False,
41
+ before: bool = True,
42
+ after: bool = True,
43
+ ) -> None:
44
+ if self.observed and self._year >= 2017:
45
+ obs_date = None
46
+ # Art. 1 of Law #0 from 20.12.2016
47
+ # When holidays falls on Tuesday, the rest shall be transferred to
48
+ # preceding Monday, and if they falls on Wednesday or Thursday,
49
+ # the rest shall be transferred to Friday of the same week.
50
+ # Exceptions to this provision are January 1, December 25 and
51
+ # Shrove Tuesday.
52
+ if not weekend_only:
53
+ if self._is_tuesday(dt) and before:
54
+ obs_date = dt + td(days=-1)
55
+ elif self._is_wednesday(dt):
56
+ obs_date = dt + td(days=+2)
57
+ elif self._is_thursday(dt) and after:
58
+ obs_date = dt + td(days=+1)
59
+ # When holidays falls on Saturday or Sunday, the rest shall be
60
+ # transferred, respectively, to the preceding Friday or the
61
+ # following Monday.
62
+ if self._is_saturday(dt) and before:
63
+ obs_date = dt + td(days=-1)
64
+ elif self._is_sunday(dt) and after:
65
+ obs_date = dt + td(days=+1)
66
+ if obs_date:
67
+ self._add_holiday(self.tr("%s (Observado)") % self[dt], obs_date)
68
+
36
69
  def _populate(self, year):
37
70
  super()._populate(year)
38
- observed_dates = set()
39
- observed_weekend_dates = set()
40
71
 
41
72
  # New Year's Day.
42
- observed_weekend_dates.add(self._add_new_years_day(tr("Año Nuevo")))
73
+ name = tr("Año Nuevo")
74
+ self._add_observed(self._add_new_years_day(name), weekend_only=True)
75
+
76
+ if self.observed and year >= 2017:
77
+ dec_31 = (DEC, 31)
78
+ if self._is_friday(*dec_31):
79
+ self._add_holiday(self.tr("%s (Observado)") % self.tr(name), *dec_31)
43
80
 
44
81
  # Carnival.
45
82
  name = tr("Carnaval")
@@ -50,77 +87,41 @@ class Ecuador(HolidayBase, ChristianHolidays, InternationalHolidays):
50
87
  self._add_good_friday(tr("Viernes Santo"))
51
88
 
52
89
  # Labour Day.
53
- observed_dates.add(self._add_labor_day(tr("Día del Trabajo")))
90
+ self._add_observed(self._add_labor_day(tr("Día del Trabajo")))
54
91
 
55
- observed_dates.add(
92
+ self._add_observed(
56
93
  # The Battle of Pichincha.
57
94
  self._add_holiday(tr("Batalla de Pichincha"), MAY, 24)
58
95
  )
59
96
 
60
- observed_dates.add(
97
+ self._add_observed(
61
98
  # Declaration of Independence of Quito.
62
99
  self._add_holiday(tr("Primer Grito de Independencia"), AUG, 10)
63
100
  )
64
101
 
65
- observed_dates.add(
102
+ self._add_observed(
66
103
  # Independence of Guayaquil.
67
104
  self._add_holiday(tr("Independencia de Guayaquil"), OCT, 9)
68
105
  )
69
106
 
70
- # All Souls' Day.
71
- observed_dates.add(self._add_all_souls_day(tr("Día de los Difuntos")))
107
+ self._add_observed(
108
+ # All Souls' Day.
109
+ self._add_all_souls_day(tr("Día de los Difuntos")),
110
+ after=False,
111
+ )
72
112
 
73
- observed_dates.add(
113
+ self._add_observed(
74
114
  # Independence of Cuenca.
75
- self._add_holiday(tr("Independencia de Cuenca"), NOV, 3)
115
+ self._add_holiday(tr("Independencia de Cuenca"), NOV, 3),
116
+ before=False,
76
117
  )
77
118
 
78
- observed_weekend_dates.add(
119
+ self._add_observed(
79
120
  # Christmas Day.
80
- self._add_christmas_day(tr("Día de Navidad"))
121
+ self._add_christmas_day(tr("Día de Navidad")),
122
+ weekend_only=True,
81
123
  )
82
124
 
83
- if self.observed and year >= 2017:
84
- # Art. 1 of Law #0 from 20.12.2016
85
- # When holidays falls on Tuesday, the rest shall be transferred to
86
- # preceding Monday, and if they falls on Wednesday or Thursday,
87
- # the rest shall be transferred to Friday of the same week.
88
- # Exceptions to this provision are January 1, December 25 and
89
- # Shrove Tuesday.
90
- for dt in observed_dates:
91
- obs_date = None
92
- if self._is_tuesday(dt):
93
- obs_date = dt + td(days=-1)
94
- elif self._is_wednesday(dt):
95
- obs_date = dt + td(days=+2)
96
- elif self._is_thursday(dt):
97
- obs_date = dt + td(days=+1)
98
- if obs_date and obs_date not in observed_dates:
99
- self._add_holiday(
100
- self.tr("%s (Observado)") % self[dt], obs_date
101
- )
102
-
103
- # When holidays falls on Saturday or Sunday, the rest shall be
104
- # transferred, respectively, to the preceding Friday or the
105
- # following Monday.
106
- observed_dates = observed_dates.union(observed_weekend_dates)
107
- for dt in observed_dates:
108
- obs_date = None
109
- if self._is_saturday(dt):
110
- obs_date = dt + td(days=-1)
111
- elif self._is_sunday(dt):
112
- obs_date = dt + td(days=+1)
113
- if obs_date and obs_date not in observed_dates:
114
- self._add_holiday(
115
- self.tr("%s (Observado)") % self[dt], obs_date
116
- )
117
-
118
- dec_31 = date(year, DEC, 31)
119
- if self._is_friday(dec_31):
120
- self._add_holiday(
121
- self.tr("%s (Observado)") % self.tr("Año Nuevo"), dec_31
122
- )
123
-
124
125
 
125
126
  class EC(Ecuador):
126
127
  pass
@@ -12,13 +12,10 @@
12
12
  from holidays.calendars import JULIAN_CALENDAR
13
13
  from holidays.constants import JAN, APR, JUN, JUL, OCT
14
14
  from holidays.holiday_base import HolidayBase
15
- from holidays.holiday_groups import ChristianHolidays, IslamicHolidays
16
- from holidays.holiday_groups import InternationalHolidays
15
+ from holidays.holiday_groups import ChristianHolidays, IslamicHolidays, InternationalHolidays
17
16
 
18
17
 
19
- class Egypt(
20
- HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays
21
- ):
18
+ class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays):
22
19
  # Holidays here are estimates, it is common for the day to be pushed
23
20
  # if falls in a weekend, although not a rule that can be implemented.
24
21
  # Holidays after 2020: the following four moving date holidays whose exact
@@ -0,0 +1,101 @@
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 holidays.constants import MAY, JUN, AUG, SEP
13
+ from holidays.holiday_base import HolidayBase
14
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
15
+
16
+
17
+ class ElSalvador(HolidayBase, ChristianHolidays, InternationalHolidays):
18
+ """
19
+ References:
20
+ - https://www.transparencia.gob.sv/institutions/gd-usulutan/documents/192280/download # noqa: E501
21
+ - https://www.timeanddate.com/holidays/el-salvador
22
+ - https://www.officeholidays.com/countries/el-salvador
23
+ """
24
+
25
+ country = "SV"
26
+ subdivisions = (
27
+ "AH", # Ahuachapán
28
+ "CA", # Cabañas
29
+ "CH", # Chalatenango
30
+ "CU", # Cuscatlán
31
+ "LI", # La Libertad
32
+ "MO", # Morazán
33
+ "PA", # La Paz
34
+ "SA", # Santa Ana
35
+ "SM", # San Miguel
36
+ "SO", # Sonsonate
37
+ "SS", # San Salvador
38
+ "SV", # San Vicente
39
+ "UN", # La Unión
40
+ "US", # Usulután
41
+ )
42
+
43
+ def __init__(self, *args, **kwargs):
44
+ ChristianHolidays.__init__(self)
45
+ InternationalHolidays.__init__(self)
46
+ super().__init__(*args, **kwargs)
47
+
48
+ def _populate(self, year):
49
+ super()._populate(year)
50
+
51
+ # New Year's Day.
52
+ self._add_new_years_day("New Year's Day")
53
+
54
+ # Maundy Thursday.
55
+ self._add_holy_thursday("Maundy Thursday")
56
+
57
+ # Good Friday.
58
+ self._add_good_friday("Good Friday")
59
+
60
+ # Holy Saturday.
61
+ self._add_holy_saturday("Holy Saturday")
62
+
63
+ # Labor Day.
64
+ self._add_labor_day("Labor Day")
65
+
66
+ if year >= 2016:
67
+ # Legislative Decree #399 from Apr 14, 2016
68
+ # Mothers' Day.
69
+ self._add_holiday("Mothers' Day", MAY, 10)
70
+
71
+ if year >= 2013:
72
+ # Legislative Decree #208 from Jun 17, 2012
73
+ # Fathers' Day.
74
+ self._add_holiday("Fathers' Day", JUN, 17)
75
+
76
+ # Feast of San Salvador.
77
+ self._add_holiday("Feast of San Salvador", AUG, 6)
78
+
79
+ # Independence Day.
80
+ self._add_holiday("Independence Day", SEP, 15)
81
+
82
+ # All Souls' Day.
83
+ self._add_all_souls_day("All Souls' Day")
84
+
85
+ # Christmas Day.
86
+ self._add_christmas_day("Christmas Day")
87
+
88
+ def _add_subdiv_ss_holidays(self):
89
+ # San Salvador Day 1.
90
+ self._add_holiday("San Salvador Day 1", AUG, 3)
91
+
92
+ # San Salvador Day 2.
93
+ self._add_holiday("San Salvador Day 2", AUG, 5)
94
+
95
+
96
+ class SV(ElSalvador):
97
+ pass
98
+
99
+
100
+ class SLV(ElSalvador):
101
+ pass
@@ -13,13 +13,12 @@ import warnings
13
13
  from datetime import date
14
14
  from datetime import timedelta as td
15
15
 
16
- from dateutil.easter import easter
17
-
18
- from holidays.constants import JAN, APR, MAY, JUL, SEP, DEC
16
+ from holidays.constants import JAN, APR, JUL, SEP, DEC
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Eswatini(HolidayBase):
21
+ class Eswatini(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  """
24
23
  https://swazilii.org/sz/legislation/act/1938/71
25
24
  https://www.officeholidays.com/countries/swaziland
@@ -28,63 +27,54 @@ class Eswatini(HolidayBase):
28
27
  country = "SZ"
29
28
  special_holidays = {
30
29
  # https://mg.co.za/article/1999-12-09-swaziland-declares-bank-holidays/
31
- 1999: ((DEC, 31, "Y2K changeover"),),
32
- 2000: ((JAN, 3, "Y2K changeover"),),
30
+ 1999: (DEC, 31, "Y2K changeover"),
31
+ 2000: (JAN, 3, "Y2K changeover"),
33
32
  }
34
33
 
35
- def _populate(self, year):
36
- def _add_with_observed(
37
- hol_date: date, hol_name: str, days: int = +1
38
- ) -> None:
39
- # As of 2021/1/1, whenever a public holiday falls on a Sunday
40
- # it rolls over to the following Monday
41
- self[hol_date] = hol_name
42
- if self.observed and self._is_sunday(hol_date) and year >= 2021:
43
- self[hol_date + td(days=days)] = f"{hol_name} (Observed)"
34
+ def __init__(self, *args, **kwargs):
35
+ ChristianHolidays.__init__(self)
36
+ InternationalHolidays.__init__(self)
37
+ super().__init__(*args, **kwargs)
44
38
 
39
+ def _add_observed(self, dt: date, days: int = +1) -> None:
40
+ # As of 2021/1/1, whenever a public holiday falls on a Sunday
41
+ # it rolls over to the following Monday
42
+ if self.observed and self._is_sunday(dt) and self._year >= 2021:
43
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=days))
44
+
45
+ def _populate(self, year):
45
46
  # Observed since 1939
46
47
  if year <= 1938:
47
48
  return None
48
49
 
49
50
  super()._populate(year)
50
51
 
51
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
52
+ self._add_observed(self._add_new_years_day("New Year's Day"))
52
53
 
53
- easter_date = easter(year)
54
- self[easter_date + td(days=-2)] = "Good Friday"
55
- self[easter_date + td(days=+1)] = "Easter Monday"
56
- self[easter_date + td(days=+39)] = "Ascension Day"
54
+ self._add_good_friday("Good Friday")
55
+
56
+ self._add_easter_monday("Easter Monday")
57
+
58
+ self._add_ascension_thursday("Ascension Day")
57
59
 
58
60
  if year >= 1987:
59
- # https://www.officeholidays.com/holidays/swaziland/birthday-of-king-mswati-iii
60
- # In 2071, 2076, 2082 Apr 20 is Easter Monday,
61
- # so observed on Apr 21 (Tue)
62
- _add_with_observed(
63
- date(year, APR, 19),
64
- "King's Birthday",
65
- +2 if year in {2071, 2076, 2082} else +1,
66
- )
61
+ apr_19 = self._add_holiday("King's Birthday", APR, 19)
62
+ self._add_observed(apr_19, days=+2 if apr_19 == self._easter_sunday else +1)
67
63
 
68
64
  if year >= 1969:
69
- # In 2038 Apr 26 is Easter Monday,
70
- # so observed on Apr 27 (Tue)
71
- _add_with_observed(
72
- date(year, APR, 25),
73
- "National Flag Day",
74
- +2 if year == 2038 else +1,
75
- )
65
+ apr_25 = self._add_holiday("National Flag Day", APR, 25)
66
+ self._add_observed(apr_25, days=+2 if apr_25 == self._easter_sunday else +1)
76
67
 
77
- _add_with_observed(date(year, MAY, 1), "Worker's Day")
68
+ self._add_observed(self._add_labor_day("Worker's Day"))
78
69
 
79
70
  if year >= 1983:
80
- # https://www.officeholidays.com/holidays/swaziland/birthday-of-late-king-sobhuza
81
- _add_with_observed(
82
- date(year, JUL, 22), "Birthday of Late King Sobhuza"
83
- )
84
-
85
- _add_with_observed(date(year, SEP, 6), "Independence Day")
86
- _add_with_observed(date(year, DEC, 25), "Christmas Day", days=+2)
87
- _add_with_observed(date(year, DEC, 26), "Boxing Day")
71
+ self._add_observed(self._add_holiday("Birthday of Late King Sobhuza", JUL, 22))
72
+
73
+ self._add_observed(self._add_holiday("Independence Day", SEP, 6))
74
+
75
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
76
+
77
+ self._add_observed(self._add_christmas_day_two("Boxing Day"))
88
78
 
89
79
 
90
80
  class Swaziland(Eswatini):