holidays 0.84__py3-none-any.whl → 0.86__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 (94) hide show
  1. holidays/__init__.py +0 -2
  2. holidays/calendars/__init__.py +0 -2
  3. holidays/constants.py +0 -2
  4. holidays/countries/__init__.py +0 -2
  5. holidays/countries/aland_islands.py +4 -4
  6. holidays/countries/american_samoa.py +4 -4
  7. holidays/countries/azerbaijan.py +2 -0
  8. holidays/countries/bulgaria.py +208 -50
  9. holidays/countries/china.py +10 -1
  10. holidays/countries/ecuador.py +12 -4
  11. holidays/countries/estonia.py +55 -9
  12. holidays/countries/french_guiana.py +4 -4
  13. holidays/countries/french_polynesia.py +4 -4
  14. holidays/countries/french_southern_territories.py +4 -4
  15. holidays/countries/gibraltar.py +1 -1
  16. holidays/countries/guadeloupe.py +4 -4
  17. holidays/countries/guam.py +4 -4
  18. holidays/countries/italy.py +489 -167
  19. holidays/countries/marshall_islands.py +8 -6
  20. holidays/countries/martinique.py +4 -4
  21. holidays/countries/mauritania.py +2 -4
  22. holidays/countries/mayotte.py +4 -4
  23. holidays/countries/mongolia.py +1 -5
  24. holidays/countries/nepal.py +46 -41
  25. holidays/countries/new_caledonia.py +4 -4
  26. holidays/countries/northern_mariana_islands.py +4 -4
  27. holidays/countries/puerto_rico.py +4 -4
  28. holidays/countries/reunion.py +4 -4
  29. holidays/countries/russia.py +1 -2
  30. holidays/countries/saint_barthelemy.py +4 -4
  31. holidays/countries/saint_martin.py +4 -4
  32. holidays/countries/saint_pierre_and_miquelon.py +4 -4
  33. holidays/countries/samoa.py +1 -3
  34. holidays/countries/svalbard_and_jan_mayen.py +4 -4
  35. holidays/countries/sweden.py +102 -32
  36. holidays/countries/taiwan.py +3 -6
  37. holidays/countries/thailand.py +9 -6
  38. holidays/countries/turkey.py +7 -4
  39. holidays/countries/united_states.py +4 -0
  40. holidays/countries/united_states_minor_outlying_islands.py +4 -4
  41. holidays/countries/united_states_virgin_islands.py +4 -4
  42. holidays/countries/wallis_and_futuna.py +4 -4
  43. holidays/financial/__init__.py +1 -3
  44. holidays/financial/ice_futures_europe.py +6 -2
  45. holidays/financial/national_stock_exchange_of_india.py +141 -38
  46. holidays/groups/__init__.py +0 -2
  47. holidays/holiday_base.py +51 -23
  48. holidays/locale/bg/LC_MESSAGES/BG.mo +0 -0
  49. holidays/locale/en_IN/LC_MESSAGES/XNSE.mo +0 -0
  50. holidays/locale/en_US/LC_MESSAGES/BG.mo +0 -0
  51. holidays/locale/en_US/LC_MESSAGES/EC.mo +0 -0
  52. holidays/locale/en_US/LC_MESSAGES/EE.mo +0 -0
  53. holidays/locale/en_US/LC_MESSAGES/IT.mo +0 -0
  54. holidays/locale/en_US/LC_MESSAGES/NP.mo +0 -0
  55. holidays/locale/en_US/LC_MESSAGES/SE.mo +0 -0
  56. holidays/locale/en_US/LC_MESSAGES/TR.mo +0 -0
  57. holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
  58. holidays/locale/en_US/LC_MESSAGES/US.mo +0 -0
  59. holidays/locale/en_US/LC_MESSAGES/XNSE.mo +0 -0
  60. holidays/locale/es/LC_MESSAGES/EC.mo +0 -0
  61. holidays/locale/et/LC_MESSAGES/EE.mo +0 -0
  62. holidays/locale/hi/LC_MESSAGES/XNSE.mo +0 -0
  63. holidays/locale/it_IT/LC_MESSAGES/IT.mo +0 -0
  64. holidays/locale/ne/LC_MESSAGES/NP.mo +0 -0
  65. holidays/locale/sv/LC_MESSAGES/SE.mo +0 -0
  66. holidays/locale/th/LC_MESSAGES/CA.mo +0 -0
  67. holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
  68. holidays/locale/th/LC_MESSAGES/DK.mo +0 -0
  69. holidays/locale/th/LC_MESSAGES/ES.mo +0 -0
  70. holidays/locale/th/LC_MESSAGES/FI.mo +0 -0
  71. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  72. holidays/locale/th/LC_MESSAGES/NO.mo +0 -0
  73. holidays/locale/th/LC_MESSAGES/SE.mo +0 -0
  74. holidays/locale/th/LC_MESSAGES/TL.mo +0 -0
  75. holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
  76. holidays/locale/th/LC_MESSAGES/US.mo +0 -0
  77. holidays/locale/th/LC_MESSAGES/VA.mo +0 -0
  78. holidays/locale/tr/LC_MESSAGES/TR.mo +0 -0
  79. holidays/locale/uk/LC_MESSAGES/BG.mo +0 -0
  80. holidays/locale/uk/LC_MESSAGES/EC.mo +0 -0
  81. holidays/locale/uk/LC_MESSAGES/EE.mo +0 -0
  82. holidays/locale/uk/LC_MESSAGES/SE.mo +0 -0
  83. holidays/locale/uk/LC_MESSAGES/TR.mo +0 -0
  84. holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
  85. holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
  86. holidays/mixins/__init__.py +0 -2
  87. holidays/registry.py +1 -1
  88. holidays/version.py +1 -1
  89. {holidays-0.84.dist-info → holidays-0.86.dist-info}/METADATA +7 -7
  90. {holidays-0.84.dist-info → holidays-0.86.dist-info}/RECORD +94 -90
  91. {holidays-0.84.dist-info → holidays-0.86.dist-info}/licenses/CONTRIBUTORS +5 -0
  92. {holidays-0.84.dist-info → holidays-0.86.dist-info}/WHEEL +0 -0
  93. {holidays-0.84.dist-info → holidays-0.86.dist-info}/licenses/LICENSE +0 -0
  94. {holidays-0.84.dist-info → holidays-0.86.dist-info}/top_level.txt +0 -0
