holidays 0.26__py3-none-any.whl → 0.27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/__init__.py +5 -7
  3. holidays/calendars/buddhist.py +1 -3
  4. holidays/calendars/chinese.py +1 -3
  5. holidays/calendars/custom.py +1 -3
  6. holidays/calendars/hindu.py +1 -3
  7. holidays/calendars/islamic.py +1341 -1345
  8. holidays/calendars/thai.py +217 -26
  9. holidays/countries/__init__.py +4 -0
  10. holidays/countries/albania.py +6 -17
  11. holidays/countries/andorra.py +2 -6
  12. holidays/countries/angola.py +53 -39
  13. holidays/countries/argentina.py +13 -24
  14. holidays/countries/aruba.py +109 -48
  15. holidays/countries/australia.py +31 -69
  16. holidays/countries/azerbaijan.py +30 -38
  17. holidays/countries/bahrain.py +5 -5
  18. holidays/countries/bangladesh.py +1 -3
  19. holidays/countries/belarus.py +1 -3
  20. holidays/countries/belize.py +4 -16
  21. holidays/countries/bolivia.py +2 -6
  22. holidays/countries/bosnia_and_herzegovina.py +5 -17
  23. holidays/countries/botswana.py +9 -18
  24. holidays/countries/brazil.py +2 -5
  25. holidays/countries/brunei.py +427 -0
  26. holidays/countries/bulgaria.py +2 -6
  27. holidays/countries/burkina_faso.py +141 -0
  28. holidays/countries/burundi.py +2 -5
  29. holidays/countries/cambodia.py +323 -0
  30. holidays/countries/cameroon.py +71 -77
  31. holidays/countries/canada.py +19 -28
  32. holidays/countries/chad.py +133 -0
  33. holidays/countries/chile.py +4 -11
  34. holidays/countries/china.py +1 -2
  35. holidays/countries/colombia.py +17 -15
  36. holidays/countries/costa_rica.py +2 -6
  37. holidays/countries/curacao.py +100 -46
  38. holidays/countries/cyprus.py +2 -6
  39. holidays/countries/czechia.py +4 -12
  40. holidays/countries/denmark.py +1 -3
  41. holidays/countries/dominican_republic.py +1 -3
  42. holidays/countries/ecuador.py +54 -54
  43. holidays/countries/egypt.py +2 -5
  44. holidays/countries/eswatini.py +34 -44
  45. holidays/countries/ethiopia.py +5 -14
  46. holidays/countries/finland.py +1 -3
  47. holidays/countries/gabon.py +49 -53
  48. holidays/countries/greece.py +1 -2
  49. holidays/countries/honduras.py +16 -13
  50. holidays/countries/hongkong.py +7 -8
  51. holidays/countries/hungary.py +93 -92
  52. holidays/countries/india.py +4 -11
  53. holidays/countries/indonesia.py +120 -114
  54. holidays/countries/ireland.py +5 -15
  55. holidays/countries/isle_of_man.py +9 -4
  56. holidays/countries/israel.py +6 -18
  57. holidays/countries/italy.py +1 -2
  58. holidays/countries/jamaica.py +10 -18
  59. holidays/countries/japan.py +10 -16
  60. holidays/countries/kazakhstan.py +7 -22
  61. holidays/countries/kenya.py +1 -3
  62. holidays/countries/kyrgyzstan.py +2 -5
  63. holidays/countries/latvia.py +2 -6
  64. holidays/countries/lesotho.py +52 -32
  65. holidays/countries/lithuania.py +4 -12
  66. holidays/countries/madagascar.py +3 -9
  67. holidays/countries/malawi.py +34 -26
  68. holidays/countries/malaysia.py +223 -248
  69. holidays/countries/marshall_islands.py +4 -9
  70. holidays/countries/mexico.py +1 -3
  71. holidays/countries/moldova.py +3 -6
  72. holidays/countries/monaco.py +16 -26
  73. holidays/countries/montenegro.py +23 -19
  74. holidays/countries/morocco.py +2 -5
  75. holidays/countries/mozambique.py +35 -31
  76. holidays/countries/namibia.py +54 -35
  77. holidays/countries/new_zealand.py +11 -21
  78. holidays/countries/nicaragua.py +26 -22
  79. holidays/countries/nigeria.py +6 -17
  80. holidays/countries/north_macedonia.py +3 -8
  81. holidays/countries/norway.py +1 -3
  82. holidays/countries/pakistan.py +71 -72
  83. holidays/countries/panama.py +25 -24
  84. holidays/countries/paraguay.py +54 -47
  85. holidays/countries/philippines.py +6 -2
  86. holidays/countries/poland.py +3 -9
  87. holidays/countries/portugal.py +3 -11
  88. holidays/countries/romania.py +3 -5
  89. holidays/countries/saudi_arabia.py +8 -22
  90. holidays/countries/serbia.py +19 -29
  91. holidays/countries/singapore.py +70 -74
  92. holidays/countries/slovakia.py +1 -4
  93. holidays/countries/south_africa.py +60 -62
  94. holidays/countries/south_korea.py +14 -23
  95. holidays/countries/spain.py +2 -5
  96. holidays/countries/sweden.py +1 -3
  97. holidays/countries/taiwan.py +2 -5
  98. holidays/countries/thailand.py +34 -81
  99. holidays/countries/turkey.py +1 -3
  100. holidays/countries/ukraine.py +6 -18
  101. holidays/countries/united_arab_emirates.py +21 -29
  102. holidays/countries/united_kingdom.py +47 -67
  103. holidays/countries/united_states.py +42 -72
  104. holidays/countries/vatican_city.py +1 -3
  105. holidays/countries/venezuela.py +8 -6
  106. holidays/countries/vietnam.py +6 -18
  107. holidays/countries/zambia.py +63 -33
  108. holidays/countries/zimbabwe.py +56 -37
  109. holidays/financial/european_central_bank.py +1 -3
  110. holidays/financial/ny_stock_exchange.py +31 -48
  111. holidays/groups/__init__.py +18 -0
  112. holidays/groups/buddhist.py +71 -0
  113. holidays/groups/chinese.py +235 -0
  114. holidays/groups/christian.py +483 -0
  115. holidays/groups/hindu.py +71 -0
  116. holidays/groups/international.py +157 -0
  117. holidays/groups/islamic.py +288 -0
  118. holidays/groups/thai.py +157 -0
  119. holidays/helpers.py +20 -0
  120. holidays/holiday_base.py +49 -75
  121. holidays/holiday_groups.py +11 -1190
  122. holidays/locale/am/LC_MESSAGES/ET.po +18 -15
  123. holidays/locale/ar/LC_MESSAGES/CA.po +43 -43
  124. holidays/locale/ar/LC_MESSAGES/ET.po +18 -15
  125. holidays/locale/ar/LC_MESSAGES/UA.po +16 -14
  126. holidays/locale/be/LC_MESSAGES/BY.po +9 -8
  127. holidays/locale/bg/LC_MESSAGES/BG.po +14 -12
  128. holidays/locale/da/LC_MESSAGES/DK.po +7 -6
  129. holidays/locale/el/LC_MESSAGES/CY.po +5 -3
  130. holidays/locale/el/LC_MESSAGES/GR.po +13 -13
  131. holidays/locale/en/LC_MESSAGES/CA.po +43 -43
  132. holidays/locale/en_US/LC_MESSAGES/AR.po +26 -25
  133. holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
  134. holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
  135. holidays/locale/en_US/LC_MESSAGES/BG.po +14 -12
  136. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  137. holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
  138. holidays/locale/en_US/LC_MESSAGES/BY.po +9 -8
  139. holidays/locale/en_US/LC_MESSAGES/CA.po +43 -43
  140. holidays/locale/en_US/LC_MESSAGES/CL.po +18 -18
  141. holidays/locale/en_US/LC_MESSAGES/CO.po +19 -19
  142. holidays/locale/en_US/LC_MESSAGES/CR.po +6 -5
  143. holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
  144. holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
  145. holidays/locale/en_US/LC_MESSAGES/CY.po +5 -3
  146. holidays/locale/en_US/LC_MESSAGES/DK.po +7 -6
  147. holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
  148. holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
  149. holidays/locale/en_US/LC_MESSAGES/ET.po +18 -15
  150. holidays/locale/en_US/LC_MESSAGES/FI.po +13 -13
  151. holidays/locale/en_US/LC_MESSAGES/GR.po +13 -13
  152. holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
  153. holidays/locale/en_US/LC_MESSAGES/HN.po +13 -13
  154. holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
  155. holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
  156. holidays/locale/en_US/LC_MESSAGES/JP.po +19 -17
  157. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  158. holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
  159. holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
  160. holidays/locale/en_US/LC_MESSAGES/MC.po +16 -15
  161. holidays/locale/en_US/LC_MESSAGES/MD.po +5 -5
  162. holidays/locale/en_US/LC_MESSAGES/MX.po +3 -2
  163. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  164. holidays/locale/en_US/LC_MESSAGES/NI.po +13 -13
  165. holidays/locale/en_US/LC_MESSAGES/NO.po +1 -1
  166. holidays/locale/en_US/LC_MESSAGES/PL.po +23 -21
  167. holidays/locale/en_US/LC_MESSAGES/PT.po +31 -31
  168. holidays/locale/en_US/LC_MESSAGES/PY.po +13 -11
  169. holidays/locale/en_US/LC_MESSAGES/RO.po +4 -3
  170. holidays/locale/en_US/LC_MESSAGES/RS.po +10 -10
  171. holidays/locale/en_US/LC_MESSAGES/SE.po +1 -1
  172. holidays/locale/en_US/LC_MESSAGES/SK.po +14 -14
  173. holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
  174. holidays/locale/en_US/LC_MESSAGES/UA.po +16 -14
  175. holidays/locale/en_US/LC_MESSAGES/VE.po +6 -6
  176. holidays/locale/es/LC_MESSAGES/AR.po +26 -25
  177. holidays/locale/es/LC_MESSAGES/CL.po +18 -18
  178. holidays/locale/es/LC_MESSAGES/CO.po +19 -19
  179. holidays/locale/es/LC_MESSAGES/CR.po +6 -5
  180. holidays/locale/es/LC_MESSAGES/DO.po +12 -12
  181. holidays/locale/es/LC_MESSAGES/EC.po +11 -12
  182. holidays/locale/es/LC_MESSAGES/HN.po +12 -12
  183. holidays/locale/es/LC_MESSAGES/MX.po +3 -2
  184. holidays/locale/es/LC_MESSAGES/NI.po +10 -10
  185. holidays/locale/es/LC_MESSAGES/PY.po +13 -11
  186. holidays/locale/es/LC_MESSAGES/VE.po +6 -6
  187. holidays/locale/fi/LC_MESSAGES/FI.po +13 -13
  188. holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
  189. holidays/locale/fr/LC_MESSAGES/MC.po +15 -14
  190. holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
  191. holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
  192. holidays/locale/ja/LC_MESSAGES/JP.po +19 -17
  193. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  194. holidays/locale/km/LC_MESSAGES/KH.po +139 -0
  195. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  196. holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
  197. holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
  198. holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
  199. holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
  200. holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
  201. holidays/locale/no/LC_MESSAGES/NO.po +1 -1
  202. holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
  203. holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
  204. holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
  205. holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
  206. holidays/locale/pl/LC_MESSAGES/PL.po +23 -21
  207. holidays/locale/pt_PT/LC_MESSAGES/PT.po +31 -31
  208. holidays/locale/ro/LC_MESSAGES/MD.po +5 -5
  209. holidays/locale/ro/LC_MESSAGES/RO.po +4 -3
  210. holidays/locale/sk/LC_MESSAGES/SK.po +14 -14
  211. holidays/locale/sr/LC_MESSAGES/RS.po +10 -10
  212. holidays/locale/sv/LC_MESSAGES/FI.po +13 -13
  213. holidays/locale/sv/LC_MESSAGES/SE.po +1 -1
  214. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  215. holidays/locale/th/LC_MESSAGES/BN.po +96 -0
  216. holidays/locale/th/LC_MESSAGES/CA.po +43 -43
  217. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  218. holidays/locale/th/LC_MESSAGES/KH.po +145 -0
  219. holidays/locale/th/LC_MESSAGES/TH.po +41 -41
  220. holidays/locale/uk/LC_MESSAGES/AR.po +26 -25
  221. holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
  222. holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
  223. holidays/locale/uk/LC_MESSAGES/CL.po +18 -18
  224. holidays/locale/uk/LC_MESSAGES/CO.po +19 -19
  225. holidays/locale/uk/LC_MESSAGES/CR.po +6 -5
  226. holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
  227. holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
  228. holidays/locale/uk/LC_MESSAGES/DK.po +7 -6
  229. holidays/locale/uk/LC_MESSAGES/DO.po +12 -12
  230. holidays/locale/uk/LC_MESSAGES/EC.po +11 -12
  231. holidays/locale/uk/LC_MESSAGES/FI.po +13 -13
  232. holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
  233. holidays/locale/uk/LC_MESSAGES/HN.po +13 -13
  234. holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
  235. holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
  236. holidays/locale/uk/LC_MESSAGES/MC.po +15 -14
  237. holidays/locale/uk/LC_MESSAGES/MD.po +5 -5
  238. holidays/locale/uk/LC_MESSAGES/MX.po +3 -2
  239. holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
  240. holidays/locale/uk/LC_MESSAGES/NI.po +13 -13
  241. holidays/locale/uk/LC_MESSAGES/NO.po +1 -1
  242. holidays/locale/uk/LC_MESSAGES/PL.po +23 -21
  243. holidays/locale/uk/LC_MESSAGES/PY.po +13 -11
  244. holidays/locale/uk/LC_MESSAGES/RO.po +4 -3
  245. holidays/locale/uk/LC_MESSAGES/SE.po +1 -1
  246. holidays/locale/uk/LC_MESSAGES/SK.po +14 -14
  247. holidays/locale/uk/LC_MESSAGES/UA.po +16 -14
  248. holidays/locale/uk/LC_MESSAGES/VE.po +6 -6
  249. holidays/registry.py +7 -11
  250. holidays/utils.py +5 -15
  251. {holidays-0.26.dist-info → holidays-0.27.dist-info}/METADATA +25 -7
  252. holidays-0.27.dist-info/RECORD +449 -0
  253. holidays-0.26.dist-info/RECORD +0 -402
  254. {holidays-0.26.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
  255. {holidays-0.26.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
  256. {holidays-0.26.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
@@ -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
 
@@ -73,10 +73,7 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
73
73
  may_9 = self._add_world_war_two_victory_day(
74
74
  # Victory Day and Commemoration of the heroes fallen for
75
75
  # Independence of Fatherland.
76
- tr(
77
- "Ziua Victoriei şi a comemorării eroilor căzuţi pentru "
78
- "Independenţa Patriei"
79
- )
76
+ tr("Ziua Victoriei şi a comemorării eroilor căzuţi pentru Independenţa Patriei")
80
77
  )
81
78
 
82
79
  if year >= 2017:
@@ -85,7 +82,7 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
85
82
 
86
83
  if year >= 2016:
87
84
  # International Children's Day
88
- self._add_holiday(tr("Ziua Ocrotirii Copilului"), JUN, 1)
85
+ self._add_childrens_day(tr("Ziua Ocrotirii Copilului"))
89
86
 
90
87
  # Republic of Moldova Independence Day
91
88
  self._add_holiday(tr("Ziua independenţei Republicii Moldova"), AUG, 27)
@@ -26,9 +26,7 @@ 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é"))}
32
30
  supported_languages = ("en_US", "fr", "uk")
33
31
 
34
32
  def __init__(self, *args, **kwargs):
@@ -36,21 +34,24 @@ class Monaco(HolidayBase, ChristianHolidays, InternationalHolidays):
36
34
  InternationalHolidays.__init__(self)
37
35
  super().__init__(*args, **kwargs)
38
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
+
39
41
  def _populate(self, year):
40
42
  super()._populate(year)
41
- observed_dates = set()
42
43
 
43
44
  # New Year's Day.
44
- 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")))
45
46
 
46
- # Saint Dévote's Day.
47
+ # Saint Devote's Day.
47
48
  self._add_holiday(tr("La Sainte Dévote"), JAN, 27)
48
49
 
49
50
  # Easter Monday.
50
51
  self._add_easter_monday(tr("Le lundi de Pâques"))
51
52
 
52
53
  # Labour Day.
53
- 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")))
54
55
 
55
56
  # Ascension's Day.
56
57
  self._add_ascension_thursday(tr("L'Ascension"))
@@ -62,33 +63,22 @@ class Monaco(HolidayBase, ChristianHolidays, InternationalHolidays):
62
63
  self._add_corpus_christi_day(tr("La Fête Dieu"))
63
64
 
64
65
  # Assumption's Day.
65
- observed_dates.add(
66
- self._add_assumption_of_mary_day(tr("L'Assomption de Marie"))
67
- )
66
+ self._add_observed(self._add_assumption_of_mary_day(tr("L'Assomption de Marie")))
68
67
 
69
68
  # All Saints' Day.
70
- observed_dates.add(self._add_all_saints_day(tr("La Toussaint")))
69
+ self._add_observed(self._add_all_saints_day(tr("La Toussaint")))
71
70
 
72
71
  # Prince's Day.
73
- 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))
74
73
 
75
- dt = date(year, DEC, 8)
76
- if year >= 2019 and self._is_sunday(dt):
77
- dt += td(days=+1)
74
+ dt = (DEC, 8)
75
+ if year >= 2019 and self._is_sunday(*dt):
76
+ dt = (DEC, 9)
78
77
  # Immaculate Conception's Day.
79
- self._add_holiday(tr("L'Immaculée Conception"), dt)
78
+ self._add_holiday(tr("L'Immaculée Conception"), *dt)
80
79
 
81
80
  # Christmas Day.
82
- observed_dates.add(self._add_christmas_day(tr("Noël")))
83
-
84
- if self.observed:
85
- for dt in observed_dates:
86
- if not self._is_sunday(dt):
87
- continue
88
- self._add_holiday(
89
- self.tr("%s (Observé)") % self[dt],
90
- dt + td(days=+1),
91
- )
81
+ self._add_observed(self._add_christmas_day(tr("Noël")))
92
82
 
93
83
 
94
84
  class MC(Monaco):
@@ -9,10 +9,11 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
+ from datetime import date
12
13
  from datetime import timedelta as td
13
14
 
14
15
  from holidays.calendars import JULIAN_CALENDAR
15
- from holidays.constants import JAN, MAY, JUL
16
+ from holidays.constants import MAY, JUL
16
17
  from holidays.holiday_base import HolidayBase
17
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
18
19
 
@@ -33,23 +34,17 @@ class Montenegro(HolidayBase, ChristianHolidays, InternationalHolidays):
33
34
  InternationalHolidays.__init__(self)
34
35
  super().__init__(*args, **kwargs)
35
36
 
36
- def _add_observed_holiday(self, *args) -> None:
37
- name, dt = self._parse_holiday(*args)
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))
38
40
 
