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
@@ -36,15 +36,11 @@ class Israel(HolidayBase):
36
36
  passover_dt = _HebrewLunisolar.hebrew_holiday_date(year, "PASSOVER")
37
37
  self._add_with_eve("Passover I", passover_dt)
38
38
  for offset in range(1, 5):
39
- self._add_holiday(
40
- "Passover - Chol HaMoed", passover_dt + td(days=offset)
41
- )
39
+ self._add_holiday("Passover - Chol HaMoed", passover_dt + td(days=offset))
42
40
  self._add_with_eve("Passover VII", passover_dt + td(days=+6))
43
41
 
44
42
  # Memorial Day
45
- memorial_day_dt = _HebrewLunisolar.hebrew_holiday_date(
46
- year, "MEMORIAL_DAY"
47
- )
43
+ memorial_day_dt = _HebrewLunisolar.hebrew_holiday_date(year, "MEMORIAL_DAY")
48
44
  observed_delta = 0
49
45
  if self.observed:
50
46
  if self._is_thursday(memorial_day_dt):
@@ -74,9 +70,7 @@ class Israel(HolidayBase):
74
70
  self._add_holiday(name, memorial_day_dt + td(days=+1))
75
71
 
76
72
  # Lag Baomer
77
- lag_baomer_dt = _HebrewLunisolar.hebrew_holiday_date(
78
- year, "LAG_BAOMER"
79
- )
73
+ lag_baomer_dt = _HebrewLunisolar.hebrew_holiday_date(year, "LAG_BAOMER")
80
74
  self._add_holiday("Lag B'Omer", lag_baomer_dt)
81
75
 
82
76
  # Shavuot
@@ -84,26 +78,20 @@ class Israel(HolidayBase):
84
78
  self._add_with_eve("Shavuot", shavuot_dt)
85
79
 
86
80
  # Rosh Hashana
87
- rosh_hashanah_dt = _HebrewLunisolar.hebrew_holiday_date(
88
- year, "ROSH_HASHANAH"
89
- )
81
+ rosh_hashanah_dt = _HebrewLunisolar.hebrew_holiday_date(year, "ROSH_HASHANAH")
90
82
  name = "Rosh Hashanah"
91
83
  self._add_with_eve(name, rosh_hashanah_dt)
92
84
  self._add_holiday(name, rosh_hashanah_dt + td(days=+1))
93
85
 
94
86
  # Yom Kippur
95
- yom_kippur_dt = _HebrewLunisolar.hebrew_holiday_date(
96
- year, "YOM_KIPPUR"
97
- )
87
+ yom_kippur_dt = _HebrewLunisolar.hebrew_holiday_date(year, "YOM_KIPPUR")
98
88
  self._add_with_eve("Yom Kippur", yom_kippur_dt)
99
89
 
100
90
  # Sukkot
101
91
  sukkot_dt = _HebrewLunisolar.hebrew_holiday_date(year, "SUKKOT")
102
92
  self._add_with_eve("Sukkot I", sukkot_dt)
103
93
  for offset in range(1, 6):
104
- self._add_holiday(
105
- "Sukkot - Chol HaMoed", sukkot_dt + td(days=offset)
106
- )
94
+ self._add_holiday("Sukkot - Chol HaMoed", sukkot_dt + td(days=offset))
107
95
  self._add_with_eve("Sukkot VII", sukkot_dt + td(days=+7))
108
96
 
109
97
  # Hanukkah
@@ -13,8 +13,7 @@
13
13
  from datetime import timedelta as td
14
14
 
15
15
  from holidays.calendars import _get_nth_weekday_of_month
16
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
17
- from holidays.constants import OCT, NOV, DEC, TUE, SUN
16
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, TUE, SUN
18
17
  from holidays.holiday_base import HolidayBase
19
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
@@ -12,7 +12,7 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
15
+ from holidays.calendars import _get_nth_weekday_of_month
16
16
  from holidays.constants import MAY, AUG, OCT, MON