holidays/__init__.py CHANGED
@@ -10,8 +10,6 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- # ruff: noqa: F403
14
-
15
13
  from holidays.constants import *
16
14
  from holidays.holiday_base import *
17
15
  from holidays.registry import EntityLoader
@@ -10,8 +10,6 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- # ruff: noqa: F401
14
-
15
13
  from holidays.calendars.balinese_saka import _BalineseSakaLunar
16
14
  from holidays.calendars.buddhist import _BuddhistLunisolar, _CustomBuddhistHolidays
17
15
  from holidays.calendars.burmese import _BurmeseLunisolar
holidays/constants.py CHANGED
@@ -10,8 +10,6 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- # ruff: noqa: F401
14
-
15
13
  from holidays.calendars.gregorian import (
16
14
  JAN,
17
15
  FEB,
@@ -10,8 +10,6 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- # ruff: noqa: F401
14
-
15
13
  from holidays.countries.afghanistan import Afghanistan, AF, AFG
16
14
  from holidays.countries.aland_islands import AlandIslands, AX, ALA, HolidaysAX
17
15
  from holidays.countries.albania import Albania, AL, ALB
@@ -14,7 +14,7 @@ from holidays.countries.finland import Finland
14
14
  from holidays.mixins.child_entity import ChildEntity
15
15
 
16
16
 
17
- class HolidaysAX(ChildEntity, Finland):
17
+ class AlandIslands(ChildEntity, Finland):
18
18
  """Åland Islands holidays.
19
19
 
20
20
  Alias of a Finnish subdivision that is also officially assigned
@@ -35,13 +35,13 @@ class HolidaysAX(ChildEntity, Finland):
35
35
  start_year = 1921
36
36
 
37
37
 
38
- class AlandIslands(HolidaysAX):
38
+ class HolidaysAX(AlandIslands):
39
39
  pass
40
40
 
41
41
 
42
- class AX(HolidaysAX):
42
+ class AX(AlandIslands):
43
43
  pass
44
44
 
45
45
 
46
- class ALA(HolidaysAX):
46
+ class ALA(AlandIslands):
47
47
  pass
@@ -14,7 +14,7 @@ from holidays.countries.united_states import UnitedStates
14
14
  from holidays.mixins.child_entity import ChildEntity
15
15
 
16
16
 
17
- class HolidaysAS(ChildEntity, UnitedStates):
17
+ class AmericanSamoa(ChildEntity, UnitedStates):
18
18
  """American Samoa holidays.
19
19
 
20
20
  Alias of a US subdivision that is also officially assigned its own country code in ISO 3166-1.
@@ -27,13 +27,13 @@ class HolidaysAS(ChildEntity, UnitedStates):
27
27
  start_year = 1901
28
28
 
29
29
 
30
- class AmericanSamoa(HolidaysAS):
30
+ class HolidaysAS(AmericanSamoa):
31
31
  pass
32
32
 
33
33
 
34
- class AS(HolidaysAS):
34
+ class AS(AmericanSamoa):
35
35
  pass
36
36
 
37
37
 
38
- class ASM(HolidaysAS):
38
+ class ASM(AmericanSamoa):
39
39
  pass
@@ -242,6 +242,7 @@ class AzerbaijanStaticHolidays:
242
242
  * <https://web.archive.org/web/20241015224204/https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-8332>
243
243
  * <https://web.archive.org/web/20250410132503/https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-8449>
244
244
  * <https://web.archive.org/web/20250216200846/https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-8623>
245
+ * <https://web.archive.org/web/20250711211545/https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-8864>
245
246
 
246
247
  Special holidays references:
247
248
  * <https://web.archive.org/web/20250421013220/https://www.msk.gov.az/en/elections/pages/municipal-elections/belediyye-29-01-2025>
@@ -308,6 +309,7 @@ class AzerbaijanStaticHolidays:
308
309
  2025: (
309
310
  (JAN, 3, DEC, 29, 2024),
310
311
  (JAN, 29, municipal_elections),
312
+ (JUN, 27, JUN, 21),
311
313
  ),
312
314
  }