39
- self._add_holiday(name, dt)
40
-
41
- if self._is_weekend(dt):
42
- self._add_holiday("%s (Observed)" % name, dt + td(days=+2))
43
- self._add_holiday(
44
- "%s (Observed)" % name if self._is_sunday(dt) else name,
45
- dt + td(days=+1),
46
- )
47
-
48
- def _populate(self, year: int) -> None:
41
+ def _populate(self, year):
49
42
  super()._populate(year)
50
43
 
51
44
  # New Year's Day.
52
- self._add_observed_holiday("New Year's Day", JAN, 1)
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))
53
48
 
54
49
  # Orthodox Christmas Eve.
55
50
  self._add_christmas_eve("Orthodox Christmas Eve")
@@ -57,6 +52,12 @@ class Montenegro(HolidayBase, ChristianHolidays, InternationalHolidays):
57
52
  # Orthodox Christmas.
58
53
  self._add_christmas_day("Orthodox Christmas")
59
54
 
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)))
60
+
60
61
  # Good Friday.
61
62
  self._add_good_friday("Orthodox Good Friday")
62
63
 
@@ -66,14 +67,17 @@ class Montenegro(HolidayBase, ChristianHolidays, InternationalHolidays):
66
67
  # Easter Monday.
67
68
  self._add_easter_monday("Orthodox Easter Monday")