17
17
  from holidays.holiday_base import HolidayBase
18
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
@@ -31,16 +31,14 @@ class Jamaica(HolidayBase, ChristianHolidays, InternationalHolidays):
31
31
  InternationalHolidays.__init__(self)
32
32
  super().__init__(*args, **kwargs)
33
33
 
34
- def _add_observed(self, hol_date: date, include_sat: bool = False) -> None:
34
+ def _add_observed(self, dt: date, include_sat: bool = False, days: int = +1) -> None:
35
35
  if not self.observed:
36
36
  return None
37
- if self._is_sunday(hol_date) or (
38
- self._is_saturday(hol_date) and include_sat
39
- ):
40
- obs_date = _get_nth_weekday_from(1, MON, hol_date)
41
- if obs_date in self:
42
- obs_date += td(days=+1)
43
- self._add_holiday("%s (Observed)" % self[hol_date], obs_date)
37
+ if self._is_sunday(dt) or (include_sat and self._is_saturday(dt)):
38
+ self._add_holiday(
39
+ "%s (Observed)" % self[dt],
40
+ dt + td(days=+2 if self._is_saturday(dt) else days),
41
+ )
44
42
 
45
43
  def _populate(self, year):
46
44
  super()._populate(year)
@@ -58,9 +56,7 @@ class Jamaica(HolidayBase, ChristianHolidays, InternationalHolidays):
58
56
  self._add_easter_monday("Easter Monday")
59
57
 
60
58
  # National Labour Day
61
- self._add_observed(
62
- self._add_holiday("National Labour Day", MAY, 23), include_sat=True
63
- )
59
+ self._add_observed(self._add_holiday("National Labour Day", MAY, 23), include_sat=True)
64
60
 
65
61
  # Emancipation Day
66
62
  if year >= 1998:
@@ -70,18 +66,14 @@ class Jamaica(HolidayBase, ChristianHolidays, InternationalHolidays):
70
66
  self._add_observed(self._add_holiday("Independence Day", AUG, 6))
71
67
 
72
68
  # National Heroes Day
73
- self._add_holiday(
74
- "National Heroes Day", _get_nth_weekday_of_month(3, MON, OCT, year)
75
- )
69
+ self._add_holiday("National Heroes Day", _get_nth_weekday_of_month(3, MON, OCT, year))
76
70
 
77
71
  # Christmas Day
78
- dt = self._add_christmas_day("Christmas Day")
72
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
79
73
 
80
74
  # Boxing Day
81
75
  self._add_observed(self._add_christmas_day_two("Boxing Day"))
82
76
 
83
- self._add_observed(dt)
84
-
85
77
 
86
78
  class JM(Jamaica):
87
79
  pass
@@ -15,8 +15,8 @@ from gettext import gettext as tr
15
15
  from typing import Tuple
16
16
 
17
17
  from holidays.calendars import _get_nth_weekday_of_month
18
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
19
- from holidays.constants import OCT, NOV, DEC, MON
18
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, MON
19
+ from holidays.helpers import _normalize_tuple
20
20
  from holidays.holiday_base import HolidayBase
21
21
 
22
22
 
@@ -28,10 +28,10 @@ class Japan(HolidayBase):
28
28
  country = "JP"
29
29
  default_language = "ja"
