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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. holidays/__init__.py +1 -1
  2. holidays/calendars/__init__.py +9 -7
  3. holidays/calendars/buddhist.py +445 -0
  4. holidays/calendars/chinese.py +1238 -431
  5. holidays/calendars/custom.py +1 -3
  6. holidays/calendars/hebrew.py +2 -2
  7. holidays/calendars/hindu.py +445 -0
  8. holidays/calendars/islamic.py +1347 -1347
  9. holidays/calendars/thai.py +229 -38
  10. holidays/countries/__init__.py +8 -0
  11. holidays/countries/albania.py +6 -17
  12. holidays/countries/andorra.py +2 -6
  13. holidays/countries/angola.py +53 -39
  14. holidays/countries/argentina.py +25 -35
  15. holidays/countries/armenia.py +1 -0
  16. holidays/countries/aruba.py +109 -48
  17. holidays/countries/australia.py +31 -69
  18. holidays/countries/austria.py +1 -0
  19. holidays/countries/azerbaijan.py +44 -71
  20. holidays/countries/bahrain.py +7 -7
  21. holidays/countries/bangladesh.py +1 -3
  22. holidays/countries/belarus.py +2 -3
  23. holidays/countries/belize.py +128 -0
  24. holidays/countries/bolivia.py +2 -6
  25. holidays/countries/bosnia_and_herzegovina.py +5 -17
  26. holidays/countries/botswana.py +37 -44
  27. holidays/countries/brazil.py +4 -7
  28. holidays/countries/brunei.py +427 -0
  29. holidays/countries/bulgaria.py +3 -6
  30. holidays/countries/burkina_faso.py +141 -0
  31. holidays/countries/burundi.py +2 -5
  32. holidays/countries/cambodia.py +323 -0
  33. holidays/countries/cameroon.py +183 -0
  34. holidays/countries/canada.py +20 -28
  35. holidays/countries/chad.py +133 -0
  36. holidays/countries/chile.py +6 -13
  37. holidays/countries/china.py +21 -25
  38. holidays/countries/colombia.py +18 -15
  39. holidays/countries/costa_rica.py +25 -27
  40. holidays/countries/cuba.py +28 -15
  41. holidays/countries/curacao.py +100 -46
  42. holidays/countries/cyprus.py +3 -6
  43. holidays/countries/czechia.py +4 -12
  44. holidays/countries/denmark.py +2 -3
  45. holidays/countries/dominican_republic.py +2 -3
  46. holidays/countries/ecuador.py +55 -54
  47. holidays/countries/egypt.py +2 -5
  48. holidays/countries/el_salvador.py +101 -0
  49. holidays/countries/eswatini.py +34 -44
  50. holidays/countries/ethiopia.py +7 -14
  51. holidays/countries/finland.py +2 -3
  52. holidays/countries/france.py +1 -0
  53. holidays/countries/gabon.py +139 -0
  54. holidays/countries/georgia.py +1 -0
  55. holidays/countries/germany.py +1 -0
  56. holidays/countries/greece.py +7 -6
  57. holidays/countries/honduras.py +17 -13
  58. holidays/countries/hongkong.py +117 -126
  59. holidays/countries/hungary.py +93 -92
  60. holidays/countries/iceland.py +1 -0
  61. holidays/countries/india.py +4 -11
  62. holidays/countries/indonesia.py +178 -142
  63. holidays/countries/ireland.py +5 -15
  64. holidays/countries/isle_of_man.py +23 -5
  65. holidays/countries/israel.py +12 -24
  66. holidays/countries/italy.py +6 -7
  67. holidays/countries/jamaica.py +10 -18
  68. holidays/countries/japan.py +11 -16
  69. holidays/countries/kazakhstan.py +7 -22
  70. holidays/countries/kenya.py +44 -26
  71. holidays/countries/kyrgyzstan.py +2 -5
  72. holidays/countries/latvia.py +2 -6
  73. holidays/countries/lesotho.py +52 -32
  74. holidays/countries/liechtenstein.py +1 -0
  75. holidays/countries/lithuania.py +4 -12
  76. holidays/countries/madagascar.py +3 -9
  77. holidays/countries/malawi.py +34 -26
  78. holidays/countries/malaysia.py +335 -343
  79. holidays/countries/marshall_islands.py +4 -9
  80. holidays/countries/mexico.py +2 -3
  81. holidays/countries/moldova.py +4 -6
  82. holidays/countries/monaco.py +17 -26
  83. holidays/countries/montenegro.py +34 -24
  84. holidays/countries/morocco.py +8 -5
  85. holidays/countries/mozambique.py +35 -31
  86. holidays/countries/namibia.py +54 -35
  87. holidays/countries/netherlands.py +1 -0
  88. holidays/countries/new_zealand.py +166 -134
  89. holidays/countries/nicaragua.py +27 -22
  90. holidays/countries/nigeria.py +6 -17
  91. holidays/countries/north_macedonia.py +3 -8
  92. holidays/countries/norway.py +2 -3
  93. holidays/countries/pakistan.py +73 -75
  94. holidays/countries/panama.py +25 -24
  95. holidays/countries/paraguay.py +55 -47
  96. holidays/countries/peru.py +1 -0
  97. holidays/countries/philippines.py +6 -2
  98. holidays/countries/poland.py +4 -9
  99. holidays/countries/portugal.py +4 -11
  100. holidays/countries/romania.py +4 -5
  101. holidays/countries/russia.py +1 -0
  102. holidays/countries/san_marino.py +26 -27
  103. holidays/countries/saudi_arabia.py +8 -22
  104. holidays/countries/serbia.py +22 -31
  105. holidays/countries/singapore.py +181 -189
  106. holidays/countries/slovakia.py +2 -4
  107. holidays/countries/south_africa.py +60 -62
  108. holidays/countries/south_korea.py +59 -26
  109. holidays/countries/spain.py +7 -10
  110. holidays/countries/sweden.py +2 -3
  111. holidays/countries/switzerland.py +1 -0
  112. holidays/countries/taiwan.py +20 -20
  113. holidays/countries/thailand.py +36 -82
  114. holidays/countries/turkey.py +1 -3
  115. holidays/countries/ukraine.py +7 -18
  116. holidays/countries/united_arab_emirates.py +23 -31
  117. holidays/countries/united_kingdom.py +124 -116
  118. holidays/countries/united_states.py +42 -72
  119. holidays/countries/uruguay.py +1 -0
  120. holidays/countries/vatican_city.py +64 -32
  121. holidays/countries/venezuela.py +9 -6
  122. holidays/countries/vietnam.py +6 -20
  123. holidays/countries/zambia.py +63 -33
  124. holidays/countries/zimbabwe.py +56 -37
  125. holidays/financial/european_central_bank.py +15 -16
  126. holidays/financial/ny_stock_exchange.py +80 -86
  127. holidays/groups/__init__.py +18 -0
  128. holidays/groups/buddhist.py +71 -0
  129. holidays/groups/chinese.py +235 -0
  130. holidays/groups/christian.py +483 -0
  131. holidays/groups/hindu.py +71 -0
  132. holidays/groups/international.py +157 -0
  133. holidays/groups/islamic.py +288 -0
  134. holidays/groups/thai.py +157 -0
  135. holidays/helpers.py +20 -0
  136. holidays/holiday_base.py +54 -76
  137. holidays/holiday_groups.py +11 -1053
  138. holidays/locale/am/LC_MESSAGES/ET.mo +0 -0
  139. holidays/locale/am/LC_MESSAGES/ET.po +20 -15
  140. holidays/locale/ar/LC_MESSAGES/CA.mo +0 -0
  141. holidays/locale/ar/LC_MESSAGES/CA.po +184 -0
  142. holidays/locale/ar/LC_MESSAGES/ET.mo +0 -0
  143. holidays/locale/ar/LC_MESSAGES/ET.po +92 -0
  144. holidays/locale/ar/LC_MESSAGES/UA.mo +0 -0
  145. holidays/locale/ar/LC_MESSAGES/UA.po +97 -0
  146. holidays/locale/be/LC_MESSAGES/BY.po +11 -13
  147. holidays/locale/bg/LC_MESSAGES/BG.po +13 -15
  148. holidays/locale/da/LC_MESSAGES/DK.po +13 -12
  149. holidays/locale/de/LC_MESSAGES/AT.po +14 -14
  150. holidays/locale/de/LC_MESSAGES/CH.po +91 -56
  151. holidays/locale/de/LC_MESSAGES/DE.po +32 -32
  152. holidays/locale/de/LC_MESSAGES/LI.po +23 -23
  153. holidays/locale/el/LC_MESSAGES/CY.po +16 -16
  154. holidays/locale/el/LC_MESSAGES/GR.mo +0 -0
  155. holidays/locale/el/LC_MESSAGES/GR.po +21 -17
  156. holidays/locale/en/LC_MESSAGES/CA.po +43 -43
  157. holidays/locale/en_US/LC_MESSAGES/AM.mo +0 -0
  158. holidays/locale/en_US/LC_MESSAGES/AM.po +20 -20
  159. holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
  160. holidays/locale/en_US/LC_MESSAGES/AR.po +34 -33
  161. holidays/locale/en_US/LC_MESSAGES/AT.po +13 -13
  162. holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
  163. holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
  164. holidays/locale/en_US/LC_MESSAGES/BG.po +13 -15
  165. holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
  166. holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
  167. holidays/locale/en_US/LC_MESSAGES/BY.po +11 -13
  168. holidays/locale/en_US/LC_MESSAGES/CA.mo +0 -0
  169. holidays/locale/en_US/LC_MESSAGES/CA.po +70 -37
  170. holidays/locale/en_US/LC_MESSAGES/CH.po +91 -56
  171. holidays/locale/en_US/LC_MESSAGES/CL.po +39 -38
  172. holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
  173. holidays/locale/en_US/LC_MESSAGES/CO.po +27 -27
  174. holidays/locale/en_US/LC_MESSAGES/CR.mo +0 -0
  175. holidays/locale/en_US/LC_MESSAGES/CR.po +19 -19
  176. holidays/locale/en_US/LC_MESSAGES/CU.po +10 -10
  177. holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
  178. holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
  179. holidays/locale/en_US/LC_MESSAGES/CY.po +16 -16
  180. holidays/locale/en_US/LC_MESSAGES/DE.po +30 -30
  181. holidays/locale/en_US/LC_MESSAGES/DK.po +12 -11
  182. holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
  183. holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
  184. holidays/locale/en_US/LC_MESSAGES/ET.mo +0 -0
  185. holidays/locale/en_US/LC_MESSAGES/ET.po +20 -15
  186. holidays/locale/en_US/LC_MESSAGES/FI.po +15 -15
  187. holidays/locale/en_US/LC_MESSAGES/FR.po +27 -24
  188. holidays/locale/en_US/LC_MESSAGES/GE.po +23 -27
  189. holidays/locale/en_US/LC_MESSAGES/GR.mo +0 -0
  190. holidays/locale/en_US/LC_MESSAGES/GR.po +21 -17
  191. holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
  192. holidays/locale/en_US/LC_MESSAGES/HN.po +17 -12
  193. holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
  194. holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
  195. holidays/locale/en_US/LC_MESSAGES/IS.po +17 -17
  196. holidays/locale/en_US/LC_MESSAGES/JP.po +25 -25
  197. holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
  198. holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
  199. holidays/locale/en_US/LC_MESSAGES/LI.po +22 -22
  200. holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
  201. holidays/locale/en_US/LC_MESSAGES/MC.po +27 -27
  202. holidays/locale/en_US/LC_MESSAGES/MD.po +13 -13
  203. holidays/locale/en_US/LC_MESSAGES/MX.po +9 -12
  204. holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
  205. holidays/locale/en_US/LC_MESSAGES/NI.po +15 -15
  206. holidays/locale/en_US/LC_MESSAGES/NL.po +12 -12
  207. holidays/locale/en_US/LC_MESSAGES/NO.po +13 -13
  208. holidays/locale/en_US/LC_MESSAGES/PE.po +30 -30
  209. holidays/locale/en_US/LC_MESSAGES/PL.po +38 -21
  210. holidays/locale/en_US/LC_MESSAGES/PT.po +39 -36
  211. holidays/locale/en_US/LC_MESSAGES/PY.po +16 -16
  212. holidays/locale/en_US/LC_MESSAGES/RO.po +12 -12
  213. holidays/locale/en_US/LC_MESSAGES/RS.mo +0 -0
  214. holidays/locale/en_US/LC_MESSAGES/RS.po +17 -19
  215. holidays/locale/en_US/LC_MESSAGES/RU.po +11 -10
  216. holidays/locale/en_US/LC_MESSAGES/SE.po +19 -19
  217. holidays/locale/en_US/LC_MESSAGES/SK.po +17 -18
  218. holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
  219. holidays/locale/en_US/LC_MESSAGES/UA.po +18 -19
  220. holidays/locale/en_US/LC_MESSAGES/UY.po +15 -15
  221. holidays/locale/en_US/LC_MESSAGES/VE.po +16 -16
  222. holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
  223. holidays/locale/es/LC_MESSAGES/AR.po +34 -33
  224. holidays/locale/es/LC_MESSAGES/CL.po +39 -38
  225. holidays/locale/es/LC_MESSAGES/CO.mo +0 -0
  226. holidays/locale/es/LC_MESSAGES/CO.po +24 -24
  227. holidays/locale/es/LC_MESSAGES/CR.mo +0 -0
  228. holidays/locale/es/LC_MESSAGES/CR.po +19 -19
  229. holidays/locale/es/LC_MESSAGES/CU.po +10 -10
  230. holidays/locale/es/LC_MESSAGES/DO.po +12 -12
  231. holidays/locale/es/LC_MESSAGES/EC.po +11 -12
  232. holidays/locale/es/LC_MESSAGES/HN.mo +0 -0
  233. holidays/locale/es/LC_MESSAGES/HN.po +17 -12
  234. holidays/locale/es/LC_MESSAGES/MX.po +9 -12
  235. holidays/locale/es/LC_MESSAGES/NI.po +12 -12
  236. holidays/locale/es/LC_MESSAGES/PE.po +30 -30
  237. holidays/locale/es/LC_MESSAGES/PY.po +16 -16
  238. holidays/locale/es/LC_MESSAGES/UY.po +15 -15
  239. holidays/locale/es/LC_MESSAGES/VE.po +16 -16
  240. holidays/locale/fi/LC_MESSAGES/FI.po +16 -16
  241. holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
  242. holidays/locale/fr/LC_MESSAGES/CH.po +91 -56
  243. holidays/locale/fr/LC_MESSAGES/FR.po +27 -24
  244. holidays/locale/fr/LC_MESSAGES/MC.po +23 -23
  245. holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
  246. holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
  247. holidays/locale/hy/LC_MESSAGES/AM.po +16 -16
  248. holidays/locale/is/LC_MESSAGES/IS.po +18 -18
  249. holidays/locale/it/LC_MESSAGES/CH.po +91 -56
  250. holidays/locale/ja/LC_MESSAGES/JP.po +25 -25
  251. holidays/locale/ka/LC_MESSAGES/GE.po +23 -27
  252. holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
  253. holidays/locale/km/LC_MESSAGES/KH.po +139 -0
  254. holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
  255. holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
  256. holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
  257. holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
  258. holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
  259. holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
  260. holidays/locale/nl/LC_MESSAGES/NL.po +13 -13
  261. holidays/locale/no/LC_MESSAGES/NO.po +14 -14
  262. holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
  263. holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
  264. holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
  265. holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
  266. holidays/locale/pl/LC_MESSAGES/PL.po +38 -21
  267. holidays/locale/pt_PT/LC_MESSAGES/PT.po +39 -36
  268. holidays/locale/ro/LC_MESSAGES/MD.po +14 -15
  269. holidays/locale/ro/LC_MESSAGES/RO.po +13 -14
  270. holidays/locale/ru/LC_MESSAGES/RU.po +11 -9
  271. holidays/locale/sk/LC_MESSAGES/SK.po +17 -18
  272. holidays/locale/sr/LC_MESSAGES/RS.mo +0 -0
  273. holidays/locale/sr/LC_MESSAGES/RS.po +15 -17
  274. holidays/locale/sv/LC_MESSAGES/FI.po +16 -16
  275. holidays/locale/sv/LC_MESSAGES/SE.po +20 -20
  276. holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
  277. holidays/locale/th/LC_MESSAGES/BN.po +96 -0
  278. holidays/locale/th/LC_MESSAGES/CA.po +42 -42
  279. holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
  280. holidays/locale/th/LC_MESSAGES/KH.po +145 -0
  281. holidays/locale/th/LC_MESSAGES/TH.po +41 -41
  282. holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
  283. holidays/locale/uk/LC_MESSAGES/AR.po +35 -35
  284. holidays/locale/uk/LC_MESSAGES/AT.po +15 -16
  285. holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
  286. holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
  287. holidays/locale/uk/LC_MESSAGES/CH.po +92 -58
  288. holidays/locale/uk/LC_MESSAGES/CL.po +40 -40
  289. holidays/locale/uk/LC_MESSAGES/CO.mo +0 -0
  290. holidays/locale/uk/LC_MESSAGES/CO.po +28 -29
  291. holidays/locale/uk/LC_MESSAGES/CR.mo +0 -0
  292. holidays/locale/uk/LC_MESSAGES/CR.po +20 -21
  293. holidays/locale/uk/LC_MESSAGES/CU.po +11 -12
  294. holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
  295. holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
  296. holidays/locale/uk/LC_MESSAGES/DE.po +33 -34
  297. holidays/locale/uk/LC_MESSAGES/DK.po +14 -14
  298. holidays/locale/uk/LC_MESSAGES/DO.po +13 -14
  299. holidays/locale/uk/LC_MESSAGES/EC.po +12 -14
  300. holidays/locale/uk/LC_MESSAGES/FI.po +17 -18
  301. holidays/locale/uk/LC_MESSAGES/FR.po +28 -26
  302. holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
  303. holidays/locale/uk/LC_MESSAGES/HN.po +18 -14
  304. holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
  305. holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
  306. holidays/locale/uk/LC_MESSAGES/IS.po +19 -20
  307. holidays/locale/uk/LC_MESSAGES/LI.po +24 -25
  308. holidays/locale/uk/LC_MESSAGES/MC.po +27 -28
  309. holidays/locale/uk/LC_MESSAGES/MD.po +14 -15
  310. holidays/locale/uk/LC_MESSAGES/MX.po +10 -14
  311. holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
  312. holidays/locale/uk/LC_MESSAGES/NI.po +16 -17
  313. holidays/locale/uk/LC_MESSAGES/NL.po +14 -15
  314. holidays/locale/uk/LC_MESSAGES/NO.po +15 -16
  315. holidays/locale/uk/LC_MESSAGES/PE.po +31 -32
  316. holidays/locale/uk/LC_MESSAGES/PL.po +38 -21
  317. holidays/locale/uk/LC_MESSAGES/PY.po +17 -18
  318. holidays/locale/uk/LC_MESSAGES/RO.po +13 -14
  319. holidays/locale/uk/LC_MESSAGES/SE.po +21 -22
  320. holidays/locale/uk/LC_MESSAGES/SK.po +18 -20
  321. holidays/locale/uk/LC_MESSAGES/UA.po +17 -17
  322. holidays/locale/uk/LC_MESSAGES/UY.po +16 -17
  323. holidays/locale/uk/LC_MESSAGES/VE.po +17 -18
  324. holidays/registry.py +21 -12
  325. holidays/utils.py +87 -17
  326. {holidays-0.25.dist-info → holidays-0.27.dist-info}/METADATA +282 -265
  327. holidays-0.27.dist-info/RECORD +449 -0
  328. holidays-0.25.dist-info/RECORD +0 -390
  329. {holidays-0.25.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
  330. {holidays-0.25.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
  331. {holidays-0.25.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
@@ -14,17 +14,21 @@ import warnings
14
14
  from datetime import date
15
15
  from datetime import timedelta as td
16
16
 
17
- from holidays.constants import MAR, APR, MAY, JUN, JUL, AUG, OCT, SAT, SUN
17
+ from holidays.calendars import _CustomChineseCalendar
18
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, SAT, SUN
18
19
  from holidays.holiday_base import HolidayBase
19
- from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
- from holidays.holiday_groups import KoreanCalendarHolidays
20
+ from holidays.holiday_groups import (
21
+ ChineseCalendarHolidays,
22
+ ChristianHolidays,
23
+ InternationalHolidays,
24
+ )
21
25
 
22
26
 
23
27
  class SouthKorea(
24
28
  HolidayBase,
29
+ ChineseCalendarHolidays,
25
30
  ChristianHolidays,
26
31
  InternationalHolidays,
27
- KoreanCalendarHolidays,
28
32
  ):
29
33
  """
30
34
  1. https://publicholidays.co.kr/ko/2020-dates/
@@ -34,7 +38,7 @@ class SouthKorea(
34
38
  According to (3), the alt holidays in Korea are as follows:
35
39
  The alt holiday means next first non holiday after the holiday.
36
40
  Independence movement day, Liberation day, National Foundation Day,
37
- Hangul Day, Children's Day have alt holiday if they fell on saturday or sunday.
41
+ Hangul Day, Children's Day, Birthday of the Buddha, Christmas Day have alt holiday if they fell on Saturday or Sunday.
38
42
  Lunar New Year's Day, Korean Mid Autumn Day have alt holiday if they fell
39
43
  on only sunday.
40
44
 
@@ -48,9 +52,9 @@ class SouthKorea(
48
52
  }
49
53
 
50
54
  def __init__(self, *args, **kwargs):
55
+ ChineseCalendarHolidays.__init__(self, calendar=SouthKoreaLunisolarCalendar())
51
56
  ChristianHolidays.__init__(self)
52
57
  InternationalHolidays.__init__(self)
53
- KoreanCalendarHolidays.__init__(self)
54
58
  super().__init__(*args, **kwargs)
55
59
 
56
60
  def _add_with_alt_holiday(
@@ -90,8 +94,7 @@ class SouthKorea(
90
94
  if include_sat:
91
95
  target_weekday.add(SAT)
92
96
  if (
93
- hol_date.weekday() in target_weekday
94
- or len(self.get_list(hol_date)) > 1
97
+ hol_date.weekday() in target_weekday or len(self.get_list(hol_date)) > 1
95
98
  ) and hol_date.year >= since:
96
99
  hol_date += td(days=+1)
97
100
  while hol_date.weekday() in target_weekday or hol_date in self:
@@ -99,6 +102,8 @@ class SouthKorea(
99
102
  self._add_holiday("Alternative holiday of %s" % hol_name, hol_date)
100
103
 
101
104
  def _populate(self, year):
105
+ if year <= 1947:
106
+ return None
102
107
  super()._populate(year)
103
108
 
104
109
  # New Year's Day
@@ -109,9 +114,9 @@ class SouthKorea(
109
114
 
110
115
  # Lunar New Year
111
116
  name = "Lunar New Year's Day"
112
- new_year_date = self._add_korean_new_years_day(name)
113
- self._add_korean_new_years_eve(preceding_day % name)
114
- self._add_korean_new_years_day_two(second_day % name)
117
+ new_year_date = self._add_chinese_new_years_day(name)
118
+ self._add_chinese_new_years_eve(preceding_day % name)
119
+ self._add_chinese_new_years_day_two(second_day % name)
115
120
 
116
121
  for delta in (-1, 0, +1):
117
122
  self._add_with_alt_holiday(
@@ -123,9 +128,7 @@ class SouthKorea(
123
128
  )
124
129
 
125
130
  # Independence Movement Day
126
- self._add_with_alt_holiday(
127
- "Independence Movement Day", date(year, MAR, 1)
128
- )
131
+ self._add_with_alt_holiday("Independence Movement Day", date(year, MAR, 1))
129
132
 
130
133
  # Tree Planting Day
131
134
  # removed from holiday since 2006
@@ -133,13 +136,17 @@ class SouthKorea(
133
136
  self._add_holiday("Tree Planting Day", APR, 5)
134
137
 
135
138
  # Birthday of the Buddha
136
- self._add_korean_calendar_holiday("Birthday of the Buddha", 4, 8)
139
+ name = "Birthday of the Buddha"
140
+ self._add_with_alt_holiday(
141
+ name,
142
+ self._add_chinese_birthday_of_buddha(name),
143
+ add_hol=False,
144
+ since=2023,
145
+ )
137
146
 
138
147
  # Children's Day
139
148
  if year >= 1975:
140
- self._add_with_alt_holiday(
141
- "Children's Day", date(year, MAY, 5), since=2015
142
- )
149
+ self._add_with_alt_holiday("Children's Day", date(year, MAY, 5), since=2015)
143
150
 
144
151
  # Labour Day
145
152
  name = "Labour Day"
@@ -153,16 +160,15 @@ class SouthKorea(
153
160
 
154
161
  # Constitution Day
155
162
  # removed from holiday since 2008
156
- if 1948 <= year <= 2007:
163
+ if year <= 2007:
157
164
  self._add_holiday("Constitution Day", JUL, 17)
158
165
 
159
166
  # Liberation Day
160
- if year >= 1945:
161
- self._add_with_alt_holiday("Liberation Day", date(year, AUG, 15))
167
+ self._add_with_alt_holiday("Liberation Day", date(year, AUG, 15))
162
168
 
163
169
  # Korean Mid Autumn Day
164
170
  name = "Chuseok"
165
- chuseok_date = self._add_korean_calendar_holiday(name, 8, 15)
171
+ chuseok_date = self._add_mid_autumn_festival(name)
166
172
  self._add_holiday(preceding_day % name, chuseok_date + td(days=-1))
167
173
  self._add_holiday(second_day % name, chuseok_date + td(days=+1))
168
174
 
@@ -176,16 +182,15 @@ class SouthKorea(
176
182
  )
177
183
 
178
184
  # National Foundation Day
179
- self._add_with_alt_holiday(
180
- "National Foundation Day", date(year, OCT, 3)
181
- )
185
+ self._add_with_alt_holiday("National Foundation Day", date(year, OCT, 3))
182
186
 
183
187
  # Hangeul Day
184
188
  if year <= 1990 or year >= 2013:
185
189
  self._add_with_alt_holiday("Hangeul Day", date(year, OCT, 9))
186
190
 
187
191
  # Christmas Day
188
- self._add_christmas_day("Christmas Day")
192
+ name = "Christmas Day"
193
+ self._add_with_alt_holiday(name, self._add_christmas_day(name), add_hol=False, since=2023)
189
194
 
190
195
 
191
196
  class Korea(SouthKorea):
@@ -204,3 +209,31 @@ class KR(SouthKorea):
204
209
 
205
210
  class KOR(SouthKorea):
206
211
  pass
212
+
213
+
214
+ class SouthKoreaLunisolarCalendar(_CustomChineseCalendar):
215
+ BUDDHA_BIRTHDAY_DATES = {
216
+ 1931: (MAY, 25),
217
+ 1968: (MAY, 5),
218
+ 2001: (MAY, 1),
219
+ 2012: (MAY, 28),
220
+ 2023: (MAY, 27),
221
+ 2025: (MAY, 5),
222
+ }
223
+
224
+ LUNAR_NEW_YEAR_DATES = {
225
+ 1916: (FEB, 4),
226
+ 1944: (JAN, 26),
227
+ 1954: (FEB, 4),
228
+ 1958: (FEB, 19),
229
+ 1966: (JAN, 22),
230
+ 1988: (FEB, 18),
231
+ 1997: (FEB, 8),
232
+ 2027: (FEB, 7),
233
+ 2028: (JAN, 27),
234
+ }
235
+
236
+ MID_AUTUMN_DATES = {
237
+ 1942: (SEP, 25),
238
+ 2040: (SEP, 21),
239
+ }
@@ -15,13 +15,10 @@ from typing import Optional
15
15
 
16
16
  from holidays.constants import FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC
17
17
  from holidays.holiday_base import HolidayBase
18
- from holidays.holiday_groups import ChristianHolidays, IslamicHolidays
19
- from holidays.holiday_groups import InternationalHolidays
18
+ from holidays.holiday_groups import ChristianHolidays, IslamicHolidays, InternationalHolidays
20
19
 
21
20
 
22
- class Spain(
23
- HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays
24
- ):
21
+ class Spain(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays):
25
22
  """
26
23
  References:
27
24
  - https://administracion.gob.es/pag_Home/atencionCiudadana/calendarios.html # noqa: E501
@@ -112,7 +109,7 @@ class Spain(
112
109
  self._add_saint_josephs_day("San José")
113
110
  if self._year <= 2022:
114
111
  self._add_holy_thursday("Jueves Santo")
115
- self._add_holiday("Día de San Jorge", APR, 23)
112
+ self._add_saint_georges_day("Día de San Jorge")
116
113
  if self._year == 2022:
117
114
  self._add_labor_day("Día del Trabajador")
118
115
  self._add_christmas_day("Navidad")
@@ -148,7 +145,7 @@ class Spain(
148
145
  def _add_subdiv_cl_holidays(self):
149
146
  if self._year == 2023:
150
147
  self._add_new_years_day("Año nuevo")
151
- self._add_holiday("Día de Santiago Apóstol", JUL, 25)
148
+ self._add_saint_james_day("Día de Santiago Apóstol")
152
149
  if self._year <= 2014:
153
150
  self._add_saint_josephs_day("San José")
154
151
  if self._year <= 2022:
@@ -241,7 +238,7 @@ class Spain(
241
238
  self._add_holy_thursday("Jueves Santo")
242
239
  self._add_holiday("Día de Comunidad de Madrid", MAY, 2)
243
240
  if self._year == 2022:
244
- self._add_holiday("Día de Santiago Apóstol", JUL, 25)
241
+ self._add_saint_james_day("Día de Santiago Apóstol")
245
242
  self._add_christmas_day("Navidad")
246
243
 
247
244
  def _add_subdiv_ml_holidays(self):
@@ -266,7 +263,7 @@ class Spain(
266
263
  self._add_holy_thursday("Jueves Santo")
267
264
  self._add_easter_monday("Lunes de Pascua")
268
265
  if self._year >= 2022:
269
- self._add_holiday("Día de Santiago Apóstol", JUL, 25)
266
+ self._add_saint_james_day("Día de Santiago Apóstol")
270
267
  if self._year == 2022:
271
268
  self._add_christmas_day("Navidad")
272
269
 
@@ -277,7 +274,7 @@ class Spain(
277
274
  self._add_holy_thursday("Jueves Santo")
278
275
  self._add_easter_monday("Lunes de Pascua")
279
276
  if self._year >= 2022:
280
- self._add_holiday("Día de Santiago Apóstol", JUL, 25)
277
+ self._add_saint_james_day("Día de Santiago Apóstol")
281
278
  if self._year <= 2022:
282
279
  self._add_holiday("Día de Elcano", SEP, 6)
283
280
  if 2011 <= self._year <= 2013:
@@ -35,6 +35,7 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
35
35
 
36
36
  country = "SE"
37
37
  default_language = "sv"
38
+ supported_languages = ("en_US", "sv", "uk")
38
39
 
39
40
  def __init__(self, include_sundays=True, **kwargs):
40
41
  """
@@ -126,9 +127,7 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
126
127
  # Optionally add all Sundays of the year.
127
128
  begin = _get_nth_weekday_from(1, SUN, date(year, JAN, 1))
128
129
  end = date(year, DEC, 31)
129
- for dt in (
130
- begin + td(days=n) for n in range(0, (end - begin).days + 1, 7)
131
- ):
130
+ for dt in (begin + td(days=n) for n in range(0, (end - begin).days + 1, 7)):
132
131
  # Sunday.
133
132
  self._add_holiday(tr("Söndag"), dt)
134
133
 
@@ -49,6 +49,7 @@ class Switzerland(HolidayBase, ChristianHolidays, InternationalHolidays):
49
49
  "ZG", # Zug
50
50
  "ZH", # Zürich
51
51
  )
52
+ supported_languages = ("de", "en_US", "fr", "it", "uk")
52
53
 
53
54
  def __init__(self, *args, **kwargs):
54
55
  ChristianHolidays.__init__(self)
@@ -11,8 +11,7 @@
11
11
 
12
12
  from holidays.constants import FEB, APR, OCT
13
13
  from holidays.holiday_base import HolidayBase
14
- from holidays.holiday_groups import ChineseCalendarHolidays
15
- from holidays.holiday_groups import InternationalHolidays
14
+ from holidays.holiday_groups import ChineseCalendarHolidays, InternationalHolidays
16
15
 
17
16
 
18
17
  class Taiwan(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
@@ -28,33 +27,34 @@ class Taiwan(HolidayBase, ChineseCalendarHolidays, InternationalHolidays):
28
27
  super().__init__(*args, **kwargs)
29
28
 
30
29
  def _populate(self, year):
30
+ if year <= 1911:
31
+ return None
31
32
  super()._populate(year)
32
33
 
33
34
  # New Year's Day
34
- if year > 1911:
35
- self._add_new_years_day(
36
- "Founding of the Republic of China (New Year's Day)"
37
- )
35
+ self._add_new_years_day("Founding of the Republic of China (New Year's Day)")
38
36
 
39
- self._add_chinese_new_years_eve("Chinese New Year's Eve")
40
- self._add_chinese_new_years_day("Spring Festival")
41
- self._add_chinese_new_years_day_two("Spring Festival")
42
- self._add_chinese_new_years_day_three("Spring Festival")
37
+ self._add_chinese_new_years_eve("Chinese New Year's Eve")
43
38
 
44
- self._add_holiday("Children's Day", APR, 4)
39
+ name = "Spring Festival"
40
+ self._add_chinese_new_years_day(name)
41
+ self._add_chinese_new_years_day_two(name)
42
+ self._add_chinese_new_years_day_three(name)
43
+ if year == 2021:
44
+ self._add_chinese_new_years_day_four(name)
45
+ self._add_chinese_new_years_day_five(name)
45
46
 
46
- self._add_dragon_boat_festival("Dragon Boat Festival")
47
- self._add_mid_autumn_festival("Mid-Autumn Festival")
47
+ self._add_holiday("Children's Day", APR, 4)
48
48
 
49
- self._add_holiday("National Day", OCT, 10)
50
- self._add_holiday("National Day", OCT, 11)
49
+ self._add_dragon_boat_festival("Dragon Boat Festival")
50
+ self._add_mid_autumn_festival("Mid-Autumn Festival")
51
51
 
52
- if year > 1947:
53
- self._add_holiday("Peace Memorial Day", FEB, 28)
52
+ name = "National Day"
53
+ self._add_holiday(name, OCT, 10)
54
+ self._add_holiday(name, OCT, 11)
54
55
 
55
- if year == 2021:
56
- self._add_chinese_new_years_day_four("Spring Festival")
57
- self._add_chinese_new_years_day_five("Spring Festival")
56
+ if year >= 1948:
57
+ self._add_holiday("Peace Memorial Day", FEB, 28)
58
58
 
59
59
 
60
60
  class TW(Taiwan):
@@ -13,19 +13,16 @@ from datetime import date
13
13
  from datetime import timedelta as td
14
14
  from gettext import gettext as tr
15
15
 
16
- from holidays.calendars import _ThaiLuniSolar
17
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
18
- from holidays.constants import OCT, NOV, DEC
16
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
19
17
  from holidays.holiday_base import HolidayBase
20
- from holidays.holiday_groups import InternationalHolidays
18
+ from holidays.holiday_groups import InternationalHolidays, ThaiCalendarHolidays
21
19
 
22
20
 
23
- class Thailand(HolidayBase, InternationalHolidays):
21
+ class Thailand(HolidayBase, InternationalHolidays, ThaiCalendarHolidays):
24
22
  """
25
23
  A subclass of :py:class:`HolidayBase` representing public holidays
26
24
  in Thailand. (Based on South Korean and Singaporean Implementation)
27
25
 
28
-
29
26
  References:
30
27
 
31
28
  - Based on: https://en.wikipedia.org/wiki/Public_holidays_in_Thailand
@@ -125,20 +122,13 @@ class Thailand(HolidayBase, InternationalHolidays):
125
122
  # Special Cases.
126
123
 
127
124
  rama_ix_golden_jubilee = tr("พระราชพิธีกาญจนาภิเษก พ.ศ. 2539")
128
- rama_ix_sixty_accession = tr(
129
- "พระราชพิธีฉลองสิริราชสมบัติครบ 60 ปี พ.ศ. 2549"
130
- )
125
+ rama_ix_sixty_accession = tr("พระราชพิธีฉลองสิริราชสมบัติครบ 60 ปี พ.ศ. 2549")
131
126
  thai_military_emergency_lockdown = tr("วันหยุดพิเศษ (คมช.)")
132
127
  thai_political_emergency_lockdown = tr("วันหยุดพิเศษ (การเมือง)")
133
- thai_flood_2011_emergency_lockdown = tr(
134
- "วันหยุดพิเศษ (มหาอุทกภัย พ.ศ. 2554)"
135
- )
136
- rama_ix_mourning = tr(
137
- "วันหยุดพิเศษ (ร่วมถวายอาลัย ส่งดวงพระวิญญาณพระบรมศพ)"
138
- )
128
+ thai_flood_2011_emergency_lockdown = tr("วันหยุดพิเศษ (มหาอุทกภัย พ.ศ. 2554)")
129
+ rama_ix_mourning = tr("วันหยุดพิเศษ (ร่วมถวายอาลัย ส่งดวงพระวิญญาณพระบรมศพ)")
139
130
  rama_ix_cremation = tr(
140
- "วันพระราชพิธีถวายพระเพลิงพระบรมศพ"
141
- "พระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช"
131
+ "วันพระราชพิธีถวายพระเพลิงพระบรมศพพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช"
142
132
  )
143
133
  rama_x_coronation_celebrations = tr(
144
134
  "พระราชพิธีบรมราชาภิเษก พระบาทสมเด็จพระวชิรเกล้าเจ้าอยู่หัว"
@@ -165,7 +155,7 @@ class Thailand(HolidayBase, InternationalHolidays):
165
155
  (DEC, 12, thai_special_in_lieu_holidays),
166
156
  ),
167
157
  # 1995-1997 (Bank of Thailand Data).
168
- 1996: ((JUN, 10, rama_ix_golden_jubilee),),
158
+ 1996: (JUN, 10, rama_ix_golden_jubilee),
169
159
  # 1998-2000 (include In Lieus, Checked with Bank of Thailand Data).
170
160
  1998: (
171
161
  (MAY, 11, thai_special_in_lieu_holidays),
@@ -192,7 +182,7 @@ class Thailand(HolidayBase, InternationalHolidays):
192
182
  (JUN, 13, rama_ix_sixty_accession),
193
183
  (SEP, 20, thai_military_emergency_lockdown),
194
184
  ),
195
- 2007: ((DEC, 24, thai_election_in_lieu),),
185
+ 2007: (DEC, 24, thai_election_in_lieu),
196
186
  2009: (
197
187
  (JAN, 2, thai_bridge_public_holiday),
198
188
  (APR, 10, thai_political_emergency_lockdown),
@@ -213,9 +203,9 @@ class Thailand(HolidayBase, InternationalHolidays):
213
203
  (OCT, 30, thai_flood_2011_emergency_lockdown),
214
204
  (OCT, 31, thai_flood_2011_emergency_lockdown),
215
205
  ),
216
- 2012: ((APR, 9, thai_bridge_public_holiday),),
217
- 2013: ((DEC, 30, thai_bridge_public_holiday),),
218
- 2014: ((AUG, 11, thai_bridge_public_holiday),),
206
+ 2012: (APR, 9, thai_bridge_public_holiday),
207
+ 2013: (DEC, 30, thai_bridge_public_holiday),
208
+ 2014: (AUG, 11, thai_bridge_public_holiday),
219
209
  2015: (
220
210
  (JAN, 2, thai_bridge_public_holiday),
221
211
  (MAY, 4, thai_bridge_public_holiday),
@@ -225,8 +215,8 @@ class Thailand(HolidayBase, InternationalHolidays):
225
215
  (JUL, 18, thai_bridge_public_holiday),
226
216
  (OCT, 14, rama_ix_mourning),
227
217
  ),
228
- 2017: ((OCT, 26, rama_ix_cremation),),
229
- 2019: ((MAY, 6, rama_x_coronation_celebrations),),
218
+ 2017: (OCT, 26, rama_ix_cremation),
219
+ 2019: (MAY, 6, rama_x_coronation_celebrations),
230
220
  2020: (
231
221
  (JUL, 27, songkran_festival_in_lieu_covid),
232
222
  (SEP, 4, songkran_festival_in_lieu_covid),
@@ -246,12 +236,13 @@ class Thailand(HolidayBase, InternationalHolidays):
246
236
  (OCT, 14, thai_bridge_public_holiday),
247
237
  (DEC, 30, thai_bridge_public_holiday),
248
238
  ),
249
- 2023: ((MAY, 5, thai_bridge_public_holiday),),
239
+ 2023: (MAY, 5, thai_bridge_public_holiday),
250
240
  }
241
+ supported_languages = ("en_US", "th")
251
242
 
252
243
  def __init__(self, **kwargs) -> None:
253
244
  InternationalHolidays.__init__(self)
254
- self.thls = _ThaiLuniSolar()
245
+ ThaiCalendarHolidays.__init__(self)
255
246
  super().__init__(**kwargs)
256
247
 
257
248
  def _populate(self, year):
@@ -281,11 +272,7 @@ class Thailand(HolidayBase, InternationalHolidays):
281
272
  if (
282
273
  self.observed
283
274
  and self._is_weekend(dt)
284
- and (
285
- 1961 <= year <= 1973
286
- or 1995 <= year <= 1997
287
- or year >= 2001
288
- )
275
+ and (1961 <= year <= 1973 or 1995 <= year <= 1997 or year >= 2001)
289
276
  ):
290
277
  in_lieu = dt + td(days=+2 if self._is_saturday(dt) else +1)
291
278
  for name in self.get_list(dt):
@@ -344,11 +331,9 @@ class Thailand(HolidayBase, InternationalHolidays):
344
331
  # This has its own in-lieu trigger.
345
332
 
346
333
  if year >= 1948:
347
- songkran_festival = self.tr("วันสงกรานต์")
334
+ songkran_festival = tr("วันสงกรานต์")
348
335
  if year <= 1953 or (1957 <= year != 2020):
349
- dt = self._add_holiday(
350
- songkran_festival, APR, 12 if 1989 <= year <= 1997 else 13
351
- )
336
+ dt = self._add_holiday(songkran_festival, APR, 12 if 1989 <= year <= 1997 else 13)
352
337
  if 1957 <= year <= 1988:
353
338
  _add_observed(dt)
354
339
  else:
@@ -367,17 +352,11 @@ class Thailand(HolidayBase, InternationalHolidays):
367
352
 
368
353
  songkran_festival_in_lieu = self.tr("ชดเชย%s") % songkran_festival
369
354
 
370
- if self.observed and (
371
- 1995 <= year <= 1997 or 2001 <= year != 2020
372
- ):
355
+ if self.observed and (1995 <= year <= 1997 or 2001 <= year != 2020):
373
356
  if self._is_thursday(dt):
374
- self._add_holiday(
375
- songkran_festival_in_lieu, dt + td(days=+4)
376
- )
357
+ self._add_holiday(songkran_festival_in_lieu, dt + td(days=+4))
377
358
  elif self._is_friday(dt) or self._is_saturday(dt):
378
- self._add_holiday(
379
- songkran_festival_in_lieu, dt + td(days=+3)
380
- )
359
+ self._add_holiday(songkran_festival_in_lieu, dt + td(days=+3))
381
360
 
382
361
  # National Labour day.
383
362
  # วันแรงงานแห่งชาติ
@@ -397,11 +376,7 @@ class Thailand(HolidayBase, InternationalHolidays):
397
376
  # Replaced by Rama IX's birthday in 1960 (B.E. 2503) by Sarit Thanarat.
398
377
  # TODO: Add check for 1939 if we support earlier dates.
399
378
 
400
- _add_observed(
401
- self._add_holiday(
402
- tr("วันชาติ"), *((JUN, 24) if year <= 1959 else (DEC, 5))
403
- )
404
- )
379
+ _add_observed(self._add_holiday(tr("วันชาติ"), *((JUN, 24) if year <= 1959 else (DEC, 5))))
405
380
 
406
381
  # Coronation Day.
407
382
  # วันฉัตรมงคล
@@ -463,10 +438,7 @@ class Thailand(HolidayBase, InternationalHolidays):
463
438
  name = (
464
439
  tr("วันเฉลิมพระชนมพรรษาสมเด็จพระบรมราชชนนีพันปีหลวง")
465
440
  if year >= 2017
466
- else tr(
467
- "วันเฉลิมพระชนมพรรษาสมเด็จพระนางเจ้าสิริกิติ์ "
468
- "พระบรมราชินีนาถ"
469
- )
441
+ else tr("วันเฉลิมพระชนมพรรษาสมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ")
470
442
  )
471
443
  _add_observed(self._add_holiday(name, AUG, 12))
472
444
 
@@ -498,10 +470,7 @@ class Thailand(HolidayBase, InternationalHolidays):
498
470
  "มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
499
471
  )
500
472
  if year >= 2019
501
- else tr(
502
- "วันคล้ายวันสวรรคตพระบาทสมเด็จพระปรมินทรมหาภูมิพล"
503
- "อดุลยเดช บรมนาถบพิตร"
504
- )
473
+ else tr("วันคล้ายวันสวรรคตพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช บรมนาถบพิตร")
505
474
  )
506
475
  _add_observed(self._add_holiday(name, OCT, 13))
507
476
 
@@ -535,8 +504,7 @@ class Thailand(HolidayBase, InternationalHolidays):
535
504
  )
536
505
  if year >= 2016
537
506
  else tr(
538
- "วันเฉลิมพระชนมพรรษา"
539
- "พระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช บรมนาถบพิตร"
507
+ "วันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช บรมนาถบพิตร"
540
508
  )
541
509
  )
542
510
  )
@@ -572,50 +540,38 @@ class Thailand(HolidayBase, InternationalHolidays):
572
540
  self._add_new_years_eve(tr("วันสิ้นปี"))
573
541
 
574
542
  # Thai Lunar Calendar Holidays
543
+ # See `_ThaiLunisolar` in holidays/utils.py for more details.
544
+ # Thai Lunar Calendar Holidays only work from 1941 to 2057.
575
545
 
576
- """
577
- See `_ThaiLuniSolar` in holidays/utils.py for more details.
578
-
579
- Thai Lunar Calendar Holidays only work from 1941 (B.E. 2484) onwards
580
- until 2057 (B.E. 2600).
581
- """
582
546
  # Makha Bucha.
583
547
  # วันมาฆบูชา
584
548
  # Status: In-Use.
585
549
 
586
- makha_bucha_date = self.thls.makha_bucha_date(year)
550
+ makha_bucha_date = self._add_makha_bucha(tr("วันมาฆบูชา"))
587
551
  if makha_bucha_date:
588
- _add_observed(
589
- self._add_holiday(tr("วันมาฆบูชา"), makha_bucha_date)
590
- )
552
+ _add_observed(makha_bucha_date)
591
553
 
592
554
  # Visakha Bucha.
593
555
  # วันวิสาขบูชา
594
556
  # Status: In-Use.
595
557
 
596
- visakha_bucha_date = self.thls.visakha_bucha_date(year)
558
+ visakha_bucha_date = self._add_visakha_bucha(tr("วันวิสาขบูชา"))
597
559
  if visakha_bucha_date:
598
- _add_observed(
599
- self._add_holiday(tr("วันวิสาขบูชา"), visakha_bucha_date)
600
- )
560
+ _add_observed(visakha_bucha_date)
601
561
 
602
562
  # Asarnha Bucha.
603
563
  # วันอาสาฬหบูชา
604
564
  # Status: In-Use.
605
565
  # This has its own in-lieu trigger.
606
566
 
607
- asarnha_bucha_date = self.thls.asarnha_bucha_date(year)
608
- if asarnha_bucha_date:
609
- self._add_holiday(tr("วันอาสาฬหบูชา"), asarnha_bucha_date)
567
+ asarnha_bucha_date = self._add_asarnha_bucha(tr("วันอาสาฬหบูชา"))
610
568
 
611
569
  # Buddhist Lent Day.
612
570
  # วันเข้าพรรษา
613
571
  # Status: In-Use.
614
572
  # This has its own in-lieu trigger.
615
573
 
616
- khao_phansa_date = self.thls.khao_phansa_date(year)
617
- if khao_phansa_date:
618
- self._add_holiday(tr("วันเข้าพรรษา"), khao_phansa_date)
574
+ self._add_khao_phansa(tr("วันเข้าพรรษา"))
619
575
 
620
576
  # Asarnha Bucha/Buddhist Lent Day (in lieu).
621
577
  # วันหยุดชดเชยวันอาสาฬหบูชา
@@ -687,9 +643,7 @@ class Thailand(HolidayBase, InternationalHolidays):
687
643
  }
688
644
  # For years with exact date data.
689
645
  if year in raeknakhwan_dates:
690
- _add_observed(
691
- self._add_holiday(raeknakhwan, *raeknakhwan_dates[year])
692
- )
646
+ _add_observed(self._add_holiday(raeknakhwan, *raeknakhwan_dates[year]))
693
647
  # Approx. otherwise for 1957-2013.
694
648
  elif 1957 <= year <= 1996:
695
649
  _add_observed(self._add_holiday(raeknakhwan, MAY, 13))
@@ -39,9 +39,7 @@ class Turkey(HolidayBase, IslamicHolidays, InternationalHolidays):
39
39
  self._add_labor_day("Labour Day")
40
40
 
41
41
  # 19th of May.
42
- self._add_holiday(
43
- "Commemoration of Ataturk, Youth and Sports Day", MAY, 19
44
- )
42
+ self._add_holiday("Commemoration of Ataturk, Youth and Sports Day", MAY, 19)
45
43
 
46
44
  # 15th of Jul.
47
45
  # Became a national holiday after 15 Jul 2016 coup d'etat attempt.
@@ -27,6 +27,7 @@ class Ukraine(HolidayBase, ChristianHolidays, InternationalHolidays):
27
27
 
28
28
  country = "UA"
29
29
  default_language = "uk"
30
+ supported_languages = ("ar", "en_US", "uk")
30
31
 
31
32
  def __init__(self, *args, **kwargs):
32
33
  ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -58,17 +59,13 @@ class Ukraine(HolidayBase, ChristianHolidays, InternationalHolidays):
58
59
  )
