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
@@ -34,13 +34,49 @@ class Ecuador(HolidayBase, ChristianHolidays, InternationalHolidays):
34
34
  InternationalHolidays.__init__(self)
35
35
  super().__init__(*args, **kwargs)
36
36
 
37
+ def _add_observed(
38
+ self,
39
+ dt: date,
40
+ weekend_only: bool = False,
41
+ before: bool = True,
42
+ after: bool = True,
43
+ ) -> None:
44
+ if self.observed and self._year >= 2017:
45
+ obs_date = None
46
+ # Art. 1 of Law #0 from 20.12.2016
47
+ # When holidays falls on Tuesday, the rest shall be transferred to
48
+ # preceding Monday, and if they falls on Wednesday or Thursday,
49
+ # the rest shall be transferred to Friday of the same week.
50
+ # Exceptions to this provision are January 1, December 25 and
51
+ # Shrove Tuesday.
52
+ if not weekend_only:
53
+ if self._is_tuesday(dt) and before:
54
+ obs_date = dt + td(days=-1)
55
+ elif self._is_wednesday(dt):
56
+ obs_date = dt + td(days=+2)
57
+ elif self._is_thursday(dt) and after:
58
+ obs_date = dt + td(days=+1)
59
+ # When holidays falls on Saturday or Sunday, the rest shall be
60
+ # transferred, respectively, to the preceding Friday or the
61
+ # following Monday.
62
+ if self._is_saturday(dt) and before:
63
+ obs_date = dt + td(days=-1)
64
+ elif self._is_sunday(dt) and after:
65
+ obs_date = dt + td(days=+1)
66
+ if obs_date:
67
+ self._add_holiday(self.tr("%s (Observado)") % self[dt], obs_date)
68
+
37
69
  def _populate(self, year):
38
70
  super()._populate(year)
39
- observed_dates = set()
40
- observed_weekend_dates = set()
41
71
 
42
72
  # New Year's Day.
43
- observed_weekend_dates.add(self._add_new_years_day(tr("Año Nuevo")))
73
+ name = tr("Año Nuevo")
74
+ self._add_observed(self._add_new_years_day(name), weekend_only=True)
75
+
76
+ if self.observed and year >= 2017:
77
+ dec_31 = (DEC, 31)
78
+ if self._is_friday(*dec_31):
79
+ self._add_holiday(self.tr("%s (Observado)") % self.tr(name), *dec_31)
44
80
 
45
81
  # Carnival.
46
82
  name = tr("Carnaval")
@@ -51,77 +87,41 @@ class Ecuador(HolidayBase, ChristianHolidays, InternationalHolidays):
51
87
  self._add_good_friday(tr("Viernes Santo"))
52
88
 
53
89
  # Labour Day.
54
- observed_dates.add(self._add_labor_day(tr("Día del Trabajo")))
90
+ self._add_observed(self._add_labor_day(tr("Día del Trabajo")))
55
91
 
