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
@@ -11,14 +11,14 @@
11
11
 
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
+ from gettext import gettext as tr
14
15
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, MAR, APR, MAY, AUG, OCT, NOV, DEC
16
+ from holidays.constants import MAR, APR, AUG, OCT, NOV, DEC
18
17
  from holidays.holiday_base import HolidayBase
18
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
19
 
20
20
 
21
- class Hungary(HolidayBase):
21
+ class Hungary(HolidayBase, ChristianHolidays, InternationalHolidays):
22
22
  """
23
23
  https://en.wikipedia.org/wiki/Public_holidays_in_Hungary
24
24
  Codification dates:
@@ -27,126 +27,127 @@ class Hungary(HolidayBase):
27
27
  """
28
28
 
29
29
  country = "HU"
30
+ default_language = "hu"
31
+ supported_languages = ("en_US", "hu", "uk")
30
32
 
31
- def _add_with_observed_day_off(
33
+ def _add_observed(
32
34
  self,
33
35
  dt: date,
34
- name: str,
35
36
  since: int = 2010,
36
37
  before: bool = True,
37
38
  after: bool = True,
38
39
  ) -> None:
39
- # Swapped days off were in place earlier but
40
- # I haven't found official record yet.
41
- self._add_holiday(name, dt)
42
- # TODO: should it be a separate flag?
43
- if self.observed and since <= dt.year:
44
- if self._is_tuesday(dt) and before:
45
- self._add_holiday(f"{name} előtti pihenőnap", dt + td(days=-1))
46
- elif self._is_thursday(dt) and after:
47
- self._add_holiday(f"{name} utáni pihenőnap", dt + td(days=+1))
48
-
49
- def _populate(self, year: int) -> None:
50
- super()._populate(year)
51
-
52
- # New year's Day.
53
- self._add_with_observed_day_off(
54
- date(year, JAN, 1), "Újév", before=False, since=2014
55
- )
56
-
57
- # National Day.
58
- if 1945 <= year <= 1950 or 1989 <= year:
59
- self._add_with_observed_day_off(
60
- date(year, MAR, 15), "Nemzeti ünnep"
40
+ if not self.observed or dt.year < since:
41
+ return None
42
+ if self._is_tuesday(dt) and before:
43
+ self._add_holiday(
44
+ # Day off before
45
+ self.tr("%s előtti pihenőnap") % self[dt],
46
+ dt + td(days=-1),
61
47
  )
62
-
63
- # Soviet era.
64
- if 1950 <= year <= 1989:
65
- # Proclamation of Soviet socialist governing system.
48
+ elif self._is_thursday(dt) and after:
66
49
  self._add_holiday(
67
- "A Tanácsköztársaság kikiáltásának ünnepe", MAR, 21
50
+ # Day off after
51
+ self.tr("%s utáni pihenőnap") % self[dt],
52
+ dt + td(days=+1),
68
53
  )
69
54
 
70
- # Liberation Day.
71
- self._add_holiday("A felszabadulás ünnepe", APR, 4)
55
+ def __init__(self, *args, **kwargs):
56
+ ChristianHolidays.__init__(self)
57
+ InternationalHolidays.__init__(self)
58
+ super().__init__(*args, **kwargs)
72
59
 
73
- # Memorial day of The Great October Soviet Socialist Revolution.
74
- if year not in {1956, 1989}:
75
- self._add_holiday(
76
- "A nagy októberi szocialista forradalom ünnepe", NOV, 7
77
- )
60
+ def _populate(self, year):
61
+ super()._populate(year)
62
+
63
+ # New Year's Day.
64
+ name = self.tr("Újév")
65
+ self._add_observed(self._add_new_years_day(name), before=False, since=2014)
78
66
 
79
- easter_date = easter(year)
67
+ # The last day of the year is an observed day off if New Year's Day
68
+ # falls on a Tuesday.
69
+ if self.observed and self._is_monday(DEC, 31) and year >= 2014:
70
+ self._add_holiday(self.tr("%s előtti pihenőnap") % name, DEC, 31)
80
71
 
81
- # Good Friday.
82
- if 2017 <= year:
83
- self._add_holiday("Nagypéntek", easter_date + td(days=-2))
72
+ if 1945 <= year <= 1950 or year >= 1989:
73
+ # National Day.
74
+ self._add_observed(self._add_holiday(tr("Nemzeti ünnep"), MAR, 15))
75
+
76
+ if year >= 2017:
77
+ # Good Friday.
78
+ self._add_good_friday(tr("Nagypéntek"))
84
79
 
85
80
  # Easter.
86
- self._add_holiday("Húsvét", easter_date)
81
+ self._add_easter_sunday(tr("Húsvét"))
87
82
 
88
- # Second Easter Day.
89
83
  if year != 1955:
90
- self._add_holiday("Húsvét Hétfő", easter_date + td(days=+1))
84
+ # Easter Monday.
85
+ self._add_easter_monday(tr("Húsvét Hétfő"))
91
86
 
92
- # Pentecost.
93
- self._add_holiday("Pünkösd", easter_date + td(days=+49))
87
+ # Whit Sunday.
88
+ self._add_whit_sunday(tr("Pünkösd"))
94
89
 
95
- # Pentecost Monday.
96
- if year <= 1952 or 1992 <= year:
97
- self._add_holiday("Pünkösdhétfő", easter_date + td(days=+50))
90
+ if year <= 1952 or year >= 1992:
91
+ # Whit Monday.
92
+ self._add_whit_monday(tr("Pünkösdhétfő"))
98
93
 
99
- # International Workers' Day.
100
- if 1946 <= year:
101
- self._add_with_observed_day_off(
102
- date(year, MAY, 1), "A Munka ünnepe"
103
- )
104
- if 1950 <= year <= 1953:
105
- self._add_holiday("A Munka ünnepe", MAY, 2)
94
+ if year >= 1946:
95
+ # Labor Day.
96
+ name = tr("A Munka ünnepe")
97
+ may_1 = self._add_labor_day(name)
98
+ self._add_observed(may_1)
99
+ if 1950 <= year <= 1953:
100
+ self._add_holiday(name, may_1 + td(days=+1))
106
101
 
107
- # State Foundation Day.
108
- if 1950 <= year <= 1989:
109
- self._add_holiday("A kenyér ünnepe", AUG, 20)
110
- else:
111
- self._add_with_observed_day_off(
112
- date(year, AUG, 20), "Az államalapítás ünnepe"
113
- )
114
-
115
- # National Day.
116
- if 1991 <= year:
117
- self._add_with_observed_day_off(
118
- date(year, OCT, 23), "Nemzeti ünnep"
102
+ self._add_observed(
103
+ self._add_holiday(
104
+ # Bread Day.
105
+ tr("A kenyér ünnepe") if 1950 <= year <= 1989 else
106
+ # State Foundation Day.
107
+ tr("Az államalapítás ünnepe"),
108
+ AUG,
109
+ 20,
119
110
  )
111
+ )
120
112
 
121
- # All Saints' Day.
122
- if 1999 <= year:
123
- self._add_with_observed_day_off(
124
- date(year, NOV, 1), "Mindenszentek"
125
- )
113
+ if year >= 1991:
114
+ # National Day.
115
+ self._add_observed(self._add_holiday(tr("Nemzeti ünnep"), OCT, 23))
126
116
 
127
- # Christmas Eve is not endorsed officially
128
- # but nowadays it is usually a day off work
129
- if self.observed and 2010 <= year and not self._is_weekend(DEC, 24):
130
- self._add_holiday("Szenteste", DEC, 24)
117
+ if year >= 1999:
118
+ # All Saints' Day.
119
+ self._add_observed(self._add_all_saints_day(tr("Mindenszentek")))
131
120
 
132
- # Christmas First Day.
133
- self._add_holiday("Karácsony", DEC, 25)
121
+ # Christmas Day.
122
+ self._add_christmas_day(tr("Karácsony"))
134
123
 
135
- # Christmas Second Day.
136
124
  if year != 1955:
137
- self._add_with_observed_day_off(
138
- date(year, DEC, 26),
139
- "Karácsony másnapja",
125
+ self._add_observed(
126
+ # Second Day of Christmas.
127
+ self._add_christmas_day_two(tr("Karácsony másnapja")),
140
128
  since=2013,
141
129
  before=False,
142
130
  )
143
131
 
144
- # New Year's Eve.
145
- # Since 2014, the last day of the year is an observed day off if New
146
- # Year's Day falls on a Tuesday.
147
- dec_31 = date(year, DEC, 31)
148
- if self.observed and 2014 <= year and self._is_monday(dec_31):
149
- self._add_holiday("Szilveszter", dec_31)
132
+ # Soviet era.
133
+ if 1950 <= year <= 1989:
134
+ self._add_holiday(
135
+ # Proclamation of Soviet Republic Day.
136
+ tr("A Tanácsköztársaság kikiáltásának ünnepe"),
137
+ MAR,
138
+ 21,
139
+ )
140
+
141
+ # Liberation Day.
142
+ self._add_holiday(tr("A felszabadulás ünnepe"), APR, 4)
143
+
144
+ if year not in {1956, 1989}:
145
+ self._add_holiday(
146
+ # Great October Socialist Revolution Day.
147
+ tr("A nagy októberi szocialista forradalom ünnepe"),
148
+ NOV,
149
+ 7,
150
+ )
150
151
 
151
152
 
152
153
  class HU(Hungary):
@@ -13,13 +13,10 @@ import warnings
13
13
 
14
14
  from holidays.constants import JAN, MAR, APR, MAY, JUN, AUG, OCT, NOV
15
15
  from holidays.holiday_base import HolidayBase
16
- from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
17
- from holidays.holiday_groups import IslamicHolidays
16
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
18
17
 
19
18
 
20
- class India(
21
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
22
- ):
19
+ class India(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
23
20
  """
24
21
  https://www.india.gov.in/calendar
25
22
  https://www.india.gov.in/state-and-ut-holiday-calendar
@@ -100,9 +97,7 @@ class India(
100
97
  # https://github.com/facebook/prophet/blob/main/python/prophet/hdays.py
101
98
  # Warnings kept in place so that users are aware
102
99
  if year < 2001 or year > 2030:
103
- warning_msg = (
104
- "Diwali and Holi holidays available from 2001 to 2030 only"
105
- )
100
+ warning_msg = "Diwali and Holi holidays available from 2001 to 2030 only"
106
101
  warnings.warn(warning_msg, Warning)
107
102
 
108
103
  # https://www.timeanddate.com/holidays/india/diwali
@@ -255,9 +250,7 @@ class India(
255
250
  def _add_subdiv_or_holidays(self):
256
251
  self._add_holiday("Odisha Day (Utkala Dibasa)", APR, 1)
257
252
  self._add_holiday("Dr. B. R. Ambedkar's Jayanti", APR, 14)
258
- self._add_holiday(
259
- "Maha Vishuva Sankranti / Pana" " Sankranti", APR, 15
260
- )
253
+ self._add_holiday("Maha Vishuva Sankranti / Pana Sankranti", APR, 15)
261
254
 
262
255
  # Rajasthan.
263
256
  def _add_subdiv_rj_holidays(self):
@@ -9,14 +9,20 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from holidays.calendars import _CustomBuddhistCalendar, _CustomChineseCalendar
13
- from holidays.calendars import _CustomIslamicCalendar
14
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
15
- from holidays.constants import OCT, NOV, DEC
12
+ from holidays.calendars import (
13
+ _CustomBuddhistCalendar,
14
+ _CustomChineseCalendar,
15
+ _CustomIslamicCalendar,
16
+ )
17
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
16
18
  from holidays.holiday_base import HolidayBase
17
- from holidays.holiday_groups import BuddhistCalendarHolidays
18
- from holidays.holiday_groups import ChineseCalendarHolidays, ChristianHolidays
19
- from holidays.holiday_groups import InternationalHolidays, IslamicHolidays
19
+ from holidays.holiday_groups import (
20
+ BuddhistCalendarHolidays,
21
+ ChineseCalendarHolidays,
22
+ ChristianHolidays,
23
+ InternationalHolidays,
24
+ IslamicHolidays,
25
+ )
20
26
 
21
27
 
22
28
  class Indonesia(
@@ -37,9 +43,9 @@ class Indonesia(
37
43
  country = "ID"
38
44
  special_holidays = {
39
45
  # Election Day.
40
- 2018: ((JUN, 27, "Hari Pemilihan"),),
41
- 2019: ((APR, 17, "Hari Pemilihan"),),
42
- 2020: ((DEC, 9, "Hari Pemilihan"),),
46
+ 2018: (JUN, 27, "Hari Pemilihan"),
47
+ 2019: (APR, 17, "Hari Pemilihan"),
48
+ 2020: (DEC, 9, "Hari Pemilihan"),
43
49
  }
44
50
 
45
51
  def __init__(self, *args, **kwargs):
@@ -189,123 +195,123 @@ class IndonesiaChineseCalendar(_CustomChineseCalendar):
189
195
 
190
196
  class IndonesiaIslamicCalendar(_CustomIslamicCalendar):
191
197
  EID_AL_ADHA_DATES = {
192
- 2001: ((MAR, 6),),
193
- 2002: ((FEB, 23),),
194
- 2003: ((FEB, 12),),
195
- 2004: ((FEB, 2),),
196
- 2005: ((JAN, 21),),
198
+ 2001: (MAR, 6),
199
+ 2002: (FEB, 23),
200
+ 2003: (FEB, 12),
201
+ 2004: (FEB, 2),
202
+ 2005: (JAN, 21),
197
203
  2006: ((JAN, 10), (DEC, 31)),
198
- 2007: ((DEC, 20),),
199
- 2008: ((DEC, 8),),
200
- 2009: ((NOV, 27),),
201
- 2010: ((NOV, 17),),
202
- 2011: ((NOV, 6),),
203
- 2012: ((OCT, 26),),
204
- 2013: ((OCT, 15),),
205
- 2014: ((OCT, 5),),
206
- 2015: ((SEP, 24),),
207
- 2016: ((SEP, 12),),
208
- 2017: ((SEP, 1),),
209
- 2018: ((AUG, 22),),
210
- 2019: ((AUG, 11),),
211
- 2020: ((JUL, 31),),
212
- 2021: ((JUL, 20),),
213
- 2022: ((JUL, 10),),
214
- 2023: ((JUN, 29),),
204
+ 2007: (DEC, 20),
205
+ 2008: (DEC, 8),
206
+ 2009: (NOV, 27),
207
+ 2010: (NOV, 17),
208
+ 2011: (NOV, 6),
209
+ 2012: (OCT, 26),
210
+ 2013: (OCT, 15),
211
+ 2014: (OCT, 5),
212
+ 2015: (SEP, 24),
213
+ 2016: (SEP, 12),
214
+ 2017: (SEP, 1),
215
+ 2018: (AUG, 22),
216
+ 2019: (AUG, 11),
217
+ 2020: (JUL, 31),
218
+ 2021: (JUL, 20),
219
+ 2022: (JUL, 10),
220
+ 2023: (JUN, 29),
215
221
  }
216
222
 
217
223
  EID_AL_FITR_DATES = {
218
- 2001: ((DEC, 16),),
219
- 2002: ((DEC, 6),),
220
- 2003: ((NOV, 25),),
221
- 2004: ((NOV, 14),),
222
- 2005: ((NOV, 3),),
223
- 2006: ((OCT, 24),),
224
- 2007: ((OCT, 13),),
225
- 2008: ((OCT, 1),),
226
- 2009: ((SEP, 20),),
227
- 2010: ((SEP, 10),),
228
- 2011: ((AUG, 30),),
229
- 2012: ((AUG, 19),),
230
- 2013: ((AUG, 8),),
231
- 2014: ((JUL, 28),),
232
- 2015: ((JUL, 17),),
233
- 2016: ((JUL, 6),),
234
- 2017: ((JUN, 25),),
235
- 2018: ((JUN, 15),),
236
- 2019: ((JUN, 5),),
237
- 2020: ((MAY, 24),),
238
- 2021: ((MAY, 13),),
239
- 2022: ((MAY, 2),),
240
- 2023: ((APR, 22),),
224
+ 2001: (DEC, 16),
225
+ 2002: (DEC, 6),
226
+ 2003: (NOV, 25),
227
+ 2004: (NOV, 14),
228
+ 2005: (NOV, 3),
229
+ 2006: (OCT, 24),
230
+ 2007: (OCT, 13),
231
+ 2008: (OCT, 1),
232
+ 2009: (SEP, 20),
233
+ 2010: (SEP, 10),
234
+ 2011: (AUG, 30),
235
+ 2012: (AUG, 19),
236
+ 2013: (AUG, 8),
237
+ 2014: (JUL, 28),
238
+ 2015: (JUL, 17),
239
+ 2016: (JUL, 6),
240
+ 2017: (JUN, 25),
241
+ 2018: (JUN, 15),
242
+ 2019: (JUN, 5),
243
+ 2020: (MAY, 24),
244
+ 2021: (MAY, 13),
245
+ 2022: (MAY, 2),
246
+ 2023: (APR, 22),
241
247
  }
242
248
 
243
249
  HIJRI_NEW_YEAR_DATES = {
244
- 2001: ((MAR, 26),),
245
- 2002: ((MAR, 15),),
246
- 2003: ((MAR, 5),),
247
- 2004: ((FEB, 22),),
248
- 2005: ((FEB, 10),),
249
- 2006: ((JAN, 31),),
250
- 2007: ((JAN, 20),),
250
+ 2001: (MAR, 26),
251
+ 2002: (MAR, 15),
252
+ 2003: (MAR, 5),
253
+ 2004: (FEB, 22),
254
+ 2005: (FEB, 10),
255
+ 2006: (JAN, 31),
256
+ 2007: (JAN, 20),
251
257
  2008: ((JAN, 10), (DEC, 29)),
252
- 2009: ((DEC, 18),),
253
- 2010: ((DEC, 7),),
254
- 2011: ((NOV, 27),),
255
- 2012: ((NOV, 15),),
256
- 2013: ((NOV, 5),),
257
- 2014: ((OCT, 25),),
258
- 2015: ((OCT, 14),),
259
- 2016: ((OCT, 2),),
260
- 2017: ((SEP, 21),),
261
- 2018: ((SEP, 11),),
262
- 2019: ((SEP, 1),),
263
- 2020: ((AUG, 20),),
264
- 2021: ((AUG, 11),),
265
- 2022: ((JUL, 30),),
258
+ 2009: (DEC, 18),
259
+ 2010: (DEC, 7),
260
+ 2011: (NOV, 27),
261
+ 2012: (NOV, 15),
262
+ 2013: (NOV, 5),
263
+ 2014: (OCT, 25),
264
+ 2015: (OCT, 14),
265
+ 2016: (OCT, 2),
266
+ 2017: (SEP, 21),
267
+ 2018: (SEP, 11),
268
+ 2019: (SEP, 1),
269
+ 2020: (AUG, 20),
270
+ 2021: (AUG, 11),
271
+ 2022: (JUL, 30),
266
272
  }
267
273
 
268
274
  ISRA_AND_MIRAJ_DATES = {
269
- 2001: ((OCT, 15),),
270
- 2002: ((OCT, 4),),
271
- 2003: ((SEP, 24),),
272
- 2004: ((SEP, 12),),
273
- 2005: ((SEP, 1),),
274
- 2006: ((AUG, 22),),
275
- 2007: ((AUG, 11),),
276
- 2008: ((JUL, 31),),
277
- 2009: ((JUL, 20),),
278
- 2010: ((JUL, 9),),
279
- 2011: ((JUN, 29),),
280
- 2012: ((JUN, 17),),
281
- 2013: ((JUN, 6),),
282
- 2014: ((MAY, 27),),
283
- 2015: ((MAY, 16),),
284
- 2016: ((MAY, 6),),
285
- 2017: ((APR, 24),),
286
- 2018: ((APR, 14),),
287
- 2019: ((APR, 3),),
288
- 2020: ((MAR, 22),),
289
- 2021: ((MAR, 11),),
290
- 2022: ((FEB, 28),),
275
+ 2001: (OCT, 15),
276
+ 2002: (OCT, 4),
277
+ 2003: (SEP, 24),
278
+ 2004: (SEP, 12),
279
+ 2005: (SEP, 1),
280
+ 2006: (AUG, 22),
281
+ 2007: (AUG, 11),
282
+ 2008: (JUL, 31),
283
+ 2009: (JUL, 20),
284
+ 2010: (JUL, 9),
285
+ 2011: (JUN, 29),
286
+ 2012: (JUN, 17),
287
+ 2013: (JUN, 6),
288
+ 2014: (MAY, 27),
289
+ 2015: (MAY, 16),
290
+ 2016: (MAY, 6),
291
+ 2017: (APR, 24),
292
+ 2018: (APR, 14),
293
+ 2019: (APR, 3),
294
+ 2020: (MAR, 22),
295
+ 2021: (MAR, 11),
296
+ 2022: (FEB, 28),
291
297
  }
292
298
 
293
299
  MAWLID_DATES = {
294
- 2006: ((APR, 10),),
295
- 2007: ((MAR, 31),),
296
- 2008: ((MAR, 20),),
297
- 2009: ((MAR, 9),),
298
- 2010: ((FEB, 26),),
299
- 2011: ((FEB, 15),),
300
- 2012: ((FEB, 5),),
301
- 2013: ((JAN, 24),),
302
- 2014: ((JAN, 14),),
300
+ 2006: (APR, 10),
301
+ 2007: (MAR, 31),
302
+ 2008: (MAR, 20),
303
+ 2009: (MAR, 9),
304
+ 2010: (FEB, 26),
305
+ 2011: (FEB, 15),
306
+ 2012: (FEB, 5),
307
+ 2013: (JAN, 24),
308
+ 2014: (JAN, 14),
303
309
  2015: ((JAN, 3), (DEC, 24)),
304
- 2016: ((DEC, 12),),
305
- 2017: ((DEC, 1),),
306
- 2018: ((NOV, 20),),
307
- 2019: ((NOV, 9),),
308
- 2020: ((OCT, 29),),
309
- 2021: ((OCT, 19),),
310
- 2022: ((OCT, 8),),
310
+ 2016: (DEC, 12),
311
+ 2017: (DEC, 1),
312
+ 2018: (NOV, 20),
313
+ 2019: (NOV, 9),
314
+ 2020: (OCT, 29),
315
+ 2021: (OCT, 19),
316
+ 2022: (OCT, 8),
311
317
  }
@@ -27,9 +27,7 @@ class Ireland(HolidayBase):
27
27
  """
28
28
 
29
29
  country = "IE"
30
- special_holidays = {
31
- 2022: ((MAR, 18, "Day of Remembrance and Recognition"),)
32
- }
30
+ special_holidays = {2022: (MAR, 18, "Day of Remembrance and Recognition")}
33
31
 
34
32
  def _populate(self, year):
35
33
  super()._populate(year)
@@ -40,9 +38,7 @@ class Ireland(HolidayBase):
40
38
  if year >= 2023:
41
39
  dt = date(year, FEB, 1)
42
40
  self[
43
- dt
44
- if self._is_friday(dt)
45
- else _get_nth_weekday_from(1, MON, dt)
41
+ dt if self._is_friday(dt) else _get_nth_weekday_from(1, MON, dt)
46
42
  ] = "St. Brigid's Day"
47
43
 
48
44
  # St. Patrick's Day
@@ -65,19 +61,13 @@ class Ireland(HolidayBase):
65
61
  self[dt] = name
66
62
 
67
63
  # June bank holiday (first Monday in June)
68
- self[
69
- _get_nth_weekday_of_month(1, MON, JUN, year)
70
- ] = "June Bank Holiday"
64
+ self[_get_nth_weekday_of_month(1, MON, JUN, year)] = "June Bank Holiday"
71
65
 
72
66
  # Summer bank holiday (first Monday in August)
73
- self[
74
- _get_nth_weekday_of_month(1, MON, AUG, year)
75
- ] = "August Bank Holiday"
67
+ self[_get_nth_weekday_of_month(1, MON, AUG, year)] = "August Bank Holiday"
76
68
 
77
69
  # October Bank Holiday (last Monday in October)
78
- self[
79
- _get_nth_weekday_of_month(-1, MON, OCT, year)
80
- ] = "October Bank Holiday"
70
+ self[_get_nth_weekday_of_month(-1, MON, OCT, year)] = "October Bank Holiday"
81
71
 
82
72
  # Christmas Day
83
73
  name = "Christmas Day"
@@ -9,6 +9,9 @@
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
+
12
15
  from holidays.calendars import _get_nth_weekday_of_month
13
16
  from holidays.constants import JUN, JUL, AUG, MON, FRI
14
17
  from holidays.holiday_base import HolidayBase
@@ -43,12 +46,14 @@ class IsleOfMan(UnitedKingdom):
43
46
 
44
47
  # Isle of Man exclusive holidays
45
48
  # TT bank holiday (first Friday in June)
46
- self._add_holiday(
47
- "TT Bank Holiday", _get_nth_weekday_of_month(1, FRI, JUN, year)
48
- )
49
+ self._add_holiday("TT Bank Holiday", _get_nth_weekday_of_month(1, FRI, JUN, year))
49
50
 
50
51
  # Tynwald Day
51
- self._add_holiday("Tynwald Day", JUL, 5)
52
+ # Move to the next Monday if falls on a weekend.
53
+ dt = date(year, JUL, 5)
54
+ if self._is_weekend(dt) and year >= 1992:
55
+ dt += td(days=+2 if self._is_saturday(dt) else +1)
56
+ self._add_holiday("Tynwald Day", dt)
52
57
 
53
58
 
54
59
  class IM(IsleOfMan):