holidays 0.77__py3-none-any.whl → 0.78__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/calendars/islamic.py +32 -1
- holidays/countries/__init__.py +1 -0
- holidays/countries/egypt.py +203 -47
- holidays/countries/germany.py +41 -0
- holidays/countries/indonesia.py +5 -2
- holidays/countries/luxembourg.py +13 -0
- holidays/countries/pakistan.py +7 -5
- holidays/countries/pitcairn_islands.py +85 -0
- holidays/countries/saudi_arabia.py +43 -35
- holidays/groups/islamic.py +0 -10
- holidays/holiday_base.py +72 -91
- holidays/locale/{ar → ar_EG}/LC_MESSAGES/EG.mo +0 -0
- holidays/locale/de/LC_MESSAGES/DE.mo +0 -0
- holidays/locale/de/LC_MESSAGES/LU.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/DE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/EG.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LU.mo +0 -0
- holidays/locale/fr/LC_MESSAGES/EG.mo +0 -0
- holidays/locale/fr/LC_MESSAGES/LU.mo +0 -0
- holidays/locale/lb/LC_MESSAGES/LU.mo +0 -0
- holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/DE.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/LU.mo +0 -0
- holidays/registry.py +1 -0
- holidays/utils.py +18 -18
- holidays/version.py +1 -1
- {holidays-0.77.dist-info → holidays-0.78.dist-info}/METADATA +13 -6
- {holidays-0.77.dist-info → holidays-0.78.dist-info}/RECORD +32 -30
- {holidays-0.77.dist-info → holidays-0.78.dist-info}/licenses/CONTRIBUTORS +1 -0
- {holidays-0.77.dist-info → holidays-0.78.dist-info}/WHEEL +0 -0
- {holidays-0.77.dist-info → holidays-0.78.dist-info}/licenses/LICENSE +0 -0
- {holidays-0.77.dist-info → holidays-0.78.dist-info}/top_level.txt +0 -0
holidays/calendars/islamic.py
CHANGED
|
@@ -14,7 +14,21 @@ from collections.abc import Iterable
|
|
|
14
14
|
from datetime import date
|
|
15
15
|
|
|
16
16
|
from holidays.calendars.custom import _CustomCalendar
|
|
17
|
-
from holidays.calendars.gregorian import
|
|
17
|
+
from holidays.calendars.gregorian import (
|
|
18
|
+
JAN,
|
|
19
|
+
FEB,
|
|
20
|
+
MAR,
|
|
21
|
+
APR,
|
|
22
|
+
MAY,
|
|
23
|
+
JUN,
|
|
24
|
+
JUL,
|
|
25
|
+
AUG,
|
|
26
|
+
SEP,
|
|
27
|
+
OCT,
|
|
28
|
+
NOV,
|
|
29
|
+
DEC,
|
|
30
|
+
_timedelta,
|
|
31
|
+
)
|
|
18
32
|
from holidays.helpers import _normalize_tuple
|
|
19
33
|
|
|
20
34
|
ALI_AL_RIDA_DEATH = "ALI_AL_RIDA_DEATH"
|
|
@@ -3963,6 +3977,23 @@ class _IslamicLunar:
|
|
|
3963
3977
|
for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))):
|
|
3964
3978
|
yield date(year, *dt), year not in exact_dates
|
|
3965
3979
|
|
|
3980
|
+
def _is_long_ramadan(self, eid_al_fitr: date) -> bool:
|
|
3981
|
+
"""Check whether the Ramadan preceding the given Eid al-Fitr date lasted 30 days.
|
|
3982
|
+
|
|
3983
|
+
Args:
|
|
3984
|
+
eid_al_fitr:
|
|
3985
|
+
The date of Eid al-Fitr.
|
|
3986
|
+
|
|
3987
|
+
Returns:
|
|
3988
|
+
True if Ramadan lasted 30 days, False otherwise.
|
|
3989
|
+
"""
|
|
3990
|
+
eid_al_fitr_year = eid_al_fitr.year
|
|
3991
|
+
return _timedelta(eid_al_fitr, -30) in {
|
|
3992
|
+
dt
|
|
3993
|
+
for year in (eid_al_fitr_year - 1, eid_al_fitr_year)
|
|
3994
|
+
for (dt, _) in self.ramadan_beginning_dates(year)
|
|
3995
|
+
}
|
|
3996
|
+
|
|
3966
3997
|
def ali_al_rida_death_dates(self, year: int) -> Iterable[tuple[date, bool]]:
|
|
3967
3998
|
return self._get_holiday(ALI_AL_RIDA_DEATH, year)
|
|
3968
3999
|
|
holidays/countries/__init__.py
CHANGED
|
@@ -178,6 +178,7 @@ from holidays.countries.papua_new_guinea import PapuaNewGuinea, PG, PNG
|
|
|
178
178
|
from holidays.countries.paraguay import Paraguay, PY, PRY
|
|
179
179
|
from holidays.countries.peru import Peru, PE, PER
|
|
180
180
|
from holidays.countries.philippines import Philippines, PH, PHL
|
|
181
|
+
from holidays.countries.pitcairn_islands import PitcairnIslands, PN, PCN
|
|
181
182
|
from holidays.countries.poland import Poland, PL, POL
|
|
182
183
|
from holidays.countries.portugal import Portugal, PT, PRT
|
|
183
184
|
from holidays.countries.puerto_rico import PuertoRico, PR, PRI, HolidaysPR
|
holidays/countries/egypt.py
CHANGED
|
@@ -12,20 +12,63 @@
|
|
|
12
12
|
|
|
13
13
|
from gettext import gettext as tr
|
|
14
14
|
|
|
15
|
-
from holidays.calendars
|
|
15
|
+
from holidays.calendars import _CustomIslamicHolidays
|
|
16
|
+
from holidays.calendars.gregorian import (
|
|
17
|
+
JAN,
|
|
18
|
+
MAR,
|
|
19
|
+
APR,
|
|
20
|
+
MAY,
|
|
21
|
+
JUN,
|
|
22
|
+
JUL,
|
|
23
|
+
AUG,
|
|
24
|
+
SEP,
|
|
25
|
+
OCT,
|
|
26
|
+
MON,
|
|
27
|
+
TUE,
|
|
28
|
+
WED,
|
|
29
|
+
FRI,
|
|
30
|
+
SAT,
|
|
31
|
+
SUN,
|
|
32
|
+
)
|
|
16
33
|
from holidays.calendars.julian import JULIAN_CALENDAR
|
|
17
|
-
from holidays.
|
|
18
|
-
from holidays.
|
|
34
|
+
from holidays.constants import GOVERNMENT, PUBLIC, SCHOOL
|
|
35
|
+
from holidays.groups import (
|
|
36
|
+
ChristianHolidays,
|
|
37
|
+
IslamicHolidays,
|
|
38
|
+
InternationalHolidays,
|
|
39
|
+
StaticHolidays,
|
|
40
|
+
)
|
|
41
|
+
from holidays.observed_holiday_base import ObservedHolidayBase, ObservedRule
|
|
19
42
|
|
|
43
|
+
EG_OBSERVED_RULE = ObservedRule({MON: +3, TUE: +2, WED: +1, SUN: +4})
|
|
20
44
|
|
|
21
|
-
|
|
22
|
-
|
|
45
|
+
|
|
46
|
+
class Egypt(
|
|
47
|
+
ObservedHolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays, StaticHolidays
|
|
48
|
+
):
|
|
49
|
+
"""Egypt holidays.
|
|
50
|
+
|
|
51
|
+
References:
|
|
52
|
+
* <https://ar.wikipedia.org/wiki/قائمة_العطل_الرسمية_في_مصر>
|
|
53
|
+
* <https://en.wikipedia.org/wiki/Public_holidays_in_Egypt>
|
|
54
|
+
* [National Holidays (Arabic)](https://web.archive.org/web/20250614072551/https://www.presidency.eg/ar/مصر/العطلات-الرسمية/)
|
|
55
|
+
* [National Holidays (English)](https://web.archive.org/web/20250529043734/https://www.presidency.eg/en/مصر/العطلات-الرسمية/)
|
|
56
|
+
* [National Holidays (French)](https://web.archive.org/web/20250608173134/https://www.presidency.eg/fr/مصر/العطلات-الرسمية/)
|
|
57
|
+
* [Ministerial Decision 1193](https://web.archive.org/web/20250423073350/https://manshurat.org/node/44922)
|
|
58
|
+
"""
|
|
23
59
|
|
|
24
60
|
country = "EG"
|
|
25
|
-
default_language = "
|
|
61
|
+
default_language = "ar_EG"
|
|
26
62
|
# %s (estimated).
|
|
27
63
|
estimated_label = tr("%s (المقدرة)")
|
|
28
|
-
|
|
64
|
+
# %s (observed).
|
|
65
|
+
observed_label = tr("%s (ملاحظة)")
|
|
66
|
+
# %s (observed, estimated).
|
|
67
|
+
observed_estimated_label = tr("%s (المقدرة، ملاحظة)")
|
|
68
|
+
# Republic of Egypt was declared on 18 June 1953.
|
|
69
|
+
start_year = 1954
|
|
70
|
+
supported_categories = (GOVERNMENT, PUBLIC, SCHOOL)
|
|
71
|
+
supported_languages = ("ar_EG", "en_US", "fr")
|
|
29
72
|
weekend = {FRI, SAT}
|
|
30
73
|
|
|
31
74
|
def __init__(self, *args, islamic_show_estimated: bool = True, **kwargs):
|
|
@@ -37,67 +80,98 @@ class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolida
|
|
|
37
80
|
"""
|
|
38
81
|
ChristianHolidays.__init__(self, JULIAN_CALENDAR)
|
|
39
82
|
InternationalHolidays.__init__(self)
|
|
40
|
-
IslamicHolidays.__init__(
|
|
83
|
+
IslamicHolidays.__init__(
|
|
84
|
+
self, cls=EgyptIslamicHolidays, show_estimated=islamic_show_estimated
|
|
85
|
+
)
|
|
86
|
+
StaticHolidays.__init__(self, cls=EgyptStaticHolidays)
|
|
87
|
+
kwargs.setdefault("observed_rule", EG_OBSERVED_RULE)
|
|
88
|
+
kwargs.setdefault("observed_since", 2020)
|
|
41
89
|
super().__init__(*args, **kwargs)
|
|
42
90
|
|
|
43
91
|
def _populate_public_holidays(self):
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
# Coptic Christmas Day.
|
|
48
|
-
self._add_christmas_day(tr("عيد الميلاد المجيد (تقويم قبطي)"))
|
|
92
|
+
if self._year >= 2002 and self._year not in {2022, 2023}:
|
|
93
|
+
# Coptic Christmas Day.
|
|
94
|
+
self._add_christmas_day(tr("عيد الميلاد المجيد"))
|
|
49
95
|
|
|
50
|
-
if self._year >=
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
96
|
+
if self._year >= 2009:
|
|
97
|
+
self._move_holiday(
|
|
98
|
+
self._add_holiday_jan_25(
|
|
99
|
+
# January 25th Revolution and National Police Day.
|
|
100
|
+
tr("ثورة ٢٥ يناير وعيد الشرطة")
|
|
101
|
+
if self._year >= 2012
|
|
102
|
+
# National Police Day.
|
|
103
|
+
else tr("عيد الشرطة")
|
|
104
|
+
)
|
|
105
|
+
)
|
|
56
106
|
|
|
57
|
-
|
|
58
|
-
|
|
107
|
+
if self._year >= 1983:
|
|
108
|
+
# Sinai Liberation Day.
|
|
109
|
+
dt = self._add_holiday_apr_25(tr("عيد تحرير سيناء"))
|
|
110
|
+
if self._year != 2022:
|
|
111
|
+
self._move_holiday(dt)
|
|
59
112
|
|
|
60
113
|
# Spring Festival.
|
|
61
|
-
self._add_easter_monday(tr("شم النسيم"))
|
|
62
|
-
|
|
63
|
-
if self._year > 1982:
|
|
64
|
-
# Sinai Liberation Day.
|
|
65
|
-
self._add_holiday_apr_25(tr("عيد تحرير سيناء"))
|
|
114
|
+
self._add_easter_monday(tr("عيد شم النسيم"))
|
|
66
115
|
|
|
67
116
|
# Labor Day.
|
|
68
|
-
self.
|
|
69
|
-
|
|
70
|
-
# Armed Forces Day.
|
|
71
|
-
self._add_holiday_oct_6(tr("عيد القوات المسلحة"))
|
|
117
|
+
if self._year != 2024:
|
|
118
|
+
self._move_holiday(self._add_labor_day(tr("عيد العمال")))
|
|
72
119
|
|
|
73
120
|
if self._year >= 2014:
|
|
74
121
|
# June 30 Revolution Day.
|
|
75
|
-
self._add_holiday_jun_30(tr("عيد ثورة
|
|
122
|
+
dt = self._add_holiday_jun_30(tr("عيد ثورة ٣٠ يونيو"))
|
|
123
|
+
if self._year != 2024:
|
|
124
|
+
self._move_holiday(dt)
|
|
76
125
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
126
|
+
# July 23 Revolution Day.
|
|
127
|
+
dt = self._add_holiday_jul_23(tr("عيد ثورة ٢٣ يوليو"))
|
|
128
|
+
if self._year != 2023:
|
|
129
|
+
self._move_holiday(dt)
|
|
130
|
+
|
|
131
|
+
# Armed Forces Day.
|
|
132
|
+
dt = self._add_holiday_oct_6(tr("عيد القوات المسلحة"))
|
|
133
|
+
if self._year != 2024:
|
|
134
|
+
self._move_holiday(dt)
|
|
135
|
+
|
|
136
|
+
# Islamic New Year.
|
|
137
|
+
for dt in self._add_islamic_new_year_day(tr("رأس السنة الهجرية")):
|
|
138
|
+
self._move_holiday(dt)
|
|
139
|
+
|
|
140
|
+
# Prophet's Birthday.
|
|
141
|
+
self._add_mawlid_day(tr("المولد النبوي الشريف"))
|
|
80
142
|
|
|
81
143
|
# Eid al-Fitr.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
self._add_eid_al_fitr_day_two(
|
|
85
|
-
self._add_eid_al_fitr_day_three(tr("عطلة عيد الفطر"))
|
|
144
|
+
name = tr("عيد الفطر المبارك")
|
|
145
|
+
self._add_eid_al_fitr_day(name)
|
|
146
|
+
self._add_eid_al_fitr_day_two(name)
|
|
86
147
|
|
|
87
148
|
# Arafat Day.
|
|
88
|
-
self._add_arafah_day(tr("
|
|
149
|
+
self._add_arafah_day(tr("وقفة عيد الأضحى المبارك"))
|
|
89
150
|
|
|
90
151
|
# Eid al-Adha.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
self._add_eid_al_adha_day_two(
|
|
94
|
-
self._add_eid_al_adha_day_three(
|
|
152
|
+
name = tr("عيد الأضحى المبارك")
|
|
153
|
+
self._add_eid_al_adha_day(name)
|
|
154
|
+
self._add_eid_al_adha_day_two(name)
|
|
155
|
+
self._add_eid_al_adha_day_three(name)
|
|
95
156
|
|
|
96
|
-
|
|
97
|
-
self.
|
|
157
|
+
def _populate_government_holidays(self):
|
|
158
|
+
if self._year >= 2019:
|
|
159
|
+
# Eid al-Fitr.
|
|
160
|
+
name = tr("عيد الفطر المبارك")
|
|
161
|
+
self._add_eid_al_fitr_eve(name)
|
|
162
|
+
self._add_eid_al_fitr_day_three(name)
|
|
98
163
|
|
|
99
|
-
|
|
100
|
-
|
|
164
|
+
if self._year >= 2018:
|
|
165
|
+
# Eid al-Adha.
|
|
166
|
+
self._add_eid_al_adha_day_four(tr("عيد الأضحى المبارك"))
|
|
167
|
+
|
|
168
|
+
def _populate_school_holidays(self):
|
|
169
|
+
if self._year >= 2019:
|
|
170
|
+
# Taba Liberation Day.
|
|
171
|
+
self._add_holiday_mar_19(tr("عيد تحرير طابا"))
|
|
172
|
+
|
|
173
|
+
# Evacuation Day.
|
|
174
|
+
self._add_holiday_jun_18(tr("عيد الجلاء"))
|
|
101
175
|
|
|
102
176
|
|
|
103
177
|
class EG(Egypt):
|
|
@@ -106,3 +180,85 @@ class EG(Egypt):
|
|
|
106
180
|
|
|
107
181
|
class EGY(Egypt):
|
|
108
182
|
pass
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
class EgyptIslamicHolidays(_CustomIslamicHolidays):
|
|
186
|
+
EID_AL_ADHA_DATES = {
|
|
187
|
+
2020: (JUL, 31),
|
|
188
|
+
2021: (JUL, 20),
|
|
189
|
+
2022: (JUL, 10),
|
|
190
|
+
2023: (JUN, 28),
|
|
191
|
+
2024: (JUN, 16),
|
|
192
|
+
2025: (JUN, 6),
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
EID_AL_FITR_DATES = {
|
|
196
|
+
2020: (MAY, 24),
|
|
197
|
+
2021: (MAY, 13),
|
|
198
|
+
2022: (MAY, 1),
|
|
199
|
+
2023: (APR, 21),
|
|
200
|
+
2024: (APR, 10),
|
|
201
|
+
2025: (MAR, 30),
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
HIJRI_NEW_YEAR_DATES = {
|
|
205
|
+
2020: (AUG, 20),
|
|
206
|
+
2021: (AUG, 11),
|
|
207
|
+
2022: (JUL, 30),
|
|
208
|
+
2023: (JUL, 19),
|
|
209
|
+
2024: (JUL, 7),
|
|
210
|
+
2025: (JUN, 26),
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
MAWLID_DATES = {
|
|
214
|
+
2020: (OCT, 29),
|
|
215
|
+
2021: (OCT, 18),
|
|
216
|
+
2022: (OCT, 8),
|
|
217
|
+
2023: (SEP, 28),
|
|
218
|
+
2024: (SEP, 15),
|
|
219
|
+
2025: (SEP, 4),
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
class EgyptStaticHolidays:
|
|
224
|
+
"""Egypt special holidays.
|
|
225
|
+
|
|
226
|
+
References:
|
|
227
|
+
* [2022 Coptic Christmas](https://web.archive.org/web/20240227004025/https://english.ahram.org.eg/NewsContent/1/2/454491/Egypt/Society/Thursday-paid-day-off-at-public-sector-in-Egypt-fo.aspx)
|
|
228
|
+
"""
|
|
229
|
+
|
|
230
|
+
# Coptic Christmas Day.
|
|
231
|
+
coptic_christmas_day = tr("عيد الميلاد المجيد")
|
|
232
|
+
|
|
233
|
+
# Eid al-Adha.
|
|
234
|
+
eid_al_adha = tr("عيد الأضحى المبارك")
|
|
235
|
+
|
|
236
|
+
# Eid al-Fitr.
|
|
237
|
+
eid_al_fitr = tr("عيد الفطر المبارك")
|
|
238
|
+
|
|
239
|
+
special_public_holidays = {
|
|
240
|
+
2021: (
|
|
241
|
+
(JUL, 17, eid_al_adha),
|
|
242
|
+
(JUL, 18, eid_al_adha),
|
|
243
|
+
),
|
|
244
|
+
2022: (
|
|
245
|
+
(JUL, 13, eid_al_adha),
|
|
246
|
+
(JUL, 14, eid_al_adha),
|
|
247
|
+
),
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
special_public_holidays_observed = {
|
|
251
|
+
2022: (
|
|
252
|
+
(JAN, 6, coptic_christmas_day),
|
|
253
|
+
(MAY, 4, eid_al_fitr),
|
|
254
|
+
),
|
|
255
|
+
2023: (
|
|
256
|
+
(JAN, 8, coptic_christmas_day),
|
|
257
|
+
(APR, 24, eid_al_fitr),
|
|
258
|
+
# June 30 Revolution Day.
|
|
259
|
+
(JUL, 2, tr("عيد ثورة ٣٠ يونيو")),
|
|
260
|
+
(JUL, 3, eid_al_adha),
|
|
261
|
+
),
|
|
262
|
+
# Labor Day.
|
|
263
|
+
2024: (MAY, 5, tr("عيد العمال")),
|
|
264
|
+
}
|
holidays/countries/germany.py
CHANGED
|
@@ -31,12 +31,17 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
|
|
|
31
31
|
"Mariä Himmelfahrt" is only a holiday in Bavaria (BY) and "Fronleichnam"
|
|
32
32
|
in Saxony (SN) and Thuringia (TH) if municipality is mostly catholic which
|
|
33
33
|
in term depends on census data. It's listed in "CATHOLIC" category for these provinces.
|
|
34
|
+
|
|
35
|
+
References:
|
|
36
|
+
* <https://en.wikipedia.org/wiki/Public_holidays_in_Germany>
|
|
37
|
+
* [Bavaria's Feiertagsgesetz](https://web.archive.org/web/20250724092008/https://www.gesetze-bayern.de/Content/Document/BayFTG-1)
|
|
34
38
|
"""
|
|
35
39
|
|
|
36
40
|
country = "DE"
|
|
37
41
|
default_language = "de"
|
|
38
42
|
start_year = 1990
|
|
39
43
|
subdivisions = (
|
|
44
|
+
# States.
|
|
40
45
|
"BB", # Brandenburg.
|
|
41
46
|
"BE", # Berlin.
|
|
42
47
|
"BW", # Baden-Württemberg.
|
|
@@ -53,6 +58,8 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
|
|
|
53
58
|
"SN", # Sachsen.
|
|
54
59
|
"ST", # Sachsen-Anhalt.
|
|
55
60
|
"TH", # Thüringen.
|
|
61
|
+
# Cities.
|
|
62
|
+
"Augsburg",
|
|
56
63
|
)
|
|
57
64
|
subdivisions_aliases = {
|
|
58
65
|
"Brandenburg": "BB",
|
|
@@ -147,9 +154,13 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
|
|
|
147
154
|
|
|
148
155
|
def _populate_subdiv_by_public_holidays(self):
|
|
149
156
|
if self._year >= 1991:
|
|
157
|
+
# Epiphany.
|
|
150
158
|
self._add_epiphany_day(tr("Heilige Drei Könige"))
|
|
159
|
+
|
|
160
|
+
# Corpus Christi.
|
|
151
161
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
152
162
|
|
|
163
|
+
# All Saints' Day.
|
|
153
164
|
self._add_all_saints_day(tr("Allerheiligen"))
|
|
154
165
|
|
|
155
166
|
def _populate_subdiv_by_catholic_holidays(self):
|
|
@@ -159,63 +170,83 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
|
|
|
159
170
|
|
|
160
171
|
def _populate_subdiv_hb_public_holidays(self):
|
|
161
172
|
if self._year >= 2018:
|
|
173
|
+
# Reformation Day.
|
|
162
174
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
163
175
|
|
|
164
176
|
def _populate_subdiv_he_public_holidays(self):
|
|
165
177
|
if self._year >= 1991:
|
|
178
|
+
# Corpus Christi.
|
|
166
179
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
167
180
|
|
|
168
181
|
def _populate_subdiv_hh_public_holidays(self):
|
|
169
182
|
if self._year >= 2018:
|
|
183
|
+
# Reformation Day.
|
|
170
184
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
171
185
|
|
|
172
186
|
def _populate_subdiv_mv_public_holidays(self):
|
|
173
187
|
if self._year >= 2023:
|
|
188
|
+
# International Women's Day.
|
|
174
189
|
self._add_womens_day(tr("Internationaler Frauentag"))
|
|
175
190
|
|
|
191
|
+
# Reformation Day.
|
|
176
192
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
177
193
|
|
|
178
194
|
def _populate_subdiv_ni_public_holidays(self):
|
|
179
195
|
if self._year >= 2018:
|
|
196
|
+
# Reformation Day.
|
|
180
197
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
181
198
|
|
|
182
199
|
def _populate_subdiv_nw_public_holidays(self):
|
|
183
200
|
if self._year >= 1991:
|
|
201
|
+
# Corpus Christi.
|
|
184
202
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
185
203
|
|
|
204
|
+
# All Saints' Day.
|
|
186
205
|
self._add_all_saints_day(tr("Allerheiligen"))
|
|
187
206
|
|
|
188
207
|
def _populate_subdiv_rp_public_holidays(self):
|
|
189
208
|
if self._year >= 1991:
|
|
209
|
+
# Corpus Christi.
|
|
190
210
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
191
211
|
|
|
212
|
+
# All Saints' Day.
|
|
192
213
|
self._add_all_saints_day(tr("Allerheiligen"))
|
|
193
214
|
|
|
194
215
|
def _populate_subdiv_sh_public_holidays(self):
|
|
195
216
|
if self._year >= 2018:
|
|
217
|
+
# Reformation Day.
|
|
196
218
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
197
219
|
|
|
198
220
|
def _populate_subdiv_sl_public_holidays(self):
|
|
199
221
|
if self._year >= 1991:
|
|
222
|
+
# Corpus Christi.
|
|
200
223
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
224
|
+
|
|
225
|
+
# Assumption Day.
|
|
201
226
|
self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
|
|
202
227
|
|
|
228
|
+
# All Saints' Day.
|
|
203
229
|
self._add_all_saints_day(tr("Allerheiligen"))
|
|
204
230
|
|
|
205
231
|
def _populate_subdiv_sn_public_holidays(self):
|
|
232
|
+
# Reformation Day.
|
|
206
233
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
207
234
|
|
|
208
235
|
if self._year >= 1995:
|
|
236
|
+
# Repentance and Prayer Day.
|
|
209
237
|
self._add_holiday_1st_wed_before_nov_22(tr("Buß- und Bettag"))
|
|
210
238
|
|
|
211
239
|
def _populate_subdiv_sn_catholic_holidays(self):
|
|
212
240
|
if self._year >= 1991:
|
|
241
|
+
# Corpus Christi.
|
|
213
242
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
214
243
|
|
|
215
244
|
def _populate_subdiv_st_public_holidays(self):
|
|
216
245
|
if self._year >= 1991:
|
|
246
|
+
# Epiphany.
|
|
217
247
|
self._add_epiphany_day(tr("Heilige Drei Könige"))
|
|
218
248
|
|
|
249
|
+
# Reformation Day.
|
|
219
250
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
220
251
|
|
|
221
252
|
def _populate_subdiv_th_public_holidays(self):
|
|
@@ -223,12 +254,21 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
|
|
|
223
254
|
# World Children's Day.
|
|
224
255
|
self._add_holiday_sep_20(tr("Weltkindertag"))
|
|
225
256
|
|
|
257
|
+
# Reformation Day.
|
|
226
258
|
self._add_holiday_oct_31(tr("Reformationstag"))
|
|
227
259
|
|
|
228
260
|
def _populate_subdiv_th_catholic_holidays(self):
|
|
229
261
|
if self._year >= 1991:
|
|
262
|
+
# Corpus Christi.
|
|
230
263
|
self._add_corpus_christi_day(tr("Fronleichnam"))
|
|
231
264
|
|
|
265
|
+
def _populate_subdiv_augsburg_public_holidays(self):
|
|
266
|
+
self._populate_subdiv_by_public_holidays()
|
|
267
|
+
|
|
268
|
+
if self._year >= 1991:
|
|
269
|
+
# Augsburg Peace Festival.
|
|
270
|
+
self._add_holiday_aug_8(tr("Augsburger Hohes Friedensfest"))
|
|
271
|
+
|
|
232
272
|
|
|
233
273
|
class DE(Germany):
|
|
234
274
|
pass
|
|
@@ -248,6 +288,7 @@ class GermanyStaticHolidays:
|
|
|
248
288
|
"""
|
|
249
289
|
|
|
250
290
|
special_public_holidays = {
|
|
291
|
+
# Reformation Day.
|
|
251
292
|
2017: (OCT, 31, tr("Reformationstag")),
|
|
252
293
|
}
|
|
253
294
|
|
holidays/countries/indonesia.py
CHANGED
|
@@ -638,6 +638,7 @@ class IndonesiaStaticHolidays:
|
|
|
638
638
|
* <https://web.archive.org/web/20250413193243/https://setkab.go.id/presiden-tandatangani-keppres-perubahan-cuti-bersama-bagi-asn/>
|
|
639
639
|
* <https://web.archive.org/web/20250413193243/https://setkab.go.id/inilah-keppres-7-2024-tentang-cuti-bersama-asn-tahun-2024/>
|
|
640
640
|
* <https://web.archive.org/web/20250413193349/https://setkab.go.id/pemerintah-tetapkan-hari-libur-nasional-dan-cuti-bersama-tahun-2025/>
|
|
641
|
+
* <https://web.archive.org/web/20250802143125/https://news.detik.com/berita/d-8039857/pemerintah-tetapkan-senin-18-agustus-hari-libur>
|
|
641
642
|
"""
|
|
642
643
|
|
|
643
644
|
# General Election Day.
|
|
@@ -669,6 +670,8 @@ class IndonesiaStaticHolidays:
|
|
|
669
670
|
vesak_joint_holiday = tr("Cuti Bersama Hari Raya Waisak")
|
|
670
671
|
# New Year's Joint Holiday.
|
|
671
672
|
new_years_joint_holiday = tr("Cuti Bersama Tahun Baru Masehi")
|
|
673
|
+
# Independence Day Joint Holiday.
|
|
674
|
+
independence_day_joint_holiday = tr("Cuti Bersama Hari Kemerdekaan Republik Indonesia")
|
|
672
675
|
|
|
673
676
|
special_public_holidays = {
|
|
674
677
|
1999: (JUN, 7, legislative_election_day),
|
|
@@ -728,8 +731,7 @@ class IndonesiaStaticHolidays:
|
|
|
728
731
|
2006: (
|
|
729
732
|
(MAR, 31, day_of_silence_joint_holiday),
|
|
730
733
|
(MAY, 26, ascension_joint_holiday),
|
|
731
|
-
|
|
732
|
-
(AUG, 18, tr("Cuti Bersama Hari Kemerdekaan Republik Indonesia")),
|
|
734
|
+
(AUG, 18, independence_day_joint_holiday),
|
|
733
735
|
(OCT, 23, eid_al_fitr_joint_holiday),
|
|
734
736
|
(OCT, 26, eid_al_fitr_joint_holiday),
|
|
735
737
|
(OCT, 27, eid_al_fitr_joint_holiday),
|
|
@@ -877,6 +879,7 @@ class IndonesiaStaticHolidays:
|
|
|
877
879
|
(MAY, 13, vesak_joint_holiday),
|
|
878
880
|
(MAY, 30, ascension_joint_holiday),
|
|
879
881
|
(JUN, 9, eid_al_adha_joint_holiday),
|
|
882
|
+
(AUG, 18, independence_day_joint_holiday),
|
|
880
883
|
(DEC, 26, christmas_joint_holiday),
|
|
881
884
|
),
|
|
882
885
|
}
|
holidays/countries/luxembourg.py
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
from gettext import gettext as tr
|
|
14
14
|
|
|
15
|
+
from holidays.constants import BANK, PUBLIC
|
|
15
16
|
from holidays.groups import ChristianHolidays, InternationalHolidays
|
|
16
17
|
from holidays.holiday_base import HolidayBase
|
|
17
18
|
|
|
@@ -21,10 +22,12 @@ class Luxembourg(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
21
22
|
|
|
22
23
|
References:
|
|
23
24
|
* <https://en.wikipedia.org/wiki/Public_holidays_in_Luxembourg>
|
|
25
|
+
* <https://web.archive.org/web/20250625132138/https://www.bcl.lu/en/About/Opening-days/index.html>
|
|
24
26
|
"""
|
|
25
27
|
|
|
26
28
|
country = "LU"
|
|
27
29
|
default_language = "lb"
|
|
30
|
+
supported_categories = (BANK, PUBLIC)
|
|
28
31
|
supported_languages = ("de", "en_US", "fr", "lb", "uk")
|
|
29
32
|
|
|
30
33
|
def __init__(self, *args, **kwargs):
|
|
@@ -67,6 +70,16 @@ class Luxembourg(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
67
70
|
# Saint Stephen's Day.
|
|
68
71
|
self._add_christmas_day_two(tr("Stiefesdag"))
|
|
69
72
|
|
|
73
|
+
def _populate_bank_holidays(self):
|
|
74
|
+
# Good Friday.
|
|
75
|
+
self._add_good_friday(tr("Karfreideg"))
|
|
76
|
+
|
|
77
|
+
# Christmas Eve (afternoon).
|
|
78
|
+
self._add_christmas_eve(tr("Hellegowend (nomëtteg)"))
|
|
79
|
+
|
|
80
|
+
# New Year's Eve.
|
|
81
|
+
self._add_new_years_eve(tr("Silvester"))
|
|
82
|
+
|
|
70
83
|
|
|
71
84
|
class LU(Luxembourg):
|
|
72
85
|
pass
|
holidays/countries/pakistan.py
CHANGED
|
@@ -32,6 +32,7 @@ class Pakistan(HolidayBase, InternationalHolidays, IslamicHolidays):
|
|
|
32
32
|
default_language = "en_PK"
|
|
33
33
|
# %s (estimated).
|
|
34
34
|
estimated_label = tr("%s (estimated)")
|
|
35
|
+
# Achieved Independence on August 14th, 1947.
|
|
35
36
|
start_year = 1948
|
|
36
37
|
supported_languages = ("en_PK", "en_US", "ur_PK")
|
|
37
38
|
|
|
@@ -105,8 +106,7 @@ class PAK(Pakistan):
|
|
|
105
106
|
|
|
106
107
|
|
|
107
108
|
class PakistanIslamicHolidays(_CustomIslamicHolidays):
|
|
108
|
-
# https://web.archive.org/web/
|
|
109
|
-
|
|
109
|
+
# https://web.archive.org/web/20250724060822/https://www.timeanddate.com/holidays/pakistan/ashura
|
|
110
110
|
ASHURA_DATES = {
|
|
111
111
|
2005: (FEB, 18),
|
|
112
112
|
2006: (FEB, 8),
|
|
@@ -128,9 +128,10 @@ class PakistanIslamicHolidays(_CustomIslamicHolidays):
|
|
|
128
128
|
2022: (AUG, 9),
|
|
129
129
|
2023: (JUL, 28),
|
|
130
130
|
2024: (JUL, 16),
|
|
131
|
+
2025: (JUL, 6),
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
# https://web.archive.org/web/
|
|
134
|
+
# https://web.archive.org/web/20250724060629/https://www.timeanddate.com/holidays/pakistan/eid-ul-azha
|
|
134
135
|
EID_AL_ADHA_DATES = {
|
|
135
136
|
2005: (JAN, 21),
|
|
136
137
|
2006: ((JAN, 10), (DEC, 31)),
|
|
@@ -152,9 +153,10 @@ class PakistanIslamicHolidays(_CustomIslamicHolidays):
|
|
|
152
153
|
2022: (JUL, 10),
|
|
153
154
|
2023: (JUN, 29),
|
|
154
155
|
2024: (JUN, 17),
|
|
156
|
+
2025: (JUN, 7),
|
|
155
157
|
}
|
|
156
158
|
|
|
157
|
-
# https://web.archive.org/web/
|
|
159
|
+
# https://web.archive.org/web/20250724060834/https://www.timeanddate.com/holidays/pakistan/eid-ul-fitr-1
|
|
158
160
|
EID_AL_FITR_DATES = {
|
|
159
161
|
2005: (NOV, 4),
|
|
160
162
|
2006: (OCT, 24),
|
|
@@ -179,7 +181,7 @@ class PakistanIslamicHolidays(_CustomIslamicHolidays):
|
|
|
179
181
|
2025: (MAR, 31),
|
|
180
182
|
}
|
|
181
183
|
|
|
182
|
-
# https://web.archive.org/web/
|
|
184
|
+
# https://web.archive.org/web/20250724061027/https://www.timeanddate.com/holidays/pakistan/eid-milad-un-nabi
|
|
183
185
|
MAWLID_DATES = {
|
|
184
186
|
2005: (APR, 22),
|
|
185
187
|
2006: (APR, 11),
|