68
69
 
69
- # Labour Day.
70
- self._add_observed_holiday("Labour Day", MAY, 1)
71
-
72
70
  # Independence Day.
73
- self._add_observed_holiday("Independence Day", MAY, 21)
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)))
74
75
 
75
76
  # Statehood Day.
76
- self._add_observed_holiday("Statehood Day", JUL, 13)
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)))
77
81
 
78
82
 
79
83
  class ME(Montenegro):
@@ -47,8 +47,7 @@ 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
  )
@@ -75,9 +74,7 @@ class Morocco(HolidayBase, InternationalHolidays, IslamicHolidays):
75
74
  self._add_holiday("Journée de Oued Ed-Dahab", AUG, 14)
76
75
 
77
76
  # Revolution Day
78
- self._add_holiday(
79
- "Commémoration de la révolution du Roi et du peuple", AUG, 20
80
- )
77
+ self._add_holiday("Commémoration de la révolution du Roi et du peuple", AUG, 20)
81
78
 
82
79
  # Youth day
83
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):
@@ -13,8 +13,7 @@ from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
15
  from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
16
- from holidays.constants import JAN, FEB, MAR, APR, JUN, JUL, SEP, OCT, NOV
17
- from holidays.constants import DEC, MON, TUE, WED
16
+ from holidays.constants import JAN, FEB, MAR, APR, JUN, JUL, SEP, OCT, NOV, DEC, MON, TUE, WED
18
17
  from holidays.holiday_base import HolidayBase
