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
@@ -28,12 +28,10 @@ class HolidaysMH(HolidayBase):
28
28
 
29
29
  country = "MH"
30
30
  special_holidays = {
31
- 2019: ((NOV, 18, "General Election Day"),), # Third Monday in November
31
+ 2019: (NOV, 18, "General Election Day"), # Third Monday in November
32
32
  }
33
33
 
34
- def _add_with_observed(
35
- self, dt: date, name: str, after_sat: bool = False
36
- ) -> None:
34
+ def _add_with_observed(self, dt: date, name: str, after_sat: bool = False) -> None:
37
35
  """
38
36
  Adds observed holiday on Monday when the current date falls on a Sunday
39
37
  or, if after_sat is True, on a Saturday.
@@ -54,8 +52,7 @@ class HolidaysMH(HolidayBase):
54
52
 
55
53
  if year < 2023:
56
54
  warnings.warn(
57
- "Years before 2022 are not available for the Marshall Islands "
58
- "(MH).",
55
+ "Years before 2022 are not available for the Marshall Islands (MH).",
59
56
  Warning,
60
57
  )
61
58
 
@@ -64,9 +61,7 @@ class HolidaysMH(HolidayBase):
64
61
  self._add_with_observed(date(year, JAN, 1), name, after_sat=True)
65
62
 
66
63
  # Nuclear Victims Remembrance Day
67
- self._add_with_observed(
68
- date(year, MAR, 1), "Nuclear Victims Remembrance Day"
69
- )
64
+ self._add_with_observed(date(year, MAR, 1), "Nuclear Victims Remembrance Day")
70
65
 
71
66
  # Good Friday
72
67
  self[easter(year) + td(days=-2)] = "Good Friday"
@@ -29,6 +29,7 @@ class Mexico(HolidayBase, ChristianHolidays, InternationalHolidays):
29
29
 
30
30
  country = "MX"
31
31
  default_language = "es"
32
+ supported_languages = ("en_US", "es", "uk")
32
33
 
33
34
  def __init__(self, *args, **kwargs):
34
35
  ChristianHolidays.__init__(self)
@@ -78,9 +79,7 @@ class Mexico(HolidayBase, ChristianHolidays, InternationalHolidays):
78
79
 
79
80
  if year >= 1970 and (year - 1970) % 6 == 0:
80
81
  # Change of Federal Government.
81
- self._add_holiday(
82
- tr("Transmisión del Poder Ejecutivo Federal"), DEC, 1
83
- )
82
+ self._add_holiday(tr("Transmisión del Poder Ejecutivo Federal"), DEC, 1)
84
83
 
85
84
  # Christmas Day.
86
85
  self._add_christmas_day(tr("Navidad"))
@@ -13,7 +13,7 @@ from datetime import timedelta as td
13
13
  from gettext import gettext as tr
14
14
 
15
15
  from holidays.calendars import GREGORIAN_CALENDAR, JULIAN_CALENDAR
16
- from holidays.constants import JUN, AUG
16
+ from holidays.constants import AUG
17
17
  from holidays.holiday_base import HolidayBase
18
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
19
 
@@ -26,6 +26,7 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
26
26
 
27
27
  country = "MD"
28
28
  default_language = "ro"
29
+ supported_languages = ("en_US", "ro", "uk")
29
30
 
30
31
  def __init__(self, *args, **kwargs):
31
32
  ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -72,10 +73,7 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
72
73
  may_9 = self._add_world_war_two_victory_day(
73
74
  # Victory Day and Commemoration of the heroes fallen for
74
75
  # Independence of Fatherland.
75
- tr(
76
- "Ziua Victoriei şi a comemorării eroilor căzuţi pentru "
77
- "Independenţa Patriei"
78
- )
76
+ tr("Ziua Victoriei şi a comemorării eroilor căzuţi pentru Independenţa Patriei")
79
77
  )
80
78
 
81
79
  if year >= 2017:
@@ -84,7 +82,7 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
84
82
 
85
83
  if year >= 2016:
86
84
  # International Children's Day
87
- self._add_holiday(tr("Ziua Ocrotirii Copilului"), JUN, 1)
85
+ self._add_childrens_day(tr("Ziua Ocrotirii Copilului"))
88
86
 
89
87
  # Republic of Moldova Independence Day
90
88
  self._add_holiday(tr("Ziua independenţei Republicii Moldova"), AUG, 27)
@@ -26,30 +26,32 @@ class Monaco(HolidayBase, ChristianHolidays, InternationalHolidays):
26
26
 
27
27
  country = "MC"
28
28
  default_language = "fr"
29
- special_holidays = {
30
- 2015: ((JAN, 7, tr("Jour férié")),),
31
- }
29
+ special_holidays = {2015: (JAN, 7, tr("Jour férié"))}
30
+ supported_languages = ("en_US", "fr", "uk")
32
31
 
33
32
  def __init__(self, *args, **kwargs):
34
33
  ChristianHolidays.__init__(self)
35
34
  InternationalHolidays.__init__(self)
36
35
  super().__init__(*args, **kwargs)
37
36
 
37
+ def _add_observed(self, dt: date, days: int = +1) -> None:
38
+ if self.observed and self._is_sunday(dt):
39
+ self._add_holiday(self.tr("%s (Observé)") % self[dt], dt + td(days=days))
40
+
38
41
  def _populate(self, year):
39
42
  super()._populate(year)
40
- observed_dates = set()
41
43
 
42
44
  # New Year's Day.
43
- observed_dates.add(self._add_new_years_day(tr("Le jour de l'An")))
45
+ self._add_observed(self._add_new_years_day(tr("Le jour de l'An")))
44
46
 
45
- # Saint Dévote's Day.
47
+ # Saint Devote's Day.
46
48
  self._add_holiday(tr("La Sainte Dévote"), JAN, 27)
47
49
 
48
50
  # Easter Monday.
49
51
  self._add_easter_monday(tr("Le lundi de Pâques"))
50
52
 
51
53
  # Labour Day.
52
- observed_dates.add(self._add_labor_day(tr("Fête de la Travaille")))
54
+ self._add_observed(self._add_labor_day(tr("Fête de la Travaille")))
53
55
 
54
56
  # Ascension's Day.
55
57
  self._add_ascension_thursday(tr("L'Ascension"))
@@ -61,33 +63,22 @@ class Monaco(HolidayBase, ChristianHolidays, InternationalHolidays):
61
63
  self._add_corpus_christi_day(tr("La Fête Dieu"))
62
64
 
63
65
  # Assumption's Day.
64
- observed_dates.add(
65
- self._add_assumption_of_mary_day(tr("L'Assomption de Marie"))
66
- )
66
+ self._add_observed(self._add_assumption_of_mary_day(tr("L'Assomption de Marie")))
67
67
 
68
68
  # All Saints' Day.
69
- observed_dates.add(self._add_all_saints_day(tr("La Toussaint")))
69
+ self._add_observed(self._add_all_saints_day(tr("La Toussaint")))
70
70
 
71
71
  # Prince's Day.
72
- observed_dates.add(self._add_holiday(tr("La Fête du Prince"), NOV, 19))
72
+ self._add_observed(self._add_holiday(tr("La Fête du Prince"), NOV, 19))
73
73
 
74
- dt = date(year, DEC, 8)
75
- if year >= 2019 and self._is_sunday(dt):
76
- dt += td(days=+1)
74
+ dt = (DEC, 8)
75
+ if year >= 2019 and self._is_sunday(*dt):
76
+ dt = (DEC, 9)
77
77
  # Immaculate Conception's Day.
78
- self._add_holiday(tr("L'Immaculée Conception"), dt)
78
+ self._add_holiday(tr("L'Immaculée Conception"), *dt)
79
79
 
80
80
  # Christmas Day.
81
- observed_dates.add(self._add_christmas_day(tr("Noël")))
82
-
83
- if self.observed:
84
- for dt in observed_dates:
85
- if not self._is_sunday(dt):
86
- continue
87
- self._add_holiday(
88
- self.tr("%s (Observé)") % self[dt],
89
- dt + td(days=+1),
90
- )
81
+ self._add_observed(self._add_christmas_day(tr("Noël")))
91
82
 
92
83
 
93
84
  class MC(Monaco):
@@ -12,13 +12,13 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import EASTER_ORTHODOX, easter
16
-
17
- from holidays.constants import JAN, MAY, JUL
15
+ from holidays.calendars import JULIAN_CALENDAR
16
+ from holidays.constants import MAY, JUL
18
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
19
 
20
20
 
21
- class Montenegro(HolidayBase):
21
+ class Montenegro(HolidayBase, ChristianHolidays, InternationalHolidays):
22
22
  """
