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.
Files changed (32) hide show
  1. holidays/calendars/islamic.py +32 -1
  2. holidays/countries/__init__.py +1 -0
  3. holidays/countries/egypt.py +203 -47
  4. holidays/countries/germany.py +41 -0
  5. holidays/countries/indonesia.py +5 -2
  6. holidays/countries/luxembourg.py +13 -0
  7. holidays/countries/pakistan.py +7 -5
  8. holidays/countries/pitcairn_islands.py +85 -0
  9. holidays/countries/saudi_arabia.py +43 -35
  10. holidays/groups/islamic.py +0 -10
  11. holidays/holiday_base.py +72 -91
  12. holidays/locale/{ar → ar_EG}/LC_MESSAGES/EG.mo +0 -0
  13. holidays/locale/de/LC_MESSAGES/DE.mo +0 -0
  14. holidays/locale/de/LC_MESSAGES/LU.mo +0 -0
  15. holidays/locale/en_US/LC_MESSAGES/DE.mo +0 -0
  16. holidays/locale/en_US/LC_MESSAGES/EG.mo +0 -0
  17. holidays/locale/en_US/LC_MESSAGES/LU.mo +0 -0
  18. holidays/locale/fr/LC_MESSAGES/EG.mo +0 -0
  19. holidays/locale/fr/LC_MESSAGES/LU.mo +0 -0
  20. holidays/locale/lb/LC_MESSAGES/LU.mo +0 -0
  21. holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
  22. holidays/locale/uk/LC_MESSAGES/DE.mo +0 -0
  23. holidays/locale/uk/LC_MESSAGES/LU.mo +0 -0
  24. holidays/registry.py +1 -0
  25. holidays/utils.py +18 -18
  26. holidays/version.py +1 -1
  27. {holidays-0.77.dist-info → holidays-0.78.dist-info}/METADATA +13 -6
  28. {holidays-0.77.dist-info → holidays-0.78.dist-info}/RECORD +32 -30
  29. {holidays-0.77.dist-info → holidays-0.78.dist-info}/licenses/CONTRIBUTORS +1 -0
  30. {holidays-0.77.dist-info → holidays-0.78.dist-info}/WHEEL +0 -0
  31. {holidays-0.77.dist-info → holidays-0.78.dist-info}/licenses/LICENSE +0 -0
  32. {holidays-0.77.dist-info → holidays-0.78.dist-info}/top_level.txt +0 -0
@@ -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 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
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
 
@@ -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
@@ -12,20 +12,63 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars.gregorian import FRI, SAT
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.groups import ChristianHolidays, IslamicHolidays, InternationalHolidays
18
- from holidays.holiday_base import HolidayBase
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
- class Egypt(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHolidays):
22
- """Egypt holidays."""
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 = "ar"
61
+ default_language = "ar_EG"
26
62
  # %s (estimated).
27
63
  estimated_label = tr("%s (المقدرة)")
28
- supported_languages = ("ar", "en_US")
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__(self, show_estimated=islamic_show_estimated)
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
- # New Year's Day.
45
- self._add_new_years_day(tr("رأس السنة الميلادية"))
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 >= 2012:
51
- # January 25th Revolution.
52
- self._add_holiday_jan_25(tr("عيد ثورة 25 يناير"))
53
- elif self._year >= 2009:
54
- # National Police Day.
55
- self._add_holiday_jan_25(tr("عيد الشرطة"))
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
- # Coptic Easter.
58
- self._add_easter_sunday(tr("عيد الفصح القبطي"))
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._add_labor_day(tr("عيد العمال"))
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("عيد ثورة 30 يونيو"))
122
+ dt = self._add_holiday_jun_30(tr("عيد ثورة ٣٠ يونيو"))
123
+ if self._year != 2024:
124
+ self._move_holiday(dt)
76
125
 
77
- if self._year > 1952:
78
- # July 23 Revolution Day.
79
- self._add_holiday_jul_23(tr("عيد ثورة 23 يوليو"))
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
- self._add_eid_al_fitr_day(tr("عيد الفطر"))
83
- # Eid al-Fitr Holiday.
84
- self._add_eid_al_fitr_day_two(tr("عطلة عيد الفطر"))
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
- self._add_eid_al_adha_day(tr("عيد الأضحى"))
92
- # Eid al-Adha Holiday.
93
- self._add_eid_al_adha_day_two(tr("عطلة عيد الأضحى"))
94
- self._add_eid_al_adha_day_three(tr("عطلة عيد الأضحى"))
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
- # Islamic New Year.
97
- self._add_islamic_new_year_day(tr("رأس السنة الهجرية"))
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
- # Prophet's Birthday.
100
- self._add_mawlid_day(tr("عيد المولد النبوي"))
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
+ }
@@ -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
 
@@ -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
- # Independence Day Joint Holiday.
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
  }
@@ -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
@@ -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/20241123192805/https://www.timeanddate.com/holidays/pakistan/first-day-ashura
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/20250424085932/https://www.timeanddate.com/holidays/pakistan/eid-ul-azha
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/20250414111814/https://www.timeanddate.com/holidays/pakistan/eid-ul-fitr-1
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/20240529050144/https://www.timeanddate.com/holidays/pakistan/eid-milad-un-nabi
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),