19
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
@@ -70,12 +69,12 @@ class NewZealand(HolidayBase, ChristianHolidays, InternationalHolidays):
70
69
  1 if self._is_friday(dt) or self._is_weekend(dt) else -1, MON, dt
71
70
  )
72
71
 
73
- def _add_observed(self, dt: date) -> None:
72
+ def _add_observed(self, dt: date, days: int = +1) -> None:
74
73
  if self.observed and self._is_weekend(dt):
75
- obs_date = _get_nth_weekday_from(1, MON, dt)
76
- if self.get(obs_date):
77
- obs_date += td(days=+1)
78
- self._add_holiday("%s (Observed)" % self[dt], obs_date)
74
+ self._add_holiday(
75
+ "%s (Observed)" % self[dt],
76
+ dt + td(days=+2 if self._is_saturday(dt) else days),
77
+ )
79
78
 
80
79
  def __init__(self, *args, **kwargs):
81
80
  ChristianHolidays.__init__(self)
@@ -100,11 +99,8 @@ class NewZealand(HolidayBase, ChristianHolidays, InternationalHolidays):
100
99
  super()._populate(year)
101
100
 
102
101
  # New Year's Day
103
- jan_1 = self._add_new_years_day("New Year's Day")
104
- jan_2 = self._add_new_years_day_two("Day after New Year's Day")
105
-
106
- self._add_observed(jan_1)
107
- self._add_observed(jan_2)
102
+ self._add_observed(self._add_new_years_day("New Year's Day"), days=+2)
103
+ self._add_observed(self._add_new_years_day_two("Day after New Year's Day"), days=+2)
108
104
 