59
60
 
60
61
  # International Women's Day.
61
- observed_dates.add(
62
- self._add_womens_day(tr("Міжнародний жіночий день"))
63
- )
62
+ observed_dates.add(self._add_womens_day(tr("Міжнародний жіночий день")))
64
63
 
65
64
  # There is no holidays from March 15, 2022
66
65
  # https://zakon.rada.gov.ua/laws/show/2136-20#n26
67
66
  if year <= 2021:
68
67
  # Easter Sunday (Pascha).
69
- observed_dates.add(
70
- self._add_easter_sunday(tr("Великдень (Пасха)"))
71
- )
68
+ observed_dates.add(self._add_easter_sunday(tr("Великдень (Пасха)")))
72
69
 
73
70
  # Holy Trinity Day.
74
71
  observed_dates.add(self._add_whit_sunday(tr("Трійця")))
@@ -83,16 +80,11 @@ class Ukraine(HolidayBase, ChristianHolidays, InternationalHolidays):
83
80
  may_1 = self._add_labor_day(name)
84
81
  observed_dates.add(may_1)
85
82
  if year <= 2017:
86
- observed_dates.add(
87
- self._add_holiday(name, may_1 + td(days=+1))
88
- )
83
+ observed_dates.add(self._add_holiday(name, may_1 + td(days=+1)))
89
84
 