313
315
 
@@ -15,56 +15,64 @@ from __future__ import annotations
15
15
  from gettext import gettext as tr
16
16
  from typing import TYPE_CHECKING
17
17
 
18
+ from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, SEP, DEC
18
19
  from holidays.calendars.julian_revised import JULIAN_REVISED_CALENDAR
19
- from holidays.constants import PUBLIC, SCHOOL
20
- from holidays.groups import ChristianHolidays, InternationalHolidays
20
+ from holidays.constants import HALF_DAY, PUBLIC, SCHOOL
21
+ from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
21
22
  from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY
22
23
 
23
24
  if TYPE_CHECKING:
24
25
  from datetime import date
25
26
 
26
27
 
27
- class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
28
+ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
28
29
  """Bulgaria holidays.
29
30
 
30
31
  References:
31
- * <https://web.archive.org/web/20250402193136/https://lex.bg/laws/ldoc/1594373121>
32
- * <https://web.archive.org/web/20240814165123/https://www.parliament.bg/bg/24>
33
- * <https://web.archive.org/web/20250118142918/https://kik-info.com/spravochnik/calendar/2021/>
32
+ * [Labor Code](https://web.archive.org/web/20250402193136/https://lex.bg/laws/ldoc/1594373121)
33
+ * [Labor Code changes - State Gazette, Issue 30, 13.04.1990](https://archive.org/details/30-1990)
34
+ * [Labor Code changes - State Gazette, Issue 27, 05.04.1991](https://archive.org/details/27-1991_202511)
35
+ * [Labor Code changes - State Gazette, Issue 104, 17.12.1991](https://archive.org/details/104-1991)
36
+ * [Labor Code changes - State Gazette, Issue 88, 30.10.1992](https://archive.org/details/88-1992)
37
+ * [Labor Code changes - State Gazette, Issue 2, 05.01.1996](https://archive.org/details/2-1996_202511)
38
+ * [Labor Code changes - State Gazette, Issue 22, 24.02.1998](https://archive.org/details/22-1998)
39
+ * [Labor Code changes - State Gazette, Issue 56, 19.05.1998](https://archive.org/details/56-1998)
40
+ * [Labor Code changes - State Gazette, Issue 108, 15.09.1998](https://archive.org/details/108-1998)
41
+ * [Labor Code changes - State Gazette, Issue 15, 23.02.2010](https://web.archive.org/web/20250515130122/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=29936)
42
+ * [Labor Code changes - State Gazette, Issue 105, 30.12.2016](https://web.archive.org/web/20220509103925/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=110584)
43
+ * [Labor Code changes - State Gazette, Issue 107, 18.12.2020](https://web.archive.org/web/20210410181539/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=154367)
44
+ * [Bulgarian public holidays](https://web.archive.org/web/20240814165123/https://www.parliament.bg/bg/24)
45
+ * [Working days and weekends calendar](https://web.archive.org/web/20250916112151/https://kik-info.com/spravochnik/calendar/2025/)
34
46
  * <https://en.wikipedia.org/wiki/Public_holidays_in_Bulgaria>
35
-
36
- Official holidays in Bulgaria in their current form. This class does not
37
- any return holidays before 1990, as holidays in the People's Republic of
38
- Bulgaria and earlier were different.
39
-
40
- Since 2017, it has been accepted that public holidays in Bulgaria that fall on a Saturday
41
- or Sunday are to be taken on the first working day after them. If there are both Saturday
42
- and Sunday holidays, Monday and Tuesday are rested respectively.
43
- The exceptions are:
44
- 1) the Easter holidays, which are always a consecutive Friday, Saturday, and Sunday;
45
- 2) National Awakening Day which, while an official holiday and a non-attendance day for
46
- schools, is still a working day.
47
47
  """
48
48
 
49
49
  country = "BG"
50
50
  default_language = "bg"
51
51
  # %s (observed).
52
52
  observed_label = tr("%s (почивен ден)")
53
- supported_categories = (PUBLIC, SCHOOL)
53
+ supported_categories = (HALF_DAY, PUBLIC, SCHOOL)
54
54
  supported_languages = ("bg", "en_US", "uk")