109
105
  # Waitangi Day
110
106
  if year >= 1974:
@@ -125,11 +121,7 @@ class NewZealand(HolidayBase, ChristianHolidays, InternationalHolidays):
125
121
 
126
122
  # Sovereign's Birthday
127
123
  if year >= 1902:
128
- name = (
129
- "Queen's Birthday"
130
- if 1952 <= year <= 2022
131
- else "King's Birthday"
132
- )
124
+ name = "Queen's Birthday" if 1952 <= year <= 2022 else "King's Birthday"
133
125
  if year == 1952:
134
126
  dt = date(year, JUN, 2) # Elizabeth II
135
127
  elif year >= 1938:
@@ -192,12 +184,10 @@ class NewZealand(HolidayBase, ChristianHolidays, InternationalHolidays):
192
184
  self._add_holiday("Labour Day", dt)
193
185
 
194
186
  # Christmas Day
195
- dec_25 = self._add_christmas_day("Christmas Day")
187
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
196
188
 
197
189
  # Boxing Day
198
- dec_26 = self._add_christmas_day_two("Boxing Day")
199
- self._add_observed(dec_25)
200
- self._add_observed(dec_26)
190
+ self._add_observed(self._add_christmas_day_two("Boxing Day"), days=+2)
201
191
 
202
192
  if self.subdiv == "Auckland":
