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
@@ -45,11 +45,7 @@ class Belize(HolidayBase, ChristianHolidays, InternationalHolidays):
45
45
  if self._is_friday(dt) or self._is_sunday(dt):
46
46
  dt = _get_nth_weekday_from(1, MON, dt)
47
47
  name = "%s (Observed)" % name
48
- elif (
49
- self._is_tuesday(dt)
50
- or self._is_wednesday(dt)
51
- or self._is_thursday(dt)
52
- ):
48
+ elif self._is_tuesday(dt) or self._is_wednesday(dt) or self._is_thursday(dt):
53
49
  dt = _get_nth_weekday_from(-1, MON, dt)
54
50
  name = "%s (Observed)" % name
55
51
  self._add_holiday(name, dt)
@@ -58,11 +54,7 @@ class Belize(HolidayBase, ChristianHolidays, InternationalHolidays):
58
54
  # Chapter 289 of the laws of Belize states that if the holiday falls
59
55
  # on a Sunday, the following Monday is observed as public holiday
60
56
  name, dt = self._parse_holiday(*args)
61
- if (
62
- self.observed
63
- and self._is_sunday(dt)
64
- and dt + td(days=+1) not in self
65
- ):
57
+ if self.observed and self._is_sunday(dt) and dt + td(days=+1) not in self:
66
58
  name = "%s (Observed)" % name
67
59
  dt += td(days=+1)
68
60
  return super()._add_holiday(name, dt)
@@ -81,9 +73,7 @@ class Belize(HolidayBase, ChristianHolidays, InternationalHolidays):
81
73
  self._add_holiday("George Price Day", JAN, 15)
82
74
 
83
75
  # National Heroes and Benefactors Day.
84
- self._add_movable_holiday(
85
- "National Heroes and Benefactors Day", MAR, 9
86
- )
76
+ self._add_movable_holiday("National Heroes and Benefactors Day", MAR, 9)
87
77
 
88
78
  # Good Friday.
89
79
  self._add_good_friday("Good Friday")
@@ -113,9 +103,7 @@ class Belize(HolidayBase, ChristianHolidays, InternationalHolidays):
113
103
 
114
104
  # Indigenous Peoples' Resistance Day / Pan American Day.
115
105
  self._add_movable_holiday(
116
- "Indigenous Peoples' Resistance Day"
117
- if year >= 2021
118
- else "Pan American Day",
106
+ "Indigenous Peoples' Resistance Day" if year >= 2021 else "Pan American Day",
119
107
  date(year, OCT, 12),
120
108
  )
121
109
 
@@ -51,9 +51,7 @@ class Bolivia(HolidayBase, ChristianHolidays, InternationalHolidays):
51
51
 
52
52
  # Plurinational State Foundation Day.
53
53
  if year >= 2010:
54
- self._add_holiday(
55
- "Nacimiento del Estado Plurinacional de Bolivia", JAN, 22
56
- )
54
+ self._add_holiday("Nacimiento del Estado Plurinacional de Bolivia", JAN, 22)
57
55
 
58
56
  # Carnival.
59
57
  name = "Feriado por Carnaval"
@@ -115,9 +113,7 @@ class Bolivia(HolidayBase, ChristianHolidays, InternationalHolidays):
115
113
 
116
114
  def _add_subdiv_o_holidays(self):
117
115
  # Carnival in Oruro.
118
- self._add_holiday(
119
- "Carnaval de Oruro", self._easter_sunday + td(days=-51)
120
- )
116
+ self._add_holiday("Carnaval de Oruro", self._easter_sunday + td(days=-51))
121
117
 
122
118
  def _add_subdiv_s_holidays(self):
123
119
  # Santa Cruz Day.
@@ -15,13 +15,10 @@ from datetime import timedelta as td
15
15
  from holidays.calendars import GREGORIAN_CALENDAR, JULIAN_CALENDAR