30
30
  special_holidays = {
31
- 1959: ((APR, 10, tr("結婚の儀")),), # The Crown Prince marriage ceremony.
32
- 1989: ((FEB, 24, tr("大喪の礼")),), # State Funeral of Emperor Shōwa.
33
- 1990: ((NOV, 12, tr("即位礼正殿の儀")),), # Enthronement ceremony.
34
- 1993: ((JUN, 9, tr("結婚の儀")),), # The Crown Prince marriage ceremony.
31
+ 1959: (APR, 10, tr("結婚の儀")), # The Crown Prince marriage ceremony.
32
+ 1989: (FEB, 24, tr("大喪の礼")), # State Funeral of Emperor Shōwa.
33
+ 1990: (NOV, 12, tr("即位礼正殿の儀")), # Enthronement ceremony.
34
+ 1993: (JUN, 9, tr("結婚の儀")), # The Crown Prince marriage ceremony.
35
35
  2019: (
36
36
  (MAY, 1, tr("天皇の即位の日")), # Enthronement day.
37
37
  (OCT, 22, tr("即位礼正殿の儀が行われる日")), # Enthronement ceremony.
@@ -68,9 +68,7 @@ class Japan(HolidayBase):
68
68
  observed_dates.add(self._add_holiday(tr("天皇誕生日"), FEB, 23))
69
69
 
70
70
  # Vernal Equinox Day.
71
- observed_dates.add(
72
- self._add_holiday(tr("春分の日"), *self._vernal_equinox_date)
73
- )
71
+ observed_dates.add(self._add_holiday(tr("春分の日"), *self._vernal_equinox_date))
74
72
 
75
73
  # Showa Emperor's Birthday, Greenery Day or Showa Day.
76
74
  if year <= 1988:
@@ -101,9 +99,7 @@ class Japan(HolidayBase):
101
99
  2020: date(2020, JUL, 23),
102
100
  2021: date(2021, JUL, 22),
103
101
  }
104
- dt = dates.get(
105
- year, _get_nth_weekday_of_month(3, MON, JUL, year)
106
- )
102
+ dt = dates.get(year, _get_nth_weekday_of_month(3, MON, JUL, year))
107
103
  # Marine Day.
108
104
  observed_dates.add(self._add_holiday(tr("海の日"), dt))
109
105
 
@@ -128,9 +124,7 @@ class Japan(HolidayBase):
128
124
  )
129
125
 
130
126
  # Autumnal Equinox Day.
131
- observed_dates.add(
132
- self._add_holiday(tr("秋分の日"), *self._autumnal_equinox_date)
133
- )
127
+ observed_dates.add(self._add_holiday(tr("秋分の日"), *self._autumnal_equinox_date))
134
128
 
135
129
  # Physical Education and Sports Day.
136
130
  if year >= 1966:
@@ -164,7 +158,7 @@ class Japan(HolidayBase):
164
158
  observed_dates.add(self._add_holiday(tr("天皇誕生日"), DEC, 23))
165
159
 
166
160
  if self.observed:
167
- for month, day, _ in self.special_holidays.get(year, ()):
161
+ for month, day, _ in _normalize_tuple(self.special_holidays.get(year, ())):
168
162
  observed_dates.add(date(year, month, day))
169
163
 
170
164
  # When a national holiday falls on Sunday, next working day
@@ -14,13 +14,10 @@ from datetime import timedelta as td
14
14
  from holidays.calendars import JULIAN_CALENDAR
