holidays 0.48__py3-none-any.whl → 0.50__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/__init__.py +12 -1
- holidays/calendars/gregorian.py +22 -7
- holidays/calendars/persian.py +3 -2
- holidays/calendars/thai.py +24 -20
- holidays/countries/__init__.py +1 -0
- holidays/countries/angola.py +2 -2
- holidays/countries/aruba.py +2 -3
- holidays/countries/botswana.py +19 -9
- holidays/countries/cambodia.py +7 -8
- holidays/countries/canada.py +2 -1
- holidays/countries/chile.py +14 -11
- holidays/countries/curacao.py +3 -4
- holidays/countries/finland.py +2 -2
- holidays/countries/georgia.py +17 -1
- holidays/countries/greenland.py +96 -0
- holidays/countries/hongkong.py +398 -133
- holidays/countries/isle_of_man.py +3 -8
- holidays/countries/israel.py +13 -13
- holidays/countries/italy.py +163 -133
- holidays/countries/japan.py +52 -33
- holidays/countries/jersey.py +11 -9
- holidays/countries/laos.py +7 -23
- holidays/countries/madagascar.py +2 -3
- holidays/countries/malaysia.py +545 -235
- holidays/countries/monaco.py +4 -6
- holidays/countries/netherlands.py +2 -3
- holidays/countries/new_zealand.py +5 -5
- holidays/countries/russia.py +18 -4
- holidays/countries/saudi_arabia.py +2 -3
- holidays/countries/south_korea.py +17 -4
- holidays/countries/sweden.py +2 -3
- holidays/countries/switzerland.py +18 -17
- holidays/deprecation.py +33 -0
- holidays/financial/__init__.py +1 -0
- holidays/financial/ice_futures_europe.py +47 -0
- holidays/financial/ny_stock_exchange.py +17 -4
- holidays/groups/chinese.py +2 -3
- holidays/groups/christian.py +18 -19
- holidays/groups/islamic.py +2 -2
- holidays/groups/persian.py +2 -2
- holidays/helpers.py +9 -3
- holidays/holiday_base.py +18 -15
- holidays/locale/da/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/da/LC_MESSAGES/GL.po +91 -0
- holidays/locale/en_US/LC_MESSAGES/GE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GE.po +8 -4
- holidays/locale/en_US/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GL.po +92 -0
- holidays/locale/en_US/LC_MESSAGES/MY.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/MY.po +250 -0
- holidays/locale/en_US/LC_MESSAGES/RU.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/RU.po +11 -2
- holidays/locale/ka/LC_MESSAGES/GE.mo +0 -0
- holidays/locale/ka/LC_MESSAGES/GE.po +8 -4
- holidays/locale/kl/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/kl/LC_MESSAGES/GL.po +91 -0
- holidays/locale/ms_MY/LC_MESSAGES/MY.mo +0 -0
- holidays/locale/ms_MY/LC_MESSAGES/MY.po +250 -0
- holidays/locale/ru/LC_MESSAGES/RU.mo +0 -0
- holidays/locale/ru/LC_MESSAGES/RU.po +11 -2
- holidays/locale/uk/LC_MESSAGES/GE.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/GE.po +8 -4
- holidays/mixins.py +31 -0
- holidays/observed_holiday_base.py +66 -37
- holidays/registry.py +12 -1
- {holidays-0.48.dist-info → holidays-0.50.dist-info}/AUTHORS +3 -0
- {holidays-0.48.dist-info → holidays-0.50.dist-info}/METADATA +14 -6
- {holidays-0.48.dist-info → holidays-0.50.dist-info}/RECORD +71 -57
- {holidays-0.48.dist-info → holidays-0.50.dist-info}/LICENSE +0 -0
- {holidays-0.48.dist-info → holidays-0.50.dist-info}/WHEEL +0 -0
- {holidays-0.48.dist-info → holidays-0.50.dist-info}/top_level.txt +0 -0
holidays/countries/israel.py
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
# Website: https://github.com/vacanza/python-holidays
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
|
-
from datetime import timedelta as td
|
|
14
13
|
from gettext import gettext as tr
|
|
15
14
|
|
|
16
15
|
from holidays.calendars import _HebrewLunisolar
|
|
16
|
+
from holidays.calendars.gregorian import _timedelta
|
|
17
17
|
from holidays.calendars.hebrew import (
|
|
18
18
|
HANUKKAH,
|
|
19
19
|
INDEPENDENCE_DAY,
|
|
@@ -73,7 +73,7 @@ class Israel(ObservedHolidayBase):
|
|
|
73
73
|
name = tr("ראש השנה")
|
|
74
74
|
rosh_hashanah_dt = self._get_holiday(ROSH_HASHANAH)
|
|
75
75
|
self._add_holiday(name, rosh_hashanah_dt)
|
|
76
|
-
self._add_holiday(name, rosh_hashanah_dt +
|
|
76
|
+
self._add_holiday(name, _timedelta(rosh_hashanah_dt, +1))
|
|
77
77
|
|
|
78
78
|
# Yom Kippur (Day of Atonement).
|
|
79
79
|
self._add_holiday(tr("יום כיפור"), self._get_holiday(YOM_KIPPUR))
|
|
@@ -83,13 +83,13 @@ class Israel(ObservedHolidayBase):
|
|
|
83
83
|
sukkot_dt = self._get_holiday(SUKKOT)
|
|
84
84
|
self._add_holiday(name, sukkot_dt)
|
|
85
85
|
# Simchat Torah / Shemini Atzeret.
|
|
86
|
-
self._add_holiday(tr("שמחת תורה/שמיני עצרת"), sukkot_dt +
|
|
86
|
+
self._add_holiday(tr("שמחת תורה/שמיני עצרת"), _timedelta(sukkot_dt, +7))
|
|
87
87
|
|
|
88
88
|
passover_dt = self._get_holiday(PASSOVER)
|
|
89
89
|
# Pesach (Passover).
|
|
90
90
|
self._add_holiday(tr("פסח"), passover_dt)
|
|
91
91
|
# Shvi'i shel Pesach (Seventh day of Passover)
|
|
92
|
-
self._add_holiday(tr("שביעי של פסח"), passover_dt +
|
|
92
|
+
self._add_holiday(tr("שביעי של פסח"), _timedelta(passover_dt, +6))
|
|
93
93
|
|
|
94
94
|
# Yom Ha-Atzmaut (Independence Day).
|
|
95
95
|
name = tr("יום העצמאות")
|
|
@@ -114,11 +114,11 @@ class Israel(ObservedHolidayBase):
|
|
|
114
114
|
sukkot_dt = self._get_holiday(SUKKOT)
|
|
115
115
|
for offset in range(1, 6):
|
|
116
116
|
# Chol HaMoed Sukkot (Feast of Tabernacles holiday).
|
|
117
|
-
self._add_holiday(tr("חול המועד סוכות"), sukkot_dt
|
|
117
|
+
self._add_holiday(tr("חול המועד סוכות"), _timedelta(sukkot_dt, offset))
|
|
118
118
|
|
|
119
119
|
if self._year >= 2008:
|
|
120
120
|
# Sigd.
|
|
121
|
-
self._add_holiday(tr("סיגד"), self._get_holiday(YOM_KIPPUR) +
|
|
121
|
+
self._add_holiday(tr("סיגד"), _timedelta(self._get_holiday(YOM_KIPPUR), +49))
|
|
122
122
|
|
|
123
123
|
# Purim.
|
|
124
124
|
self._add_holiday(tr("פורים"), self._get_holiday(PURIM))
|
|
@@ -126,12 +126,12 @@ class Israel(ObservedHolidayBase):
|
|
|
126
126
|
passover_dt = self._get_holiday(PASSOVER)
|
|
127
127
|
for offset in range(1, 6):
|
|
128
128
|
# Chol HaMoed Pesach (Passover holiday).
|
|
129
|
-
self._add_holiday(tr("חול המועד פסח"), passover_dt
|
|
129
|
+
self._add_holiday(tr("חול המועד פסח"), _timedelta(passover_dt, offset))
|
|
130
130
|
|
|
131
131
|
if self._year >= 1963:
|
|
132
132
|
# Yom Hazikaron (Fallen Soldiers and Victims of Terrorism Remembrance Day).
|
|
133
133
|
name = tr("יום הזיכרון לחללי מערכות ישראל ונפגעי פעולות האיבה")
|
|
134
|
-
remembrance_day_dt = self._get_holiday(INDEPENDENCE_DAY)
|
|
134
|
+
remembrance_day_dt = _timedelta(self._get_holiday(INDEPENDENCE_DAY), -1)
|
|
135
135
|
rule = THU_TO_PREV_WED + FRI_TO_PREV_WED
|
|
136
136
|
if self._year >= 2004:
|
|
137
137
|
rule += SUN_TO_NEXT_MON
|
|
@@ -141,7 +141,7 @@ class Israel(ObservedHolidayBase):
|
|
|
141
141
|
|
|
142
142
|
if self._year >= 1998:
|
|
143
143
|
# Yom Yerushalayim (Jerusalem Day).
|
|
144
|
-
self._add_holiday(tr("יום ירושלים"), self._get_holiday(LAG_BAOMER) +
|
|
144
|
+
self._add_holiday(tr("יום ירושלים"), _timedelta(self._get_holiday(LAG_BAOMER), +10))
|
|
145
145
|
|
|
146
146
|
# Tisha B'Av (Tisha B'Av, fast).
|
|
147
147
|
name = tr("תשעה באב")
|
|
@@ -160,18 +160,18 @@ class Israel(ObservedHolidayBase):
|
|
|
160
160
|
sukkot_dt = self._get_holiday(SUKKOT)
|
|
161
161
|
for offset in range(1, 6):
|
|
162
162
|
# Chol HaMoed Sukkot (Feast of Tabernacles holiday).
|
|
163
|
-
self._add_holiday(tr("חול המועד סוכות"), sukkot_dt
|
|
163
|
+
self._add_holiday(tr("חול המועד סוכות"), _timedelta(sukkot_dt, offset))
|
|
164
164
|
|
|
165
165
|
for year in (self._year - 1, self._year):
|
|
166
166
|
hanukkah_dt = _HebrewLunisolar._get_holiday(HANUKKAH, year)
|
|
167
167
|
for offset in range(8):
|
|
168
168
|
# Hanukkah.
|
|
169
|
-
self._add_holiday(tr("חנוכה"), hanukkah_dt
|
|
169
|
+
self._add_holiday(tr("חנוכה"), _timedelta(hanukkah_dt, offset))
|
|
170
170
|
|
|
171
171
|
# Ta`anit Ester (Fast of Esther).
|
|
172
172
|
name = tr("תענית אסתר")
|
|
173
173
|
purim_dt = self._get_holiday(PURIM)
|
|
174
|
-
taanit_ester_dt = purim_dt
|
|
174
|
+
taanit_ester_dt = _timedelta(purim_dt, -1)
|
|
175
175
|
is_observed, _ = self._add_observed(taanit_ester_dt, name, SAT_TO_PREV_THU)
|
|
176
176
|
if not is_observed:
|
|
177
177
|
self._add_holiday(name, taanit_ester_dt)
|
|
@@ -182,7 +182,7 @@ class Israel(ObservedHolidayBase):
|
|
|
182
182
|
passover_dt = self._get_holiday(PASSOVER)
|
|
183
183
|
for offset in range(1, 6):
|
|
184
184
|
# Chol HaMoed Pesach (Passover holiday).
|
|
185
|
-
self._add_holiday(tr("חול המועד פסח"), passover_dt
|
|
185
|
+
self._add_holiday(tr("חול המועד פסח"), _timedelta(passover_dt, offset))
|
|
186
186
|
|
|
187
187
|
# Lag Ba'omer (Lag BaOmer).
|
|
188
188
|
self._add_holiday(tr('ל"ג בעומר'), self._get_holiday(LAG_BAOMER))
|
holidays/countries/italy.py
CHANGED
|
@@ -10,131 +10,128 @@
|
|
|
10
10
|
# Website: https://github.com/vacanza/python-holidays
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
|
-
from
|
|
14
|
-
|
|
15
|
-
from holidays.groups import ChristianHolidays, InternationalHolidays
|
|
13
|
+
from holidays.calendars.gregorian import MAR
|
|
14
|
+
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
|
|
16
15
|
from holidays.holiday_base import HolidayBase
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
18
|
+
class Italy(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
|
|
19
|
+
"""
|
|
20
|
+
References:
|
|
21
|
+
- https://en.wikipedia.org/wiki/Public_holidays_in_Italy
|
|
22
|
+
- `Provinces holidays <https://it.wikipedia.org/wiki/Santi_patroni_cattolici_delle_citt%C3%A0_capoluogo_di_provincia_italiane>`_ # noqa: E501
|
|
23
|
+
"""
|
|
24
|
+
|
|
20
25
|
country = "IT"
|
|
21
|
-
# Reference: https://it.wikipedia.org/wiki/Province_d%27Italia
|
|
22
|
-
# Please maintain in alphabetical order for easy updating in the future
|
|
23
|
-
# The alphabetical order is except cities of provinces with multiple head
|
|
24
|
-
# cities that directly follows the main province id like BT, Barletta,
|
|
25
|
-
# Andria, Trani, for easily grouping them.
|
|
26
|
-
# In that case if you use the 2 char id you'll take the first Santo
|
|
27
|
-
# Patrono defined. If you want one specific you'll have to use
|
|
28
|
-
# the full name of the city like "Andria" instead of "BT".
|
|
29
26
|
subdivisions = (
|
|
30
27
|
# Provinces.
|
|
31
|
-
"AG",
|
|
32
|
-
"AL",
|
|
33
|
-
"AN",
|
|
34
|
-
"AO",
|
|
35
|
-
"AP",
|
|
36
|
-
"AQ",
|
|
37
|
-
"AR",
|
|
38
|
-
"AT",
|
|
39
|
-
"AV",
|
|
40
|
-
"BA",
|
|
41
|
-
"BG",
|
|
42
|
-
"BI",
|
|
43
|
-
"BL",
|
|
44
|
-
"BN",
|
|
45
|
-
"BO",
|
|
46
|
-
"BR",
|
|
47
|
-
"BS",
|
|
48
|
-
"BT",
|
|
49
|
-
"BZ",
|
|
50
|
-
"CA",
|
|
51
|
-
"CB",
|
|
52
|
-
"CE",
|
|
53
|
-
"CH",
|
|
54
|
-
"CL",
|
|
55
|
-
"CN",
|
|
56
|
-
"CO",
|
|
57
|
-
"CR",
|
|
58
|
-
"CS",
|
|
59
|
-
"CT",
|
|
60
|
-
"CZ",
|
|
61
|
-
"EN",
|
|
62
|
-
"FC",
|
|
63
|
-
"FE",
|
|
64
|
-
"FG",
|
|
65
|
-
"FI",
|
|
66
|
-
"FM",
|
|
67
|
-
"FR",
|
|
68
|
-
"GE",
|
|
69
|
-
"GO",
|
|
70
|
-
"GR",
|
|
71
|
-
"IM",
|
|
72
|
-
"IS",
|
|
73
|
-
"KR",
|
|
74
|
-
"LC",
|
|
75
|
-
"LE",
|
|
76
|
-
"LI",
|
|
77
|
-
"LO",
|
|
78
|
-
"LT",
|
|
79
|
-
"LU",
|
|
80
|
-
"MB",
|
|
81
|
-
"MC",
|
|
82
|
-
"ME",
|
|
83
|
-
"MI",
|
|
84
|
-
"MN",
|
|
85
|
-
"MO",
|
|
86
|
-
"MS",
|
|
87
|
-
"MT",
|
|
88
|
-
"NA",
|
|
89
|
-
"NO",
|
|
90
|
-
"NU",
|
|
91
|
-
"OR",
|
|
92
|
-
"PA",
|
|
93
|
-
"PC",
|
|
94
|
-
"PD",
|
|
95
|
-
"PE",
|
|
96
|
-
"PG",
|
|
97
|
-
"PI",
|
|
98
|
-
"PN",
|
|
99
|
-
"PO",
|
|
100
|
-
"PR",
|
|
101
|
-
"PT",
|
|
102
|
-
"PU",
|
|
103
|
-
"PV",
|
|
104
|
-
"PZ",
|
|
105
|
-
"RA",
|
|
106
|
-
"RC",
|
|
107
|
-
"RE",
|
|
108
|
-
"RG",
|
|
109
|
-
"RI",
|
|
110
|
-
"RM",
|
|
111
|
-
"RN",
|
|
112
|
-
"RO",
|
|
113
|
-
"SA",
|
|
114
|
-
"SI",
|
|
115
|
-
"SO",
|
|
116
|
-
"SP",
|
|
117
|
-
"SR",
|
|
118
|
-
"SS",
|
|
119
|
-
"SU",
|
|
120
|
-
"SV",
|
|
121
|
-
"TA",
|
|
122
|
-
"TE",
|
|
123
|
-
"TN",
|
|
124
|
-
"TO",
|
|
125
|
-
"TP",
|
|
126
|
-
"TR",
|
|
127
|
-
"TS",
|
|
128
|
-
"TV",
|
|
129
|
-
"UD",
|
|
130
|
-
"VA",
|
|
131
|
-
"VB",
|
|
132
|
-
"VC",
|
|
133
|
-
"VE",
|
|
134
|
-
"VI",
|
|
135
|
-
"VR",
|
|
136
|
-
"VT",
|
|
137
|
-
"VV",
|
|
28
|
+
"AG", # Agrigento.
|
|
29
|
+
"AL", # Alessandria.
|
|
30
|
+
"AN", # Ancona.
|
|
31
|
+
"AO", # Aosta (deprecated).
|
|
32
|
+
"AP", # Ascoli Piceno.
|
|
33
|
+
"AQ", # L'Aquila.
|
|
34
|
+
"AR", # Arezzo.
|
|
35
|
+
"AT", # Asti.
|
|
36
|
+
"AV", # Avellino.
|
|
37
|
+
"BA", # Bari.
|
|
38
|
+
"BG", # Bergamo.
|
|
39
|
+
"BI", # Biella.
|
|
40
|
+
"BL", # Belluno.
|
|
41
|
+
"BN", # Benevento.
|
|
42
|
+
"BO", # Bologna.
|
|
43
|
+
"BR", # Brindisi.
|
|
44
|
+
"BS", # Brescia.
|
|
45
|
+
"BT", # Barletta-Andria-Trani.
|
|
46
|
+
"BZ", # Bolzano.
|
|
47
|
+
"CA", # Cagliari.
|
|
48
|
+
"CB", # Campobasso.
|
|
49
|
+
"CE", # Caserta.
|
|
50
|
+
"CH", # Chieti.
|
|
51
|
+
"CL", # Caltanissetta.
|
|
52
|
+
"CN", # Cuneo.
|
|
53
|
+
"CO", # Como.
|
|
54
|
+
"CR", # Cremona.
|
|
55
|
+
"CS", # Cosenza.
|
|
56
|
+
"CT", # Catania.
|
|
57
|
+
"CZ", # Catanzaro.
|
|
58
|
+
"EN", # Enna.
|
|
59
|
+
"FC", # Forlì-Cesena.
|
|
60
|
+
"FE", # Ferrara.
|
|
61
|
+
"FG", # Foggia.
|
|
62
|
+
"FI", # Firenze.
|
|
63
|
+
"FM", # Fermo.
|
|
64
|
+
"FR", # Frosinone.
|
|
65
|
+
"GE", # Genova.
|
|
66
|
+
"GO", # Gorizia.
|
|
67
|
+
"GR", # Grosseto.
|
|
68
|
+
"IM", # Imperia.
|
|
69
|
+
"IS", # Isernia.
|
|
70
|
+
"KR", # Crotone.
|
|
71
|
+
"LC", # Lecco.
|
|
72
|
+
"LE", # Lecce.
|
|
73
|
+
"LI", # Livorno.
|
|
74
|
+
"LO", # Lodi.
|
|
75
|
+
"LT", # Latina.
|
|
76
|
+
"LU", # Lucca.
|
|
77
|
+
"MB", # Monza e Brianza.
|
|
78
|
+
"MC", # Macerata.
|
|
79
|
+
"ME", # Messina.
|
|
80
|
+
"MI", # Milano.
|
|
81
|
+
"MN", # Mantova.
|
|
82
|
+
"MO", # Modena.
|
|
83
|
+
"MS", # Massa-Carrara.
|
|
84
|
+
"MT", # Matera.
|
|
85
|
+
"NA", # Napoli.
|
|
86
|
+
"NO", # Novara.
|
|
87
|
+
"NU", # Nuoro.
|
|
88
|
+
"OR", # Oristano.
|
|
89
|
+
"PA", # Palermo.
|
|
90
|
+
"PC", # Piacenza.
|
|
91
|
+
"PD", # Padova.
|
|
92
|
+
"PE", # Pescara.
|
|
93
|
+
"PG", # Perugia.
|
|
94
|
+
"PI", # Pisa.
|
|
95
|
+
"PN", # Pordenone.
|
|
96
|
+
"PO", # Prato.
|
|
97
|
+
"PR", # Parma.
|
|
98
|
+
"PT", # Pistoia.
|
|
99
|
+
"PU", # Pesaro e Urbino.
|
|
100
|
+
"PV", # Pavia.
|
|
101
|
+
"PZ", # Potenza.
|
|
102
|
+
"RA", # Ravenna.
|
|
103
|
+
"RC", # Reggio Calabria.
|
|
104
|
+
"RE", # Reggio Emilia.
|
|
105
|
+
"RG", # Ragusa.
|
|
106
|
+
"RI", # Rieti.
|
|
107
|
+
"RM", # Roma.
|
|
108
|
+
"RN", # Rimini.
|
|
109
|
+
"RO", # Rovigo.
|
|
110
|
+
"SA", # Salerno.
|
|
111
|
+
"SI", # Siena.
|
|
112
|
+
"SO", # Sondrio.
|
|
113
|
+
"SP", # La Spezia.
|
|
114
|
+
"SR", # Siracusa.
|
|
115
|
+
"SS", # Sassari.
|
|
116
|
+
"SU", # Sud Sardegna.
|
|
117
|
+
"SV", # Savona.
|
|
118
|
+
"TA", # Taranto.
|
|
119
|
+
"TE", # Teramo.
|
|
120
|
+
"TN", # Trento.
|
|
121
|
+
"TO", # Torino.
|
|
122
|
+
"TP", # Trapani.
|
|
123
|
+
"TR", # Terni.
|
|
124
|
+
"TS", # Trieste.
|
|
125
|
+
"TV", # Treviso.
|
|
126
|
+
"UD", # Udine.
|
|
127
|
+
"VA", # Varese.
|
|
128
|
+
"VB", # Verbano-Cusio-Ossola.
|
|
129
|
+
"VC", # Vercelli.
|
|
130
|
+
"VE", # Venezia.
|
|
131
|
+
"VI", # Vicenza.
|
|
132
|
+
"VR", # Verona.
|
|
133
|
+
"VT", # Viterbo.
|
|
134
|
+
"VV", # Vibo Valentia.
|
|
138
135
|
# Cities.
|
|
139
136
|
"Andria",
|
|
140
137
|
"Barletta",
|
|
@@ -150,6 +147,7 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
150
147
|
def __init__(self, *args, **kwargs):
|
|
151
148
|
ChristianHolidays.__init__(self)
|
|
152
149
|
InternationalHolidays.__init__(self)
|
|
150
|
+
StaticHolidays.__init__(self, cls=ItalyStaticHolidays)
|
|
153
151
|
super().__init__(*args, **kwargs)
|
|
154
152
|
|
|
155
153
|
def _populate_public_holidays(self):
|
|
@@ -159,6 +157,10 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
159
157
|
# Epiphany.
|
|
160
158
|
self._add_epiphany_day("Epifania del Signore")
|
|
161
159
|
|
|
160
|
+
if self._year <= 1976:
|
|
161
|
+
# Saint Joseph's Day.
|
|
162
|
+
self._add_saint_josephs_day("San Giuseppe")
|
|
163
|
+
|
|
162
164
|
# Easter Sunday.
|
|
163
165
|
self._add_easter_sunday("Pasqua di Resurrezione")
|
|
164
166
|
|
|
@@ -176,27 +178,39 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
176
178
|
# Republic Day.
|
|
177
179
|
self._add_holiday_jun_2("Festa della Repubblica")
|
|
178
180
|
|
|
181
|
+
if self._year <= 1976:
|
|
182
|
+
# Ascension Day.
|
|
183
|
+
self._add_ascension_thursday("Ascensione Nostro Signore")
|
|
184
|
+
|
|
185
|
+
# Saints Peter and Paul.
|
|
186
|
+
self._add_saints_peter_and_paul_day("Santi Pietro e Paolo")
|
|
187
|
+
|
|
188
|
+
# Corpus Christi.
|
|
189
|
+
self._add_corpus_christi_day("Corpus Domini")
|
|
190
|
+
|
|
179
191
|
# Assumption Of Mary Day.
|
|
180
192
|
self._add_assumption_of_mary_day("Assunzione della Vergine")
|
|
181
193
|
|
|
182
194
|
# All Saints' Day.
|
|
183
195
|
self._add_all_saints_day("Tutti i Santi")
|
|
184
196
|
|
|
185
|
-
|
|
197
|
+
if self._year <= 1976:
|
|
198
|
+
# National Unity and Armed Forces Day.
|
|
199
|
+
self._add_holiday_nov_4("Giornata dell'Unità Nazionale e delle Forze Armate")
|
|
200
|
+
|
|
201
|
+
# Immaculate Conception.
|
|
186
202
|
self._add_immaculate_conception_day("Immacolata Concezione")
|
|
187
203
|
|
|
188
204
|
# Christmas Day.
|
|
189
205
|
self._add_christmas_day("Natale")
|
|
190
206
|
|
|
191
|
-
self.
|
|
207
|
+
if self._year >= 1947:
|
|
208
|
+
# Saint Stephen's Day.
|
|
209
|
+
self._add_christmas_day_two("Santo Stefano")
|
|
192
210
|
|
|
193
211
|
if self.subdiv == "Forlì":
|
|
194
212
|
self._populate_subdiv_forli_public_holidays()
|
|
195
213
|
|
|
196
|
-
# Provinces holidays.
|
|
197
|
-
# https://it.wikipedia.org/wiki/Santi_patroni_cattolici_delle_citt%C3%A0_capoluogo_di_provincia_italiane
|
|
198
|
-
# Please maintain in alphabetical order for easy updating in the future.
|
|
199
|
-
|
|
200
214
|
def _populate_subdiv_ag_public_holidays(self):
|
|
201
215
|
self._add_holiday_feb_25("San Gerlando")
|
|
202
216
|
|
|
@@ -243,11 +257,12 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
243
257
|
self._add_holiday_oct_4("San Petronio")
|
|
244
258
|
|
|
245
259
|
def _populate_subdiv_br_public_holidays(self):
|
|
246
|
-
self._add_holiday_1st_sun_of_sep("San
|
|
260
|
+
self._add_holiday_1st_sun_of_sep("San Lorenzo da Brindisi")
|
|
247
261
|
|
|
248
262
|
def _populate_subdiv_bs_public_holidays(self):
|
|
249
263
|
self._add_holiday_feb_15("Santi Faustino e Giovita")
|
|
250
264
|
|
|
265
|
+
# Barletta-Andria-Trani
|
|
251
266
|
def _populate_subdiv_bt_public_holidays(self):
|
|
252
267
|
self._add_holiday_may_3("San Nicola Pellegrino")
|
|
253
268
|
self._add_holiday_3rd_sun_of_sep("San Riccardo di Andria")
|
|
@@ -293,6 +308,7 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
293
308
|
def _populate_subdiv_en_public_holidays(self):
|
|
294
309
|
self._add_holiday_jul_2("Madonna della Visitazione")
|
|
295
310
|
|
|
311
|
+
# Forlì-Cesena
|
|
296
312
|
def _populate_subdiv_fc_public_holidays(self):
|
|
297
313
|
self._add_holiday_feb_4("Madonna del Fuoco")
|
|
298
314
|
self._add_saint_johns_day("San Giovanni Battista")
|
|
@@ -307,8 +323,8 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
307
323
|
self._add_saint_johns_day("San Giovanni Battista")
|
|
308
324
|
|
|
309
325
|
def _populate_subdiv_fm_public_holidays(self):
|
|
310
|
-
|
|
311
|
-
self.
|
|
326
|
+
self._add_assumption_of_mary_day("Maria Santissima Assunta")
|
|
327
|
+
self._add_holiday_aug_16("Maria Santissima Assunta")
|
|
312
328
|
|
|
313
329
|
def _populate_subdiv_fr_public_holidays(self):
|
|
314
330
|
self._add_holiday_jun_20("San Silverio")
|
|
@@ -344,7 +360,8 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
344
360
|
self._add_holiday_jan_19("San Bassiano")
|
|
345
361
|
|
|
346
362
|
def _populate_subdiv_lt_public_holidays(self):
|
|
347
|
-
self._add_holiday_apr_25("San Marco
|
|
363
|
+
self._add_holiday_apr_25("San Marco Evangelista")
|
|
364
|
+
self._add_holiday_jul_6("Santa Maria Goretti")
|
|
348
365
|
|
|
349
366
|
def _populate_subdiv_lu_public_holidays(self):
|
|
350
367
|
self._add_holiday_jul_12("San Paolino di Lucca")
|
|
@@ -386,7 +403,7 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
386
403
|
self._add_holiday_feb_13("Sant'Archelao")
|
|
387
404
|
|
|
388
405
|
def _populate_subdiv_pa_public_holidays(self):
|
|
389
|
-
self._add_holiday_jul_15("
|
|
406
|
+
self._add_holiday_jul_15("Santa Rosalia")
|
|
390
407
|
|
|
391
408
|
def _populate_subdiv_pc_public_holidays(self):
|
|
392
409
|
self._add_holiday_jul_4("Sant'Antonino di Piacenza")
|
|
@@ -398,7 +415,8 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
398
415
|
self._add_holiday_oct_10("San Cetteo")
|
|
399
416
|
|
|
400
417
|
def _populate_subdiv_pg_public_holidays(self):
|
|
401
|
-
self.
|
|
418
|
+
self._add_holiday_aug_11("Santa Chiara d'Assisi")
|
|
419
|
+
self._add_holiday_oct_4("San Francesco d'Assisi")
|
|
402
420
|
|
|
403
421
|
def _populate_subdiv_pi_public_holidays(self):
|
|
404
422
|
self._add_holiday_jun_17("San Ranieri")
|
|
@@ -416,6 +434,7 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
416
434
|
def _populate_subdiv_pt_public_holidays(self):
|
|
417
435
|
self._add_saint_james_day("San Jacopo")
|
|
418
436
|
|
|
437
|
+
# Pesaro e Urbino
|
|
419
438
|
def _populate_subdiv_pu_public_holidays(self):
|
|
420
439
|
self._add_holiday_jun_1("San Crescentino")
|
|
421
440
|
self._add_holiday_sep_24("San Terenzio di Pesaro")
|
|
@@ -436,7 +455,8 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
436
455
|
self._add_holiday_nov_24("San Prospero Vescovo")
|
|
437
456
|
|
|
438
457
|
def _populate_subdiv_rg_public_holidays(self):
|
|
439
|
-
self._add_saint_georges_day("San Giorgio")
|
|
458
|
+
self._add_saint_georges_day("San Giorgio Martire")
|
|
459
|
+
self._add_holiday_aug_29("San Giovanni Battista")
|
|
440
460
|
|
|
441
461
|
def _populate_subdiv_ri_public_holidays(self):
|
|
442
462
|
self._add_holiday_dec_4("Santa Barbara")
|
|
@@ -469,6 +489,7 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
469
489
|
self._add_holiday_dec_6("San Nicola")
|
|
470
490
|
|
|
471
491
|
def _populate_subdiv_su_public_holidays(self):
|
|
492
|
+
# Carbonia.
|
|
472
493
|
self._add_holiday_4_days_past_2nd_sun_of_may("San Ponziano")
|
|
473
494
|
|
|
474
495
|
def _populate_subdiv_sv_public_holidays(self):
|
|
@@ -514,7 +535,7 @@ class Italy(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
514
535
|
self._add_holiday_apr_25("San Marco Evangelista")
|
|
515
536
|
|
|
516
537
|
def _populate_subdiv_vi_public_holidays(self):
|
|
517
|
-
self.
|
|
538
|
+
self._add_nativity_of_mary_day("Madonna di Monte Berico")
|
|
518
539
|
|
|
519
540
|
def _populate_subdiv_vr_public_holidays(self):
|
|
520
541
|
self._add_holiday_may_21("San Zeno")
|
|
@@ -553,3 +574,12 @@ class IT(Italy):
|
|
|
553
574
|
|
|
554
575
|
class ITA(Italy):
|
|
555
576
|
pass
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
class ItalyStaticHolidays:
|
|
580
|
+
# Anniversary of the Unification of Italy.
|
|
581
|
+
anniversary_of_unification = "Anniversario dell'Unità d'Italia"
|
|
582
|
+
special_public_holidays = {
|
|
583
|
+
1961: (MAR, 17, anniversary_of_unification),
|
|
584
|
+
2011: (MAR, 17, anniversary_of_unification),
|
|
585
|
+
}
|
holidays/countries/japan.py
CHANGED
|
@@ -11,18 +11,28 @@
|
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
13
|
from datetime import date
|
|
14
|
-
from datetime import timedelta as td
|
|
15
14
|
from gettext import gettext as tr
|
|
16
|
-
from typing import Tuple
|
|
17
|
-
|
|
18
|
-
from holidays.calendars.gregorian import
|
|
15
|
+
from typing import Set, Tuple
|
|
16
|
+
|
|
17
|
+
from holidays.calendars.gregorian import (
|
|
18
|
+
FEB,
|
|
19
|
+
MAR,
|
|
20
|
+
APR,
|
|
21
|
+
MAY,
|
|
22
|
+
JUN,
|
|
23
|
+
JUL,
|
|
24
|
+
AUG,
|
|
25
|
+
SEP,
|
|
26
|
+
OCT,
|
|
27
|
+
NOV,
|
|
28
|
+
_timedelta,
|
|
29
|
+
)
|
|
19
30
|
from holidays.constants import BANK, PUBLIC
|
|
20
31
|
from holidays.groups import InternationalHolidays, StaticHolidays
|
|
21
|
-
from holidays.
|
|
22
|
-
from holidays.holiday_base import HolidayBase
|
|
32
|
+
from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_WORKDAY
|
|
23
33
|
|
|
24
34
|
|
|
25
|
-
class Japan(
|
|
35
|
+
class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
|
|
26
36
|
"""
|
|
27
37
|
References:
|
|
28
38
|
|
|
@@ -38,8 +48,33 @@ class Japan(HolidayBase, InternationalHolidays, StaticHolidays):
|
|
|
38
48
|
def __init__(self, *args, **kwargs) -> None:
|
|
39
49
|
InternationalHolidays.__init__(self)
|
|
40
50
|
StaticHolidays.__init__(self, cls=JapanStaticHolidays)
|
|
51
|
+
kwargs.setdefault("observed_rule", SUN_TO_NEXT_WORKDAY)
|
|
41
52
|
super().__init__(*args, **kwargs)
|
|
42
53
|
|
|
54
|
+
def _populate_observed(self, dts: Set[date]) -> None:
|
|
55
|
+
# When a national holiday falls on Sunday, next working day
|
|
56
|
+
# shall become a public holiday (振替休日) - substitute holidays.
|
|
57
|
+
for dt in sorted(dts):
|
|
58
|
+
is_observed, dt_observed = self._add_observed(
|
|
59
|
+
dt,
|
|
60
|
+
# Substitute Holiday.
|
|
61
|
+
name=tr("振替休日"),
|
|
62
|
+
show_observed_label=False,
|
|
63
|
+
)
|
|
64
|
+
if is_observed:
|
|
65
|
+
dts.add(dt_observed) # type: ignore[arg-type]
|
|
66
|
+
|
|
67
|
+
# A weekday between national holidays becomes
|
|
68
|
+
# a holiday too (国民の休日) - national holidays.
|
|
69
|
+
for dt in dts:
|
|
70
|
+
if _timedelta(dt, +2) not in dts:
|
|
71
|
+
continue
|
|
72
|
+
dt_observed = _timedelta(dt, +1)
|
|
73
|
+
if self._is_sunday(dt_observed) or dt_observed in dts:
|
|
74
|
+
continue
|
|
75
|
+
# National Holiday.
|
|
76
|
+
self._add_holiday(tr("国民の休日"), dt_observed)
|
|
77
|
+
|
|
43
78
|
def _populate_public_holidays(self):
|
|
44
79
|
if self._year < 1949 or self._year > 2099:
|
|
45
80
|
raise NotImplementedError
|
|
@@ -161,32 +196,7 @@ class Japan(HolidayBase, InternationalHolidays, StaticHolidays):
|
|
|
161
196
|
dts_observed.add(self._add_holiday_dec_23(tr("天皇誕生日")))
|
|
162
197
|
|
|
163
198
|
if self.observed:
|
|
164
|
-
|
|
165
|
-
self.special_public_holidays.get(self._year, ())
|
|
166
|
-
):
|
|
167
|
-
dts_observed.add(date(self._year, month, day))
|
|
168
|
-
|
|
169
|
-
# When a national holiday falls on Sunday, next working day
|
|
170
|
-
# shall become a public holiday (振替休日) - substitute holidays.
|
|
171
|
-
for dt in dts_observed.copy():
|
|
172
|
-
if not self._is_sunday(dt):
|
|
173
|
-
continue
|
|
174
|
-
dt_observed = dt + td(days=+1)
|
|
175
|
-
while dt_observed in dts_observed:
|
|
176
|
-
dt_observed += td(days=+1)
|
|
177
|
-
# Substitute Holiday.
|
|
178
|
-
dts_observed.add(self._add_holiday(tr("振替休日"), dt_observed))
|
|
179
|
-
|
|
180
|
-
# A weekday between national holidays becomes
|
|
181
|
-
# a holiday too (国民の休日) - citizens' holidays.
|
|
182
|
-
for dt in dts_observed:
|
|
183
|
-
if dt + td(days=+2) not in dts_observed:
|
|
184
|
-
continue
|
|
185
|
-
dt_observed = dt + td(days=+1)
|
|
186
|
-
if self._is_sunday(dt_observed) or dt_observed in dts_observed:
|
|
187
|
-
continue
|
|
188
|
-
# National Holiday.
|
|
189
|
-
self._add_holiday(tr("国民の休日"), dt_observed)
|
|
199
|
+
self._populate_observed(dts_observed)
|
|
190
200
|
|
|
191
201
|
def _populate_bank_holidays(self):
|
|
192
202
|
if self._year < 1949 or self._year > 2099:
|
|
@@ -235,6 +245,8 @@ class JPN(Japan):
|
|
|
235
245
|
|
|
236
246
|
|
|
237
247
|
class JapanStaticHolidays:
|
|
248
|
+
national_holiday = tr("国民の休日")
|
|
249
|
+
|
|
238
250
|
special_public_holidays = {
|
|
239
251
|
1959: (APR, 10, tr("結婚の儀")), # The Crown Prince marriage ceremony.
|
|
240
252
|
1989: (FEB, 24, tr("大喪の礼")), # State Funeral of Emperor Shōwa.
|
|
@@ -245,3 +257,10 @@ class JapanStaticHolidays:
|
|
|
245
257
|
(OCT, 22, tr("即位礼正殿の儀が行われる日")), # Enthronement ceremony.
|
|
246
258
|
),
|
|
247
259
|
}
|
|
260
|
+
|
|
261
|
+
special_public_holidays_observed = {
|
|
262
|
+
2019: (
|
|
263
|
+
(APR, 30, national_holiday),
|
|
264
|
+
(MAY, 2, national_holiday),
|
|
265
|
+
),
|
|
266
|
+
}
|