Skip to content

Commit 8aa84ed

Browse files
Add Palestine holidays (#2701)
1 parent 94977c0 commit 8aa84ed

File tree

8 files changed

+874
-11
lines changed

8 files changed

+874
-11
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ and detailed information.
105105

106106
## Available Countries
107107

108-
We currently support 209 country codes. The standard way to refer to a country is by using its [ISO
108+
We currently support 210 country codes. The standard way to refer to a country is by using its [ISO
109109
3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
110110
for domain names, and for a subdivision its [ISO 3166-2
111111
code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
@@ -1148,6 +1148,13 @@ any) in brackets, available languages and additional holiday categories. All cou
11481148
<td>ARMED_FORCES, HALF_DAY</td>
11491149
</tr>
11501150
<tr>
1151+
<td>Palestine</td>
1152+
<td>PS</td>
1153+
<td></td>
1154+
<td><strong>ar</strong>, en_US</td>
1155+
<td>CATHOLIC, ORTHODOX</td>
1156+
</tr>
1157+
<tr>
11511158
<td>Panama</td>
11521159
<td>PA</td>
11531160
<td></td>

holidays/countries/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@
160160
from holidays.countries.oman import Oman, OM, OMN
161161
from holidays.countries.pakistan import Pakistan, PK, PAK
162162
from holidays.countries.palau import Palau, PW, PLW
163+
from holidays.countries.palestine import Palestine, PS, PSE
163164
from holidays.countries.panama import Panama, PA, PAN
164165
from holidays.countries.papua_new_guinea import PapuaNewGuinea, PG, PNG
165166
from holidays.countries.paraguay import Paraguay, PY, PRY

holidays/countries/palestine.py

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# holidays
2+
# --------
3+
# A fast, efficient Python library for generating country, province and state
4+
# specific sets of holidays on the fly. It aims to make determining whether a
5+
# specific date is a holiday as fast and flexible as possible.
6+
#
7+
# Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
8+
# dr-prodigy <[email protected]> (c) 2017-2023
9+
# ryanss <[email protected]> (c) 2014-2017
10+
# Website: https://github.com/vacanza/holidays
11+
# License: MIT (see LICENSE file)
12+
13+
from gettext import gettext as tr
14+
15+
from holidays.calendars import _CustomIslamicHolidays
16+
from holidays.calendars.gregorian import GREGORIAN_CALENDAR, SEP
17+
from holidays.calendars.julian import JULIAN_CALENDAR
18+
from holidays.constants import CATHOLIC, ORTHODOX, PUBLIC
19+
from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays
20+
from holidays.holiday_base import HolidayBase
21+
22+
23+
class Palestine(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolidays):
24+
"""Palestine holidays.
25+
26+
References:
27+
* <https://en.wikipedia.org/wiki/Public_holidays_in_Palestine>
28+
* <https://web.archive.org/web/20250705114216/https://info.wafa.ps/pages/details/29601>
29+
* [Declaration of Palestine independence](https://en.wikipedia.org/wiki/Palestine#Uprising,_declaration_and_peace_treaty)
30+
"""
31+
32+
country = "PS"
33+
default_language = "ar"
34+
# %s (estimated).
35+
estimated_label = tr("%s (المقدرة)")
36+
# State of Palestine declared in November 1988.
37+
start_year = 1989
38+
supported_categories = (CATHOLIC, ORTHODOX, PUBLIC)
39+
supported_languages = ("ar", "en_US")
40+
41+
def __init__(self, *args, islamic_show_estimated: bool = False, **kwargs):
42+
"""
43+
Args:
44+
islamic_show_estimated:
45+
Whether to add "estimated" label to Islamic holidays name
46+
if holiday date is estimated.
47+
"""
48+
ChristianHolidays.__init__(self, calendar=JULIAN_CALENDAR)
49+
InternationalHolidays.__init__(self)
50+
IslamicHolidays.__init__(
51+
self, cls=PalestineIslamicHolidays, show_estimated=islamic_show_estimated
52+
)
53+
super().__init__(*args, **kwargs)
54+
55+
def _populate_public_holidays(self):
56+
# New Year's Day.
57+
self._add_new_years_day(tr("رأس السنة الميلادي"))
58+
59+
# Orthodox Christmas Day.
60+
self._add_christmas_day(tr("عيد الميلاد المجيد الشرقي"))
61+
62+
# International Women's Day.
63+
self._add_womens_day(tr("يوم المراة العالمي"))
64+
65+
# Easter.
66+
self._add_easter_sunday(tr("عيد الفصح المجيد"), GREGORIAN_CALENDAR)
67+
68+
# Easter.
69+
self._add_easter_sunday(tr("عيد الفصح المجيد"))
70+
71+
# Labor Day.
72+
self._add_labor_day(tr("عيد العمال"))
73+
74+
# Independence Day.
75+
self._add_holiday_nov_15(tr("عيد الإستقلال"))
76+
77+
# Catholic Christmas Day.
78+
self._add_christmas_day(tr("عيد الميلاد المجيد الغربي"), GREGORIAN_CALENDAR)
79+
80+
# Hijri New Year.
81+
self._add_islamic_new_year_day(tr("رأس السنة الهجرية"))
82+
83+
# Prophet's Birthday.
84+
self._add_mawlid_day(tr("ذكرى المولد النبوي الشريف"))
85+
86+
# Isra' and Mi'raj.
87+
self._add_isra_and_miraj_day(tr("ذكرى الإسراء والمعراج"))
88+
89+
# Eid al-Fitr.
90+
name = tr("عيد الفطر السعيد")
91+
self._add_eid_al_fitr_day(name)
92+
self._add_eid_al_fitr_day_two(name)
93+
self._add_eid_al_fitr_day_three(name)
94+
95+
# Eid al-Adha.
96+
name = tr("عيد الأضحى المبارك")
97+
self._add_eid_al_adha_day(name)
98+
self._add_eid_al_adha_day_two(name)
99+
self._add_eid_al_adha_day_three(name)
100+
self._add_eid_al_adha_day_four(name)
101+
102+
def _populate_catholic_holidays(self):
103+
# New Year's Day.
104+
self._add_new_years_day(tr("رأس السنة الميلادي"))
105+
106+
# Epiphany.
107+
self._add_epiphany_day(tr("عيد الغطاس"), GREGORIAN_CALENDAR)
108+
109+
# Palm Sunday.
110+
self._add_palm_sunday(tr("أحد الشعانين"), GREGORIAN_CALENDAR)
111+
112+
# Holy Thursday.
113+
self._add_holy_thursday(tr("خميس الغسل"), GREGORIAN_CALENDAR)
114+
115+
# Good Friday.
116+
self._add_good_friday(tr("الجمعة العظيمة"), GREGORIAN_CALENDAR)
117+
118+
# Holy Saturday.
119+
self._add_holy_saturday(tr("سبت النور"), GREGORIAN_CALENDAR)
120+
121+
# Easter.
122+
self._add_easter_monday(tr("عيد الفصح المجيد"), GREGORIAN_CALENDAR)
123+
124+
# Ascension Day.
125+
self._add_ascension_thursday(tr("خميس الصعود"), GREGORIAN_CALENDAR)
126+
127+
# Pentecost.
128+
self._add_whit_sunday(tr("أحد العنصرة"), GREGORIAN_CALENDAR)
129+
130+
# Catholic Christmas Day.
131+
self._add_christmas_day_two(tr("عيد الميلاد المجيد الغربي"), GREGORIAN_CALENDAR)
132+
133+
def _populate_orthodox_holidays(self):
134+
# Orthodox New Year's Day.
135+
self._add_holiday_jan_14(tr("عيد رأس السنة الشرقي"))
136+
137+
# Orthodox Christmas Day.
138+
self._add_christmas_day_two(tr("عيد الميلاد المجيد الشرقي"))
139+
140+
# Epiphany.
141+
self._add_epiphany_day(tr("عيد الغطاس"))
142+
143+
# Palm Sunday.
144+
self._add_palm_sunday(tr("أحد الشعانين"))
145+
146+
# Holy Thursday.
147+
self._add_holy_thursday(tr("خميس الغسل"))
148+
149+
# Good Friday.
150+
self._add_good_friday(tr("الجمعة العظيمة"))
151+
152+
# Holy Saturday.
153+
self._add_holy_saturday(tr("سبت النور"))
154+
155+
# Easter.
156+
self._add_easter_monday(tr("عيد الفصح المجيد"))
157+
158+
# Ascension Day.
159+
self._add_ascension_thursday(tr("خميس الصعود"))
160+
161+
# Pentecost.
162+
self._add_whit_sunday(tr("أحد العنصرة"))
163+
164+
165+
class PS(Palestine):
166+
pass
167+
168+
169+
class PSE(Palestine):
170+
pass
171+
172+
173+
class PalestineIslamicHolidays(_CustomIslamicHolidays):
174+
# All other dates follow Umm al-Qura calendar.
175+
MAWLID_DATES = {
176+
2023: (SEP, 27),
177+
}

holidays/groups/christian.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,15 @@ def _add_all_souls_day(self, name) -> date:
116116
"""
117117
return self._add_holiday_nov_2(name)
118118

119-
def _add_ascension_thursday(self, name) -> date:
119+
def _add_ascension_thursday(self, name, calendar=None) -> date:
120120
"""
121121
Add Ascension Thursday (39 days after the Easter Sunday).
122122
123123
The Solemnity of the Ascension of Jesus Christ, also called Ascension
124124
Day, or sometimes Holy Thursday.
125125
https://en.wikipedia.org/wiki/Feast_of_the_Ascension
126126
"""
127-
return self._add_holiday(name, _timedelta(self._easter_sunday, +39))
127+
return self._add_holiday(name, _timedelta(self.__get_easter_sunday(calendar), +39))
128128

129129
def _add_ash_monday(self, name) -> date:
130130
"""
@@ -316,16 +316,16 @@ def _add_good_friday(self, name, calendar=None) -> date:
316316
"""
317317
return self._add_holiday(name, _timedelta(self.__get_easter_sunday(calendar), -2))
318318

319-
def _add_holy_saturday(self, name) -> date:
319+
def _add_holy_saturday(self, name, calendar=None) -> date:
320320
"""
321321
Add Holy Saturday (1 day before Easter Sunday).
322322
323323
Great and Holy Saturday is a day between Good Friday and Easter Sunday.
324324
https://en.wikipedia.org/wiki/Holy_Saturday
325325
"""
326-
return self._add_holiday(name, _timedelta(self._easter_sunday, -1))
326+
return self._add_holiday(name, _timedelta(self.__get_easter_sunday(calendar), -1))
327327

328-
def _add_holy_thursday(self, name) -> date:
328+
def _add_holy_thursday(self, name, calendar=None) -> date:
329329
"""
330330
Add Holy Thursday (3 days before Easter Sunday).
331331
@@ -334,7 +334,7 @@ def _add_holy_thursday(self, name) -> date:
334334
Jesus Christ with the Apostles, as described in the canonical gospels.
335335
https://en.wikipedia.org/wiki/Maundy_Thursday
336336
"""
337-
return self._add_holiday(name, _timedelta(self._easter_sunday, -3))
337+
return self._add_holiday(name, _timedelta(self.__get_easter_sunday(calendar), -3))
338338

339339
def _add_immaculate_conception_day(self, name) -> date:
340340
"""
@@ -355,7 +355,7 @@ def _add_nativity_of_mary_day(self, name) -> date:
355355
"""
356356
return self._add_holiday_sep_8(name)
357357

358-
def _add_palm_sunday(self, name) -> date:
358+
def _add_palm_sunday(self, name, calendar=None) -> date:
359359
"""
360360
Add Palm Sunday (7 days before Easter Sunday).
361361
@@ -365,7 +365,7 @@ def _add_palm_sunday(self, name) -> date:
365365
Palm Sunday marks the first day of Holy Week.
366366
https://en.wikipedia.org/wiki/Palm_Sunday
367367
"""
368-
return self._add_holiday(name, _timedelta(self._easter_sunday, -7))
368+
return self._add_holiday(name, _timedelta(self.__get_easter_sunday(calendar), -7))
369369

370370
def _add_rejoicing_day(self, name) -> date:
371371
"""
@@ -440,7 +440,7 @@ def _add_whit_monday(self, name) -> date:
440440
"""
441441
return self._add_holiday(name, _timedelta(self._easter_sunday, +50))
442442

443-
def _add_whit_sunday(self, name) -> date:
443+
def _add_whit_sunday(self, name, calendar=None) -> date:
444444
"""
445445
Add Whit Sunday (49 days after Easter Sunday).
446446
@@ -450,7 +450,7 @@ def _add_whit_sunday(self, name) -> date:
450450
Feast of Weeks.
451451
https://en.wikipedia.org/wiki/Pentecost
452452
"""
453-
return self._add_holiday(name, _timedelta(self._easter_sunday, +49))
453+
return self._add_holiday(name, _timedelta(self.__get_easter_sunday(calendar), +49))
454454

455455
def _add_trinity_sunday(self, name) -> date:
456456
"""

0 commit comments

Comments
 (0)