203
193
  self._add_subdiv_auk_holidays()
@@ -9,16 +9,14 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from datetime import timedelta as td
13
12
  from gettext import gettext as tr
14
13
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, MAY, JUL, AUG, SEP, DEC
14
+ from holidays.constants import JUL, AUG, SEP
18
15
  from holidays.holiday_base import HolidayBase
16
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
17
 
20
18
 
21
- class Nicaragua(HolidayBase):
19
+ class Nicaragua(HolidayBase, ChristianHolidays, InternationalHolidays):
22
20
  country = "NI"
23
21
  default_language = "es"
24
22
  subdivisions = (
@@ -42,25 +40,28 @@ class Nicaragua(HolidayBase):
42
40
  )
43
41
  supported_languages = ("en_US", "es", "uk")
44
42
 
45
- def __init__(self, **kwargs):
43
+ def __init__(self, *args, **kwargs):
44
+ ChristianHolidays.__init__(self)
45
+ InternationalHolidays.__init__(self)
46
46
  # Default subdivision to MN; prov for backwards compatibility
47
47
  if not kwargs.get("subdiv", kwargs.get("prov")):
48
48
  kwargs["subdiv"] = "MN"
49
- HolidayBase.__init__(self, **kwargs)
49
+ super().__init__(*args, **kwargs)
50
50
 