15
15
  from holidays.constants import MAR, MAY, JUL, AUG, OCT, DEC
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 Kazakhstan(
22
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
23
- ):
20
+ class Kazakhstan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
24
21
  """
25
22
  1. https://www.officeholidays.com/countries/kazakhstan/2020
26
23
  2. https://egov.kz/cms/en/articles/holidays-calend
@@ -65,15 +62,11 @@ class Kazakhstan(
65
62
  observed_dates.add(self._add_holiday(name, MAR, 23))
66
63
 
67
64
  # Kazakhstan People Solidarity Holiday
68
- observed_dates.add(
69
- self._add_labor_day("Kazakhstan People Solidarity Holiday")
70
- )
65
+ observed_dates.add(self._add_labor_day("Kazakhstan People Solidarity Holiday"))
71
66
 
72
67
  # Defender of the Fatherland Day
73
68
  if year >= 2013:
74
- observed_dates.add(
75
- self._add_holiday("Defender of the Fatherland Day", MAY, 7)
76
- )
69
+ observed_dates.add(self._add_holiday("Defender of the Fatherland Day", MAY, 7))
77
70
 
78
71
  # Victory Day
79
72
  observed_dates.add(self._add_world_war_two_victory_day("Victory Day"))
@@ -85,9 +78,7 @@ class Kazakhstan(
85
78
  # Constitution Day of the Republic of Kazakhstan
86
79
  if year >= 1996:
87
80
  observed_dates.add(
88
- self._add_holiday(
89
- "Constitution Day of the Republic of Kazakhstan", AUG, 30
90
- )
81
+ self._add_holiday("Constitution Day of the Republic of Kazakhstan", AUG, 30)
91
82
  )
92
83
 
93
84
  # Republic Day
@@ -96,9 +87,7 @@ class Kazakhstan(
96
87
 
97
88
  # First President Day
98
89
  if 2012 <= year <= 2021:
99
- observed_dates.add(
100
- self._add_holiday("First President Day", DEC, 1)
101
- )
90
+ observed_dates.add(self._add_holiday("First President Day", DEC, 1))
102
91
 
103
92
  # Kazakhstan Independence Day
104
93
  name = "Kazakhstan Independence Day"
@@ -117,11 +106,7 @@ class Kazakhstan(
117
106
  obs_date = hol_date + td(days=+1)
118
107
  while self._is_weekend(obs_date) or obs_date in observed_dates:
119
108
  obs_date += td(days=+1)
120
- observed_dates.add(
121
- self._add_holiday(
122
- "%s (Observed)" % self[hol_date], obs_date
123
- )
124
- )
109
+ observed_dates.add(self._add_holiday("%s (Observed)" % self[hol_date], obs_date))
125
110
 
126
111
 
127
112
  class KZ(Kazakhstan):
@@ -45,9 +45,7 @@ class Kenya(HolidayBase, ChristianHolidays, InternationalHolidays):
45
45
  def _populate(self, year):
46
46
  def _add_observed(dt: date, days: int = +1) -> None:
47
47
  if self.observed and self._is_sunday(dt):
48
- self._add_holiday(
49
- "%s (Observed)" % self[dt], dt + td(days=days)
50
- )
48
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=days))
51
49
 
52
50
  if year <= 1962:
53
51
  return None
@@ -12,13 +12,10 @@
12
12
  from holidays.calendars import JULIAN_CALENDAR
13
13
  from holidays.constants import FEB, MAR, APR, MAY, AUG, NOV
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 Kyrgyzstan(
20
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
21
- ):
18
+ class Kyrgyzstan(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
22
19
  """
23
20
  Kyrgyzstan holidays.
24
21
 
@@ -48,9 +48,7 @@ class Latvia(HolidayBase):
48
48
  # Latvia proclaimed its independence from the USSR,
49
49
  # and restoration of the Republic of Latvia.
50
50
  if year >= 1990:
51
- self[
52
- date(year, 5, 4)
53
- ] = "Latvijas Republikas Neatkarības atjaunošanas diena"
51
+ self[date(year, 5, 4)] = "Latvijas Republikas Neatkarības atjaunošanas diena"
54
52
 
55
53
  # by law
56
54
  # https://likumi.lv/ta/id/72608-par-svetku-atceres-un-atzimejamam-dienam
@@ -65,9 +63,7 @@ class Latvia(HolidayBase):
65
63
 
66
64
  # Proclamation Day of the Republic of Latvia
67
65
  if year >= 1918:
68
- self[
69
- date(year, 11, 18)
70
- ] = "Latvijas Republikas proklamēšanas diena"
66
+ self[date(year, 11, 18)] = "Latvijas Republikas proklamēšanas diena"
71
67
 
72
68
  # Christmas Eve
73
69
  self[date(year, 12, 24)] = "Ziemassvētku vakars"