55
- start_year = 1990
55
+ # Labor Code changes - State Gazette, Issue 30, 13.04.1990.
56
+ start_year = 1991
56
57
 
57
58
  def __init__(self, *args, **kwargs):
58
59
  ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR)
59
60
  InternationalHolidays.__init__(self)
61
+ StaticHolidays.__init__(self, BulgariaStaticHolidays)
62
+ # Labor Code changes - State Gazette, Issue 105, 30.12.2016.
60
63
  kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_WORKDAY)
61
64
  kwargs.setdefault("observed_since", 2017)
62
65
  super().__init__(*args, **kwargs)
63
66
 
64
- def _populate_observed(self, dts: set[date], excluded_names: set[str]) -> None:
67
+ def _populate_observed(self, dts: set[date], *, multiple: bool = False) -> None:
68
+ excluded_names = {
69
+ # Holy Saturday.
70
+ self.tr("Велика събота"),
71
+ # Easter.
72
+ self.tr("Великден"),
73
+ }
74
+
65
75
  for dt in sorted(dts):
66
- if not self._is_observed(dt):
67
- continue
68
76
  for name in self.get_list(dt):
69
77
  if name not in excluded_names:
70
78
  self._add_observed(dt, name)
@@ -80,45 +88,67 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
80
88
  self._add_holiday_mar_3(tr("Ден на Освобождението на България от османско иго"))
81
89
  )
82
90
 
83
- # Good Friday.
84
- self._add_good_friday(tr("Велики петък"))
91
+ # Labor Code changes - State Gazette, Issue 15, 23.02.2010.
92
+ if self._year >= 2010:
93
+ # Good Friday.
94
+ self._add_good_friday(tr("Велики петък"))
85
95
 
86
- # Holy Saturday.
87
- self._add_holy_saturday(tr("Велика събота"))
96
+ # Holy Saturday.
97
+ self._add_holy_saturday(tr("Велика събота"))
88
98
 
89
99
  # Easter.
90
100
  name = tr("Великден")
91
101
  self._add_easter_sunday(name)
102
+ # Labor Code changes - State Gazette, Issue 27, 05.04.1991.
92
103
  self._add_easter_monday(name)
93
104
 
94
105
  dts_observed.add(
95
- # International Workers' Day.
106
+ # Labor Day and International Workers' Solidarity Day.
96
107
  self._add_labor_day(tr("Ден на труда и на международната работническа солидарност"))
97
108
  )
98
109
 
99
- dts_observed.add(
100
- # Saint George's Day.
101
- self._add_holiday_may_6(tr("Гергьовден, Ден на храбростта и Българската армия"))
102
- )
110
+ # Labor Code changes - State Gazette, Issue 56, 19.05.1998.
111
+ if self._year >= 1999:
112
+ dts_observed.add(
113
+ # Saint George's Day, Day of the Bulgarian Army.
114
+ self._add_holiday_may_6(tr("Гергьовден, Ден на храбростта и Българската армия"))
115
+ )
103
116
 