23
23
  References:
24
24
  - https://en.wikipedia.org/wiki/Public_holidays_in_Montenegro
@@ -29,45 +29,55 @@ class Montenegro(HolidayBase):
29
29
 
30
30
  country = "ME"
31
31
 
32
- def _add_holiday_observed(self, hol_date: date, hol_name: str) -> None:
33
- self[hol_date] = hol_name
34
- if self._is_weekend(hol_date):
35
- self[hol_date + td(days=+2)] = f"{hol_name} (Observed)"
36
- self[hol_date + td(days=+1)] = (
37
- f"{hol_name} (Observed)" if self._is_sunday(hol_date) else hol_name
38
- )
32
+ def __init__(self, *args, **kwargs):
33
+ ChristianHolidays.__init__(self, calendar=JULIAN_CALENDAR)
34
+ InternationalHolidays.__init__(self)
35
+ super().__init__(*args, **kwargs)
36
+
37
+ def _add_observed(self, dt: date, days: int = +1) -> None:
38
+ if self.observed and self._is_sunday(dt):
39
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days))
39
40
 
40
- def _populate(self, year: int) -> None:
41
+ def _populate(self, year):
41
42
  super()._populate(year)
42
43
 
43
44
  # New Year's Day.
44
- self._add_holiday_observed(date(year, JAN, 1), "New Year's Day")
45
+ name = "New Year's Day"
46
+ self._add_observed(self._add_new_years_day(name), days=+2)
47
+ self._add_observed(self._add_new_years_day_two(name))
45
48
 
