holidays 0.85__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.
- holidays/countries/bulgaria.py +208 -50
- holidays/countries/estonia.py +55 -9
- holidays/countries/gibraltar.py +1 -1
- holidays/countries/italy.py +489 -167
- holidays/countries/mongolia.py +1 -5
- holidays/countries/nepal.py +46 -41
- holidays/countries/russia.py +1 -2
- holidays/countries/sweden.py +102 -32
- holidays/countries/taiwan.py +3 -6
- holidays/countries/thailand.py +5 -5
- holidays/holiday_base.py +51 -23
- holidays/locale/bg/LC_MESSAGES/BG.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/BG.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/EE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/IT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/NP.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/SE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/et/LC_MESSAGES/EE.mo +0 -0
- holidays/locale/it_IT/LC_MESSAGES/IT.mo +0 -0
- holidays/locale/ne/LC_MESSAGES/NP.mo +0 -0
- holidays/locale/sv/LC_MESSAGES/SE.mo +0 -0
- holidays/locale/th/LC_MESSAGES/CA.mo +0 -0
- holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
- holidays/locale/th/LC_MESSAGES/DK.mo +0 -0
- holidays/locale/th/LC_MESSAGES/ES.mo +0 -0
- holidays/locale/th/LC_MESSAGES/FI.mo +0 -0
- holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
- holidays/locale/th/LC_MESSAGES/NO.mo +0 -0
- holidays/locale/th/LC_MESSAGES/SE.mo +0 -0
- holidays/locale/th/LC_MESSAGES/TL.mo +0 -0
- holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/th/LC_MESSAGES/US.mo +0 -0
- holidays/locale/th/LC_MESSAGES/VA.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/BG.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/EE.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/SE.mo +0 -0
- holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
- holidays/version.py +1 -1
- {holidays-0.85.dist-info → holidays-0.86.dist-info}/METADATA +6 -6
- {holidays-0.85.dist-info → holidays-0.86.dist-info}/RECORD +46 -42
- {holidays-0.85.dist-info → holidays-0.86.dist-info}/licenses/CONTRIBUTORS +3 -0
- {holidays-0.85.dist-info → holidays-0.86.dist-info}/WHEEL +0 -0
- {holidays-0.85.dist-info → holidays-0.86.dist-info}/licenses/LICENSE +0 -0
- {holidays-0.85.dist-info → holidays-0.86.dist-info}/top_level.txt +0 -0
holidays/countries/mongolia.py
CHANGED
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
|
|
13
13
|
from gettext import gettext as tr
|
|
14
14
|
|
|
15
|
-
from holidays.calendars.gregorian import _timedelta
|
|
16
15
|
from holidays.constants import PUBLIC, WORKDAY
|
|
17
16
|
from holidays.groups import InternationalHolidays, MongolianCalendarHolidays
|
|
18
17
|
from holidays.holiday_base import HolidayBase
|
|
@@ -160,10 +159,7 @@ class Mongolia(HolidayBase, InternationalHolidays, MongolianCalendarHolidays):
|
|
|
160
159
|
|
|
161
160
|
if self._year >= 2007:
|
|
162
161
|
# New Harvest Days.
|
|
163
|
-
|
|
164
|
-
dt = self._add_holiday_sep_5(name)
|
|
165
|
-
for delta in range(1, 46):
|
|
166
|
-
self._add_holiday(name, _timedelta(dt, delta))
|
|
162
|
+
self._add_multiday_holiday(self._add_holiday_sep_5(tr("Шинэ ургацын өдрүүд")), 45)
|
|
167
163
|
|
|
168
164
|
# Memorial Day of Political Victims.
|
|
169
165
|
self._add_holiday_sep_10(tr("Улс төрийн хэлмэгдэгсдийн дурсгалын өдөр"))
|
holidays/countries/nepal.py
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
# Website: https://github.com/vacanza/holidays
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
|
+
from gettext import gettext as tr
|
|
14
|
+
|
|
13
15
|
from holidays.calendars import _CustomIslamicHolidays, _CustomHinduHolidays
|
|
14
16
|
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, AUG, SEP, OCT, NOV
|
|
15
17
|
from holidays.constants import PUBLIC, WORKDAY
|
|
@@ -47,10 +49,12 @@ class Nepal(
|
|
|
47
49
|
"""
|
|
48
50
|
|
|
49
51
|
country = "NP"
|
|
52
|
+
default_language = "ne"
|
|
50
53
|
# %s (estimated).
|
|
51
|
-
estimated_label = "%s (
|
|
54
|
+
estimated_label = tr("%s (अनुमानित)")
|
|
52
55
|
start_year = 2010
|
|
53
56
|
supported_categories = (PUBLIC, WORKDAY)
|
|
57
|
+
supported_languages = ("en_US", "ne")
|
|
54
58
|
|
|
55
59
|
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
|
|
56
60
|
"""
|
|
@@ -105,7 +109,7 @@ class Nepal(
|
|
|
105
109
|
}
|
|
106
110
|
if dt := martyrs_day_dates.get(self._year):
|
|
107
111
|
# Martyr's Day.
|
|
108
|
-
self._add_holiday("
|
|
112
|
+
self._add_holiday(tr("शहीद दिवस"), dt)
|
|
109
113
|
|
|
110
114
|
democracy_day_dates = {
|
|
111
115
|
2010: (FEB, 19),
|
|
@@ -135,7 +139,7 @@ class Nepal(
|
|
|
135
139
|
}
|
|
136
140
|
if dt := democracy_day_dates.get(self._year):
|
|
137
141
|
# National Democracy Day.
|
|
138
|
-
self._add_holiday("
|
|
142
|
+
self._add_holiday(tr("राष्ट्रिय प्रजातन्त्र दिवस"), dt)
|
|
139
143
|
|
|
140
144
|
republic_day_dates = {
|
|
141
145
|
2010: (MAY, 29),
|
|
@@ -164,39 +168,40 @@ class Nepal(
|
|
|
164
168
|
}
|
|
165
169
|
if dt := republic_day_dates.get(self._year):
|
|
166
170
|
# Established in 2009.
|
|
171
|
+
|
|
167
172
|
# Republic Day.
|
|
168
|
-
self._add_holiday("
|
|
173
|
+
self._add_holiday(tr("गणतन्त्र दिवस"), dt)
|
|
169
174
|
|
|
170
175
|
# Hindu Holidays.
|
|
171
176
|
|
|
172
177
|
# Ram Navami.
|
|
173
|
-
self._add_ram_navami("
|
|
178
|
+
self._add_ram_navami(tr("राम नवमी"))
|
|
174
179
|
|
|
175
180
|
# Janai Poornima.
|
|
176
|
-
self._add_raksha_bandhan("
|
|
181
|
+
self._add_raksha_bandhan(tr("जनै पूर्णिमा"))
|
|
177
182
|
|
|
178
183
|
# Shree Krishna Janmashtami.
|
|
179
|
-
self._add_janmashtami("
|
|
184
|
+
self._add_janmashtami(tr("श्रीकृष्ण जन्माष्टमी"))
|
|
180
185
|
|
|
181
186
|
# Ghatasthapana.
|
|
182
|
-
self._add_sharad_navratri("
|
|
187
|
+
self._add_sharad_navratri(tr("घटस्थापना"))
|
|
183
188
|
|
|
184
189
|
# Duwadashi (Dashain).
|
|
185
|
-
self._add_papankusha_duwadashi("
|
|
190
|
+
self._add_papankusha_duwadashi(tr("दुवादशी (दशैं)"))
|
|
186
191
|
|
|
187
192
|
def _populate_public_holidays(self):
|
|
188
193
|
if self._year >= 2023:
|
|
189
194
|
# Prithvi Jayanti.
|
|
190
|
-
self._add_holiday_jan_11("
|
|
195
|
+
self._add_holiday_jan_11(tr("पृथ्वी जयन्ती"))
|
|
191
196
|
|
|
192
197
|
# International Women's Day.
|
|
193
|
-
self._add_womens_day("
|
|
198
|
+
self._add_womens_day(tr("अन्तर्राष्ट्रिय महिला दिवस"))
|
|
194
199
|
|
|
195
|
-
#
|
|
196
|
-
self._add_vaisakhi("
|
|
200
|
+
# Nepali New Year.
|
|
201
|
+
self._add_vaisakhi(tr("नेपाली नयाँ वर्ष"))
|
|
197
202
|
|
|
198
|
-
# International
|
|
199
|
-
self._add_labor_day("
|
|
203
|
+
# International Labor Day.
|
|
204
|
+
self._add_labor_day(tr("अन्तर्राष्ट्रिय श्रम दिवस"))
|
|
200
205
|
|
|
201
206
|
constitution_day_dates = {
|
|
202
207
|
2016: (SEP, 19),
|
|
@@ -219,77 +224,77 @@ class Nepal(
|
|
|
219
224
|
}
|
|
220
225
|
if dt := constitution_day_dates.get(self._year):
|
|
221
226
|
# Constitution Day.
|
|
222
|
-
self._add_holiday("
|
|
227
|
+
self._add_holiday(tr("संविधान दिवस"), dt)
|
|
223
228
|
|
|
224
229
|
# Christmas Day.
|
|
225
|
-
self._add_christmas_day("
|
|
230
|
+
self._add_christmas_day(tr("क्रिसमसको दिन"))
|
|
226
231
|
|
|
227
232
|
# Hindu holidays.
|
|
228
233
|
|
|
229
234
|
# Maghe Sankranti.
|
|
230
|
-
self._add_makar_sankranti("
|
|
235
|
+
self._add_makar_sankranti(tr("माघे संक्रान्ति"))
|
|
231
236
|
|
|
232
237
|
# Sonam Lhochhar.
|
|
233
|
-
self._add_sonam_losar("
|
|
238
|
+
self._add_sonam_losar(tr("सोनम ल्होछार"))
|
|
234
239
|
|
|
235
240
|
# Maha Shivaratri.
|
|
236
|
-
self._add_maha_shivaratri("
|
|
241
|
+
self._add_maha_shivaratri(tr("महाशिवरात्रि"))
|
|
237
242
|
|
|
238
243
|
# Gyalpo Lhosar.
|
|
239
|
-
self._add_gyalpo_losar("
|
|
244
|
+
self._add_gyalpo_losar(tr("ग्याल्पो ल्होसार"))
|
|
240
245
|
|
|
241
246
|
# Fagu Poornima.
|
|
242
|
-
self._add_nepal_holi("
|
|
247
|
+
self._add_nepal_holi(tr("फागुपुर्णिमा"))
|
|
243
248
|
|
|
244
249
|
# Fagu Poornima (Terai).
|
|
245
|
-
self._add_holi("
|
|
250
|
+
self._add_holi(tr("फागुपूर्णिमा (तराई)"))
|
|
246
251
|
|
|
247
252
|
# Buddha Jayanti.
|
|
248
|
-
self._add_buddha_purnima("
|
|
253
|
+
self._add_buddha_purnima(tr("बुद्ध जयन्ती"))
|
|
249
254
|
|
|
250
255
|
# Fulpati.
|
|
251
|
-
self._add_maha_saptami("
|
|
256
|
+
self._add_maha_saptami(tr("फुलपाती"))
|
|
252
257
|
|
|
253
258
|
# Maha Ashtami.
|
|
254
|
-
self._add_maha_ashtami("
|
|
259
|
+
self._add_maha_ashtami(tr("महा अष्टमी"))
|
|
255
260
|
|
|
256
261
|
# Maha Navami.
|
|
257
|
-
self._add_maha_navami("
|
|
262
|
+
self._add_maha_navami(tr("महा नवमी"))
|
|
258
263
|
|
|
259
264
|
# Bijaya Dashami.
|
|
260
|
-
self._add_dussehra("
|
|
265
|
+
self._add_dussehra(tr("विजया दशमी"))
|
|
261
266
|
|
|
262
267
|
# Ekadashi (Dashain).
|
|
263
|
-
self._add_papankusha_ekadashi("
|
|
268
|
+
self._add_papankusha_ekadashi(tr("एकादशी (दशैं)"))
|
|
264
269
|
|
|
265
270
|
# Laxmi Pooja.
|
|
266
|
-
self._add_diwali_india("
|
|
271
|
+
self._add_diwali_india(tr("लक्ष्मी पुजा"))
|
|
267
272
|
|
|
268
273
|
# Gai Tihar.
|
|
269
|
-
self._add_gau_krida("
|
|
274
|
+
self._add_gau_krida(tr("गाई तिहार"))
|
|
270
275
|
|
|
271
276
|
# Gobardhan Pooja.
|
|
272
|
-
self._add_govardhan_puja("
|
|
277
|
+
self._add_govardhan_puja(tr("गोवर्धन पूजा"))
|
|
273
278
|
|
|
274
279
|
# Mha Pooja.
|
|
275
|
-
self._add_govardhan_puja("
|
|
280
|
+
self._add_govardhan_puja(tr("म्ह पूजा"))
|
|
276
281
|
|
|
277
282
|
# Bhai Tika.
|
|
278
|
-
self._add_bhai_dooj("
|
|
283
|
+
self._add_bhai_dooj(tr("भाइटीका"))
|
|
279
284
|
|
|
280
285
|
# Chhath Parva.
|
|
281
|
-
self._add_chhath_puja("
|
|
286
|
+
self._add_chhath_puja(tr("छठ पर्व"))
|
|
282
287
|
|
|
283
288
|
# Tamu Lhochhar.
|
|
284
|
-
self._add_tamu_losar("
|
|
289
|
+
self._add_tamu_losar(tr("तमु ल्हाेसार"))
|
|
285
290
|
|
|
286
291
|
# Islamic holidays.
|
|
287
292
|
|
|
288
293
|
# Eid al-Fitr.
|
|
289
|
-
self._add_eid_al_fitr_day("
|
|
294
|
+
self._add_eid_al_fitr_day(tr("इद उल फित्र"))
|
|
290
295
|
|
|
291
296
|
# Eid al-Adha.
|
|
292
|
-
self._add_eid_al_adha_day("
|
|
297
|
+
self._add_eid_al_adha_day(tr("बकरीद"))
|
|
293
298
|
|
|
294
299
|
# Removed by MoHA between 2019-2020.
|
|
295
300
|
self._add_non_continuous_holidays()
|
|
@@ -398,10 +403,10 @@ class NepalStaticHolidays:
|
|
|
398
403
|
"""
|
|
399
404
|
|
|
400
405
|
# Day of National Mourning.
|
|
401
|
-
name_day_of_national_mourning = "
|
|
406
|
+
name_day_of_national_mourning = tr("राष्ट्रिय शोक दिवस")
|
|
402
407
|
|
|
403
408
|
# Tihar Holiday.
|
|
404
|
-
name_tihar_holiday = "
|
|
409
|
+
name_tihar_holiday = tr("तिहार बिदा")
|
|
405
410
|
|
|
406
411
|
special_public_holidays = {
|
|
407
412
|
2011: (MAR, 6, name_day_of_national_mourning),
|
|
@@ -411,7 +416,7 @@ class NepalStaticHolidays:
|
|
|
411
416
|
2023: (
|
|
412
417
|
(JAN, 16, name_day_of_national_mourning),
|
|
413
418
|
# People War's Day.
|
|
414
|
-
(FEB, 13, "
|
|
419
|
+
(FEB, 13, tr("जनयुद्ध दिवस")),
|
|
415
420
|
(SEP, 14, name_day_of_national_mourning),
|
|
416
421
|
(NOV, 16, name_tihar_holiday),
|
|
417
422
|
),
|
holidays/countries/russia.py
CHANGED
|
@@ -47,8 +47,7 @@ class Russia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
|
|
|
47
47
|
else:
|
|
48
48
|
# New Year Holidays.
|
|
49
49
|
name = tr("Новогодние каникулы")
|
|
50
|
-
|
|
51
|
-
self._add_holiday(name, JAN, day)
|
|
50
|
+
self._add_multiday_holiday(self._add_new_years_day(name), 4)
|
|
52
51
|
if self._year >= 2013:
|
|
53
52
|
self._add_holiday_jan_6(name)
|
|
54
53
|
self._add_holiday_jan_8(name)
|
holidays/countries/sweden.py
CHANGED
|
@@ -10,9 +10,17 @@
|
|
|
10
10
|
# Website: https://github.com/vacanza/holidays
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
|
+
from datetime import date
|
|
13
14
|
from gettext import gettext as tr
|
|
14
15
|
|
|
15
|
-
from holidays.calendars.gregorian import
|
|
16
|
+
from holidays.calendars.gregorian import (
|
|
17
|
+
MAR,
|
|
18
|
+
SUN,
|
|
19
|
+
_get_all_sundays,
|
|
20
|
+
_get_nth_weekday_from,
|
|
21
|
+
_timedelta,
|
|
22
|
+
)
|
|
23
|
+
from holidays.constants import BANK, OPTIONAL, PUBLIC
|
|
16
24
|
from holidays.groups import ChristianHolidays, InternationalHolidays
|
|
17
25
|
from holidays.holiday_base import HolidayBase
|
|
18
26
|
|
|
@@ -22,21 +30,25 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
22
30
|
|
|
23
31
|
References:
|
|
24
32
|
* <https://sv.wikipedia.org/wiki/Helgdagar_i_Sverige>
|
|
25
|
-
* <https://
|
|
33
|
+
* <https://en.wikipedia.org/wiki/Public_holidays_in_Sweden>
|
|
34
|
+
* [Act 1952:48](https://web.archive.org/web/20250518071409/https://blogs.loc.gov/law/2023/06/midsommar-becomes-weekend-holiday-in-sweden-in-1953-pic-of-the-week/)
|
|
35
|
+
* [Act 1989:253](https://web.archive.org/web/20250414065223/https://www.riksdagen.se/sv/dokument-lagar/dokument/svensk-forfattningssamling/lag-1989253-om-allmanna-helgdagar_sfs-1989-253)
|
|
26
36
|
* <https://sv.wikipedia.org/wiki/Första_maj>
|
|
27
37
|
* <https://sv.wikipedia.org/wiki/Sveriges_nationaldag>
|
|
28
38
|
* <https://sv.wikipedia.org/wiki/Midsommarafton>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Note that holidays falling on a sunday is "lost", it will not be moved
|
|
32
|
-
to another day to make up for the collision.
|
|
39
|
+
* [Bank Holidays 2025](https://web.archive.org/web/20250811112642/https://www.riksbank.se/sv/press-och-publicerat/kalender/helgdagar-2025/)
|
|
33
40
|
|
|
34
41
|
In Sweden, ALL sundays are considered a holiday.
|
|
35
42
|
Initialize this class with `include_sundays=False` to not include sundays as a holiday.
|
|
36
43
|
"""
|
|
37
44
|
|
|
45
|
+
# %s (from 2pm).
|
|
46
|
+
begin_time_label = tr("%s (från kl. 14.00)")
|
|
38
47
|
country = "SE"
|
|
39
48
|
default_language = "sv"
|
|
49
|
+
# Act 1952:48.
|
|
50
|
+
start_year = 1953
|
|
51
|
+
supported_categories = (BANK, OPTIONAL, PUBLIC)
|
|
40
52
|
supported_languages = ("en_US", "sv", "th", "uk")
|
|
41
53
|
|
|
42
54
|
def __init__(self, *args, include_sundays: bool = True, **kwargs):
|
|
@@ -57,9 +69,18 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
57
69
|
# Epiphany.
|
|
58
70
|
self._add_epiphany_day(tr("Trettondedag jul"))
|
|
59
71
|
|
|
60
|
-
if self._year <=
|
|
61
|
-
# Feast of the Annunciation
|
|
62
|
-
|
|
72
|
+
if self._year <= 1989:
|
|
73
|
+
# According to Act 1952:48, Feast of the Annunciation is
|
|
74
|
+
# "on the Sunday between March 22 and 28 or, if this Sunday is Palm Sunday
|
|
75
|
+
# or Easter Sunday, on the Sunday before Palm Sunday".
|
|
76
|
+
dt = _get_nth_weekday_from(1, SUN, date(self._year, MAR, 22))
|
|
77
|
+
self._add_holiday(
|
|
78
|
+
# Feast of the Annunciation.
|
|
79
|
+
tr("Marie bebådelsedag"),
|
|
80
|
+
_timedelta(self._easter_sunday, -14)
|
|
81
|
+
if dt == _timedelta(self._easter_sunday, -7) or dt == self._easter_sunday
|
|
82
|
+
else dt,
|
|
83
|
+
)
|
|
63
84
|
|
|
64
85
|
# Good Friday.
|
|
65
86
|
self._add_good_friday(tr("Långfredagen"))
|
|
@@ -70,16 +91,15 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
70
91
|
# Easter Monday.
|
|
71
92
|
self._add_easter_monday(tr("Annandag påsk"))
|
|
72
93
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
self._add_labor_day(tr("Första maj"))
|
|
94
|
+
# May Day.
|
|
95
|
+
self._add_labor_day(tr("Första maj"))
|
|
76
96
|
|
|
77
97
|
# Ascension Day.
|
|
78
98
|
self._add_ascension_thursday(tr("Kristi himmelsfärdsdag"))
|
|
79
99
|
|
|
80
100
|
if self._year >= 2005:
|
|
81
|
-
# National Day
|
|
82
|
-
self._add_holiday_jun_6(tr("
|
|
101
|
+
# National Day.
|
|
102
|
+
self._add_holiday_jun_6(tr("Nationaldagen"))
|
|
83
103
|
|
|
84
104
|
# Whit Sunday.
|
|
85
105
|
self._add_whit_sunday(tr("Pingstdagen"))
|
|
@@ -88,23 +108,11 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
88
108
|
# Whit Monday.
|
|
89
109
|
self._add_whit_monday(tr("Annandag pingst"))
|
|
90
110
|
|
|
91
|
-
# Midsummer Eve.
|
|
92
|
-
name = tr("Midsommarafton")
|
|
93
|
-
dt = (
|
|
94
|
-
self._add_holiday_1st_fri_from_jun_19(name)
|
|
95
|
-
if self._year >= 1953
|
|
96
|
-
else self._add_holiday_jun_23(name)
|
|
97
|
-
)
|
|
98
|
-
|
|
99
111
|
# Midsummer Day.
|
|
100
|
-
self.
|
|
112
|
+
self._add_holiday_1st_sat_from_jun_20(tr("Midsommardagen"))
|
|
101
113
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
self._add_holiday_1st_sat_from_oct_31(tr("Alla helgons dag"))
|
|
105
|
-
|
|
106
|
-
# Christmas Eve.
|
|
107
|
-
self._add_christmas_eve(tr("Julafton"))
|
|
114
|
+
# All Saints' Day.
|
|
115
|
+
self._add_holiday_1st_sat_from_oct_31(tr("Alla helgons dag"))
|
|
108
116
|
|
|
109
117
|
# Christmas Day.
|
|
110
118
|
self._add_christmas_day(tr("Juldagen"))
|
|
@@ -112,15 +120,77 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
112
120
|
# Second Day of Christmas.
|
|
113
121
|
self._add_christmas_day_two(tr("Annandag jul"))
|
|
114
122
|
|
|
115
|
-
# New Year's Eve.
|
|
116
|
-
self._add_new_years_eve(tr("Nyårsafton"))
|
|
117
|
-
|
|
118
123
|
# Optionally add all Sundays of the year.
|
|
119
124
|
if self.include_sundays:
|
|
120
125
|
for dt in _get_all_sundays(self._year):
|
|
121
126
|
# Sunday.
|
|
122
127
|
self._add_holiday(tr("Söndag"), dt)
|
|
123
128
|
|
|
129
|
+
def _populate_common(self):
|
|
130
|
+
"""Populate holidays that are both optional and bank holidays."""
|
|
131
|
+
|
|
132
|
+
# Twelfth Night.
|
|
133
|
+
self._add_holiday_jan_5(self.tr(self.begin_time_label) % self.tr("Trettondagsafton"))
|
|
134
|
+
|
|
135
|
+
# Maundy Thursday.
|
|
136
|
+
self._add_holy_thursday(self.tr(self.begin_time_label) % self.tr("Skärtorsdagen"))
|
|
137
|
+
|
|
138
|
+
# Walpurgis Night.
|
|
139
|
+
self._add_holiday_apr_30(self.tr(self.begin_time_label) % self.tr("Valborgsmässoafton"))
|
|
140
|
+
|
|
141
|
+
# Midsummer Eve.
|
|
142
|
+
self._add_holiday_1st_fri_from_jun_19(tr("Midsommarafton"))
|
|
143
|
+
|
|
144
|
+
self._add_holiday_1st_fri_from_oct_30(
|
|
145
|
+
# All Saints' Eve.
|
|
146
|
+
self.tr(self.begin_time_label) % self.tr("Allahelgonsafton")
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
# Christmas Eve.
|
|
150
|
+
self._add_christmas_eve(tr("Julafton"))
|
|
151
|
+
|
|
152
|
+
# New Year's Eve.
|
|
153
|
+
self._add_new_years_eve(tr("Nyårsafton"))
|
|
154
|
+
|
|
155
|
+
def _populate_bank_holidays(self):
|
|
156
|
+
self._populate_common()
|
|
157
|
+
|
|
158
|
+
self._add_holiday_38_days_past_easter(
|
|
159
|
+
# Day before Ascension Day.
|
|
160
|
+
self.tr(self.begin_time_label) % self.tr("Dag före Kristi himmelsfärdsdag")
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
self._add_holiday_1st_thu_from_jun_18(
|
|
164
|
+
# Day before Midsummer Eve.
|
|
165
|
+
self.tr(self.begin_time_label) % self.tr("Dag före Midsommarafton")
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
self._add_holiday_47_days_past_easter(
|
|
169
|
+
# Day before Whitsun Eve.
|
|
170
|
+
self.tr(self.begin_time_label) % self.tr("Dag före Pingstafton")
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
# Day before Christmas Eve.
|
|
174
|
+
self._add_holiday_dec_23(self.tr(self.begin_time_label) % self.tr("Dag före Julafton"))
|
|
175
|
+
|
|
176
|
+
# Day before New Year's Eve.
|
|
177
|
+
self._add_holiday_dec_30(self.tr(self.begin_time_label) % self.tr("Dag före Nyårsafton"))
|
|
178
|
+
|
|
179
|
+
def _populate_optional_holidays(self):
|
|
180
|
+
self._populate_common()
|
|
181
|
+
|
|
182
|
+
# Holy Saturday.
|
|
183
|
+
self._add_holy_saturday(tr("Påskafton"))
|
|
184
|
+
|
|
185
|
+
# Days between a holiday and a weekend are in Swedish called "klämdagar" (squeeze days).
|
|
186
|
+
# There is one permanent "klämdag" every year - Friday after Ascension Day.
|
|
187
|
+
|
|
188
|
+
# Squeeze day.
|
|
189
|
+
self._add_holiday_40_days_past_easter(tr("Klämdag"))
|
|
190
|
+
|
|
191
|
+
# Whitsun Eve.
|
|
192
|
+
self._add_holiday_48_days_past_easter(tr("Pingstafton"))
|
|
193
|
+
|
|
124
194
|
|
|
125
195
|
class SE(Sweden):
|
|
126
196
|
pass
|
holidays/countries/taiwan.py
CHANGED
|
@@ -32,7 +32,6 @@ from holidays.calendars.gregorian import (
|
|
|
32
32
|
FRI,
|
|
33
33
|
SAT,
|
|
34
34
|
SUN,
|
|
35
|
-
_get_nth_weekday_of_month,
|
|
36
35
|
)
|
|
37
36
|
from holidays.constants import GOVERNMENT, OPTIONAL, PUBLIC, SCHOOL, WORKDAY
|
|
38
37
|
from holidays.groups import ChineseCalendarHolidays, InternationalHolidays, StaticHolidays
|
|
@@ -101,10 +100,8 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
|
|
|
101
100
|
if dt.year <= 2000:
|
|
102
101
|
weekend = {SUN}
|
|
103
102
|
if dt.weekday() == SAT:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
_get_nth_weekday_of_month(4, SAT, dt.month, dt.year), # 4th Saturday.
|
|
107
|
-
}:
|
|
103
|
+
nth_saturday = (dt.day - 1) // 7 + 1 # Saturday number in the month.
|
|
104
|
+
if nth_saturday in {2, 4}:
|
|
108
105
|
weekend.add(SAT)
|
|
109
106
|
else:
|
|
110
107
|
weekend = {SAT, SUN}
|
|
@@ -348,7 +345,7 @@ class TaiwanStaticHolidays:
|
|
|
348
345
|
substituted_date_format = tr("%Y-%m-%d")
|
|
349
346
|
|
|
350
347
|
# Day off (substituted from %s).
|
|
351
|
-
substituted_label = tr("
|
|
348
|
+
substituted_label = tr("放假日(%s 補班)")
|
|
352
349
|
|
|
353
350
|
# Women's Day.
|
|
354
351
|
womens_day = tr("婦女節")
|
holidays/countries/thailand.py
CHANGED
|
@@ -322,11 +322,11 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
|
|
|
322
322
|
if self._year <= 1937:
|
|
323
323
|
self._add_holiday_apr_3(name)
|
|
324
324
|
elif self._year <= 1925:
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
325
|
+
self._add_multiday_holiday(
|
|
326
|
+
# Songkran New Year Holidays.
|
|
327
|
+
self._add_holiday_mar_28(tr("พระราชพิธีตะรุษะสงกรานต์ แลนักขัตฤกษ์")),
|
|
328
|
+
18,
|
|
329
|
+
)
|
|
330
330
|
else:
|
|
331
331
|
dt = self._add_holiday_apr_13(name)
|
|
332
332
|
self._add_holiday_apr_14(name)
|
holidays/holiday_base.py
CHANGED
|
@@ -46,6 +46,7 @@ from holidays.helpers import _normalize_arguments, _normalize_tuple
|
|
|
46
46
|
CategoryArg = str | Iterable[str]
|
|
47
47
|
DateArg = date | tuple[int, int] | tuple[int, int, int]
|
|
48
48
|
DateLike = date | datetime | str | float | int
|
|
49
|
+
NameLookup = Literal["contains", "exact", "startswith", "icontains", "iexact", "istartswith"]
|
|
49
50
|
SpecialHoliday = tuple[int, int, str] | tuple[tuple[int, int, str], ...]
|
|
50
51
|
SubstitutedHoliday = (
|
|
51
52
|
tuple[int, int, int, int]
|
|
@@ -558,27 +559,25 @@ class HolidayBase(dict[date, str]):
|
|
|
558
559
|
|
|
559
560
|
if key.step is None:
|
|
560
561
|
step = 1
|
|
561
|
-
elif isinstance(key.step, timedelta):
|
|
562
|
-
step = key.step.days
|
|
563
562
|
elif isinstance(key.step, int):
|
|
564
563
|
step = key.step
|
|
564
|
+
elif isinstance(key.step, timedelta):
|
|
565
|
+
step = key.step.days
|
|
565
566
|
else:
|
|
566
567
|
raise TypeError(f"Cannot convert type '{type(key.step)}' to int.")
|
|
567
568
|
|
|
568
569
|
if step == 0:
|
|
569
570
|
raise ValueError("Step value must not be zero.")
|
|
570
571
|
|
|
571
|
-
|
|
572
|
-
if
|
|
573
|
-
step
|
|
574
|
-
|
|
575
|
-
days_in_range = []
|
|
576
|
-
for delta_days in range(0, date_diff.days, step):
|
|
577
|
-
day = _timedelta(start, delta_days)
|
|
578
|
-
if day in self:
|
|
579
|
-
days_in_range.append(day)
|
|
572
|
+
diff_days = (stop - start).days
|
|
573
|
+
if diff_days < 0 <= step or diff_days >= 0 > step:
|
|
574
|
+
step = -step
|
|
580
575
|
|
|
581
|
-
return
|
|
576
|
+
return [
|
|
577
|
+
day
|
|
578
|
+
for delta_days in range(0, diff_days, step)
|
|
579
|
+
if (day := _timedelta(start, delta_days)) in self
|
|
580
|
+
]
|
|
582
581
|
|
|
583
582
|
return dict.__getitem__(self, self.__keytransform__(key))
|
|
584
583
|
|
|
@@ -670,19 +669,14 @@ class HolidayBase(dict[date, str]):
|
|
|
670
669
|
if self:
|
|
671
670
|
return super().__repr__()
|
|
672
671
|
|
|
673
|
-
parts = []
|
|
674
672
|
if hasattr(self, "market"):
|
|
675
|
-
|
|
676
|
-
parts.append(")")
|
|
673
|
+
return f"holidays.financial_holidays({self.market!r})"
|
|
677
674
|
elif hasattr(self, "country"):
|
|
678
|
-
parts.append(f"holidays.country_holidays({self.country!r}")
|
|
679
675
|
if self.subdiv:
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
else:
|
|
683
|
-
parts.append("holidays.HolidayBase()")
|
|
676
|
+
return f"holidays.country_holidays({self.country!r}, subdiv={self.subdiv!r})"
|
|
677
|
+
return f"holidays.country_holidays({self.country!r})"
|
|
684
678
|
|
|
685
|
-
return "
|
|
679
|
+
return "holidays.HolidayBase()"
|
|
686
680
|
|
|
687
681
|
def __setattr__(self, key: str, value: Any) -> None:
|
|
688
682
|
dict.__setattr__(self, key, value)
|
|
@@ -809,6 +803,37 @@ class HolidayBase(dict[date, str]):
|
|
|
809
803
|
self[dt] = self.tr(name)
|
|
810
804
|
return dt
|
|
811
805
|
|
|
806
|
+
def _add_multiday_holiday(
|
|
807
|
+
self, start_date: date, duration_days: int, *, name: str | None = None
|
|
808
|
+
) -> set[date]:
|
|
809
|
+
"""Add a multi-day holiday.
|
|
810
|
+
|
|
811
|
+
Args:
|
|
812
|
+
start_date:
|
|
813
|
+
First day of the holiday.
|
|
814
|
+
|
|
815
|
+
duration_days:
|
|
816
|
+
Number of additional days to add.
|
|
817
|
+
|
|
818
|
+
name:
|
|
819
|
+
Optional holiday name; inferred from `start_date` if omitted.
|
|
820
|
+
|
|
821
|
+
Returns:
|
|
822
|
+
A set of all added holiday dates.
|
|
823
|
+
|
|
824
|
+
Raises:
|
|
825
|
+
ValueError:
|
|
826
|
+
If the holiday name cannot be inferred from `start_date`.
|
|
827
|
+
"""
|
|
828
|
+
if (holiday_name := name or self.get(start_date)) is None:
|
|
829
|
+
raise ValueError(f"Cannot infer holiday name for date {start_date!r}.")
|
|
830
|
+
|
|
831
|
+
return {
|
|
832
|
+
d
|
|
833
|
+
for delta in range(1, duration_days + 1)
|
|
834
|
+
if (d := self._add_holiday(holiday_name, _timedelta(start_date, delta)))
|
|
835
|
+
}
|
|
836
|
+
|
|
812
837
|
def _add_special_holidays(self, mapping_names, *, observed=False):
|
|
813
838
|
"""Add special holidays."""
|
|
814
839
|
for mapping_name in mapping_names:
|
|
@@ -997,7 +1022,10 @@ class HolidayBase(dict[date, str]):
|
|
|
997
1022
|
return [name for name in self.get(key, "").split(HOLIDAY_NAME_DELIMITER) if name]
|
|
998
1023
|
|
|
999
1024
|
def get_named(
|
|
1000
|
-
self,
|
|
1025
|
+
self,
|
|
1026
|
+
holiday_name: str,
|
|
1027
|
+
lookup: NameLookup = "icontains",
|
|
1028
|
+
split_multiple_names: bool = True,
|
|
1001
1029
|
) -> list[date]:
|
|
1002
1030
|
"""Find all holiday dates matching a given name.
|
|
1003
1031
|
|
|
@@ -1202,7 +1230,7 @@ class HolidayBase(dict[date, str]):
|
|
|
1202
1230
|
|
|
1203
1231
|
return dict.pop(self, self.__keytransform__(key), default)
|
|
1204
1232
|
|
|
1205
|
-
def pop_named(self, holiday_name: str, lookup:
|
|
1233
|
+
def pop_named(self, holiday_name: str, lookup: NameLookup = "icontains") -> list[date]:
|
|
1206
1234
|
"""Remove all holidays matching the given name.
|
|
1207
1235
|
|
|
1208
1236
|
This method removes all dates associated with a holiday name, so they are
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|