104
- dts_observed.add(
105
- self._add_holiday_may_24(
106
- # Bulgarian Education and Culture and Slavonic Literature Day.
107
- tr(
108
- "Ден на светите братя Кирил и Методий, на българската азбука, "
109
- "просвета и култура и на славянската книжовност"
110
- )
117
+ # Renamed by Labor Code changes - State Gazette, Issue 107, 18.12.2020.
118
+ name = (
119
+ # Day of the Holy Brothers Cyril and Methodius, Bulgarian Alphabet,
120
+ # Enlightenment, Culture and Slavonic Literature.
121
+ tr(
122
+ "Ден на светите братя Кирил и Методий, на българската азбука, "
123
+ "просвета и култура и на славянската книжовност"
111
124
  )
125
+ if self._year >= 2021
126
+ # Day of Bulgarian Enlightenment and Culture and Slavonic Alphabet.
127
+ else tr("Ден на българската просвета и култура и на славянската писменост")
112
128
  )
129
+ dts_observed.add(self._add_holiday_may_24(name))
113
130
 
114
- # Unification Day.
115
- dts_observed.add(self._add_holiday_sep_6(tr("Ден на Съединението")))
131
+ # Labor Code changes - State Gazette, Issue 22, 24.02.1998.
132
+ if self._year >= 1998:
133
+ # Unification Day.
134
+ dts_observed.add(self._add_holiday_sep_6(tr("Ден на Съединението")))
116
135
 
117
- # Independence Day.
118
- dts_observed.add(self._add_holiday_sep_22(tr("Ден на Независимостта на България")))
136
+ # Abandoned by Labor Code changes - State Gazette, Issue 104, 17.12.1991.
137
+ if self._year <= 1991:
138
+ # Freedom Day.
139
+ self._add_holiday_sep_9(tr("Ден на свободата"))
119
140
 
120
- # Christmas Eve.
121
- dts_observed.add(self._add_christmas_eve(tr("Бъдни вечер")))
141
+ # Labor Code changes - State Gazette, Issue 108, 15.09.1998.
142
+ if self._year >= 1998:
143
+ # Independence Day.
144
+ dts_observed.add(self._add_holiday_sep_22(tr("Ден на Независимостта на България")))
145
+
146
+ # Labor Code changes - State Gazette, Issue 2, 05.01.1996.
147
+ if self._year >= 1996:
148
+ # Christmas Eve.
149
+ dts_observed.add(self._add_christmas_eve(tr("Бъдни вечер")))
150
+
151
+ # Labor Code changes - State Gazette, Issue 104, 17.12.1991.
122
152
 
123
153
  # Christmas Day.
124
154
  name = tr("Рождество Христово")
@@ -126,13 +156,23 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
126
156
  dts_observed.add(self._add_christmas_day_two(name))
127
157
 
128
158
  if self.observed:
129
- self._populate_observed(
130
- dts_observed, excluded_names={self.tr("Велика събота"), self.tr("Великден")}
131
- )
159
+ self._populate_observed(dts_observed)
160
+
161
+ def _populate_half_day_holidays(self):
162
+ # Established as half-day by Labor Code changes - State Gazette, Issue 104, 17.12.1991.
163
+ # Changed to full-day by Labor Code changes - State Gazette, Issue 2, 05.01.1996.
164
+ if self._year <= 1995:
165
+ # %s (from 2pm).
166
+ begin_time_label = self.tr("%s (след 14 ч.)")
167
+
168
+ # Christmas Eve.
169
+ self._add_christmas_eve(begin_time_label % self.tr("Бъдни вечер"))
132
170
 
133
171
  def _populate_school_holidays(self):
134
- # National Awakening Day.
135
- self._add_holiday_nov_1(tr("Ден на народните будители"))
172
+ # Labor Code changes - State Gazette, Issue 88, 30.10.1992.
173
+ if self._year >= 1992:
174
+ # The Day of the People's Awakeners.
175
+ self._add_holiday_nov_1(tr("Ден на народните будители"))
136
176
 
137
177
 
138
178
  class BG(Bulgaria):
@@ -141,3 +181,121 @@ class BG(Bulgaria):
141
181
 
142
182
  class BLG(Bulgaria):
143
183
  pass
184
+
185
+
186
+ class BulgariaStaticHolidays:
187
+ """Bulgaria special holidays.
188
+
189
+ Substituted holidays references:
190
+ * [2004](https://web.archive.org/web/20251126005928/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=21156)
191
+ * [2005](https://web.archive.org/web/20251126005738/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=14875)
192
+ * [2006](https://web.archive.org/web/20251126005635/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=1142)
193
+ * [2006 changes](https://web.archive.org/web/20251126005653/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=1246)
194
+ * [2007](https://web.archive.org/web/20251126010247/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=3325)
195
+ * [2007 changes](https://web.archive.org/web/20251126010247/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=3600)
196
+ * [2008](https://web.archive.org/web/20251126010335/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=4686)
197
+ * [2009](https://web.archive.org/web/20251126005722/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=12464)
198
+ * [2009 changes](https://web.archive.org/web/20251126005900/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=16562)
199
+ * [2009 changes](https://web.archive.org/web/20251126010145/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=27525)
200
+ * [2010](https://web.archive.org/web/20251126010239/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=27993)
201
+ * [2011](https://web.archive.org/web/20251126010309/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=41994)
202
+ * [2012](https://web.archive.org/web/20251126010350/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=58790)
203
+ * [2013](https://web.archive.org/web/20251126115613/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=70577)
204
+ * [2013 changes](https://web.archive.org/web/20210410195503/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=74637)
205
+ * [2013 changes](https://web.archive.org/web/20250908131607/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=80503)
206
+ * [2014](https://web.archive.org/web/20231130064115/http://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=80502)
207
+ * [2015](https://web.archive.org/web/20250523171159/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=89532)
208
+ * [2016](https://web.archive.org/web/20250208071613/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=99143)
209
+
210
+ Special holidays references:
211
+ * [Resolution 220 of Mar 26, 2004](https://web.archive.org/web/20251126010024/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=21351)
212
+ * [Resolution 722 of Oct 18, 2006](https://web.archive.org/web/20251126010114/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=2739)
213
+ * [Resolution 808 of Nov 19, 2025](https://web.archive.org/web/20251126010045/https://dv.parliament.bg/DVWeb/showMaterialDV.jsp?idMat=239075)
214
+ """
215
+
216
+ # Substituted date format.
217
+ substituted_date_format = tr("%d.%m.%Y")
218
+
219
+ # Day off (substituted from %s).
220
+ substituted_label = tr("Почивен ден (прехвърлен от %s)")
221
+
222
+ # Official Holiday.
223
+ official_holiday = tr("Официален празник")
224
+
225
+ # Non-working day.
226
+ non_working_day = tr("Неприсъствен ден")
227
+
228
+ special_public_holidays = {
229
+ 2004: (
230
+ (APR, 2, official_holiday),
231
+ (MAY, 7, MAY, 15),
232
+ ),
233
+ 2005: (
234
+ (MAR, 4, MAR, 12),
235
+ (MAY, 23, MAY, 28),
236
+ (SEP, 5, SEP, 10),
237
+ (SEP, 23, SEP, 17),
238
+ ),
239
+ 2006: (JAN, 2, JAN, 28),
240
+ 2007: (
241
+ (JAN, 2, official_holiday),
242
+ (APR, 30, APR, 21),
243
+ (MAY, 25, JUN, 2),
244
+ (SEP, 7, SEP, 15),
245
+ (DEC, 31, DEC, 15),
246
+ ),
247
+ 2008: (
248
+ (MAY, 2, MAY, 10),
249
+ (MAY, 5, MAY, 17),
250
+ (DEC, 31, DEC, 20),
251
+ ),
252
+ 2009: (
253
+ (JAN, 2, JAN, 10),
254
+ (MAR, 2, MAR, 14),
255
+ (MAY, 4, MAY, 16),
256
+ (MAY, 5, MAY, 30),
257
+ (SEP, 21, SEP, 26),
258
+ (DEC, 31, DEC, 19),
259
+ ),
260
+ 2010: (
261
+ (MAY, 7, MAY, 15),
262
+ (DEC, 31, DEC, 11),
263
+ ),
264
+ 2011: (
265
+ (MAR, 4, MAR, 19),
266
+ (MAY, 23, MAY, 28),
267
+ (SEP, 5, SEP, 3),
268
+ (SEP, 23, SEP, 17),
269
+ ),
270
+ 2012: (
271
+ (JAN, 2, JAN, 21),
272
+ (APR, 30, APR, 21),
273
+ (MAY, 25, MAY, 19),
274
+ (SEP, 7, SEP, 29),
275
+ (DEC, 31, DEC, 15),
276
+ ),
277
+ 2013: (
278
+ (MAY, 2, MAY, 18),
279
+ (DEC, 23, DEC, 21),
280
+ (DEC, 31, DEC, 14),
281
+ ),
282
+ 2014: (
283
+ (MAY, 2, MAY, 10),
284
+ (MAY, 5, MAY, 31),
285
+ (DEC, 31, DEC, 13),
286
+ ),
287
+ 2015: (
288
+ (JAN, 2, JAN, 24),
289
+ (MAR, 2, MAR, 21),
290
+ (SEP, 21, SEP, 12),
291
+ (DEC, 31, DEC, 12),
292
+ ),
293
+ 2016: (
294
+ (MAR, 4, MAR, 12),
295
+ (MAY, 23, MAY, 14),
296
+ (SEP, 5, SEP, 10),
297
+ (SEP, 23, SEP, 17),
298
+ ),
299
+ 2025: (DEC, 31, non_working_day),
300
+ 2026: (JAN, 2, non_working_day),
301
+ }
@@ -24,8 +24,9 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
24
24
  References:
25
25
  * <https://en.wikipedia.org/wiki/Public_holidays_in_China>
26
26
  * [Festivals and Public Holidays](https://zh.wikipedia.org/wiki/中华人民共和国节日与公众假期)
27
- * [2024 changes (Order #795)](https://web.archive.org/web/20250228151847/https://www.gov.cn/zhengce/content/202411/content_6986380.htm)
27
+ * [2026](https://web.archive.org/web/20251111205945/https://www.gov.cn/zhengce/content/202511/content_7047090.htm)
28
28
  * [2025](https://web.archive.org/web/20250424041657/https://www.gov.cn/zhengce/content/202411/content_6986382.htm)
29
+ * [2024 changes (Order #795)](https://web.archive.org/web/20250228151847/https://www.gov.cn/zhengce/content/202411/content_6986380.htm)
29
30
  * [2024](https://web.archive.org/web/20250227033646/https://www.gov.cn/zhengce/content/202310/content_6911527.htm)
30
31
  * [2023](https://web.archive.org/web/20250414125053/https://www.gov.cn/gongbao/content/2023/content_5736714.htm)
31
32
  * [2022](https://web.archive.org/web/20250413071341/http://www.gov.cn/gongbao/content/2021/content_5651728.htm)
@@ -452,6 +453,14 @@ class ChinaStaticHolidays:
452
453
  (OCT, 7, SEP, 28), # National Day
453
454
  (OCT, 8, OCT, 11), # National Day
454
455
  ),
456
+ 2026: (
457
+ (JAN, 2, JAN, 4), # New Year's Day
458
+ (FEB, 20, FEB, 14), # Spring Festival
459
+ (FEB, 23, FEB, 28), # Spring Festival
460
+ (MAY, 5, MAY, 9), # Labor Day
461
+ (OCT, 6, SEP, 20), # National Day
462
+ (OCT, 7, OCT, 10), # National Day
463
+ ),
455
464
  }
456
465
 
457
466
  special_public_holidays_observed = {
@@ -19,6 +19,7 @@ from holidays.observed_holiday_base import (
19
19
  WED_TO_NEXT_FRI,
20
20
  SAT_TO_PREV_FRI,
21
21
  SUN_TO_NEXT_MON,
22
+ SUN_TO_NEXT_TUE,
22
23
  WED_THU_TO_NEXT_FRI,
23
24
  )
24
25
 
@@ -29,6 +30,11 @@ class Ecuador(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
29
30
  References:
30
31
  * <https://en.wikipedia.org/wiki/Public_holidays_in_Ecuador>
31
32
  * [Código del Trabajo](https://web.archive.org/web/20250428092005/https://biblioteca.defensoria.gob.ec/bitstream/37000/3364/1/Código%20de%20Trabajo%20(04-11-2021).pdf)
33
+ * [2018](https://web.archive.org/web/20181231193947/https://www.turismo.gob.ec/wp-content/uploads/2018/06/CALENDARIO-FERIADOS2018.pdf)
34
+ * [2019](https://web.archive.org/web/20220707173738/https://www.turismo.gob.ec/wp-content/uploads/2019/01/FERIADOS-2019.pdf)
35
+ * [2020-2021](https://web.archive.org/web/20210425014244/https://www.turismo.gob.ec/wp-content/uploads/2020/03/CALENDARIO-DE-FERIADOS.pdf)
36
+ * [2022](https://web.archive.org/web/20220127234055/https://www.turismo.gob.ec/wp-content/uploads/2022/01/FERIADOS-NACIONALES_2022.pdf)
37
+ * [2023-2025](https://web.archive.org/web/20250806025223/https://www.turismo.gob.ec/wp-content/uploads/2023/12/CALENDARIO-FERIADOS-2023-2025-06-12-2022-.pdf)
32
38
  """
33
39
 
34
40
  country = "EC"
@@ -84,19 +90,21 @@ class Ecuador(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
84
90
 
85
91
  self._add_observed(
86
92
  # All Souls' Day.
87
- self._add_all_souls_day(tr("Día de los Difuntos")),
88
- rule=TUE_TO_PREV_MON + WED_TO_NEXT_FRI + SAT_TO_PREV_FRI, # Not observed the next day.
93
+ self._add_all_souls_day(tr("Día de Difuntos")),
94
+ # Not observed the next day.
95
+ rule=TUE_TO_PREV_MON + WED_TO_NEXT_FRI + SAT_TO_PREV_FRI + SUN_TO_NEXT_TUE,
89
96
  )
90
97
 
91
98
  self._add_observed(
92
99
  # Independence of Cuenca.
93
100
  self._add_holiday_nov_3(tr("Independencia de Cuenca")),
94
- rule=WED_THU_TO_NEXT_FRI + SUN_TO_NEXT_MON, # Not observed the previous day.
101
+ # Not observed the previous day.
102
+ rule=SUN_TO_NEXT_MON,
95
103
  )
96
104
 
97
105
  self._add_observed(
98
106
  # Christmas Day.
99
- self._add_christmas_day(tr("Día de Navidad")),
107
+ self._add_christmas_day(tr("Navidad")),
100
108
  rule=SAT_TO_PREV_FRI + SUN_TO_NEXT_MON,
101
109
  )
102
110
 
@@ -12,15 +12,31 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
+ from holidays.constants import HALF_DAY, PUBLIC
15
16
  from holidays.groups import ChristianHolidays, InternationalHolidays
16
17
  from holidays.holiday_base import HolidayBase
17
18
 
18
19
 
19
20
  class Estonia(HolidayBase, ChristianHolidays, InternationalHolidays):
20
- """Estonia holidays."""
21
+ """Estonia holidays.
22
+
23
+ References:
24
+ * <https://et.wikipedia.org/wiki/Eesti_riigipühad>
25
+ * <https://en.wikipedia.org/wiki/Public_holidays_in_Estonia>
26
+ * [Decree on State Holidays and on Amending the Labour Code of the Estonian SSR (09.10.1990)](https://www.riigiteataja.ee/akt/28395)
27
+ * [Holidays and Anniversaries Act (08.02.1994)](https://www.riigiteataja.ee/akt/29913)
28
+ * [Public Holidays and Days of National Importance Act (27.01.1998, in force since 23.02.1998)](https://www.riigiteataja.ee/akt/13276841)
29
+ * [Act amending § 2 of the Holidays and Anniversaries Act
30
+ and § 25 of the Working and Rest Hours Act](https://www.riigiteataja.ee/akt/895511)
31
+ * [Working and Rest Hours Act (24.01.2001)](https://www.riigiteataja.ee/akt/72738)
32
+ * [Employment Contracts Act (17.12.2008, in force since 01.07.2009)](https://www.riigiteataja.ee/akt/122122012029)
33
+ """
21
34
 
22
35
  country = "EE"
23
36
  default_language = "et"
37
+ # Decree on State Holidays and on Amending the Labour Code of the Estonian SSR (09.10.1990).
38
+ start_year = 1991
39
+ supported_categories = (HALF_DAY, PUBLIC)
24
40
  supported_languages = ("en_US", "et", "uk")
25
41
 
26
42
  def __init__(self, *args, **kwargs):
@@ -35,17 +51,23 @@ class Estonia(HolidayBase, ChristianHolidays, InternationalHolidays):
35
51
  # Independence Day.
36
52
  self._add_holiday_feb_24(tr("iseseisvuspäev"))
37
53
 
38
- # Good Friday.
39
- self._add_good_friday(tr("suur reede"))
54
+ if self._year >= 1994:
55
+ # Good Friday.
56
+ self._add_good_friday(tr("suur reede"))
40
57
 
41
- # Easter Sunday.
42
- self._add_easter_sunday(tr("ülestõusmispühade 1. püha"))
58
+ # Easter Sunday.
59
+ self._add_easter_sunday(tr("ülestõusmispühade 1. püha"))
43
60
 
44
- # Spring Day.
45
- self._add_holiday_may_1(tr("kevadpüha"))
61
+ # Whit Sunday.
62
+ self._add_whit_sunday(tr("nelipühade 1. püha"))
46
63
 
47
- # Whit Sunday.
48
- self._add_whit_sunday(tr("nelipühade 1. püha"))
64
+ self._add_holiday_may_1(
65
+ # May Day.
66
+ tr("kevadpüha")
67
+ if self._year >= 1994
68
+ # International Workers' Solidarity Day.
69
+ else tr("töörahva rahvusvahelise solidaarsuse päev")
70
+ )
49
71
 
50
72
  # Victory Day.
51
73
  self._add_holiday_jun_23(tr("võidupüha"))
@@ -57,6 +79,12 @@ class Estonia(HolidayBase, ChristianHolidays, InternationalHolidays):
57
79
  # Independence Restoration Day.
58
80
  self._add_holiday_aug_20(tr("taasiseseisvumispäev"))
59
81
 
82
+ if self._year <= 1993:
83
+ # Day of Declaration of Sovereignty.
84
+ self._add_holiday_nov_16(tr("taassünnipäev"))
85
+
86
+ # Act amending § 2 of the Holidays and Anniversaries Act
87
+ # and § 25 of the Working and Rest Hours Act.
60
88
  if self._year >= 2005:
61
89
  # Christmas Eve.
62
90
  self._add_christmas_eve(tr("jõululaupäev"))
@@ -67,6 +95,24 @@ class Estonia(HolidayBase, ChristianHolidays, InternationalHolidays):
67
95
  # Second Day of Christmas.
68
96
  self._add_christmas_day_two(tr("teine jõulupüha"))
69
97
 
98
+ def _populate_half_day_holidays(self):
99
+ # Working and Rest Hours Act (24.01.2001), § 25.
100
+ # Employment Contracts Act (17.12.2008, in force since 01.07.2009), § 53.
101
+
102
+ if self._year <= 2000:
103
+ return None
104
+
105
+ # Pre-holiday day (workday shortened by 3 hours).
106
+ name = tr("pühade-eelne päev (tööpäev lüheneb 3 tunni võrra)")
107
+ self._add_holiday_feb_23(name)
108
+ self._add_holiday_jun_22(name)
109
+ self._add_holiday_dec_31(name)
110
+
111
+ if self._year >= 2005:
112
+ self._add_holiday_dec_23(name)
113
+ else:
114
+ self._add_holiday_dec_24(name)
115
+
70
116
 
71
117
  class EE(Estonia):
72
118
  pass
@@ -14,7 +14,7 @@ from holidays.countries.france import France
14
14
  from holidays.mixins.child_entity import ChildEntity
15
15
 
16
16
 
17
- class HolidaysGF(ChildEntity, France):
17
+ class FrenchGuiana(ChildEntity, France):
18
18
  """French Guiana holidays.
19
19
 
20
20
  Alias of a French subdivision that is also officially assigned
@@ -32,13 +32,13 @@ class HolidaysGF(ChildEntity, France):
32
32
  start_year = 1815
33
33
 
34
34
 
35
- class FrenchGuiana(HolidaysGF):
35
+ class HolidaysGF(FrenchGuiana):
36
36
  pass
37
37
 
38
38
 
39
- class GF(HolidaysGF):
39
+ class GF(FrenchGuiana):
40
40
  pass
41
41
 
42
42
 
43
- class GUF(HolidaysGF):
43
+ class GUF(FrenchGuiana):
44
44
  pass