@@ -9,56 +9,76 @@
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, MAR, APR, MAY, JUL, OCT, DEC
12
+ from holidays.constants import MAR, APR, MAY, JUL, OCT
18
13
  from holidays.holiday_base import HolidayBase
14
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
15
 
20
16
 
21
- class Lesotho(HolidayBase):
17
+ class Lesotho(HolidayBase, ChristianHolidays, InternationalHolidays):
22
18
  """
23
- https://tinyurl.com/lesothosmallurl1324251
24
- https://www.timeanddate.com/holidays/lesotho/
19
+ References:
20
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Lesotho
21
+ - https://www.ilo.org/dyn/travail/docs/2093/Public%20Holidays%20Act%201995.pdf # noqa: E501
22
+ - https://www.timeanddate.com/holidays/lesotho/
25
23
  """
26
24
 
27
25
  country = "LS"
28
26
  special_holidays = {
29
- # https://tinyurl.com/lesothourl
30
- 2002: ((APR, 4, "Heroes Day"), (MAY, 25, "Africa Day"))
27
+ 2002: (MAY, 25, "Africa Day"),
31
28
  }
32
29
 
30
+ def __init__(self, *args, **kwargs):
31
+ ChristianHolidays.__init__(self)
32
+ InternationalHolidays.__init__(self)
33
+ super().__init__(*args, **kwargs)
34
+
33
35
  def _populate(self, year):
36
+ if year <= 1995:
37
+ return None
38
+
34
39
  super()._populate(year)
35
40
 
36
- if year > 1995:
37
- # https://www.ilo.org/dyn/travail/docs/2093/Public%20Holidays%20Act%201995.pdf
38
- self[date(year, JAN, 1)] = "New Year's Day"
39
- self[date(year, MAR, 11)] = "Moshoeshoe's Day"
41
+ # New Year's Day.
42
+ self._add_new_years_day("New Year's Day")
43
+
44
+ # Moshoeshoe's Day.
45
+ self._add_holiday("Moshoeshoe's Day", MAR, 11)
46
+
47
+ if year <= 2002:
48
+ # Heroes Day.
49
+ self._add_holiday("Heroes Day", APR, 4)
50
+
51
+ if year >= 2003:
52
+ # Africa/Heroes Day.
53
+ self._add_africa_day("Africa/Heroes Day")
54
+
55
+ # Good Friday.
56
+ self._add_good_friday("Good Friday")
57
+
58
+ # Easter Monday.
59
+ self._add_easter_monday("Easter Monday")
60
+
61
+ # Workers' Day.
62
+ self._add_labor_day("Workers' Day")
40
63
 
41
- if year < 2002:
42
- self[date(year, APR, 4)] = "Heroes Day"
64
+ # Ascension Day.
65
+ self._add_ascension_thursday("Ascension Day")
43
66
 
44
- if year > 2002:
45
- self[date(year, MAY, 25)] = "Africa/Heroes Day"
67
+ # https://en.wikipedia.org/wiki/Letsie_III
68
+ self._add_holiday(
69
+ # King's Birthday.
70
+ "King's Birthday",
71
+ *((JUL, 17) if year >= 1998 else (MAY, 2)),
72
+ )
46
73
 
47
- easter_date = easter(year)
48
- self[easter_date + td(days=-2)] = "Good Friday"
49
- self[easter_date + td(days=+1)] = "Easter Monday"
50
- self[easter_date + td(days=+39)] = "Ascension Day"
51
- self[date(year, MAY, 1)] = "Workers' Day"
74
+ # Independence Day.
75
+ self._add_holiday("Independence Day", OCT, 4)
52
76
 
53
- if year > 1997:
54
- # https://en.wikipedia.org/wiki/Letsie_III
55
- self[date(year, JUL, 17)] = "King's Birthday"
56
- if year <= 1997:
57
- self[date(year, MAY, 2)] = "King's Birthday"
77
+ # Christmas Day.
78
+ self._add_christmas_day("Christmas Day")
58
79
 
