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
@@ -9,77 +9,109 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from datetime import date
13
- from datetime import timedelta as td
14
-
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, AUG, SEP, NOV, DEC
12
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, OCT, NOV
18
13
  from holidays.holiday_base import HolidayBase
14
+ from holidays.holiday_groups import ChristianHolidays
19
15
 
20
16
 
21
- class VaticanCity(HolidayBase):
17
+ class VaticanCity(HolidayBase, ChristianHolidays):
22
18
  """
23
19
  References:
24
20
  - https://en.wikipedia.org/wiki/Public_holidays_in_Vatican_City
21
+ - https://www.ewtn.com/catholicism/library/solemnity-of-mary-mother-of-god-5826 # noqa: E501
22
+ - https://www.franciscanmedia.org/saint-of-the-day/saint-joseph-the-worker/ # noqa: E501
25
23
  """
26
24
 
27
25
  country = "VA"
28
26
 
27
+ def __init__(self, *args, **kwargs) -> None:
28
+ ChristianHolidays.__init__(self)
29
+ super().__init__(*args, **kwargs)
30
+
29
31
  def _populate(self, year: int) -> None:
32
+ if year <= 1928:
33
+ return None
30
34
  super()._populate(year)
31
35
 
32
36
  # Solemnity of Mary Day.
33
- self[date(year, JAN, 1)] = "Solemnity of Mary Day"
37
+ # This is supposedly the same as International New Year.
38
+ # Modern adoption across the entire Latin Church in 1931 though this
39
+ # was already celebrated in Rome as the Octave day of Christmas.
40
+ self._add_holiday("Solemnity of Mary Day", JAN, 1)
34
41
 
35
42
  # Epiphany.
36
- self[date(year, JAN, 6)] = "Epiphany"
43
+ self._add_epiphany_day("Epiphany")
37
44
 
38
45
  # Lateran Treaty Day.
39
- self[date(year, FEB, 11)] = "Lateran Treaty Day"
40
-
41
- # Anniversary of the election of Pope Francis.
42
- self[
43
- date(year, MAR, 13)
44
- ] = "Anniversary of the election of Pope Francis"
45
-
46
+ self._add_holiday("Lateran Treaty Day", FEB, 11)
47
+
48
+ if year >= 1978:
49
+ if year >= 2013:
50
+ # Anniversary of the election of Pope Francis.
51
+ dt = (MAR, 13)
52
+ elif year >= 2005:
53
+ # Anniversary of the election of Pope Benedict XVI.
54
+ dt = (APR, 19)
55
+ else:
56
+ # Anniversary of the election of Pope John Paul II.
57
+ dt = (OCT, 16)
58
+ self._add_holiday("Anniversary of the Election of the Holy Father", *dt)
59
+
60
+ # In 2005-2013 - also name day for the civilian name of
61
+ # Pope Benedict XVI (Josef Ratzinger)
46
62
  # Saint Joseph's Day.
47
- self[date(year, MAR, 19)] = "Saint Joseph's Day"
48
-
49
- easter_sunday = easter(year)
63
+ self._add_saint_josephs_day("Saint Joseph's Day")
50
64
 
51
65
  # Easter Sunday.
52
- self[easter_sunday] = "Easter Sunday"
66
+ self._add_easter_sunday("Easter Sunday")
53
67
 
54
68
  # Easter Monday.
55
- self[easter_sunday + td(days=+1)] = "Easter Monday"
69
+ self._add_easter_monday("Easter Monday")
70
+
71
+ if year >= 2013:
72
+ # Name day for the civilian name of Pope Francis
73
+ # (Jorge Mario Bergoglio)
74
+ # Saint George's Day.
75
+ self._add_saint_georges_day("Saint George's Day")
56
76
 
57
- # Saint George's Day.
58
- self[date(year, APR, 23)] = "Saint George's Day"
77
+ if year >= 1955:
78
+ # Saint Joseph the Worker's Day.
79
+ # Created in response to May Day holidays by Pope Pius XII in 1955.
80
+ self._add_holiday("Saint Joseph the Worker's Day", MAY, 1)
59
81
 
60
- # Saint Joseph the Worker's Day.
61
- self[date(year, MAY, 1)] = "Saint Joseph the Worker's Day"
82
+ if year <= 2009:
83
+ # Ascension of Christ.
84
+ self._add_ascension_thursday("Ascension of Christ")
85
+
86
+ # Corpus Christi.
87
+ self._add_corpus_christi_day("Corpus Christi")
62
88
 
63
89
  # Saints Peter and Paul.