46
49
  # Orthodox Christmas Eve.
47
- self[date(year, JAN, 6)] = "Orthodox Christmas Eve"
50
+ self._add_christmas_eve("Orthodox Christmas Eve")
48
51
 
49
52
  # Orthodox Christmas.
50
- self[date(year, JAN, 7)] = "Orthodox Christmas"
53
+ self._add_christmas_day("Orthodox Christmas")
51
54
 
52
- easter_sunday = easter(year, method=EASTER_ORTHODOX)
55
+ # Labour Day.
56
+ name = "Labour Day"
57
+ may_1 = self._add_labor_day(name)
58
+ self._add_observed(may_1, days=+2)
59
+ self._add_observed(self._add_holiday(name, may_1 + td(days=+1)))
53
60
 
54
61
  # Good Friday.
55
- self[easter_sunday + td(days=-2)] = "Orthodox Good Friday"
62
+ self._add_good_friday("Orthodox Good Friday")
56
63
 
57
64
  # Easter Sunday.
58
- self[easter_sunday] = "Orthodox Easter Sunday"
65
+ self._add_easter_sunday("Orthodox Easter Sunday")
59
66
 
60
67
  # Easter Monday.
61
- self[easter_sunday + td(days=+1)] = "Orthodox Easter Monday"
62
-
63
- # Labour Day.
64
- self._add_holiday_observed(date(year, MAY, 1), "Labour Day")
68
+ self._add_easter_monday("Orthodox Easter Monday")
65
69
 
66
70
  # Independence Day.
67
- self._add_holiday_observed(date(year, MAY, 21), "Independence Day")
71
+ name = "Independence Day"
72
+ may_21 = self._add_holiday(name, MAY, 21)
73
+ self._add_observed(may_21, days=+2)
74
+ self._add_observed(self._add_holiday(name, may_21 + td(days=+1)))
68
75
 
69
76
  # Statehood Day.
70
- self._add_holiday_observed(date(year, JUL, 13), "Statehood Day")
77
+ name = "Statehood Day"
78
+ jul_13 = self._add_holiday(name, JUL, 13)
79
+ self._add_observed(jul_13, days=+2)
80
+ self._add_observed(self._add_holiday(name, jul_13 + td(days=+1)))
71
81
 
72
82
 
73
83
  class ME(Montenegro):
@@ -47,12 +47,17 @@ class Morocco(HolidayBase, InternationalHolidays, IslamicHolidays):
47
47
  # Independence Manifesto Day post 1944
48
48
  if year >= 1945:
49
49
  self._add_holiday(
50
- "Commémoration de la présentation "
51
- "du manifeste de l'indépendance",
50
+ "Commémoration de la présentation du manifeste de l'indépendance",
52
51
  JAN,
53
52
  11,
54
53
  )
55
54
 
55
+ # Amazigh New Year
56
+ # In May 2023, Morocco recognised Berber New Year as official holiday
57
+ # http://www.diplomatie.ma/en/statement-royal-office-12
58
+ if year >= 2024:
59
+ self._add_holiday("Nouvel An berbère", JAN, 13)
60
+
56
61
  # Labor day
57
62
  self._add_labor_day("Fête du Travail")
58
63
 
@@ -69,9 +74,7 @@ class Morocco(HolidayBase, InternationalHolidays, IslamicHolidays):
69
74
  self._add_holiday("Journée de Oued Ed-Dahab", AUG, 14)
70
75
 
71
76
  # Revolution Day
72
- self._add_holiday(
73
- "Commémoration de la révolution du Roi et du peuple", AUG, 20
74
- )
77
+ self._add_holiday("Commémoration de la révolution du Roi et du peuple", AUG, 20)
75
78
 