59
- self[date(year, OCT, 4)] = "National Independence Day"
60
- self[date(year, DEC, 25)] = "Christmas Day"
61
- self[date(year, DEC, 26)] = "Boxing Day"
80
+ # Boxing Day.
81
+ self._add_christmas_day_two("Boxing Day")
62
82
 
63
83
 
64
84
  class LS(Lesotho):
@@ -44,9 +44,7 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
44
44
  # Day of Restoration of Independence of Lithuania
45
45
  # (from the Soviet Union, 1990).
46
46
  if year >= 1990:
47
- self._add_holiday(
48
- "Lietuvos nepriklausomybės atkūrimo diena", MAR, 11
49
- )
47
+ self._add_holiday("Lietuvos nepriklausomybės atkūrimo diena", MAR, 11)
50
48
 
51
49
  # Easter.
52
50
  self._add_easter_sunday("Velykos")
@@ -58,14 +56,10 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
58
56
  self._add_labor_day("Tarptautinė darbo diena")
59
57
 
60
58
  # Mother's day. First Sunday in May.
61
- self._add_holiday(
62
- "Motinos diena", _get_nth_weekday_of_month(1, SUN, MAY, year)
63
- )
59
+ self._add_holiday("Motinos diena", _get_nth_weekday_of_month(1, SUN, MAY, year))
64
60
 
65
61
  # Fathers's day. First Sunday in June.
66
- self._add_holiday(
67
- "Tėvo diena", _get_nth_weekday_of_month(1, SUN, JUN, year)
68
- )
62
+ self._add_holiday("Tėvo diena", _get_nth_weekday_of_month(1, SUN, JUN, year))
69
63
 
70
64
  # St. John's Day (Christian name).
71
65
  # Day of Dew (original pagan name).
@@ -81,9 +75,7 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
81
75
  )
82
76
 
83
77
  # Assumption Day.
84
- self._add_assumption_of_mary_day(
85
- "Žolinė (Švč. Mergelės Marijos ėmimo į dangų diena)"
86
- )
78
+ self._add_assumption_of_mary_day("Žolinė (Švč. Mergelės Marijos ėmimo į dangų diena)")
87
79
 
88
80
  # All Saints' Day.
89
81
  self._add_all_saints_day("Visų šventųjų diena (Vėlinės)")
@@ -38,16 +38,12 @@ class Madagascar(HolidayBase):
38
38
  self[date(year, MAR, 8)] = "Fetin'ny vehivavy / Women's Day"
39
39
  self[date(year, MAR, 29)] = "Fetin'ny mahery fo / Martyrs' Day"
40
40
  self[date(year, MAY, 1)] = "Labour Day"
41
- self[
42
- _get_nth_weekday_of_month(3, SUN, JUN, year)
43
- ] = "Fetin'ny ray / Father's Day"
41
+ self[_get_nth_weekday_of_month(3, SUN, JUN, year)] = "Fetin'ny ray / Father's Day"
44
42
 
45
43
  if year >= 1960:
46
44
  self[date(year, JUN, 26)] = "Independence Day"
47
45
 
48
- self[
49
- date(year, AUG, 15)
50
- ] = "Fiakaran'ny Masina Maria tany an-danitra / Assumption Day"
46
+ self[date(year, AUG, 15)] = "Fiakaran'ny Masina Maria tany an-danitra / Assumption Day"
51
47
 
52
48
  self[date(year, NOV, 1)] = "Fetin'ny olo-masina / All Saints' Day"
53
49
 
@@ -66,9 +62,7 @@ class Madagascar(HolidayBase):
66
62
  whit_sunday = easter_date + td(days=+49)
67
63
  self[whit_sunday] = "Pentekosta / Whit Sunday"
68
64
 
69
- self[
70
- easter_date + td(days=+50)
71
- ] = "Alatsinain'ny pentekosta / Whit Monday"
65
+ self[easter_date + td(days=+50)] = "Alatsinain'ny pentekosta / Whit Monday"
72
66
 
