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
@@ -99,9 +99,7 @@ class Norway(HolidayBase, ChristianHolidays, InternationalHolidays):
99
99
  # Optionally add all Sundays of the year.
100
100
  begin = _get_nth_weekday_of_month(1, SUN, JAN, year)
101
101
  end = date(year, DEC, 31)
102
- for dt in (
103
- begin + td(days=n) for n in range(0, (end - begin).days + 1, 7)
104
- ):
102
+ for dt in (begin + td(days=n) for n in range(0, (end - begin).days + 1, 7)):
105
103
  # Sunday.
106
104
  self._add_holiday(tr("Søndag"), dt)
107
105
 
@@ -10,8 +10,7 @@
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
12
  from holidays.calendars import _CustomIslamicCalendar
13
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
14
- from holidays.constants import OCT, NOV, DEC
13
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
15
14
  from holidays.holiday_base import HolidayBase
16
15
  from holidays.holiday_groups import InternationalHolidays, IslamicHolidays
17
16
 
@@ -81,88 +80,88 @@ class PakistanIslamicCalendar(_CustomIslamicCalendar):
81
80
  # https://www.timeanddate.com/holidays/pakistan/first-day-ashura
82
81
 
83
82
  ASHURA_DATES = {
84
- 2005: ((FEB, 18),),
85
- 2006: ((FEB, 8),),
86
- 2007: ((JAN, 28),),
87
- 2008: ((JAN, 18),),
83
+ 2005: (FEB, 18),
84
+ 2006: (FEB, 8),
85
+ 2007: (JAN, 28),
86
+ 2008: (JAN, 18),
88
87
  2009: ((JAN, 6), (DEC, 26)),
89
- 2010: ((DEC, 16),),
90
- 2011: ((DEC, 5),),
91
- 2012: ((NOV, 23),),
92
- 2013: ((NOV, 13),),
93
- 2014: ((NOV, 3),),
94
- 2015: ((OCT, 23),),
95
- 2016: ((OCT, 11),),
96
- 2017: ((SEP, 30),),
97
- 2018: ((SEP, 21),),
98
- 2019: ((SEP, 9),),
99
- 2020: ((AUG, 29),),
100
- 2021: ((AUG, 18),),
101
- 2022: ((AUG, 9),),
88
+ 2010: (DEC, 16),
89
+ 2011: (DEC, 5),
90
+ 2012: (NOV, 23),
91
+ 2013: (NOV, 13),
92
+ 2014: (NOV, 3),
93
+ 2015: (OCT, 23),
94
+ 2016: (OCT, 11),
95
+ 2017: (SEP, 30),
96
+ 2018: (SEP, 21),
97
+ 2019: (SEP, 9),
98
+ 2020: (AUG, 29),
99
+ 2021: (AUG, 18),
100
+ 2022: (AUG, 9),
102
101
  }
103
102
 
104
103
  # https://www.timeanddate.com/holidays/pakistan/eid-ul-azha
105
104
  EID_AL_ADHA_DATES = {
106
- 2005: ((JAN, 21),),
105
+ 2005: (JAN, 21),
107
106
  2006: ((JAN, 10), (DEC, 31)),
108
- 2007: ((DEC, 20),),
109
- 2008: ((DEC, 9),),
110
- 2009: ((NOV, 28),),
111
- 2010: ((NOV, 17),),
112
- 2011: ((NOV, 7),),
113
- 2012: ((OCT, 26),),
114
- 2013: ((OCT, 15),),
115
- 2014: ((OCT, 6),),
116
- 2015: ((SEP, 24),),
117
- 2016: ((SEP, 12),),
118
- 2017: ((SEP, 2),),
119
- 2018: ((AUG, 22),),
120
- 2019: ((AUG, 12),),
121
- 2020: ((JUL, 31),),
122
- 2021: ((JUL, 21),),
123
- 2022: ((JUL, 10),),
107
+ 2007: (DEC, 20),
108
+ 2008: (DEC, 9),
109
+ 2009: (NOV, 28),
110
+ 2010: (NOV, 17),
111
+ 2011: (NOV, 7),
112
+ 2012: (OCT, 26),
113
+ 2013: (OCT, 15),
114
+ 2014: (OCT, 6),
115
+ 2015: (SEP, 24),
116
+ 2016: (SEP, 12),
117
+ 2017: (SEP, 2),
118
+ 2018: (AUG, 22),
119
+ 2019: (AUG, 12),
120
+ 2020: (JUL, 31),
121
+ 2021: (JUL, 21),
122
+ 2022: (JUL, 10),
124
123
  }