76
79
  # Youth day
77
80
  if year >= 2001:
@@ -12,49 +12,53 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, FEB, APR, MAY, JUN, SEP, OCT, DEC
15
+ from holidays.constants import FEB, APR, MAY, JUN, SEP, OCT
18
16
  from holidays.holiday_base import HolidayBase
17
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
18
 
20
19
 
21
- class Mozambique(HolidayBase):
20
+ class Mozambique(HolidayBase, ChristianHolidays, InternationalHolidays):
22
21
  country = "MZ"
23
22
 
24
- def _populate(self, year):
25
- def _add_with_observed(hol_date: date, hol_name: str) -> None:
26
- # whenever a public holiday falls on a Sunday,
27
- # it rolls over to the following Monday
28
- self[hol_date] = hol_name
29
- if self.observed and self._is_sunday(hol_date):
30
- self[hol_date + td(days=+1)] = f"{hol_name} (PONTE)"
23
+ def __init__(self, *args, **kwargs):
24
+ ChristianHolidays.__init__(self)
25
+ InternationalHolidays.__init__(self)
26
+ super().__init__(*args, **kwargs)
31
27
 
28
+ def _add_observed(self, dt: date) -> None:
29
+ # whenever a public holiday falls on a Sunday,
30
+ # it rolls over to the following Monday
31
+ if self.observed and self._is_sunday(dt):
32
+ self._add_holiday("%s (PONTE)" % self[dt], dt + td(days=+1))
33
+
34
+ def _populate(self, year):
32
35
  if year <= 1974:
33
36
  return None
34
37
 
35
38
  super()._populate(year)
36
39
 
37
- _add_with_observed(date(year, JAN, 1), "Ano novo")
38
- easter_date = easter(year)
39
- self[easter_date + td(days=-2)] = "Sexta-feira Santa"
40
-
41
- # carnival is the Tuesday before Ash Wednesday
42
- # which is 40 days before easter excluding sundays
43
- self[easter_date + td(days=-47)] = "Carnaval"
44
-
45
- _add_with_observed(date(year, FEB, 3), "Dia dos Heróis Moçambicanos")
46
- _add_with_observed(date(year, APR, 7), "Dia da Mulher Moçambicana")
47
- _add_with_observed(date(year, MAY, 1), "Dia Mundial do Trabalho")
48
- _add_with_observed(
49
- date(year, JUN, 25), "Dia da Independência Nacional"
50
- )
51
- _add_with_observed(date(year, SEP, 7), "Dia da Vitória")
52
- _add_with_observed(date(year, SEP, 25), "Dia das Forças Armadas")
40
+ self._add_observed(self._add_new_years_day("Ano novo"))
41
+
42
+ self._add_good_friday("Sexta-feira Santa")
43
+
44
+ self._add_carnival_tuesday("Carnaval")
45
+
46
+ self._add_observed(self._add_holiday("Dia dos Heróis Moçambicanos", FEB, 3))
47
+
48
+ self._add_observed(self._add_holiday("Dia da Mulher Moçambicana", APR, 7))
49
+
50
+ self._add_observed(self._add_holiday("Dia Mundial do Trabalho", MAY, 1))
51
+
52
+ self._add_observed(self._add_holiday("Dia da Independência Nacional", JUN, 25))
53
+
54
+ self._add_observed(self._add_holiday("Dia da Vitória", SEP, 7))
55
+
56
+ self._add_observed(self._add_holiday("Dia das Forças Armadas", SEP, 25))
57
+
53
58
  if year >= 1993:
54
- _add_with_observed(
55
- date(year, OCT, 4), "Dia da Paz e Reconciliação"
56
- )
57
- _add_with_observed(date(year, DEC, 25), "Dia de Natal e da Família")
59
+ self._add_observed(self._add_holiday("Dia da Paz e Reconciliação", OCT, 4))
60
+
61
+ self._add_observed(self._add_christmas_day("Dia de Natal e da Família"))
58
62
 
59
63
 
60
64
  class MZ(Mozambique):
@@ -12,13 +12,12 @@
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.constants import JAN, FEB, MAR, MAY, AUG, SEP, DEC
18
16
  from holidays.holiday_base import HolidayBase
17
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
18
 
20
19
 