73
67
  dt = _get_nth_weekday_of_month(-1, SUN, MAY, year)
74
68
  if dt == whit_sunday:
@@ -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
- from holidays.constants import JAN, MAR, MAY, JUL, OCT, DEC
15
+ from holidays.constants import JAN, MAR, MAY, JUL, OCT
18
16
  from holidays.holiday_base import HolidayBase
17
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
18
 
20
19
 
21
- class Malawi(HolidayBase):
20
+ class Malawi(HolidayBase, ChristianHolidays, InternationalHolidays):
22
21
  """
23
22
  https://www.officeholidays.com/countries/malawi
24
23
  https://www.timeanddate.com/holidays/malawi/
@@ -26,37 +25,46 @@ class Malawi(HolidayBase):
26
25
 
27
26
  country = "MW"
28
27
 
29
- def _populate(self, year):
30
- def _add_with_observed(
31
- hol_date: date, hol_name: str, days: int = +1
32
- ) -> None:
33
- self[hol_date] = hol_name
34
- if self.observed and self._is_weekend(hol_date):
35
- obs_date = hol_date + td(
36
- days=+2 if self._is_saturday(hol_date) else days
37
- )
38
- self[obs_date] = f"{hol_name} (Observed)"
28
+ def __init__(self, *args, **kwargs):
29
+ ChristianHolidays.__init__(self)
30
+ InternationalHolidays.__init__(self)
31
+ super().__init__(*args, **kwargs)
32
+
33
+ def _add_observed(self, dt: date, days: int = +1) -> None:
34
+ if self.observed and self._is_weekend(dt):
35
+ self._add_holiday(
36
+ "%s (Observed)" % self[dt],
37
+ dt + td(+2 if self._is_saturday(dt) else days),
38
+ )
39
39
 
40
+ def _populate(self, year):
40
41
  # Observed since 2000
41
42
  if year <= 1999:
42
43
  return None
43
44
 
44
45
  super()._populate(year)
45
46
 
46
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
47
- _add_with_observed(date(year, JAN, 15), "John Chilembwe Day")
48
- _add_with_observed(date(year, MAR, 3), "Martyrs Day")
47
+ self._add_observed(self._add_new_years_day("New Year's Day"))
48
+
49
+ self._add_observed(self._add_holiday("John Chilembwe Day", JAN, 15))
50
+
51
+ self._add_observed(self._add_holiday("Martyrs Day", MAR, 3))
52
+
53
+ self._add_good_friday("Good Friday")
54
+
55
+ self._add_easter_monday("Easter Monday")
56
+
57
+ self._add_observed(self._add_labor_day("Labour Day"))
58
+
59
+ self._add_observed(self._add_holiday("Kamuzu Day", MAY, 14))
60
+
61
+ self._add_observed(self._add_holiday("Independence Day", JUL, 6))
62
+
63
+ self._add_observed(self._add_holiday("Mother's Day", OCT, 15))
49
64
 
50
- easter_date = easter(year)
51
- self[easter_date + td(days=-2)] = "Good Friday"
52
- self[easter_date + td(days=+1)] = "Easter Monday"
65
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
53
66
 
54
- _add_with_observed(date(year, MAY, 1), "Labour Day")
55
- _add_with_observed(date(year, MAY, 14), "Kamuzu Day")
56
- _add_with_observed(date(year, JUL, 6), "Independence Day")
57
- _add_with_observed(date(year, OCT, 15), "Mother's Day")
58
- _add_with_observed(date(year, DEC, 25), "Christmas Day", days=+2)
59
- _add_with_observed(date(year, DEC, 26), "Boxing Day", days=+2)
67
+ self._add_observed(self._add_christmas_day_two("Boxing Day"), days=+2)
60
68
 
61
69
 
62
70
  class MW(Malawi):