16
16
  from holidays.constants import JAN, MAR, NOV
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 BosniaAndHerzegovina(
23
- HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays
24
- ):
21
+ class BosniaAndHerzegovina(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
25
22
  """
26
23
  https://en.wikipedia.org/wiki/Public_holidays_in_Bosnia_and_Herzegovina
27
24
  https://www.paragraf.ba/neradni-dani-fbih.html
@@ -59,9 +56,7 @@ class BosniaAndHerzegovina(
59
56
  self._add_holiday("Treći dan Dana rada", may_1 + td(days=+2))
60
57
 
61
58
  # Catholic Easter Monday
62
- self._add_easter_monday(
63
- "Uskrsni ponedjeljak (Katolički)", GREGORIAN_CALENDAR
64
- )
59
+ self._add_easter_monday("Uskrsni ponedjeljak (Katolički)", GREGORIAN_CALENDAR)
65
60
 
66
61
  # Catholic Christmas
67
62
  self._add_christmas_day("Božić (Katolički)", GREGORIAN_CALENDAR)
@@ -76,11 +71,7 @@ class BosniaAndHerzegovina(
76
71
  # New Year's Day
77
72
  jan_1 = self._add_new_years_day("Nova Godina")
78
73
  self._add_new_years_day_two("Drugi dan Nove Godine")
79
- if (
80
- self.subdiv in {"FBiH", "BD"}
81
- and self.observed
82
- and self._is_sunday(jan_1)
83
- ):
74
+ if self.subdiv in {"FBiH", "BD"} and self.observed and self._is_sunday(jan_1):
84
75
  self._add_new_years_day_three("Treći dan Nove Godine")
85
76
 
86
77
  super()._add_subdiv_holidays()
@@ -141,10 +132,7 @@ class BosniaAndHerzegovina(
141
132
 
142
133
  # Dayton Agreement Day
143
134
  self._add_holiday(
144
- (
145
- "Dan uspostave Opšteg okvirnog sporazuma za mir u "
146
- "Bosni i Hercegovini"
147
- ),
135
+ ("Dan uspostave Opšteg okvirnog sporazuma za mir u Bosni i Hercegovini"),
148
136
  NOV,
149
137
  21,
150
138
  )
@@ -27,19 +27,16 @@ class Botswana(HolidayBase, ChristianHolidays, InternationalHolidays):
27
27
  """
28
28
 
29
29
  country = "BW"
30
- special_holidays = {2019: ((JUL, 2, "Public Holiday"),)}
30
+ special_holidays = {2019: (JUL, 2, "Public Holiday")}
31
31
 
32
32
  def __init__(self, *args, **kwargs) -> None:
33
33
  ChristianHolidays.__init__(self)
34
34
  InternationalHolidays.__init__(self)
35
35
  super().__init__(*args, **kwargs)
36
36
 
37
- def _add_observed(self, dt: date) -> None:
37
+ def _add_observed(self, dt: date, days: int = +1) -> None:
38
38
  if self.observed and self._is_sunday(dt) and self._year >= 1995:
39
- self._add_holiday(
40
- "%s (Observed)" % self[dt],
41
- dt + td(days=2 if dt + td(days=+1) in self else 1),
42
- )
39
+ self._add_holiday("%s (Observed)" % self[dt], dt + td(days=days))
43
40
 
44
41
  def _populate(self, year):
45
42
  if year <= 1965:
@@ -47,10 +44,8 @@ class Botswana(HolidayBase, ChristianHolidays, InternationalHolidays):
47
44
 
48
45
  super()._populate(year)
49
46
 
50
- jan_1 = self._add_new_years_day("New Year's Day")
51
- jan_2 = self._add_new_years_day_two("New Year's Day Holiday")
52
- self._add_observed(jan_1)
53
- self._add_observed(jan_2)
47
+ self._add_observed(self._add_new_years_day("New Year's Day"), days=+2)
48
+ self._add_observed(self._add_new_years_day_two("New Year's Day Holiday"))
54
49
 
55
50
  # Easter and easter related calculations
56
51
  self._add_good_friday("Good Friday")
@@ -68,18 +63,14 @@ class Botswana(HolidayBase, ChristianHolidays, InternationalHolidays):
68
63
  july_3rd_monday = self._add_holiday(
69
64
  "President's Day", _get_nth_weekday_of_month(3, MON, JUL, year)
70
65
  )
71
- self._add_holiday(
72
- "President's Day Holiday", july_3rd_monday + td(days=+1)
73
- )
66
+ self._add_holiday("President's Day Holiday", july_3rd_monday + td(days=+1))
74
67
 
75
68
  sep_30 = self._add_holiday("Botswana Day", SEP, 30)
76
- oct_1 = self._add_holiday("Botswana Day Holiday", sep_30 + td(days=+1))
77
- self._add_observed(sep_30)
78
- self._add_observed(oct_1)
69
+ self._add_observed(sep_30, days=+2)
70
+ self._add_observed(self._add_holiday("Botswana Day Holiday", sep_30 + td(days=+1)))
79
71
 
80
- dec_25 = self._add_christmas_day("Christmas Day")
72
+ self._add_observed(self._add_christmas_day("Christmas Day"), days=+2)
81
73
  dec_26 = self._add_christmas_day_two("Boxing Day")
82
- self._add_observed(dec_25)
83
74
  self._add_observed(dec_26)
84
75
 
85
76
  if self.observed and year >= 2016 and self._is_saturday(dec_26):
@@ -13,8 +13,7 @@ from datetime import timedelta as td
13
13
  from datetime import date
14
14
 
15
15
  from holidays.calendars import _get_nth_weekday_from, _get_nth_weekday_of_month
16
- from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
17
- from holidays.constants import OCT, NOV, DEC, FRI, SUN
16
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, FRI, SUN
18
17
  from holidays.holiday_base import HolidayBase
19
18
  from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
20
19
 
@@ -150,9 +149,7 @@ class Brazil(HolidayBase, ChristianHolidays, InternationalHolidays):
150
149
  def get_movable_acre(*args) -> date:
151
150
  dt = date(self._year, *args)
152
151
  if self._year >= 2009 and (
153
- self._is_tuesday(dt)
154
- or self._is_wednesday(dt)
155
- or self._is_thursday(dt)
152
+ self._is_tuesday(dt) or self._is_wednesday(dt) or self._is_thursday(dt)
156
153
  ):
157
154
  dt = _get_nth_weekday_from(1, FRI, dt)
158
155
  return dt
@@ -0,0 +1,427 @@
1
+ # python-holidays
2
+ # ---------------
3
+ # A fast, efficient Python library for generating country, province and state
4
+ # specific sets of holidays on the fly. It aims to make determining whether a
5
+ # specific date is a holiday as fast and flexible as possible.
6
+ #
7
+ # Authors: dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
8
+ # ryanss <ryanssdev@icloud.com> (c) 2014-2017
9
+ # Website: https://github.com/dr-prodigy/python-holidays
10
+ # License: MIT (see LICENSE file)
11
+
12
+ from datetime import date
13
+ from datetime import timedelta as td
14
+ from gettext import gettext as tr
15
+
16
+ from holidays.calendars import _CustomIslamicCalendar
17
+ from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
18
+ from holidays.holiday_base import HolidayBase
19
+ from holidays.holiday_groups import (
20
+ ChineseCalendarHolidays,
21
+ ChristianHolidays,
22
+ InternationalHolidays,
23
+ IslamicHolidays,
24
+ )
25
+
26
+
27
+ class Brunei(
28
+ HolidayBase,
29
+ ChineseCalendarHolidays,
30
+ ChristianHolidays,
31
+ InternationalHolidays,
32
+ IslamicHolidays,
33
+ ):
34
+ """
35
+ A subclass of :py:class:`HolidayBase` representing public holidays
36
+ in Brunei Darussalam.
37
+
38
+
39
+ References:
40
+
41
+ - Based on: http://www.labour.gov.bn/Lists/Upcomming%20events/AllItems.aspx
42
+ http://www.labour.gov.bn/Download/GUIDE%20TO%20BRUNEI%20EMPLOYMENT%20LAWS%20-%20english%20version-3.pdf # noqa: E501
43
+ - Checked with: https://asean.org/wp-content/uploads/2021/12/ASEAN-National-Holidays-2022.pdf # noqa: E501
44
+ https://asean.org/wp-content/uploads/2022/12/ASEAN-Public-Holidays-2023.pdf # noqa: E501
45
+ https://www.timeanddate.com/holidays/brunei/
46
+ - [Jubli Emas Sultan Hassanal Bolkiah]
47
+ https://www.brudirect.com/news.php?id=28316
48
+
49
+ Limitations:
50
+
51
+ - Brunei Darussalam holidays only works from 1984 onwards
52
+ - Islamic holidays
53
+
54
+
55
+ Country created by: `PPsyrius <https://github.com/PPsyrius>`__
56
+
57
+ Country maintained by: `PPsyrius <https://github.com/PPsyrius>`__
58
+ """
59
+
60
+ country = "BN"
61
+ default_language = "ms"
62
+ estimated_label = tr("%s* (*anggaran)")
63
+ supported_languages = ("en_US", "ms", "th")
64
+
65
+ special_holidays = {
66
+ # Sultan Hassanal Bolkiah's Golden Jubilee celebration
67
+ 2017: (OCT, 5, tr("Jubli Emas Sultan Hassanal Bolkiah")),
68
+ }
69
+
70
+ def __init__(self, *args, **kwargs):
71
+ ChineseCalendarHolidays.__init__(self)
72
+ ChristianHolidays.__init__(self)
73
+ InternationalHolidays.__init__(self)
74
+ IslamicHolidays.__init__(self, calendar=BruneiIslamicCalendar())
75
+
76
+ super().__init__(*args, **kwargs)
77
+
78
+ def _populate(self, year):
79
+ # Available post-Independence from 1984 afterwards
80
+ if year <= 1983:
81
+ return None
82
+
83
+ def _add_observed(dt: date) -> None:
84
+ """
85
+ If Public Holiday falls on either Friday or Sunday, in-lieu
86
+ observance is given out on the following Saturday or Monday.
87
+ """
88
+ if self.observed and (self._is_friday(dt) or self._is_sunday(dt)):
89
+ for name in self.get_list(dt):
90
+ self._add_holiday(self.tr("%s - Diperhatikan") % name, dt + td(days=+1))
91
+
92
+ super()._populate(year)
93
+
94
+ # Awal Tahun Masihi
95
+ # Status: In-Use.
96
+
97
+ # New Year's Day
98
+ _add_observed(self._add_new_years_day(tr("Awal Tahun Masihi")))
99
+
100
+ # Tahun Baru Cina
101
+ # Status: In-Use.
102
+
103
+ # Lunar New Year
104
+ _add_observed(self._add_chinese_new_years_day(tr("Tahun Baru Cina")))
105
+
106
+ # Hari Kebangsaan
107
+ # Status: In-Use.
108
+ # Starts in 1984.
109
+
110
+ # National Day
111
+ _add_observed(self._add_holiday(tr("Hari Kebangsaan"), FEB, 23))
112
+
113
+ # Hari Angkatan Bersenjata Diraja Brunei
114
+ # Status: In-Use.
115
+ # Starts in 1984.
116
+ # Commemorates the formation of Royal Brunei Malay Regiment in 1961.
117
+
118
+ _add_observed(
119
+ self._add_holiday(
120
+ # Armed Forces Day
121
+ tr("Hari Angkatan Bersenjata Diraja Brunei"),
122
+ MAY,
123
+ 31,
124
+ )
125
+ )
126
+
127
+ # Hari Keputeraan KDYMM Sultan Brunei
128
+ # Status: In-Use.
129
+ # Started in 1968.
130
+
131
+ _add_observed(
132
+ self._add_holiday(
133
+ # Sultan Hassanal Bolkiah's Birthday
134
+ tr("Hari Keputeraan KDYMM Sultan Brunei"),
135
+ JUL,
136
+ 15,
137
+ )
138
+ )
139
+
140
+ # Hari Natal
141
+ # Status: In-Use.
142
+
143
+ # Christmas Day
144
+ _add_observed(self._add_christmas_day(tr("Hari Natal")))
145
+
146
+ # Islamic Holidays are placed after Gregorian holidays to prevent
147
+ # the duplication of observed tags. - see #1168
148
+
149
+ # Israk dan Mikraj
150
+ # Status: In-Use.
151
+
152
+ # Isra Mi'raj
153
+ for dt in self._add_isra_and_miraj_day(tr("Israk dan Mikraj")):
154
+ _add_observed(dt)
155
+
156
+ # Hari Pertama Berpuasa
157
+ # Status: In-Use.
158
+
159
+ # First Day of Ramadan
160
+ for dt in self._add_ramadan_beginning_day(tr("Hari Pertama Berpuasa")):
161
+ _add_observed(dt)
162
+
163
+ # Hari Nuzul Al-Quran
164
+ # Status: In-Use.
165
+
166
+ # Anniversary of the revelation of the Quran
167
+ for dt in self._add_nuzul_al_quran_day(tr("Hari Nuzul Al-Quran")):
168
+ _add_observed(dt)
169
+
170
+ # Hari Raya Aidil Fitri
171
+ # Status: In-Use.
172
+ # This is celebrate for three days in Brunei.
173
+ # Observed as 'Hari Raya Puasa' and only for 2 days at certain point.
174
+ # We utilizes a separate in-lieu trigger for this one.
175
+ # 1: If Wed-Thu-Fri -> Sat (+3)
176
+ # 2: If Thu-Fri-Sat -> Mon (+4)
177
+ # 3: If Fri-Sat-Sun -> Mon (+3)
178
+ # 4: If Sat-Sun-Mon -> Tue (+3)
179
+ # 5: If Sun-Mon-Tue -> Wed (+3)
180
+
181
+ # Eid al-Fitr
182
+ name = tr("Hari Raya Aidil Fitri")
183
+
184
+ al_fitr_dates = self._add_eid_al_fitr_day(name)
185
+ self._add_eid_al_fitr_day_two(name)
186
+ self._add_eid_al_fitr_day_three(name)
187
+
188
+ if self.observed:
189
+ for dt in al_fitr_dates:
190
+ obs_date = None
191
+ for delta in range(3):
192
+ hol_date = dt + td(days=delta)
193
+ if self._is_friday(hol_date) or self._is_sunday(hol_date):
194
+ obs_date = dt + td(days=+3)
195
+ if self._is_sunday(obs_date):
196
+ obs_date += td(days=+1)
197
+ break
198
+ if obs_date:
199
+ self._add_islamic_calendar_holiday(
200
+ self.tr("%s - Diperhatikan") % self[hol_date],
201
+ (
202
+ (
203
+ obs_date,
204
+ self._year not in BruneiIslamicCalendar.EID_AL_FITR_DATES,
205
+ ),
206
+ ),
207
+ )
208
+
209
+ # Hari Raya Aidil Adha
210
+ # Status: In-Use.
211
+
212
+ # Eid al-Adha
213
+ for dt in self._add_eid_al_adha_day(tr("Hari Raya Aidil Adha")):
214
+ _add_observed(dt)
215
+
216
+ # Awal Tahun Hijrah
217
+ # Status: In-Use.
218
+
219
+ # Islamic New Year
220
+ for dt in self._add_islamic_new_year_day(tr("Awal Tahun Hijrah")):
221
+ _add_observed(dt)
222
+
223
+ # Maulidur Rasul
224
+ # Status: In-Use.
225
+
226
+ # Birth of the Prophet
227
+ for dt in self._add_mawlid_day(tr("Maulidur Rasul")):
228
+ _add_observed(dt)
229
+
230
+
231
+ class BN(Brunei):
232
+ pass
233
+
234
+
235
+ class BRN(Brunei):
236
+ pass
237
+
238
+
239
+ class BruneiIslamicCalendar(_CustomIslamicCalendar):
240
+ EID_AL_ADHA_DATES = {
241
+ 2000: (MAR, 16),
242
+ 2001: (MAR, 6),
243
+ 2002: (FEB, 23),
244
+ 2003: (FEB, 12),
245
+ 2004: (FEB, 2),
246
+ 2005: (JAN, 21),
247
+ 2006: ((JAN, 10), (DEC, 31)),
248
+ 2007: (DEC, 20),
249
+ 2008: (DEC, 9),
250
+ 2009: (NOV, 28),
251
+ 2010: (NOV, 17),
252
+ 2011: (NOV, 7),
253
+ 2012: (OCT, 26),
254
+ 2013: (OCT, 15),
255
+ 2014: (OCT, 5),
256
+ 2015: (SEP, 24),
257
+ 2016: (SEP, 13),
258
+ 2017: (SEP, 2),
259
+ 2018: (AUG, 22),
260
+ 2019: (AUG, 11),
261
+ 2020: (AUG, 1),
262
+ 2021: (JUL, 20),
263
+ 2022: (JUL, 10),
264
+ 2023: (JUN, 29),
265
+ }
266
+
267
+ EID_AL_FITR_DATES = {
268
+ 2000: ((JAN, 8), (DEC, 28)),
269
+ 2001: (DEC, 17),
270
+ 2002: (DEC, 6),
271
+ 2003: (NOV, 26),
272
+ 2004: (NOV, 14),
273
+ 2005: (NOV, 3),
274
+ 2006: (OCT, 24),
275
+ 2007: (OCT, 13),
276
+ 2008: (OCT, 1),
277
+ 2009: (SEP, 20),
278
+ 2010: (SEP, 10),
279
+ 2011: (AUG, 31),
280
+ 2012: (AUG, 19),
281
+ 2013: (AUG, 8),
282
+ 2014: (JUL, 29),
283
+ 2015: (JUL, 18),
284
+ 2016: (JUL, 7),
285
+ 2017: (JUN, 26),
286
+ 2018: (JUN, 15),
287
+ 2019: (JUN, 5),
288
+ 2020: (MAY, 24),
289
+ 2021: (MAY, 13),
290
+ 2022: (MAY, 3),
291
+ 2023: (APR, 22),
292
+ }
293
+
294
+ HIJRI_NEW_YEAR_DATES = {
295
+ 2000: (APR, 6),
296
+ 2001: (MAR, 26),
297
+ 2002: (MAR, 15),
298
+ 2003: (MAR, 5),
299
+ 2004: (FEB, 22),
300
+ 2005: (FEB, 10),
301
+ 2006: (JAN, 31),
302
+ 2007: (JAN, 20),
303
+ 2008: ((JAN, 10), (DEC, 29)),
304
+ 2009: (DEC, 18),
305
+ 2010: (DEC, 8),
306
+ 2011: (NOV, 27),
307
+ 2012: (NOV, 15),
308
+ 2013: (NOV, 5),
309
+ 2014: (OCT, 25),
310
+ 2015: (OCT, 15),
311
+ 2016: (OCT, 3),
312
+ 2017: (SEP, 22),
313
+ 2018: (SEP, 12),
314
+ 2019: (SEP, 1),
315
+ 2020: (AUG, 20),
316
+ 2021: (AUG, 10),
317
+ 2022: (JUL, 30),
318
+ 2023: (JUL, 19),
319
+ }
320
+
321
+ ISRA_AND_MIRAJ_DATES = {
322
+ 2000: (OCT, 26),
323
+ 2001: (OCT, 15),
324
+ 2002: (OCT, 4),
325
+ 2003: (SEP, 24),
326
+ 2004: (SEP, 12),
327
+ 2005: (SEP, 1),
328
+ 2006: (AUG, 22),
329
+ 2007: (AUG, 11),
330
+ 2008: (JUL, 31),
331
+ 2009: (JUL, 20),
332
+ 2010: (JUL, 9),
333
+ 2011: (JUN, 29),
334
+ 2012: (JUN, 17),
335
+ 2013: (JUN, 6),
336
+ 2014: (MAY, 27),
337
+ 2015: (MAY, 16),
338
+ 2016: (MAY, 5),
339
+ 2017: (APR, 24),
340
+ 2018: (APR, 14),
341
+ 2019: (APR, 3),
342
+ 2020: (MAR, 22),
343
+ 2021: (MAR, 11),
344
+ 2022: (MAR, 1),
345
+ 2023: (FEB, 18),
346
+ }
347
+
348
+ MAWLID_DATES = {
349
+ 2000: (JUN, 15),
350
+ 2001: (JUN, 4),
351
+ 2002: (MAY, 24),
352
+ 2003: (MAY, 14),
353
+ 2004: (MAY, 2),
354
+ 2005: (APR, 21),
355
+ 2006: (APR, 11),
356
+ 2007: (MAR, 31),
357
+ 2008: (MAR, 20),
358
+ 2009: (MAR, 9),
359
+ 2010: (FEB, 26),
360
+ 2011: (FEB, 16),
361
+ 2012: (FEB, 5),
362
+ 2013: (JAN, 24),
363
+ 2014: (JAN, 14),
364
+ 2015: ((JAN, 3), (DEC, 24)),
365
+ 2016: (DEC, 12),
366
+ 2017: (DEC, 1),
367
+ 2018: (NOV, 21),
368
+ 2019: (NOV, 9),
369
+ 2020: (OCT, 29),
370
+ 2021: (OCT, 19),
371
+ 2022: (OCT, 8),
372
+ 2023: (SEP, 28),
373
+ }
374
+
375
+ NUZUL_AL_QURAN_DATES = {
376
+ 2000: (DEC, 14),
377
+ 2001: (DEC, 3),
378
+ 2002: (NOV, 22),
379
+ 2003: (NOV, 12),
380
+ 2004: (NOV, 1),
381
+ 2005: (OCT, 21),
382
+ 2006: (OCT, 10),
383
+ 2007: (SEP, 29),
384
+ 2008: (SEP, 18),
385
+ 2009: (SEP, 7),
386
+ 2010: (AUG, 27),
387
+ 2011: (AUG, 17),
388
+ 2012: (AUG, 5),
389
+ 2013: (JUL, 25),
390
+ 2014: (JUL, 15),
391
+ 2015: (JUL, 4),
392
+ 2016: (JUN, 23),
393
+ 2017: (JUN, 12),
394
+ 2018: (JUN, 2),
395
+ 2019: (MAY, 23),
396
+ 2020: (MAY, 10),
397
+ 2021: (APR, 29),
398
+ 2022: (APR, 19),
399
+ 2023: (APR, 8),
400
+ }
401
+
402
+ RAMADAN_BEGINNING_DATES = {
403
+ 2000: (NOV, 28),
404
+ 2001: (NOV, 17),
405
+ 2002: (NOV, 6),
406
+ 2003: (OCT, 27),
407
+ 2004: (OCT, 16),
408
+ 2005: (OCT, 5),
409
+ 2006: (SEP, 24),
410
+ 2007: (SEP, 13),
411
+ 2008: (SEP, 2),
412
+ 2009: (AUG, 22),
413
+ 2010: (AUG, 11),
414
+ 2011: (AUG, 1),
415
+ 2012: (JUL, 20),
416
+ 2013: (JUL, 9),
417
+ 2014: (JUN, 29),
418
+ 2015: (JUN, 18),
419
+ 2016: (JUN, 7),
420
+ 2017: (MAY, 27),
421
+ 2018: (MAY, 16),
422
+ 2019: (MAY, 6),
423
+ 2020: (APR, 25),
424
+ 2021: (APR, 13),
425
+ 2022: (APR, 3),
426
+ 2023: (MAR, 23),
427
+ }
@@ -53,9 +53,7 @@ class Bulgaria(HolidayBase):
53
53
  self._add_holiday(tr("Нова година"), JAN, 1)
54
54
 
55
55
  # Liberation Day.
56
- self._add_holiday(
57
- tr("Ден на Освобождението на България от османско иго"), MAR, 3
58
- )
56
+ self._add_holiday(tr("Ден на Освобождението на България от османско иго"), MAR, 3)
59
57
 
60
58
  # International Workers' Day.
61
59
  self._add_holiday(
@@ -65,9 +63,7 @@ class Bulgaria(HolidayBase):
65
63
  )
66
64
 
67
65
  # Saint George's Day.
68
- self._add_holiday(
69
- tr("Гергьовден, Ден на храбростта и Българската армия"), MAY, 6
70
- )
66
+ self._add_holiday(tr("Гергьовден, Ден на храбростта и Българската армия"), MAY, 6)
71
67
 
72
68
  # Bulgarian Education and Culture and Slavonic Literature Day.
73
69
  self._add_holiday(