51
51
  def _populate(self, year):
52
52
  super()._populate(year)
53
53
 
54
54
  # New Year's Day.
55
- self._add_holiday(tr("Año Nuevo"), JAN, 1)
55
+ self._add_new_years_day(tr("Año Nuevo"))
56
56
 
57
- easter_date = easter(year)
58
57
  # Maundy Thursday.
59
- self._add_holiday(tr("Jueves Santo"), easter_date + td(days=-3))
58
+ self._add_holy_thursday(tr("Jueves Santo"))
59
+
60
60
  # Good Friday.
61
- self._add_holiday(tr("Viernes Santo"), easter_date + td(days=-2))
62
- # Labour Day.
63
- self._add_holiday(tr("Día del Trabajo"), MAY, 1)
61
+ self._add_good_friday(tr("Viernes Santo"))
62
+
63
+ # Labor Day.
64
+ self._add_labor_day(tr("Día del Trabajo"))
64
65
 
65
66
  if year >= 1979:
66
67
  # Revolution Day.
@@ -68,19 +69,22 @@ class Nicaragua(HolidayBase):
68
69
 
69
70
  # Battle of San Jacinto Day.
70
71
  self._add_holiday(tr("Batalla de San Jacinto"), SEP, 14)
72
+
71
73
  # Independence Day.
72
74
  self._add_holiday(tr("Día de la Independencia"), SEP, 15)
75
+
73
76
  # Virgin's Day.
74
- self._add_holiday(tr("Concepción de María"), DEC, 8)
77
+ self._add_immaculate_conception_day(tr("Concepción de María"))
78
+
75
79
  # Christmas.
76
- self._add_holiday(tr("Navidad"), DEC, 25)
77
-
78
- # Provinces festive day
79
- if self.subdiv == "MN":
80
- # Descent of Saint Dominic.
81
- self._add_holiday(tr("Bajada de Santo Domingo"), AUG, 1)
82
- # Ascent of Saint Dominic.
83
- self._add_holiday(tr("Subida de Santo Domingo"), AUG, 10)
80
+ self._add_christmas_day(tr("Navidad"))
81
+
82
+ def _add_subdiv_mn_holidays(self):
83
+ # Descent of Saint Dominic.
84
+ self._add_holiday(tr("Bajada de Santo Domingo"), AUG, 1)
85
+
86
+ # Ascent of Saint Dominic.
87
+ self._add_holiday(tr("Subida de Santo Domingo"), AUG, 10)
84
88
 