56
- observed_dates.add(
92
+ self._add_observed(
57
93
  # The Battle of Pichincha.
58
94
  self._add_holiday(tr("Batalla de Pichincha"), MAY, 24)
59
95
  )
60
96
 
61
- observed_dates.add(
97
+ self._add_observed(
62
98
  # Declaration of Independence of Quito.
63
99
  self._add_holiday(tr("Primer Grito de Independencia"), AUG, 10)
64
100
  )
65
101
 
66
- observed_dates.add(
102
+ self._add_observed(
67
103
  # Independence of Guayaquil.
68
104
  self._add_holiday(tr("Independencia de Guayaquil"), OCT, 9)
69
105
  )
70
106
 
71
- # All Souls' Day.
72
- observed_dates.add(self._add_all_souls_day(tr("Día de los Difuntos")))
107
+ self._add_observed(
108
+ # All Souls' Day.
109
+ self._add_all_souls_day(tr("Día de los Difuntos")),
110
+ after=False,
111
+ )
73
112
 
74
- observed_dates.add(
113
+ self._add_observed(
75
114
  # Independence of Cuenca.
76
- self._add_holiday(tr("Independencia de Cuenca"), NOV, 3)
115
+ self._add_holiday(tr("Independencia de Cuenca"), NOV, 3),
116
+ before=False,
77
117
  )
78
118
 
79
- observed_weekend_dates.add(
119
+ self._add_observed(
80
120
  # Christmas Day.
81
- self._add_christmas_day(tr("Día de Navidad"))
121
+ self._add_christmas_day(tr("Día de Navidad")),
122
+ weekend_only=True,
82
123
  )
83
124
 
84
- if self.observed and year >= 2017:
85
- # Art. 1 of Law #0 from 20.12.2016
86
- # When holidays falls on Tuesday, the rest shall be transferred to
87
- # preceding Monday, and if they falls on Wednesday or Thursday,
88
- # the rest shall be transferred to Friday of the same week.
89
- # Exceptions to this provision are January 1, December 25 and
90
- # Shrove Tuesday.
91
- for dt in observed_dates:
92
- obs_date = None
93
- if self._is_tuesday(dt):
94
- obs_date = dt + td(days=-1)
95
- elif self._is_wednesday(dt):
96
- obs_date = dt + td(days=+2)
97
- elif self._is_thursday(dt):
98
- obs_date = dt + td(days=+1)
99
- if obs_date and obs_date not in observed_dates:
100
- self._add_holiday(
101
- self.tr("%s (Observado)") % self[dt], obs_date
102
- )
103
-
104
- # When holidays falls on Saturday or Sunday, the rest shall be
105
- # transferred, respectively, to the preceding Friday or the
106
- # following Monday.
107
- observed_dates = observed_dates.union(observed_weekend_dates)
108
- for dt in observed_dates:
109
- obs_date = None
110
- if self._is_saturday(dt):
111
- obs_date = dt + td(days=-1)
112
- elif self._is_sunday(dt):
113
- obs_date = dt + td(days=+1)
114
- if obs_date and obs_date not in observed_dates:
115
- self._add_holiday(
116
- self.tr("%s (Observado)") % self[dt], obs_date
117
- )
118
-
119
- dec_31 = date(year, DEC, 31)
120
- if self._is_friday(dec_31):
121
- self._add_holiday(
122
- self.tr("%s (Observado)") % self.tr("Año Nuevo"), dec_31
123
- )
124
-
125
125
 
126
126
  class EC(Ecuador):
127
127
  pass
@@ -12,13 +12,10 @@
12
12
  from holidays.calendars import JULIAN_CALENDAR
13
13
  from holidays.constants import JAN, APR, JUN, JUL, OCT
14
14
  from holidays.holiday_base import HolidayBase
15
- from holidays.holiday_groups import ChristianHolidays, IslamicHolidays
16
- from holidays.holiday_groups import InternationalHolidays
15
+ from holidays.holiday_groups import ChristianHolidays, IslamicHolidays, InternationalHolidays
17
16
 
18
17
 
19
- class Egypt(
20
- HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays
21
- ):
18
+ class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays):
22
19
  # Holidays here are estimates, it is common for the day to be pushed
23
20
  # if falls in a weekend, although not a rule that can be implemented.
24
21
  # Holidays after 2020: the following four moving date holidays whose exact
@@ -13,13 +13,12 @@ import warnings
13
13
  from datetime import date
14
14
  from datetime import timedelta as td
15
15
 
16
- from dateutil.easter import easter
17
-
18
- from holidays.constants import JAN, APR, MAY, JUL, SEP, DEC
16
+ from holidays.constants import JAN, APR, JUL, SEP, DEC
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Eswatini(HolidayBase):
21
+ class Eswatini(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  """
24
23
  https://swazilii.org/sz/legislation/act/1938/71
25
24
  https://www.officeholidays.com/countries/swaziland
@@ -28,63 +27,54 @@ class Eswatini(HolidayBase):
28
27
  country = "SZ"
29
28
  special_holidays = {
30
29
  # https://mg.co.za/article/1999-12-09-swaziland-declares-bank-holidays/
31
- 1999: ((DEC, 31, "Y2K changeover"),),
32
- 2000: ((JAN, 3, "Y2K changeover"),),
30
+ 1999: (DEC, 31, "Y2K changeover"),
31
+ 2000: (JAN, 3, "Y2K changeover"),
33
32
  }
34
33
 
35
- def _populate(self, year):
36
- def _add_with_observed(
37
- hol_date: date, hol_name: str, days: int = +1
38
- ) -> None:
39
- # As of 2021/1/1, whenever a public holiday falls on a Sunday
40
- # it rolls over to the following Monday
41
- self[hol_date] = hol_name
42
- if self.observed and self._is_sunday(hol_date) and year >= 2021:
43
- self[hol_date + td(days=days)] = f"{hol_name} (Observed)"
34
+ def __init__(self, *args, **kwargs):
35
+ ChristianHolidays.__init__(self)
36
+ InternationalHolidays.__init__(self)
37
+ super().__init__(*args, **kwargs)
44
38
 
39
+ def _add_observed(self, dt: date, days: int = +1) -> None:
40
+ # As of 2021/1/1, whenever a public holiday falls on a Sunday
41
+ # it rolls over to the following Monday
42
+ if self.observed and self._is_sunday(dt) and self._year >= 2021:
43
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=days))
44
+
45
+ def _populate(self, year):
45
46
  # Observed since 1939
46
47
  if year <= 1938:
47
48
  return None
48
49
 
49
50
  super()._populate(year)
50
51
 
51
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
52
+ self._add_observed(self._add_new_years_day("New Year's Day"))
52
53
 
53
- easter_date = easter(year)
54
- self[easter_date + td(days=-2)] = "Good Friday"
55
- self[easter_date + td(days=+1)] = "Easter Monday"
56
- self[easter_date + td(days=+39)] = "Ascension Day"
54
+ self._add_good_friday("Good Friday")
55
+
56
+ self._add_easter_monday("Easter Monday")
57
+
58
+ self._add_ascension_thursday("Ascension Day")
57
59
 
58
60
  if year >= 1987:
59
- # https://www.officeholidays.com/holidays/swaziland/birthday-of-king-mswati-iii
60
- # In 2071, 2076, 2082 Apr 20 is Easter Monday,
61
- # so observed on Apr 21 (Tue)
62
- _add_with_observed(
63
- date(year, APR, 19),
64
- "King's Birthday",
65
- +2 if year in {2071, 2076, 2082} else +1,
66
- )
61
+ apr_19 = self._add_holiday("King's Birthday", APR, 19)
62
+ self._add_observed(apr_19, days=+2 if apr_19 == self._easter_sunday else +1)
67
63
 
68
64
  if year >= 1969:
69
- # In 2038 Apr 26 is Easter Monday,
70
- # so observed on Apr 27 (Tue)
71
- _add_with_observed(
72
- date(year, APR, 25),
73
- "National Flag Day",
74
- +2 if year == 2038 else +1,
75
- )
65
+ apr_25 = self._add_holiday("National Flag Day", APR, 25)
66
+ self._add_observed(apr_25, days=+2 if apr_25 == self._easter_sunday else +1)
76
67
 
77
- _add_with_observed(date(year, MAY, 1), "Worker's Day")
68
+ self._add_observed(self._add_labor_day("Worker's Day"))
78
69
 
79
70
  if year >= 1983:
80
- # https://www.officeholidays.com/holidays/swaziland/birthday-of-late-king-sobhuza
81
- _add_with_observed(
82
- date(year, JUL, 22), "Birthday of Late King Sobhuza"
83
- )
84
-
85
- _add_with_observed(date(year, SEP, 6), "Independence Day")
86
- _add_with_observed(date(year, DEC, 25), "Christmas Day", days=+2)
87
- _add_with_observed(date(year, DEC, 26), "Boxing Day")
71
+ self._add_observed(self._add_holiday("Birthday of Late King Sobhuza", JUL, 22))
72
+
73
+ self._add_observed(self._add_holiday("Independence Day", SEP, 6))
74
+
75
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
76
+
77
+ self._add_observed(self._add_christmas_day_two("Boxing Day"))
88
78
 
89
79
 
90
80
  class Swaziland(Eswatini):
@@ -14,8 +14,7 @@ from gettext import gettext as tr
14
14
  from holidays.calendars import JULIAN_CALENDAR
15
15
  from holidays.constants import MAR, MAY, SEP
16
16
  from holidays.holiday_base import HolidayBase
17
- from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
18
- from holidays.holiday_groups import IslamicHolidays
17
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
19
18
 
20
19
  # Ethiopian holidays are estimated: it is common for the day to be pushed
21
20
  # if falls in a weekend, although not a rule that can be implemented.
@@ -31,9 +30,7 @@ from holidays.holiday_groups import IslamicHolidays
31
30
  # is_weekend function is there, however not activated for accuracy.
32
31
 
33
32
 
34
- class Ethiopia(
35
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
36
- ):
33
+ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
37
34
  country = "ET"
38
35
  default_language = "am"
39
36
  estimated_label = tr("%s* (*ግምት)")
@@ -70,14 +67,10 @@ class Ethiopia(
70
67
  # September 12.
71
68
 
72
69
  # Ethiopian New Year.
73
- self._add_holiday(
74
- tr("አዲስ ዓመት እንቁጣጣሽ"), SEP, 12 if self._is_leap_year(year) else 11
75
- )
70
+ self._add_holiday(tr("አዲስ ዓመት እንቁጣጣሽ"), SEP, 12 if self._is_leap_year(year) else 11)
76
71
 
77
72
  # Finding of True Cross.
78
- self._add_holiday(
79
- tr("መስቀል"), SEP, 28 if self._is_leap_year(year) else 27
80
- )
73
+ self._add_holiday(tr("መስቀል"), SEP, 28 if self._is_leap_year(year) else 27)
81
74
 
82
75
  # Orthodox Christmas.
83
76
  self._add_christmas_day(tr("ገና"))
@@ -108,9 +101,7 @@ class Ethiopia(
108
101
 
109
102
  if year < 1991 and year > 1974:
110
103
  # Downfall of King Haile Selassie.
111
- self._add_holiday(
112
- tr("ደርግ የመጣበት ቀን"), SEP, 13 if self._is_leap_year(year) else 12
113
- )
104
+ self._add_holiday(tr("ደርግ የመጣበት ቀን"), SEP, 13 if self._is_leap_year(year) else 12)
114
105
 
115
106
  # Eid al-Fitr.
116
107
  self._add_eid_al_fitr_day(tr("ኢድ አልፈጥር"))
@@ -42,9 +42,7 @@ class Finland(HolidayBase, ChristianHolidays, InternationalHolidays):
42
42
  # Epiphany.
43
43
  name = tr("Loppiainen")
44
44
  if 1973 <= year <= 1990:
45
- self._add_holiday(
46
- name, _get_nth_weekday_from(1, SAT, date(year, JAN, 6))
47
- )
45
+ self._add_holiday(name, _get_nth_weekday_from(1, SAT, date(year, JAN, 6)))
48
46
  else:
49
47
  self._add_epiphany_day(name)
50
48
 
@@ -9,17 +9,13 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from holidays.calendars import _CustomCalendar, _IslamicLunar
13
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
14
- from holidays.constants import OCT, NOV, DEC
12
+ from holidays.calendars import _CustomIslamicCalendar
13
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
15
14
  from holidays.holiday_base import HolidayBase
16
- from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
17
- from holidays.holiday_groups import IslamicHolidays
15
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
18
16
 
19
17
 
20
- class Gabon(
21
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
22
- ):
18
+ class Gabon(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
23
19
  """
24
20
  References:
25
21
  - https://en.wikipedia.org/wiki/Public_holidays_in_Gabon
@@ -90,54 +86,54 @@ class GAB(Gabon):
90
86
  pass
91
87
 
92
88
 
93
- class GabonIslamicCalendar(_CustomCalendar, _IslamicLunar):
89
+ class GabonIslamicCalendar(_CustomIslamicCalendar):
94
90
  EID_AL_ADHA_DATES = {
95
- 2001: ((MAR, 6),),
96
- 2002: ((FEB, 23),),
97
- 2003: ((FEB, 12),),
98
- 2004: ((FEB, 2),),
99
- 2005: ((JAN, 21),),
91
+ 2001: (MAR, 6),
92
+ 2002: (FEB, 23),
93
+ 2003: (FEB, 12),
94
+ 2004: (FEB, 2),
95
+ 2005: (JAN, 21),
100
96
  2006: ((JAN, 10), (DEC, 31)),
101
- 2007: ((DEC, 20),),
102
- 2008: ((DEC, 9),),
103
- 2009: ((NOV, 28),),
104
- 2010: ((NOV, 17),),
105
- 2011: ((NOV, 7),),
106
- 2012: ((OCT, 26),),
107
- 2013: ((OCT, 15),),
108
- 2014: ((OCT, 5),),
109
- 2015: ((SEP, 24),),
110
- 2016: ((SEP, 13),),
111
- 2017: ((SEP, 2),),
112
- 2018: ((AUG, 22),),
113
- 2019: ((AUG, 11),),
114
- 2020: ((JUL, 31),),
115
- 2021: ((JUL, 20),),
116
- 2022: ((JUL, 9),),
97
+ 2007: (DEC, 20),
98
+ 2008: (DEC, 9),
99
+ 2009: (NOV, 28),
100
+ 2010: (NOV, 17),
101
+ 2011: (NOV, 7),
102
+ 2012: (OCT, 26),
103
+ 2013: (OCT, 15),
104
+ 2014: (OCT, 5),
105
+ 2015: (SEP, 24),
106
+ 2016: (SEP, 13),
107
+ 2017: (SEP, 2),
108
+ 2018: (AUG, 22),
109
+ 2019: (AUG, 11),
110
+ 2020: (JUL, 31),
111
+ 2021: (JUL, 20),
112
+ 2022: (JUL, 9),
117
113
  }
118
114
 
119
115
  EID_AL_FITR_DATES = {
120
- 2001: ((DEC, 17),),
121
- 2002: ((DEC, 6),),
122
- 2003: ((NOV, 26),),
123
- 2004: ((NOV, 14),),
124
- 2005: ((NOV, 4),),
125
- 2006: ((OCT, 24),),
126
- 2007: ((OCT, 13),),
127
- 2008: ((OCT, 2),),
128
- 2009: ((SEP, 21),),
129
- 2010: ((SEP, 10),),
130
- 2011: ((AUG, 31),),
131
- 2012: ((AUG, 19),),
132
- 2013: ((AUG, 8),),
133
- 2014: ((JUL, 29),),
134
- 2015: ((JUL, 18),),
135
- 2016: ((JUL, 7),),
136
- 2017: ((JUN, 26),),
137
- 2018: ((JUN, 15),),
138
- 2019: ((JUN, 4),),
139
- 2020: ((MAY, 24),),
140
- 2021: ((MAY, 13),),
141
- 2022: ((MAY, 2),),
142
- 2023: ((APR, 21),),
116
+ 2001: (DEC, 17),
117
+ 2002: (DEC, 6),
118
+ 2003: (NOV, 26),
119
+ 2004: (NOV, 14),
120
+ 2005: (NOV, 4),
121
+ 2006: (OCT, 24),
122
+ 2007: (OCT, 13),
123
+ 2008: (OCT, 2),
124
+ 2009: (SEP, 21),
125
+ 2010: (SEP, 10),
126
+ 2011: (AUG, 31),
127
+ 2012: (AUG, 19),
128
+ 2013: (AUG, 8),
129
+ 2014: (JUL, 29),
130
+ 2015: (JUL, 18),
131
+ 2016: (JUL, 7),
132
+ 2017: (JUN, 26),
133
+ 2018: (JUN, 15),
134
+ 2019: (JUN, 4),
135
+ 2020: (MAY, 24),
136
+ 2021: (MAY, 13),
137
+ 2022: (MAY, 2),
138
+ 2023: (APR, 21),
143
139
  }
@@ -12,8 +12,7 @@
12
12
  from datetime import timedelta as td
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars import _get_nth_weekday_from, JULIAN_CALENDAR
16
- from holidays.calendars import GREGORIAN_CALENDAR
15
+ from holidays.calendars import _get_nth_weekday_from, JULIAN_CALENDAR, GREGORIAN_CALENDAR
17
16
  from holidays.constants import MAR, OCT, MON
18
17
  from holidays.holiday_base import HolidayBase
19
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
@@ -12,42 +12,45 @@
12
12
  from datetime import timedelta as td
13
13
  from gettext import gettext as tr
14
14
 
15
- from dateutil.easter import easter
16
-
17
15
  from holidays.calendars import _get_nth_weekday_of_month
18
- from holidays.constants import JAN, APR, MAY, SEP, OCT, DEC, WED
16
+ from holidays.constants import APR, SEP, OCT, WED
19
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Honduras(HolidayBase):
21
+ class Honduras(HolidayBase, ChristianHolidays, InternationalHolidays):
23
22
  # Artículo 339 del Código del Trabajo:
24
- # https://www.ilo.org/dyn/natlex/docs/WEBTEXT/29076/64849/S59HND01.htm#:~:text=El%20presente%20C%C3%B3digo%20regula%20las,compensaci%C3%B3n%20equitativa%20de%20su%20inversi%C3%B3n.
23
+ # https://www.ilo.org/dyn/natlex/docs/WEBTEXT/29076/64849/S59HND01.htm
25
24
 
26
25
  country = "HN"
27
26
  default_language = "es"
28
27
  supported_languages = ("en_US", "es", "uk")
29
28
 
29
+ def __init__(self, *args, **kwargs):
30
+ ChristianHolidays.__init__(self)
31
+ InternationalHolidays.__init__(self)
32
+ super().__init__(*args, **kwargs)
33
+
30
34
  def _populate(self, year):
31
35
  super()._populate(year)
32
36
 
33
37
  # New Year's Day.
34
- self._add_holiday(tr("Año Nuevo"), JAN, 1)
38
+ self._add_new_years_day(tr("Año Nuevo"))
35
39
 
36
- easter_date = easter(year)
37
40
  # Maundy Thursday.
38
- self._add_holiday(tr("Jueves Santo"), easter_date + td(days=-3))
41
+ self._add_holy_thursday(tr("Jueves Santo"))
39
42
 
40
43
  # Good Friday.
41
- self._add_holiday(tr("Viernes Santo"), easter_date + td(days=-2))
44
+ self._add_good_friday(tr("Viernes Santo"))
42
45
 
43
46
  # Holy Saturday.
44
- self._add_holiday(tr("Sábado de Gloria"), easter_date + td(days=-1))
47
+ self._add_holy_saturday(tr("Sábado de Gloria"))
45
48
 
46
49
  # Panamerican Day.
47
50
  self._add_holiday(tr("Día de las Américas"), APR, 14)
48
51
 
49
52
  # Labor Day.
50
- self._add_holiday(tr("Día del Trabajo"), MAY, 1)
53
+ self._add_labor_day(tr("Día del Trabajo"))
51
54
 
52
55
  # Independence Day.
53
56
  self._add_holiday(tr("Día de la Independencia"), SEP, 15)
@@ -58,7 +61,7 @@ class Honduras(HolidayBase):
58
61
  self._add_holiday(tr("Día de Morazán"), OCT, 3)
59
62
 
60
63
  # Columbus Day.
61
- self._add_holiday(tr("Día de la Raza"), OCT, 12)
64
+ self._add_columbus_day(tr("Día de la Raza"))
62
65
 
63
66
  # Army Day.
64
67
  self._add_holiday(tr("Día de las Fuerzas Armadas"), OCT, 21)
@@ -72,7 +75,7 @@ class Honduras(HolidayBase):
72
75
  self._add_holiday(holiday_name, first_wednesday + td(days=+2))
73
76
 
74
77
  # Christmas.
75
- self._add_holiday(tr("Navidad"), DEC, 25)
78
+ self._add_christmas_day(tr("Navidad"))
76
79
 
77
80
 
78
81
  class HN(Honduras):
@@ -16,8 +16,11 @@ from typing import Optional
16
16
  from holidays.calendars import _get_nth_weekday_of_month
17
17
  from holidays.constants import JUN, JUL, AUG, SEP, OCT, MON
18
18
  from holidays.holiday_base import HolidayBase
19
- from holidays.holiday_groups import ChineseCalendarHolidays, ChristianHolidays
20
- from holidays.holiday_groups import InternationalHolidays
19
+ from holidays.holiday_groups import (
20
+ ChineseCalendarHolidays,
21
+ ChristianHolidays,
22
+ InternationalHolidays,
23
+ )
21
24
 
22
25
 
23
26
  class HongKong(
@@ -112,9 +115,7 @@ class HongKong(
112
115
  name = "Ching Ming Festival"
113
116
  ching_ming_date = self._qingming_date
114
117
  if self.observed and ching_ming_date == easter_monday_date:
115
- self._add_holiday(
116
- f"{day_following}{name}", ching_ming_date + td(days=+1)
117
- )
118
+ self._add_holiday(f"{day_following}{name}", ching_ming_date + td(days=+1))
118
119
  elif ching_ming_date not in {
119
120
  self._easter_sunday + td(days=-2),
120
121
  self._easter_sunday + td(days=-1),
@@ -169,9 +170,7 @@ class HongKong(
169
170
  mid_autumn_date + td(days=+2),
170
171
  )
171
172
  else:
172
- self._add_mid_autumn_festival_day_two(
173
- f"The day following the {name}"
174
- )
173
+ self._add_mid_autumn_festival_day_two(f"The day following the {name}")
175
174
  else:
176
175
  self._add_mid_autumn_festival_day_two(name)
177
176