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
@@ -9,16 +9,12 @@
9
9
  # Website: https://github.com/dr-prodigy/python-holidays
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
- from datetime import date
13
- from datetime import timedelta as td
14
-
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, FEB, MAR, MAY, JUL, AUG, SEP, NOV, DEC
12
+ from holidays.constants import FEB, MAR, JUL, SEP
18
13
  from holidays.holiday_base import HolidayBase
14
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
15
 
20
16
 
21
- class SanMarino(HolidayBase):
17
+ class SanMarino(HolidayBase, ChristianHolidays, InternationalHolidays):
22
18
  """
23
19
  References:
24
20
  - https://en.wikipedia.org/wiki/Public_holidays_in_San_Marino
@@ -26,64 +22,67 @@ class SanMarino(HolidayBase):
26
22
 
27
23
  country = "SM"
28
24
 
25
+ def __init__(self, *args, **kwargs):
26
+ ChristianHolidays.__init__(self)
27
+ InternationalHolidays.__init__(self)
28
+ super().__init__(*args, **kwargs)
29
+
29
30
  def _populate(self, year: int) -> None:
30
31
  super()._populate(year)
31
32
 
32
33
  # New Year's Day.
33
- self[date(year, JAN, 1)] = "New Year's Day"
34
+ self._add_new_years_day("New Year's Day")
34
35
 
35
36
  # Epiphany.
36
- self[date(year, JAN, 6)] = "Epiphany"
37
+ self._add_epiphany_day("Epiphany")
37
38
 
38
39
  # Feast of Saint Agatha.
39
- self[date(year, FEB, 5)] = "Feast of Saint Agatha"
40
+ self._add_holiday("Feast of Saint Agatha", FEB, 5)
40
41
 
41
42
  # Anniversary of the Arengo.
42
- self[date(year, MAR, 25)] = "Anniversary of the Arengo"
43
-
44
- easter_sunday = easter(year)
43
+ self._add_holiday("Anniversary of the Arengo", MAR, 25)
45
44
 
46
45
  # Easter Sunday.
47
- self[easter_sunday] = "Easter Sunday"
46
+ self._add_easter_sunday("Easter Sunday")
48
47
 
49
48
  # Easter Monday.
50
- self[easter_sunday + td(days=+1)] = "Easter Monday"
49
+ self._add_easter_monday("Easter Monday")
51
50
 
52
51
  # Labour Day.
53
- self[date(year, MAY, 1)] = "Labour Day"
52
+ self._add_labor_day("Labour Day")
54
53
 
55
54
  # Corpus Cristi.
56
- self[easter_sunday + td(days=+60)] = "Corpus Cristi"
55
+ self._add_corpus_christi_day("Corpus Cristi")
57
56
 
58
57
  # Liberation from Fascism Day.
59
- self[date(year, JUL, 28)] = "Liberation from Fascism Day"
58
+ self._add_holiday("Liberation from Fascism Day", JUL, 28)
60
59
 
61
60
  # Assumption of Mary.
62
- self[date(year, AUG, 15)] = "Assumption Day"
61
+ self._add_assumption_of_mary_day("Assumption Day")
63
62
 
64
63
  # The Feast of Saint Marinus and the Republic.
65
- self[date(year, SEP, 3)] = "Foundation Day"
64
+ self._add_holiday("Foundation Day", SEP, 3)
66
65
 
67
66
  # All Saints' Day.
68
- self[date(year, NOV, 1)] = "All Saints' Day"
67
+ self._add_all_saints_day("All Saints' Day")
69
68
 
70
69
  # Commemoration of the Dead.
71
- self[date(year, NOV, 2)] = "Commemoration of the Dead"
70
+ self._add_all_souls_day("Commemoration of the Dead")
72
71
 
73
72
  # Immaculate Conception.
74
- self[date(year, DEC, 8)] = "Immaculate Conception Day"
73
+ self._add_immaculate_conception_day("Immaculate Conception Day")
75
74
 
76
75
  # Christmas Eve.
77
- self[date(year, DEC, 24)] = "Christmas Eve"
76
+ self._add_christmas_eve("Christmas Eve")
78
77
 
79
78
  # Christmas Day.
80
- self[date(year, DEC, 25)] = "Christmas Day"
79
+ self._add_christmas_day("Christmas Day")
81
80
 
82
81
  # Saint Stephen's Day.
83
- self[date(year, DEC, 26)] = "Saint Stephen's Day"
82
+ self._add_christmas_day_two("Saint Stephen's Day")
84
83
 
85
84
  # New Year's Eve.
86
- self[date(year, DEC, 31)] = "New Year's Eve"
85
+ self._add_new_years_eve("New Year's Eve")
87
86
 
88
87
 
89
88
  class SM(SanMarino):
@@ -36,40 +36,30 @@ class SaudiArabia(HolidayBase, IslamicHolidays):
36
36
  country = "SA"
37
37
  special_holidays = {
38
38
  # celebrate the country's win against Argentina in the World Cup
39
- 2022: ((NOV, 23, "National Holiday"),),
39
+ 2022: (NOV, 23, "National Holiday"),
40
40
  }
41
41
 
42
42
  def __init__(self, *args, **kwargs):
43
43
  IslamicHolidays.__init__(self)
44
44
  super().__init__(*args, **kwargs)
45
45
 
46
- def _add_islamic_observed(
47
- self, hol_name: str, hol_dates: Set[date]
48
- ) -> None:
46
+ def _add_islamic_observed(self, hol_name: str, hol_dates: Set[date]) -> None:
49
47
  if not self.observed:
50
48
  return None
51
49
  for dt in hol_dates:
52
- weekend_days = sum(
53
- self._is_weekend(dt + td(days=i)) for i in range(4)
54
- )
50
+ weekend_days = sum(self._is_weekend(dt + td(days=i)) for i in range(4))
55
51
  for i in range(weekend_days):
56
- self._add_holiday(
57
- f"{hol_name} (Observed)", dt + td(days=+4 + i)
58
- )
52
+ self._add_holiday(f"{hol_name} (Observed)", dt + td(days=+4 + i))
59
53
 
60
54
  def _add_observed(self, hol_date: date) -> None:
61
55
  if self.observed:
62
56
  weekend = sorted(self.weekend)
63
57
  # 1st weekend day (Thursday before 2013 and Friday otherwise)
64
58
  if hol_date.weekday() == weekend[0]:
65
- self._add_holiday(
66
- f"{self[hol_date]} (Observed)", hol_date + td(days=-1)
67
- )
59
+ self._add_holiday(f"{self[hol_date]} (Observed)", hol_date + td(days=-1))
68
60
  # 2nd weekend day (Friday before 2013 and Saturday otherwise)
69
61
  elif hol_date.weekday() == weekend[1]:
70
- self._add_holiday(
71
- f"{self[hol_date]} (Observed)", hol_date + td(days=+1)
72
- )
62
+ self._add_holiday(f"{self[hol_date]} (Observed)", hol_date + td(days=+1))
73
63
 
74
64
  def _populate(self, year):
75
65
  super()._populate(year)
@@ -113,9 +103,7 @@ class SaudiArabia(HolidayBase, IslamicHolidays):
113
103
  if year >= 2005:
114
104
  dt = date(year, SEP, 23)
115
105
  if dt not in self:
116
- self._add_observed(
117
- self._add_holiday("National Day Holiday", dt)
118
- )
106
+ self._add_observed(self._add_holiday("National Day Holiday", dt))
119
107
 
120
108
  # Founding Day holiday (started 2022).
121
109
  # Note: if founding day happens within the Eid al-Fitr Holiday or
@@ -123,9 +111,7 @@ class SaudiArabia(HolidayBase, IslamicHolidays):
123
111
  if year >= 2022:
124
112
  dt = date(year, FEB, 22)
125
113
  if dt not in self:
126
- self._add_observed(
127
- self._add_holiday("Founding Day Holiday", dt)
128
- )
114
+ self._add_observed(self._add_holiday("Founding Day Holiday", dt))
129
115
 
130
116
  # observed holidays special cases
131
117
  if self.observed and year == 2001:
@@ -12,11 +12,10 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
  from gettext import gettext as tr
15
- from typing import Optional
16
15
 
17
16
  from holidays.calendars import JULIAN_CALENDAR
18
- from holidays.constants import JAN, FEB, NOV
19
- from holidays.holiday_base import DateLike, HolidayBase
17
+ from holidays.constants import FEB
18
+ from holidays.holiday_base import HolidayBase
20
19
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
21
20
 
22
21
 
@@ -30,54 +29,46 @@ class Serbia(HolidayBase, ChristianHolidays, InternationalHolidays):
30
29
 
31
30
  country = "RS"
32
31
  default_language = "sr"
32
+ supported_languages = ("en_US", "sr")
33
33
 
34
34
  def __init__(self, *args, **kwargs):
35
35
  ChristianHolidays.__init__(self, JULIAN_CALENDAR)
36
36
  InternationalHolidays.__init__(self)
37
37
  super().__init__(*args, **kwargs)
38
38
 
39
- def _add_observed_holiday(
40
- self, name: str, *dt: DateLike
41
- ) -> Optional[date]:
42
- return self._add_holiday(
43
- self.tr("%s (Слободан дан)") % self.tr(name), *dt
44
- )
39
+ def _add_observed(self, dt: date, days: int = +1) -> None:
40
+ if self.observed and self._is_sunday(dt):
41
+ self._add_holiday(self.tr("%s (слободан дан)") % self[dt], dt + td(days))
45
42
 
46
43
  def _populate(self, year):
47
44
  super()._populate(year)
48
45
 
49
46
  # New Year's Day.
50
- name = self.tr("Нова година")
51
- self._add_new_years_day(name)
52
- self._add_new_years_day_two(name)
53
- if self.observed and self._is_weekend(JAN, 1):
54
- self._add_observed_holiday(name, JAN, 3)
47
+ name = tr("Нова година")
48
+ self._add_observed(self._add_new_years_day(name), days=+2)
49
+ self._add_observed(self._add_new_years_day_two(name))
55
50
 
56
51
  # Orthodox Christmas.
57
52
  self._add_christmas_day(tr("Божић"))
58
53
 
59
54
  # Statehood Day.
60
- name = self.tr("Дан државности Србије")
61
- self._add_holiday(name, FEB, 15)
62
- self._add_holiday(name, FEB, 16)
63
- if self.observed and self._is_weekend(FEB, 15):
64
- self._add_observed_holiday(name, FEB, 17)
55
+ name = tr("Дан државности Србије")
56
+ self._add_observed(self._add_holiday(name, FEB, 15), days=+2)
57
+ self._add_observed(self._add_holiday(name, FEB, 16))
65
58
 
66
59
  # International Workers' Day.
67
60
  name = tr("Празник рада")
68
61
  may_1 = self._add_labor_day(name)
69
- may_2 = self._add_holiday(name, may_1 + td(days=+1))
70
- if self.observed and self._is_weekend(may_1):
71
- self._add_observed_holiday(
72
- name,
73
- may_2 + td(days=+2 if may_2 == self._easter_sunday else +1),
74
- )
75
-
76
- # Armistice Day.
77
- name = tr("Дан примирја у Првом светском рату")
78
- nov_11 = self._add_holiday(name, NOV, 11)
79
- if self.observed and self._is_sunday(nov_11):
80
- self._add_holiday(name, nov_11 + td(days=+1))
62
+ self._add_observed(may_1, days=+2)
63
+ self._add_observed(
64
+ self._add_holiday(name, may_1 + td(days=+1)),
65
+ days=+2 if may_1 + td(days=+1) == self._easter_sunday else +1,
66
+ )
67
+
68
+ self._add_observed(
69
+ # Armistice Day.
70
+ self._add_remembrance_day(tr("Дан примирја у Првом светском рату"))
71
+ )
81
72
 
82
73
  # Good Friday.
83
74
  self._add_good_friday(tr("Велики петак"))