21
- class Namibia(HolidayBase):
20
+ class Namibia(HolidayBase, ChristianHolidays, InternationalHolidays):
22
21
  """
23
22
  https://www.officeholidays.com/countries/namibia
24
23
  https://www.timeanddate.com/holidays/namibia/
@@ -28,52 +27,72 @@ class Namibia(HolidayBase):
28
27
  country = "NA"
29
28
  special_holidays = {
30
29
  # https://gazettes.africa/archive/na/1999/na-government-gazette-dated-1999-11-22-no-2234.pdf
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(hol_date: date, hol_name: str) -> None:
37
- # https://tinyurl.com/lacorg5835
38
- # As of 1991/2/1, whenever a public holiday falls on a Sunday,
39
- # it rolls over to the monday, unless that monday is already
40
- # a public holiday.
41
- self[hol_date] = hol_name
42
- if (
43
- self.observed
44
- and self._is_sunday(hol_date)
45
- and hol_date >= date(1991, FEB, 1)
46
- ):
47
- self[hol_date + td(days=+1)] = f"{hol_name} (Observed)"
34
+ def __init__(self, *args, **kwargs):
35
+ ChristianHolidays.__init__(self)
36
+ InternationalHolidays.__init__(self)
37
+ super().__init__(*args, **kwargs)
38
+
39
+ def _add_observed(self, dt: date) -> None:
40
+ # https://tinyurl.com/lacorg5835
41
+ # As of 1991/2/1, whenever a public holiday falls on a Sunday,
42
+ # it rolls over to the monday, unless that monday is already
43
+ # a public holiday.
44
+ if self.observed and self._is_sunday(dt) and dt >= date(1991, FEB, 1):
45
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=+1))
48
46
 
47
+ def _populate(self, year):
49
48
  if year <= 1989:
50
49
  return None
51
50
 
52
51
  super()._populate(year)
53
52
 
54
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
55
- _add_with_observed(date(year, MAR, 21), "Independence Day")
53
+ # New Year's Day.
54
+ self._add_observed(self._add_new_years_day("New Year's Day"))
55
+
56
+ # Independence Day.
57
+ self._add_observed(self._add_holiday("Independence Day", MAR, 21))
58
+
59
+ # Good Friday.
60
+ self._add_good_friday("Good Friday")
56
61
 
57
- easter_date = easter(year)
58
- self[easter_date + td(days=-2)] = "Good Friday"
59
- self[easter_date + td(days=+1)] = "Easter Monday"
60
- self[easter_date + td(days=+39)] = "Ascension Day"
62
+ # Easter Monday.
63
+ self._add_easter_monday("Easter Monday")
61
64
 
62
- _add_with_observed(date(year, MAY, 1), "Workers' Day")
63
- _add_with_observed(date(year, MAY, 4), "Cassinga Day")
64
- _add_with_observed(date(year, MAY, 25), "Africa Day")
65
- _add_with_observed(date(year, AUG, 26), "Heroes' Day")
65
+ # Workers' Day.
66
+ self._add_observed(self._add_labor_day("Workers' Day"))
67
+
68
+ # Cassinga Day.
69
+ self._add_observed(self._add_holiday("Cassinga Day", MAY, 4))
70
+
71
+ # Africa Day.
72
+ self._add_observed(self._add_africa_day("Africa Day"))
73
+
74
+ # Ascension Day.
75
+ self._add_ascension_thursday("Ascension Day")
76
+
77
+ # Heroes' Day.
78
+ self._add_observed(self._add_holiday("Heroes' Day", AUG, 26))
66
79
 
67
80
  # http://www.lac.org.na/laws/2004/3348.pdf
68
- _add_with_observed(
69
- date(year, SEP, 10),
70
- "Day of the Namibian Women and International Human Rights Day"
71
- if year >= 2005
72
- else "International Human Rights Day",
81
+ self._add_observed(
82
+ self._add_holiday(
83
+ "Day of the Namibian Women and International Human Rights Day"
84
+ if year >= 2005
85
+ else "International Human Rights Day",
86
+ SEP,
87
+ 10,
88
+ )
73
89
  )
74
90
 
75
- self[date(year, DEC, 25)] = "Christmas Day"
76
- _add_with_observed(date(year, DEC, 26), "Family Day")
91
+ # Christmas Day.
92
+ self._add_christmas_day("Christmas Day")
93
+
94
+ # Family Day.
95
+ self._add_observed(self._add_christmas_day_two("Family Day"))
77
96
 
78
97
 
79
98
  class NA(Namibia):
@@ -26,6 +26,7 @@ class Netherlands(HolidayBase, ChristianHolidays, InternationalHolidays):
26
26
 
27
27
  country = "NL"
28
28
  default_language = "nl"
29
+ supported_languages = ("en_US", "nl", "uk")
29
30
 
30
31
  def __init__(self, *args, **kwargs):
31
32
  ChristianHolidays.__init__(self)