90
85
  name = (
91
86
  # Day of Victory over Nazism in World War II (Victory Day).
92
- tr(
93
- "День перемоги над нацизмом у Другій світовій війні "
94
- "(День перемоги)"
95
- )
87
+ tr("День перемоги над нацизмом у Другій світовій війні (День перемоги)")
96
88
  if year >= 2016
97
89
  # Victory Day.
98
90
  else tr("День перемоги")
@@ -146,12 +138,9 @@ class Ukraine(HolidayBase, ChristianHolidays, InternationalHolidays):
146
138
  if self.observed:
147
139
  for dt in sorted(observed_dates):
148
140
  if self._is_weekend(dt) and (
149
- date(1995, JAN, 27) <= dt <= date(1998, JAN, 9)
150
- or dt >= date(1999, APR, 23)
141
+ date(1995, JAN, 27) <= dt <= date(1998, JAN, 9) or dt >= date(1999, APR, 23)
151
142
  ):
152
- obs_date = dt + td(
153
- days=+2 if self._is_saturday(dt) else +1
154
- )
143
+ obs_date = dt + td(days=+2 if self._is_saturday(dt) else +1)
155
144
  while obs_date in self:
156
145
  obs_date += td(days=+1)
157
146
  hol_name = self.tr("%s (вихідний)") % self[dt]