125
124
 
126
125
  # https://www.timeanddate.com/holidays/pakistan/eid-ul-fitr-1
127
126
  EID_AL_FITR_DATES = {
128
- 2005: ((NOV, 4),),
129
- 2006: ((OCT, 24),),
130
- 2007: ((OCT, 13),),
131
- 2008: ((OCT, 2),),
132
- 2009: ((SEP, 21),),
133
- 2010: ((SEP, 10),),
134
- 2011: ((AUG, 31),),
135
- 2012: ((AUG, 19),),
136
- 2013: ((AUG, 8),),
137
- 2014: ((JUL, 29),),
138
- 2015: ((JUL, 17),),
139
- 2016: ((JUL, 6),),
140
- 2017: ((JUN, 26),),
141
- 2018: ((JUN, 16),),
142
- 2019: ((JUN, 5),),
143
- 2020: ((MAY, 24),),
144
- 2021: ((MAY, 13),),
145
- 2022: ((MAY, 3),),
127
+ 2005: (NOV, 4),
128
+ 2006: (OCT, 24),
129
+ 2007: (OCT, 13),
130
+ 2008: (OCT, 2),
131
+ 2009: (SEP, 21),
132
+ 2010: (SEP, 10),
133
+ 2011: (AUG, 31),
134
+ 2012: (AUG, 19),
135
+ 2013: (AUG, 8),
136
+ 2014: (JUL, 29),
137
+ 2015: (JUL, 17),
138
+ 2016: (JUL, 6),
139
+ 2017: (JUN, 26),
140
+ 2018: (JUN, 16),
141
+ 2019: (JUN, 5),
142
+ 2020: (MAY, 24),
143
+ 2021: (MAY, 13),
144
+ 2022: (MAY, 3),
146
145
  }
147
146
 
148
147
  # https://www.timeanddate.com/holidays/pakistan/eid-milad-un-nabi
149
148
  MAWLID_DATES = {
150
- 2005: ((APR, 22),),
151
- 2006: ((APR, 11),),
152
- 2007: ((MAR, 31),),
153
- 2008: ((MAR, 21),),
154
- 2009: ((MAR, 9),),
155
- 2010: ((MAR, 1),),
156
- 2011: ((FEB, 17),),
157
- 2012: ((FEB, 5),),
158
- 2013: ((JAN, 24),),
159
- 2014: ((JAN, 14),),
160
- 2015: ((JAN, 4),),
161
- 2016: ((DEC, 12),),
162
- 2017: ((DEC, 1),),
163
- 2018: ((NOV, 21),),
164
- 2019: ((NOV, 10),),
165
- 2020: ((OCT, 30),),
166
- 2021: ((OCT, 19),),
167
- 2022: ((OCT, 9),),
149
+ 2005: (APR, 22),
150
+ 2006: (APR, 11),
151
+ 2007: (MAR, 31),
152
+ 2008: (MAR, 21),
153
+ 2009: (MAR, 9),
154
+ 2010: (MAR, 1),
155
+ 2011: (FEB, 17),
156
+ 2012: (FEB, 5),
157
+ 2013: (JAN, 24),
158
+ 2014: (JAN, 14),
159
+ 2015: (JAN, 4),
160
+ 2016: (DEC, 12),
161
+ 2017: (DEC, 1),
162
+ 2018: (NOV, 21),
163
+ 2019: (NOV, 10),
164
+ 2020: (OCT, 30),
165
+ 2021: (OCT, 19),
166
+ 2022: (OCT, 9),
168
167
  }
@@ -12,13 +12,12 @@
12
12
  from datetime import date
13
13
  from datetime import timedelta as td
14
14
 
15
- from dateutil.easter import easter
16
-
17
- from holidays.constants import JAN, MAY, NOV, DEC
15
+ from holidays.constants import JAN, NOV, DEC
18
16
  from holidays.holiday_base import HolidayBase