85
89
 
86
90
  class NI(Nicaragua):
@@ -14,13 +14,10 @@ from datetime import timedelta as td
14
14
 
15
15
  from holidays.constants import FEB, MAY, JUN, OCT
16
16
  from holidays.holiday_base import HolidayBase
17
- from holidays.holiday_groups import ChristianHolidays, IslamicHolidays
18
- from holidays.holiday_groups import InternationalHolidays
17
+ from holidays.holiday_groups import ChristianHolidays, IslamicHolidays, InternationalHolidays
19
18
 
20
19
 
21
- class Nigeria(
22
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
23
- ):
20
+ class Nigeria(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
24
21
  """
25
22
  https://en.wikipedia.org/wiki/Public_holidays_in_Nigeria
26
23
  """
@@ -64,9 +61,7 @@ class Nigeria(
64
61
  observed_dates.add(
65
62
  self._add_holiday(
66
63
  "Democracy Day",
67
- date(year, JUN, 12)
68
- if year >= 2019
69
- else date(year, MAY, 29),
64
+ date(year, JUN, 12) if year >= 2019 else date(year, MAY, 29),
70
65
  )
71
66
  )
72
67
 
@@ -83,17 +78,13 @@ class Nigeria(
83
78
  # This is an estimate
84
79
  # date of observance is announced yearly
85
80
  observed_dates.update(self._add_eid_al_fitr_day("Eid-el-Fitr"))
86
- observed_dates.update(
87
- self._add_eid_al_fitr_day_two("Eid-el-Fitr Holiday")
88
- )
81
+ observed_dates.update(self._add_eid_al_fitr_day_two("Eid-el-Fitr Holiday"))
89
82
 
90
83
  # Eid al-Adha - Scarfice Festive
91
84
  # This is an estimate
92
85
  # date of observance is announced yearly
93
86
  observed_dates.update(self._add_eid_al_adha_day("Eid-el-Kabir"))
94
- observed_dates.update(
95
- self._add_eid_al_adha_day_two("Eid-el-Kabir Holiday")
96
- )
87
+ observed_dates.update(self._add_eid_al_adha_day_two("Eid-el-Kabir Holiday"))
97
88
 
98
89
  # Birthday of Prophet Muhammad
99
90
  observed_dates.update(self._add_mawlid_day("Eid-el-Mawlid"))
@@ -107,9 +98,7 @@ class Nigeria(
107
98
  while self._is_weekend(obs_date) or obs_date in observed_dates:
108
99
  obs_date += td(days=+1)
109
100
  for hol_name in self.get_list(hol_date):
110
- observed_dates.add(
111
- self._add_holiday("%s (Observed)" % hol_name, obs_date)
112
- )
101
+ observed_dates.add(self._add_holiday("%s (Observed)" % hol_name, obs_date))
113
102
 
114
103
 
115
104
  class NG(Nigeria):
@@ -12,13 +12,10 @@
12
12
  from holidays.calendars import JULIAN_CALENDAR
13
13
  from holidays.constants import MAY, SEP, AUG, OCT, DEC
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 NorthMacedonia(
20
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
21
- ):
18
+ class NorthMacedonia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
22
19
  """
23
20
  https://en.wikipedia.org/wiki/Public_holidays_in_North_Macedonia
24
21
  """
@@ -50,9 +47,7 @@ class NorthMacedonia(
50
47
 
51
48
  self._add_holiday("Day of Macedonian Uprising in 1941", OCT, 11)
52
49
 
53
- self._add_holiday(
54
- "Day of the Macedonian Revolutionary Struggle", OCT, 23
55
- )
50
+ self._add_holiday("Day of the Macedonian Revolutionary Struggle", OCT, 23)
56
51
 
57
52
  self._add_holiday("Saint Clement of Ohrid Day", DEC, 8)
58
53