64
- self[date(year, JUN, 29)] = "Saint Peter and Saint Paul's Day"
90
+ self._add_saints_peter_and_paul_day("Saint Peter and Saint Paul's Day")
65
91
 
66
92
  # Assumption of Mary Day.
67
- self[date(year, AUG, 15)] = "Assumption Day"
93
+ self._add_assumption_of_mary_day("Assumption Day")
68
94
 
69
95
  # Nativity Of Mary Day.
70
- self[date(year, SEP, 8)] = "Nativity of Mary Day"
96
+ self._add_nativity_of_mary_day("Nativity of Mary Day")
71
97
 
72
98
  # All Saints' Day.
73
- self[date(year, NOV, 1)] = "All Saints' Day"
99
+ self._add_all_saints_day("All Saints' Day")
100
+
101
+ if 1978 <= year <= 2004:
102
+ # Name day for the civilian name of Pope John Paul II
103
+ # (Karol Józef Wojtyła)
104
+ # Saint Charles Borromeo Day.
105
+ self._add_holiday("Saint Charles Borromeo Day", NOV, 4)
74
106
 
75
107
  # Immaculate Conception.
76
- self[date(year, DEC, 8)] = "Immaculate Conception Day"
108
+ self._add_immaculate_conception_day("Immaculate Conception Day")
77
109
 
78
110
  # Christmas Day.
79
- self[date(year, DEC, 25)] = "Christmas Day"
111
+ self._add_christmas_day("Christmas Day")
80
112
 
81
113
  # Saint Stephen's Day.
82
- self[date(year, DEC, 26)] = "Saint Stephen's Day"
114
+ self._add_christmas_day_two("Saint Stephen's Day")
83
115
 
84
116
 
85
117
  class VA(VaticanCity):
@@ -23,6 +23,7 @@ class Venezuela(HolidayBase, ChristianHolidays, InternationalHolidays):
23
23
 
24
24
  country = "VE"
25
25
  default_language = "es"
26
+ supported_languages = ("en_US", "es", "uk")
26
27
 
27
28
  def __init__(self, *args, **kwargs) -> None:
28
29
  ChristianHolidays.__init__(self)
@@ -82,12 +83,14 @@ class Venezuela(HolidayBase, ChristianHolidays, InternationalHolidays):
82
83
  # Birthday of Simon Bolivar.
83
84
  self._add_holiday(tr("Natalicio de Simón Bolívar"), JUL, 24)
84
85
 
85
- if year >= 2002:
86
- # Day of Indigenous Resistance.
87
- self._add_holiday(tr("Día de la Resistencia Indígena"), OCT, 12)
88
- elif year >= 1921:
89
- # Columbus Day.
90
- self._add_holiday(tr("Día de la Raza"), OCT, 12)
86
+ if year >= 1921:
87
+ self._add_columbus_day(
88
+ # Day of Indigenous Resistance.
89
+ tr("Día de la Resistencia Indígena")
90
+ if year >= 2002
91
+ # Columbus Day.
92
+ else tr("Día de la Raza")
93
+ )
91
94
 
92
95
  # Note: not sure about the start year nor the reason this was
93
96
  # Note: celebrated; the historical records are unclear
@@ -13,8 +13,7 @@ from datetime import timedelta as td
13
13
 
14
14
  from holidays.constants import APR, SEP
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 Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
@@ -36,9 +35,7 @@ class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
36
35
  observed_dates = set()
37
36
 
38
37
  # New Year's Day
39
- observed_dates.add(
40
- self._add_new_years_day("International New Year's Day")
41
- )
38
+ observed_dates.add(self._add_new_years_day("International New Year's Day"))
42
39
 
43
40
  # Lunar New Year
44
41
  self._add_chinese_new_years_eve("Vietnamese New Year's Eve")
@@ -51,16 +48,10 @@ class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
51
48
  # Vietnamese Kings' Commemoration Day
52
49
  # https://en.wikipedia.org/wiki/H%C3%B9ng_Kings%27_Festival
53
50
  if year >= 2007:
54
- observed_dates.add(
55
- self._add_chinese_calendar_holiday(
56
- "Hung Kings Commemoration Day", 3, 10
57
- )
58
- )
51
+ observed_dates.add(self._add_hung_kings_day("Hung Kings Commemoration Day"))
59
52
 
60
53
  # Liberation Day/Reunification Day
61
- observed_dates.add(
62
- self._add_holiday("Liberation Day/Reunification Day", APR, 30)
63
- )
54
+ observed_dates.add(self._add_holiday("Liberation Day/Reunification Day", APR, 30))
64
55
 
65
56
  # International Labor Day
66
57
  observed_dates.add(self._add_labor_day("International Labor Day"))
@@ -73,14 +64,9 @@ class Vietnam(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
73
64
  if not self._is_weekend(dt):
74
65
  continue
75
66
  next_workday = dt + td(days=+1)
76
- while (
77
- self._is_weekend(next_workday)
78
- or next_workday in observed_dates
79
- ):
67
+ while self._is_weekend(next_workday) or next_workday in observed_dates:
80
68
  next_workday += td(days=+1)
81
- observed_dates.add(
82
- self._add_holiday(f"{self[dt]} (Observed)", next_workday)
83
- )
69
+ observed_dates.add(self._add_holiday(f"{self[dt]} (Observed)", next_workday))
84
70
 
85
71
 
86
72
  class VN(Vietnam):
@@ -12,14 +12,13 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import easter
16
-
17
15
  from holidays.calendars import _get_nth_weekday_of_month
18
- from holidays.constants import JAN, MAR, APR, MAY, JUL, AUG, SEP, OCT, DEC, MON
16
+ from holidays.constants import MAR, APR, JUL, AUG, SEP, OCT, MON
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Zambia(HolidayBase):
21
+ class Zambia(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  """
24
23
  https://www.officeholidays.com/countries/zambia/
25
24
  https://www.timeanddate.com/holidays/zambia/
@@ -34,8 +33,7 @@ class Zambia(HolidayBase):
34
33
  (
35
34
  SEP,
36
35
  13,
37
- "Inauguration ceremony of President-elect "
38
- "and Vice President-elect",
36
+ "Inauguration ceremony of President-elect and Vice President-elect",
39
37
  ),
40
38
  ),
41
39
  2018: (
@@ -49,54 +47,86 @@ class Zambia(HolidayBase):
49
47
  (AUG, 13, "Counting in general elections"),
50
48
  (AUG, 24, "Presidential inauguration"),
51
49
  ),
52
- 2022: ((MAR, 18, "Funeral of Rupiah Banda"),),
50
+ 2022: (MAR, 18, "Funeral of Rupiah Banda"),
53
51
  }
54
52
 
55
- def _populate(self, year):
56
- def _add_with_observed(hol_date: date, hol_name: str) -> None:
57
- # whenever a public holiday falls on a Sunday,
58
- # it rolls over to the following Monday
59
- self[hol_date] = hol_name
60
- if self.observed and self._is_sunday(hol_date):
61
- self[hol_date + td(days=+1)] = f"{hol_name} (Observed)"
53
+ def __init__(self, *args, **kwargs):
54
+ ChristianHolidays.__init__(self)
55
+ InternationalHolidays.__init__(self)
56
+ super().__init__(*args, **kwargs)
57
+
58
+ def _add_observed(self, dt: date) -> None:
59
+ # whenever a public holiday falls on a Sunday,
60
+ # it rolls over to the following Monday
61
+ if self.observed and self._is_sunday(dt):
62
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=+1))
62
63
 
64
+ def _populate(self, year):
63
65
  # Observed since 1965
64
66
  if year <= 1964:
65
67
  return None
66
68
 
67
69
  super()._populate(year)
68
70
 
69
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
71
+ # New Year's Day.
72
+ self._add_observed(self._add_new_years_day("New Year's Day"))
70
73
 
71
74
  if year >= 1991:
72
- _add_with_observed(date(year, MAR, 8), "International Women's Day")
75
+ self._add_observed(
76
+ # International Women's Day.
77
+ self._add_womens_day("International Women's Day")
78
+ )
79
+
80
+ # Youth Day.
81
+ self._add_observed(self._add_holiday("Youth Day", MAR, 12))
73
82
 
74
- _add_with_observed(date(year, MAR, 12), "Youth Day")
83
+ # Good Friday.
84
+ self._add_good_friday("Good Friday")
75
85
 
76
- easter_date = easter(year)
77
- self[easter_date + td(days=-2)] = "Good Friday"
78
- self[easter_date + td(days=-1)] = "Holy Saturday"
79
- self[easter_date + td(days=+1)] = "Easter Monday"
86
+ # Holy Saturday.
87
+ self._add_holy_saturday("Holy Saturday")
88
+
89
+ # Easter Monday.
90
+ self._add_easter_monday("Easter Monday")
80
91
 
81
92
  if year >= 2022:
82
- _add_with_observed(date(year, APR, 28), "Kenneth Kaunda Day")
93
+ self._add_observed(
94
+ # Kenneth Kaunda Day.
95
+ self._add_holiday("Kenneth Kaunda Day", APR, 28)
96
+ )
97
+
98
+ # Labour Day.
99
+ self._add_observed(self._add_labor_day("Labour Day"))
83
100
 
84
- _add_with_observed(date(year, MAY, 1), "Labour Day")
85
- _add_with_observed(date(year, MAY, 25), "Africa Freedom Day")
101
+ # Africa Freedom Day.
102
+ self._add_observed(self._add_africa_day("Africa Freedom Day"))
86
103
 
87
- # 1st Monday of July = "Heroes' Day"
88
- dt = _get_nth_weekday_of_month(1, MON, JUL, year)
89
- self[dt] = "Heroes' Day"
90
- self[dt + td(days=+1)] = "Unity Day"
104
+ first_mon_of_july = self._add_holiday(
105
+ # Heroes' Day.
106
+ "Heroes' Day",
107
+ _get_nth_weekday_of_month(1, MON, JUL, year),
108
+ )
91
109
 
92
- # 1st Monday of Aug = "Farmers' Day"
93
- self[_get_nth_weekday_of_month(1, MON, AUG, year)] = "Farmers' Day"
110
+ # Unity Day.
111
+ self._add_holiday("Unity Day", first_mon_of_july + td(days=+1))
112
+
113
+ self._add_holiday(
114
+ # Farmers' Day.
115
+ "Farmers' Day",
116
+ _get_nth_weekday_of_month(1, MON, AUG, year),
117
+ )
94
118
 
95
119
  if year >= 2015:
96
- _add_with_observed(date(year, OCT, 18), "National Prayer Day")
120
+ self._add_observed(
121
+ # National Prayer Day.
122
+ self._add_holiday("National Prayer Day", OCT, 18)
123
+ )
124
+
125
+ # Independence Day.
126
+ self._add_observed(self._add_holiday("Independence Day", OCT, 24))
97
127
 
98
- _add_with_observed(date(year, OCT, 24), "Independence Day")
99
- _add_with_observed(date(year, DEC, 25), "Christmas Day")
128
+ # Christmas Day.
129
+ self._add_observed(self._add_christmas_day("Christmas Day"))
100
130
 
101
131
 
102
132
  class ZM(Zambia):
@@ -12,68 +12,87 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import easter
16
-
17
15
  from holidays.calendars import _get_nth_weekday_of_month
18
- from holidays.constants import JAN, FEB, APR, MAY, AUG, DEC, MON
16
+ from holidays.constants import FEB, APR, AUG, DEC, MON
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Zimbabwe(HolidayBase):
21
+ class Zimbabwe(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  """
24
- https://en.wikipedia.org/wiki/Robert_Mugabe
25
23
  https://en.wikipedia.org/wiki/Public_holidays_in_Zimbabwe
24
+ https://en.wikipedia.org/wiki/Robert_Gabriel_Mugabe_National_Youth_Day
26
25
  """
27
26
 
28
27
  country = "ZW"
29
28
 
30
- def _populate(self, year):
31
- def _add_with_observed(
32
- hol_date: date, hol_name: str, days: int = +1
33
- ) -> None:
34
- self[hol_date] = hol_name
35
- if self.observed and self._is_sunday(hol_date):
36
- self[hol_date + td(days=days)] = f"{hol_name} (Observed)"
29
+ def __init__(self, *args, **kwargs):
30
+ ChristianHolidays.__init__(self)
31
+ InternationalHolidays.__init__(self)
32
+ super().__init__(*args, **kwargs)
33
+
34
+ def _add_observed(self, dt: date, days: int = +1) -> None:
35
+ if self.observed and self._is_sunday(dt):
36
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=days))
37
37
 
38
+ def _populate(self, year):
38
39
  if year <= 1987:
39
40
  return None
40
41
 
41
42
  super()._populate(year)
42
43
 
43
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
44
+ # New Year's Day.
45
+ self._add_observed(self._add_new_years_day("New Year's Day"))
44
46
 
45
- # https://en.wikipedia.org/wiki/Robert_Gabriel_Mugabe_National_Youth_Day
46
47
  if year >= 2018:
47
- _add_with_observed(
48
- date(year, FEB, 21), "Robert Gabriel Mugabe National Youth Day"
48
+ self._add_observed(
49
+ self._add_holiday(
50
+ # Robert Gabriel Mugabe National Youth Day.
51
+ "Robert Gabriel Mugabe National Youth Day",
52
+ FEB,
53
+ 21,
54
+ )
49
55
  )
50
56
 
51
- easter_date = easter(year)
52
- self[easter_date + td(days=-2)] = "Good Friday"
53
- self[easter_date + td(days=-1)] = "Easter Saturday"
54
- self[easter_date + td(days=+1)] = "Easter Monday"
55
-
56
- # In 2049, 2055, 2060 Apr 19 is Easter Monday,
57
- # so observed on Apr 20 (Tue)
58
- _add_with_observed(
59
- date(year, APR, 18),
60
- "Independence Day",
61
- +2 if year in {2049, 2055, 2060} else +1,
57
+ # Good Friday.
58
+ self._add_good_friday("Good Friday")
59
+
60
+ # Easter Saturday.
61
+ self._add_holy_saturday("Easter Saturday")
62
+
63
+ # Easter Monday.
64
+ self._add_easter_monday("Easter Monday")
65
+
66
+ # Independence Day.
67
+ apr_18 = self._add_holiday("Independence Day", APR, 18)
68
+ self._add_observed(apr_18, days=+2 if apr_18 == self._easter_sunday else +1)
69
+
70
+ # Workers' Day.
71
+ self._add_observed(self._add_labor_day("Workers' Day"))
72
+
73
+ # Africa Day.
74
+ self._add_observed(self._add_africa_day("Africa Day"))
75
+
76
+ second_mon_of_august = self._add_holiday(
77
+ # Zimbabwe Heroes' Day.
78
+ "Zimbabwe Heroes' Day",
79
+ _get_nth_weekday_of_month(2, MON, AUG, year),
62
80
  )
63
81
 
64
- _add_with_observed(date(year, MAY, 1), "Workers' Day")
65
- _add_with_observed(date(year, MAY, 25), "Africa Day")
82
+ self._add_holiday(
83
+ # Defense Forces Day.
84
+ "Defense Forces Day",
85
+ second_mon_of_august + td(days=+1),
86
+ )
66
87
 
67
- # 2nd Monday of August
68
- zimbabwe_heroes_day = _get_nth_weekday_of_month(2, MON, AUG, year)
69
- self[zimbabwe_heroes_day] = "Zimbabwe Heroes' Day"
88
+ # Unity Day.
89
+ self._add_observed(self._add_holiday("Unity Day", DEC, 22))
70
90
 
71
- # Tuesday after 2nd Monday of August
72
- self[zimbabwe_heroes_day + td(days=+1)] = "Defense Forces Day"
91
+ # Christmas Day.
92
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
73
93
 
74
- _add_with_observed(date(year, DEC, 22), "Unity Day")
75
- _add_with_observed(date(year, DEC, 25), "Christmas Day", days=+2)
76
- _add_with_observed(date(year, DEC, 26), "Boxing Day")
94
+ # Boxing Day.
95
+ self._add_observed(self._add_christmas_day_two("Boxing Day"))
77
96
 
78
97
 
79
98
  class ZW(Zimbabwe):
@@ -9,34 +9,33 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from datetime import date
13
- from datetime import timedelta as td
14
-
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, MAY, DEC
18
12
  from holidays.holiday_base import HolidayBase
13
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
14
 
20
15
 
21
- class EuropeanCentralBank(HolidayBase):
16
+ class EuropeanCentralBank(HolidayBase, ChristianHolidays, InternationalHolidays):
22
17
  # https://en.wikipedia.org/wiki/TARGET2
23
18
  # http://www.ecb.europa.eu/press/pr/date/2000/html/pr001214_4.en.html
24
19
 
25
20
  market = "ECB"
26
21
 
27
- def __init__(self, **kwargs):
28
- HolidayBase.__init__(self, **kwargs)
22
+ def __init__(self, *args, **kwargs):
23
+ ChristianHolidays.__init__(self)
24
+ InternationalHolidays.__init__(self)
25
+ super().__init__(*args, **kwargs)
29
26
 
30
27
  def _populate(self, year):
31
28
  super()._populate(year)
32
29
 
33
- self[date(year, JAN, 1)] = "New Year's Day"
34
- e = easter(year)
35
- self[e + td(days=-2)] = "Good Friday"
36
- self[e + td(days=+1)] = "Easter Monday"
37
- self[date(year, MAY, 1)] = "1 May (Labour Day)"
38
- self[date(year, DEC, 25)] = "Christmas Day"
39
- self[date(year, DEC, 26)] = "26 December"
30
+ self._add_new_years_day("New Year's Day")
31
+
32
+ self._add_good_friday("Good Friday")
33
+ self._add_easter_monday("Easter Monday")
34
+
35
+ self._add_labor_day("1 May (Labour Day)")
36
+
37
+ self._add_christmas_day("Christmas Day")
38
+ self._add_christmas_day_two("26 December")
40
39
 
41
40
 
42
41
  class ECB(EuropeanCentralBank):