17
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
19
18
 
20
19
 
21
- class Panama(HolidayBase):
20
+ class Panama(HolidayBase, ChristianHolidays, InternationalHolidays):
22
21
  """
23
22
  References:
24
23
  - https://en.wikipedia.org/wiki/Public_holidays_in_Panama
@@ -27,55 +26,57 @@ class Panama(HolidayBase):
27
26
 
28
27
  country = "PA"
29
28
 
30
- def _populate(self, year: int) -> None:
31
- def _add_with_observed(hol_date: date, hol_name: str) -> None:
32
- self[hol_date] = hol_name
33
- if self.observed and self._is_sunday(hol_date):
34
- self[hol_date + td(days=+1)] = f"{hol_name} (Observed)"
29
+ def __init__(self, *args, **kwargs):
30
+ ChristianHolidays.__init__(self)
31
+ InternationalHolidays.__init__(self)
32
+ super().__init__(*args, **kwargs)
33
+
34
+ def _add_observed(self, dt: date) -> None:
35
+ if self.observed and self._is_sunday(dt):
36
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=+1))
35
37
 
38
+ def _populate(self, year):
36
39
  super()._populate(year)
37
40
 
38
41
  # New Year's Day
39
- _add_with_observed(date(year, JAN, 1), "New Year's Day")
42
+ self._add_observed(self._add_new_years_day("New Year's Day"))
40
43
 
41
44
  # Martyrs' Day
42
- _add_with_observed(date(year, JAN, 9), "Martyrs' Day")
43
-
44
- easter_date = easter(year)
45
+ self._add_observed(self._add_holiday("Martyrs' Day", JAN, 9))
45
46
 
46
47
  # Carnival
47
- self[easter_date + td(days=-47)] = "Carnival"
48
+ self._add_carnival_tuesday("Carnival")
48
49
 
49
50
  # Good Friday
50
- self[easter_date + td(days=-2)] = "Good Friday"
51
+ self._add_good_friday("Good Friday")
51
52
 
52
53
  # Labour Day
53
- _add_with_observed(date(year, MAY, 1), "Labour Day")
54
+ self._add_observed(self._add_labor_day("Labour Day"))
54
55
 
55
56
  # Separation Day
56
- self[date(year, NOV, 3)] = "Separation Day"
57
+ self._add_holiday("Separation Day", NOV, 3)
57
58
 
58
59
  # National Symbols Day
59
- self[date(year, NOV, 4)] = "National Symbols Day"
60
+ self._add_holiday("National Symbols Day", NOV, 4)
60
61
 
61
62
  # Colon Day
62
- self[date(year, NOV, 5)] = "Colon Day"
63
+ self._add_holiday("Colon Day", NOV, 5)
63
64
 
64
65
  # Los Santos Uprising Day
65
- self[date(year, NOV, 10)] = "Los Santos Uprising Day"
66
+ self._add_holiday("Los Santos Uprising Day", NOV, 10)
66
67
 
67
68
  # Independence Day
68
- _add_with_observed(date(year, NOV, 28), "Independence Day")
69
+ self._add_observed(self._add_holiday("Independence Day", NOV, 28))
69
70
 
70
71
  # Mother's Day
71
- _add_with_observed(date(year, DEC, 8), "Mother's Day")
72
+ self._add_observed(self._add_holiday("Mother's Day", DEC, 8))
72
73
 
73
74
  # National Mourning Day
74
75
  if year >= 2022:
75
- _add_with_observed(date(year, DEC, 20), "National Mourning Day")
76
+ self._add_observed(self._add_holiday("National Mourning Day", DEC, 20))
76
77
 
77
78
  # Christmas Day
78
- _add_with_observed(date(year, DEC, 25), "Christmas Day")
79
+ self._add_observed(self._add_christmas_day("Christmas Day"))
79
80
 
80
81
 
81
82
  class PA(Panama):
@@ -10,17 +10,14 @@
10
10
  # License: MIT (see LICENSE file)
11
11
 
12
12
  from datetime import date
13
- from datetime import timedelta as td
14
13
  from gettext import gettext as tr
15
14
 
16
- from dateutil.easter import easter
17
-
18
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
19
- from holidays.constants import OCT, DEC
15
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC
20
16
  from holidays.holiday_base import HolidayBase
17
+ from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
21
18
 
22
19
 
23
- class Paraguay(HolidayBase):
20
+ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays):
24
21
  """
25
22
  https://www.ghp.com.py/news/feriados-nacionales-del-ano-2019-en-paraguay
26
23
  https://es.wikipedia.org/wiki/Anexo:D%C3%ADas_feriados_en_Paraguay
@@ -37,10 +34,10 @@ class Paraguay(HolidayBase):
37
34
  special_holidays = {
38
35
  # public holiday for business purposes, in view of
39
36
  # the recently increased risk of Dengue fever
40
- 2007: ((JAN, 29, public_holiday),),
37
+ 2007: (JAN, 29, public_holiday),
41
38
  # public sector holiday to celebrate Paraguay's
42
39
  # football team's qualification for the 2010 World Cup
43
- 2009: ((SEP, 10, public_holiday),),
40
+ 2009: (SEP, 10, public_holiday),
44
41
  2010: (
45
42
  # public holiday to coincide with the Paraguay-Italy
46
43
  # game of the current World Cup
@@ -143,15 +140,20 @@ class Paraguay(HolidayBase):
143
140
  }
144
141
  supported_languages = ("en_US", "es", "uk")
145
142
 
146
- def _add_observed_holiday(self, name: str, dt: date) -> None:
147
- if self.observed or not self._is_weekend(dt):
148
- super()._add_holiday(name, dt)
143
+ def __init__(self, *args, **kwargs):
144
+ ChristianHolidays.__init__(self)
145
+ InternationalHolidays.__init__(self)
146
+ super().__init__(*args, **kwargs)
147
+
148
+ def _move_holiday(self, dt: date) -> None:
149
+ if not self.observed and self._is_weekend(dt):
150
+ self.pop(dt)
149
151
 
150
152
  def _populate(self, year):
151
153
  super()._populate(year)
152
154
 
153
155
  # New Year's Day.
154
- self._add_observed_holiday(tr("Año Nuevo"), date(year, JAN, 1))
156
+ self._move_holiday(self._add_new_years_day(tr("Año Nuevo")))
155
157
 
156
158
  dates_obs = {
157
159
  2013: (MAR, 4),
@@ -159,51 +161,51 @@ class Paraguay(HolidayBase):
159
161
  2018: (FEB, 26),
160
162
  2022: (FEB, 28),
161
163
  }
162
- # Patriots Day.
163
164
  self._add_holiday(
165
+ # Patriots Day.
164
166
  tr("Día de los Héroes de la Patria"),
165
- date(year, *dates_obs.get(year, (MAR, 1))),
167
+ *dates_obs.get(year, (MAR, 1)),
166
168
  )
167
169
 
168
- # Holy Week
169
- easter_date = easter(year)
170
170
  # Maundy Thursday.
171
- self._add_holiday(tr("Jueves Santo"), easter_date + td(days=-3))
171
+ self._add_holy_thursday(tr("Jueves Santo"))
172
+
172
173
  # Good Friday.
173
- self._add_holiday(tr("Viernes Santo"), easter_date + td(days=-2))
174
+ self._add_good_friday(tr("Viernes Santo"))
175
+
174
176
  # Easter Day.
175
- self._add_observed_holiday(tr("Día de Pascuas"), easter_date)
177
+ self._move_holiday(self._add_easter_sunday(tr("Día de Pascuas")))
176
178
 
177
179
  # Labour Day.
178
- self._add_observed_holiday(
179
- tr("Día del Trabajador"), date(year, MAY, 1)
180
- )
180
+ self._move_holiday(self._add_labor_day(tr("Día del Trabajador")))
181
181
 
182
182
  # Independence Day.
183
183
  name = tr("Día de la Independencia Nacional")
184
- if year == 2021:
185
- self._add_holiday(name, date(year, MAY, 14))
186
- self._add_holiday(name, date(year, MAY, 15))
187
- elif year >= 2012:
188
- self._add_observed_holiday(name, date(year, MAY, 14))
189
- self._add_observed_holiday(name, date(year, MAY, 15))
190
- else:
191
- self._add_observed_holiday(name, date(year, MAY, 15))
184
+ if year >= 2012:
185
+ self._move_holiday(self._add_holiday(name, MAY, 14))
186
+ may_15 = self._add_holiday(name, MAY, 15)
187
+ if year != 2021:
188
+ self._move_holiday(may_15)
192
189
 
193
190
  dates_obs = {
194
191
  2014: (JUN, 16),
195
192
  2018: (JUN, 11),
196
193
  }
197
- self._add_observed_holiday(
198
- # Chaco Armistice Day.
199
- tr("Día de la Paz del Chaco"),
200
- date(year, *dates_obs.get(year, (JUN, 12))),
194
+ self._move_holiday(
195
+ self._add_holiday(
196
+ # Chaco Armistice Day.
197
+ tr("Día de la Paz del Chaco"),
198
+ *dates_obs.get(year, (JUN, 12)),
199
+ ),
201
200
  )
202
201
 
203
- self._add_observed_holiday(
204
- # Asuncion Foundation's Day.
205
- tr("Día de la Fundación de Asunción"),
206
- date(year, AUG, 15),
202
+ self._move_holiday(
203
+ self._add_holiday(
204
+ # Asuncion Foundation's Day.
205
+ tr("Día de la Fundación de Asunción"),
206
+ AUG,
207
+ 15,
208
+ ),
207
209
  )
208
210
 
209
211
  if year >= 2000:
@@ -214,20 +216,25 @@ class Paraguay(HolidayBase):
214
216
  2021: (SEP, 27),
215
217
  2022: (OCT, 3),
216
218
  }
217
- self._add_observed_holiday(
218
- # Boqueron Battle Day.
219
- tr("Día de la Batalla de Boquerón"),
220
- date(year, *dates_obs.get(year, (SEP, 29))),
219
+ self._move_holiday(
220
+ self._add_holiday(
221
+ # Boqueron Battle Day.
222
+ tr("Día de la Batalla de Boquerón"),
223
+ *dates_obs.get(year, (SEP, 29)),
224
+ ),
221
225
  )
222
226
 
223
- self._add_observed_holiday(
224
- # Caacupe Virgin Day.
225
- tr("Día de la Virgen de Caacupé"),
226
- date(year, DEC, 8),
227
+ self._move_holiday(
228
+ self._add_holiday(
229
+ # Caacupe Virgin Day.
230
+ tr("Día de la Virgen de Caacupé"),
231
+ DEC,
232
+ 8,
233
+ )
227
234
  )
228
235
 
229
236
  # Christmas.
230
- self._add_holiday(tr("Navidad"), date(year, DEC, 25))
237
+ self._add_christmas_day(tr("Navidad"))
231
238
 
232
239
 
233
240
  class PY(Paraguay):
@@ -12,8 +12,12 @@
12
12
  from holidays.calendars import _get_nth_weekday_of_month
13
13
  from holidays.constants import FEB, APR, JUN, AUG, NOV, DEC, MON
14
14
  from holidays.holiday_base import HolidayBase
15
- from holidays.holiday_groups import ChineseCalendarHolidays, ChristianHolidays
16
- from holidays.holiday_groups import InternationalHolidays, IslamicHolidays
15
+ from holidays.holiday_groups import (
16
+ ChineseCalendarHolidays,
17
+ ChristianHolidays,
18
+ InternationalHolidays,
19
+ IslamicHolidays,
20
+ )
17
21
 
18
22
 
19
23
  class Philippines(
@@ -24,9 +24,7 @@ class Poland(HolidayBase, ChristianHolidays, InternationalHolidays):
24
24
 
25
25
  country = "PL"
26
26
  default_language = "pl"
27
- special_holidays = {
28
- 2018: ((NOV, 12, tr("Narodowe Święto Niepodległości - 100-lecie")),)
29
- }
27
+ special_holidays = {2018: (NOV, 12, tr("Narodowe Święto Niepodległości - 100-lecie"))}
30
28
  supported_languages = ("en_US", "pl", "uk")
31
29
 
32
30
  def __init__(self, *args, **kwargs):
@@ -67,9 +65,7 @@ class Poland(HolidayBase, ChristianHolidays, InternationalHolidays):
67
65
 
68
66
  if 1946 <= year <= 1950:
69
67
  # National Victory and Freedom Day.
70
- self._add_holiday(
71
- tr("Narodowe Święto Zwycięstwa i Wolności"), MAY, 9
72
- )
68
+ self._add_holiday(tr("Narodowe Święto Zwycięstwa i Wolności"), MAY, 9)
73
69
 
74
70
  if year <= 1950:
75
71
  # Ascension Day.
@@ -100,9 +96,7 @@ class Poland(HolidayBase, ChristianHolidays, InternationalHolidays):
100
96
 
101
97
  if year <= 1960 or year >= 1989:
102
98
  # Assumption of the Virgin Mary.
103
- self._add_assumption_of_mary_day(
104
- tr("Wniebowzięcie Najświętszej Marii Panny")
105
- )
99
+ self._add_assumption_of_mary_day(tr("Wniebowzięcie Najświętszej Marii Panny"))
106
100
 
107
101
  # All Saints' Day.
108
102
  self._add_all_saints_day(tr("Uroczystość Wszystkich Świętych"))
@@ -109,15 +109,10 @@ class Portugal(HolidayBase, ChristianHolidays, InternationalHolidays):
109
109
  self._add_labor_day(tr("Dia do Trabalhador"))
110
110
  if year >= 1911:
111
111
  if 1933 <= year <= 1973:
112
- self._add_holiday(
113
- tr("Dia de Camões, de Portugal e da Raça"), JUN, 10
114
- )
112
+ self._add_holiday(tr("Dia de Camões, de Portugal e da Raça"), JUN, 10)
115
113
  elif year >= 1978:
116
114
  self._add_holiday(
117
- tr(
118
- "Dia de Portugal, de Camões e das Comunidades "
119
- "Portuguesas"
120
- ),
115
+ tr("Dia de Portugal, de Camões e das Comunidades Portuguesas"),
121
116
  JUN,
122
117
  10,
123
118
  )
@@ -222,10 +217,7 @@ class Portugal(HolidayBase, ChristianHolidays, InternationalHolidays):
222
217
  self._add_holiday(tr("Dia da Região Autónoma da Madeira"), JUL, 1)
223
218
  elif self._year >= 1989:
224
219
  self._add_holiday(
225
- tr(
226
- "Dia da Região Autónoma da Madeira e "
227
- "das Comunidades Madeirenses"
228
- ),
220
+ tr("Dia da Região Autónoma da Madeira e das Comunidades Madeirenses"),
229
221
  JUL,
230
222
  1,
231
223
  )
@@ -12,7 +12,7 @@
12
12
  from gettext import gettext as tr
13
13
 
14
14
  from holidays.calendars import GREGORIAN_CALENDAR, JULIAN_CALENDAR
15
- from holidays.constants import JAN, JUN, NOV, DEC
15
+ from holidays.constants import JAN, NOV, DEC
16
16
  from holidays.holiday_base import HolidayBase
17
17
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
18
18
 
@@ -64,7 +64,7 @@ class Romania(HolidayBase, ChristianHolidays, InternationalHolidays):
64
64
 
65
65
  if year >= 2017:
66
66
  # Children's Day.
67
- self._add_holiday(tr("Ziua Copilului"), JUN, 1)
67
+ self._add_childrens_day(tr("Ziua Copilului"))
68
68
 
69
69
  # Pentecost.
70
70
  name = tr("Rusaliile")
@@ -79,9 +79,7 @@ class Romania(HolidayBase, ChristianHolidays, InternationalHolidays):
79
79
  # Law #147/2012
80
80
  if year >= 2012:
81
81
  # Saint Andrew's Day.
82
- self._add_holiday(
83
- tr("Sfantul Apostol Andrei cel Intai chemat"), NOV, 30
84
- )
82
+ self._add_holiday(tr("Sfantul Apostol Andrei cel Intai chemat"), NOV, 30)
85
83
 
86
84
  # National Day.
87
85
  self._add_holiday(tr("Ziua Națională a României"), DEC, 1)
@@ -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: