holidays 0.49__py3-none-any.whl → 0.51__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/countries/__init__.py +1 -0
- holidays/countries/aruba.py +2 -2
- holidays/countries/azerbaijan.py +1 -1
- holidays/countries/bahamas.py +4 -4
- holidays/countries/bangladesh.py +1 -1
- holidays/countries/belarus.py +1 -1
- holidays/countries/belize.py +1 -1
- holidays/countries/botswana.py +19 -9
- holidays/countries/brazil.py +14 -8
- holidays/countries/brunei.py +1 -1
- holidays/countries/canada.py +3 -3
- holidays/countries/chile.py +14 -11
- holidays/countries/curacao.py +2 -2
- holidays/countries/georgia.py +17 -1
- holidays/countries/greenland.py +96 -0
- holidays/countries/hongkong.py +2 -2
- holidays/countries/india.py +29 -23
- holidays/countries/ireland.py +1 -1
- holidays/countries/isle_of_man.py +3 -8
- holidays/countries/israel.py +1 -2
- holidays/countries/italy.py +161 -129
- holidays/countries/japan.py +38 -30
- holidays/countries/jersey.py +9 -7
- holidays/countries/malaysia.py +5 -5
- holidays/countries/mexico.py +1 -1
- holidays/countries/monaco.py +5 -7
- holidays/countries/papua_new_guinea.py +7 -6
- holidays/countries/russia.py +18 -4
- holidays/countries/saudi_arabia.py +1 -2
- holidays/countries/sweden.py +1 -1
- holidays/countries/switzerland.py +17 -15
- holidays/countries/tanzania.py +10 -10
- holidays/countries/tonga.py +10 -10
- holidays/countries/turkey.py +1 -1
- holidays/countries/united_arab_emirates.py +3 -3
- holidays/countries/united_states.py +4 -5
- holidays/deprecation.py +33 -0
- 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/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/{pap → pap_AW}/LC_MESSAGES/AW.mo +0 -0
- holidays/locale/{pap → pap_AW}/LC_MESSAGES/AW.po +1 -1
- holidays/locale/{pap → pap_CW}/LC_MESSAGES/CW.mo +0 -0
- holidays/locale/{pap → pap_CW}/LC_MESSAGES/CW.po +2 -2
- 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/observed_holiday_base.py +42 -25
- holidays/registry.py +11 -1
- holidays/utils.py +1 -1
- {holidays-0.49.dist-info → holidays-0.51.dist-info}/AUTHORS +3 -0
- {holidays-0.49.dist-info → holidays-0.51.dist-info}/METADATA +15 -10
- {holidays-0.49.dist-info → holidays-0.51.dist-info}/RECORD +67 -59
- {holidays-0.49.dist-info → holidays-0.51.dist-info}/LICENSE +0 -0
- {holidays-0.49.dist-info → holidays-0.51.dist-info}/WHEEL +0 -0
- {holidays-0.49.dist-info → holidays-0.51.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
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 AUTHORS file)
|
|
8
|
+
# dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
|
|
9
|
+
# ryanss <ryanssdev@icloud.com> (c) 2014-2017
|
|
10
|
+
# Website: https://github.com/vacanza/python-holidays
|
|
11
|
+
# License: MIT (see LICENSE file)
|
|
12
|
+
#
|
|
13
|
+
# Greenland holidays.
|
|
14
|
+
#
|
|
15
|
+
msgid ""
|
|
16
|
+
msgstr ""
|
|
17
|
+
"Project-Id-Version: Python Holidays 0.50\n"
|
|
18
|
+
"POT-Creation-Date: 2023-02-15 08:13-0800\n"
|
|
19
|
+
"PO-Revision-Date: 2024-05-30 16:36+0200\n"
|
|
20
|
+
"Last-Translator: ~Klintrup <github@klintrup.dk>\n"
|
|
21
|
+
"Language-Team: Python Holidays localization team\n"
|
|
22
|
+
"Language: kl\n"
|
|
23
|
+
"MIME-Version: 1.0\n"
|
|
24
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
25
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
26
|
+
"Generated-By: Lingua 4.15.0\n"
|
|
27
|
+
"X-Generator: Poedit 3.2.2\n"
|
|
28
|
+
|
|
29
|
+
#. New Year's Day.
|
|
30
|
+
msgid "Ukioq nutaaq"
|
|
31
|
+
msgstr ""
|
|
32
|
+
|
|
33
|
+
#. Maundy Thursday.
|
|
34
|
+
msgid "Sisamanngornermi illernartumi"
|
|
35
|
+
msgstr ""
|
|
36
|
+
|
|
37
|
+
#. Easter Sunday.
|
|
38
|
+
msgid "Poorskimi"
|
|
39
|
+
msgstr ""
|
|
40
|
+
|
|
41
|
+
#. Easter Monday.
|
|
42
|
+
msgid "Poorskimi ullut aappaat"
|
|
43
|
+
msgstr ""
|
|
44
|
+
|
|
45
|
+
#. Great Day of Prayers.
|
|
46
|
+
msgid "Ulloq qinuffiusoq"
|
|
47
|
+
msgstr ""
|
|
48
|
+
|
|
49
|
+
#. Ascension Day.
|
|
50
|
+
msgid "Ulloq Kristusip qilaliarnera"
|
|
51
|
+
msgstr ""
|
|
52
|
+
|
|
53
|
+
#. Whit Sunday.
|
|
54
|
+
msgid "Piinsip ullua"
|
|
55
|
+
msgstr ""
|
|
56
|
+
|
|
57
|
+
#. Whit Monday.
|
|
58
|
+
msgid "Piinsip ulluisa aappaanni"
|
|
59
|
+
msgstr ""
|
|
60
|
+
|
|
61
|
+
#. Christmas Day.
|
|
62
|
+
msgid "Juulli"
|
|
63
|
+
msgstr ""
|
|
64
|
+
|
|
65
|
+
#. Second Day of Christmas.
|
|
66
|
+
msgid "Juullip aappaa"
|
|
67
|
+
msgstr ""
|
|
68
|
+
|
|
69
|
+
#. International Workers' Day.
|
|
70
|
+
msgid "Sulisartut ulluat"
|
|
71
|
+
msgstr ""
|
|
72
|
+
|
|
73
|
+
#. Christmas Eve.
|
|
74
|
+
msgid "Juulliaqqami"
|
|
75
|
+
msgstr ""
|
|
76
|
+
|
|
77
|
+
#. New Year's Eve.
|
|
78
|
+
msgid "Ukiortaami"
|
|
79
|
+
msgstr ""
|
|
80
|
+
|
|
81
|
+
#. National Day.
|
|
82
|
+
msgid "Ullortuneq"
|
|
83
|
+
msgstr ""
|
|
84
|
+
|
|
85
|
+
#. Good Friday.
|
|
86
|
+
msgid "Tallimanngorneq ajortorsiorneq"
|
|
87
|
+
msgstr ""
|
|
88
|
+
|
|
89
|
+
#. Epiphany.
|
|
90
|
+
msgid "Mitaarneq"
|
|
91
|
+
msgstr ""
|
|
Binary file
|
|
@@ -19,7 +19,7 @@ msgstr ""
|
|
|
19
19
|
"PO-Revision-Date: \n"
|
|
20
20
|
"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
|
|
21
21
|
"Language-Team: Python Holidays localization team\n"
|
|
22
|
-
"Language:
|
|
22
|
+
"Language: pap_AW\n"
|
|
23
23
|
"MIME-Version: 1.0\n"
|
|
24
24
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
25
25
|
"Content-Transfer-Encoding: 8bit\n"
|
|
Binary file
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# Website: https://github.com/vacanza/python-holidays
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
#
|
|
13
|
-
#
|
|
13
|
+
# Curaçao holidays.
|
|
14
14
|
#
|
|
15
15
|
msgid ""
|
|
16
16
|
msgstr ""
|
|
@@ -19,7 +19,7 @@ msgstr ""
|
|
|
19
19
|
"PO-Revision-Date: \n"
|
|
20
20
|
"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
|
|
21
21
|
"Language-Team: Python Holidays localization team\n"
|
|
22
|
-
"Language:
|
|
22
|
+
"Language: pap_CW\n"
|
|
23
23
|
"MIME-Version: 1.0\n"
|
|
24
24
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
25
25
|
"Content-Transfer-Encoding: 8bit\n"
|
|
Binary file
|
|
@@ -16,7 +16,7 @@ msgid ""
|
|
|
16
16
|
msgstr ""
|
|
17
17
|
"Project-Id-Version: Python Holidays 0.29\n"
|
|
18
18
|
"POT-Creation-Date: 2023-02-15 08:13-0800\n"
|
|
19
|
-
"PO-Revision-Date:
|
|
19
|
+
"PO-Revision-Date: 2024-05-21 13:26+0700\n"
|
|
20
20
|
"Last-Translator: ~Jhellico <jhellico@gmail.com>\n"
|
|
21
21
|
"Language-Team: Python Holidays localization team\n"
|
|
22
22
|
"Language: ru\n"
|
|
@@ -25,7 +25,7 @@ msgstr ""
|
|
|
25
25
|
"Content-Transfer-Encoding: 8bit\n"
|
|
26
26
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
|
27
27
|
"Generated-By: Lingua 4.15.0\n"
|
|
28
|
-
"X-Generator: Poedit 3.
|
|
28
|
+
"X-Generator: Poedit 3.4.4\n"
|
|
29
29
|
|
|
30
30
|
#. New Year's Day.
|
|
31
31
|
msgid "Новый год"
|
|
@@ -80,3 +80,12 @@ msgstr ""
|
|
|
80
80
|
#. Anniversary of the Great October Socialist Revolution.
|
|
81
81
|
msgid "Годовщина Великой Октябрьской социалистической революции"
|
|
82
82
|
msgstr ""
|
|
83
|
+
|
|
84
|
+
#. Date format (see strftime() Format Codes).
|
|
85
|
+
msgid "%d.%m.%Y"
|
|
86
|
+
msgstr ""
|
|
87
|
+
|
|
88
|
+
#. Day off (substituted from %s).
|
|
89
|
+
#, c-format
|
|
90
|
+
msgid "Выходной (перенесено с %s)"
|
|
91
|
+
msgstr ""
|
|
Binary file
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
#
|
|
15
15
|
msgid ""
|
|
16
16
|
msgstr ""
|
|
17
|
-
"Project-Id-Version: Python Holidays 0.
|
|
17
|
+
"Project-Id-Version: Python Holidays 0.50\n"
|
|
18
18
|
"POT-Creation-Date: 2023-07-18 17:31+0300\n"
|
|
19
|
-
"PO-Revision-Date:
|
|
20
|
-
"Last-Translator:
|
|
19
|
+
"PO-Revision-Date: 2024-05-23 11:01+0700\n"
|
|
20
|
+
"Last-Translator: PPsyrius <ppsyrius@ppsyrius.dev>\n"
|
|
21
21
|
"Language-Team: Python Holidays localization team\n"
|
|
22
22
|
"Language: uk\n"
|
|
23
23
|
"MIME-Version: 1.0\n"
|
|
@@ -25,7 +25,7 @@ msgstr ""
|
|
|
25
25
|
"Content-Transfer-Encoding: 8bit\n"
|
|
26
26
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
|
|
27
27
|
"Generated-By: Lingua 4.15.0\n"
|
|
28
|
-
"X-Generator: Poedit 3.
|
|
28
|
+
"X-Generator: Poedit 3.4.4\n"
|
|
29
29
|
|
|
30
30
|
#. New Year's Day.
|
|
31
31
|
msgid "ახალი წელი"
|
|
@@ -90,3 +90,7 @@ msgstr "Свято Светіцховлоба, Ризи Господньої"
|
|
|
90
90
|
#. Saint George's Day.
|
|
91
91
|
msgid "გიორგობა"
|
|
92
92
|
msgstr "День святого Георгія"
|
|
93
|
+
|
|
94
|
+
#. Day of Family Sanctity and Respect for Parents.
|
|
95
|
+
msgid "ოჯახის სიწმინდისა და მშობლების პატივისცემის დღე"
|
|
96
|
+
msgstr "День святості родини та поваги до батьків"
|
|
@@ -27,9 +27,11 @@ class ObservedRule(Dict[int, Optional[int]]):
|
|
|
27
27
|
# Observance calculation rules: +7 - next workday, -7 - previous workday.
|
|
28
28
|
# Single days.
|
|
29
29
|
MON_TO_NEXT_TUE = ObservedRule({MON: +1})
|
|
30
|
+
MON_ONLY = ObservedRule({TUE: None, WED: None, THU: None, FRI: None, SAT: None, SUN: None})
|
|
30
31
|
|
|
31
32
|
TUE_TO_PREV_MON = ObservedRule({TUE: -1})
|
|
32
33
|
TUE_TO_PREV_FRI = ObservedRule({TUE: -4})
|
|
34
|
+
TUE_TO_NONE = ObservedRule({TUE: None})
|
|
33
35
|
|
|
34
36
|
WED_TO_PREV_MON = ObservedRule({WED: -2})
|
|
35
37
|
WED_TO_NEXT_FRI = ObservedRule({WED: +2})
|
|
@@ -45,6 +47,7 @@ FRI_TO_NEXT_MON = ObservedRule({FRI: +3})
|
|
|
45
47
|
FRI_TO_NEXT_TUE = ObservedRule({FRI: +4})
|
|
46
48
|
FRI_TO_NEXT_SAT = ObservedRule({FRI: +1})
|
|
47
49
|
FRI_TO_NEXT_WORKDAY = ObservedRule({FRI: +7})
|
|
50
|
+
FRI_ONLY = ObservedRule({MON: None, TUE: None, WED: None, THU: None, SAT: None, SUN: None})
|
|
48
51
|
|
|
49
52
|
SAT_TO_PREV_THU = ObservedRule({SAT: -2})
|
|
50
53
|
SAT_TO_PREV_FRI = ObservedRule({SAT: -1})
|
|
@@ -59,6 +62,7 @@ SUN_TO_NEXT_MON = ObservedRule({SUN: +1})
|
|
|
59
62
|
SUN_TO_NEXT_TUE = ObservedRule({SUN: +2})
|
|
60
63
|
SUN_TO_NEXT_WED = ObservedRule({SUN: +3})
|
|
61
64
|
SUN_TO_NEXT_WORKDAY = ObservedRule({SUN: +7})
|
|
65
|
+
SUN_TO_NONE = ObservedRule({SUN: None})
|
|
62
66
|
|
|
63
67
|
# Multiple days.
|
|
64
68
|
ALL_TO_NEAREST_MON = ObservedRule({TUE: -1, WED: -2, THU: -3, FRI: +3, SAT: +2, SUN: +1})
|
|
@@ -70,6 +74,8 @@ WORKDAY_TO_NEAREST_MON = ObservedRule({TUE: -1, WED: -2, THU: -3, FRI: +3})
|
|
|
70
74
|
WORKDAY_TO_NEXT_MON = ObservedRule({TUE: +6, WED: +5, THU: +4, FRI: +3})
|
|
71
75
|
WORKDAY_TO_NEXT_WORKDAY = ObservedRule({MON: +7, TUE: +7, WED: +7, THU: +7, FRI: +7})
|
|
72
76
|
|
|
77
|
+
MON_FRI_ONLY = ObservedRule({TUE: None, WED: None, THU: None, SAT: None, SUN: None})
|
|
78
|
+
|
|
73
79
|
TUE_WED_TO_PREV_MON = ObservedRule({TUE: -1, WED: -2})
|
|
74
80
|
TUE_WED_THU_TO_PREV_MON = ObservedRule({TUE: -1, WED: -2, THU: -3})
|
|
75
81
|
|
|
@@ -96,10 +102,11 @@ class ObservedHolidayBase(HolidayBase):
|
|
|
96
102
|
|
|
97
103
|
observed_label = "%s"
|
|
98
104
|
|
|
99
|
-
def __init__(
|
|
100
|
-
self
|
|
105
|
+
def __init__(
|
|
106
|
+
self, observed_rule: ObservedRule = None, observed_since: int = None, *args, **kwargs
|
|
107
|
+
):
|
|
108
|
+
self._observed_rule = observed_rule or ObservedRule()
|
|
101
109
|
self._observed_since = observed_since
|
|
102
|
-
|
|
103
110
|
super().__init__(*args, **kwargs)
|
|
104
111
|
|
|
105
112
|
def _is_observed(self, *args, **kwargs) -> bool:
|
|
@@ -129,7 +136,11 @@ class ObservedHolidayBase(HolidayBase):
|
|
|
129
136
|
return dt
|
|
130
137
|
|
|
131
138
|
def _add_observed(
|
|
132
|
-
self,
|
|
139
|
+
self,
|
|
140
|
+
dt: DateArg,
|
|
141
|
+
name: Optional[str] = None,
|
|
142
|
+
rule: Optional[ObservedRule] = None,
|
|
143
|
+
show_observed_label: bool = True,
|
|
133
144
|
) -> Tuple[bool, Optional[date]]:
|
|
134
145
|
dt = dt if isinstance(dt, date) else date(self._year, *dt)
|
|
135
146
|
|
|
@@ -145,34 +156,40 @@ class ObservedHolidayBase(HolidayBase):
|
|
|
145
156
|
self.pop(dt)
|
|
146
157
|
return False, None
|
|
147
158
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
if show_observed_label:
|
|
160
|
+
estimated_label = self.tr(getattr(self, "estimated_label", ""))
|
|
161
|
+
observed_label = self.tr(
|
|
162
|
+
getattr(
|
|
163
|
+
self,
|
|
164
|
+
"observed_label_before" if dt_observed < dt else "observed_label",
|
|
165
|
+
self.observed_label,
|
|
166
|
+
)
|
|
154
167
|
)
|
|
155
|
-
)
|
|
156
168
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
+
estimated_label_text = estimated_label.strip("%s ()")
|
|
170
|
+
# Use observed_estimated_label instead of observed_label for estimated dates.
|
|
171
|
+
for name in (name,) if name else self.get_list(dt):
|
|
172
|
+
holiday_name = self.tr(name)
|
|
173
|
+
observed_estimated_label = None
|
|
174
|
+
if len(estimated_label_text) > 0 and estimated_label_text in holiday_name:
|
|
175
|
+
holiday_name = holiday_name.replace(f"({estimated_label_text})", "").strip()
|
|
176
|
+
observed_estimated_label = self.tr(getattr(self, "observed_estimated_label"))
|
|
177
|
+
|
|
178
|
+
super()._add_holiday(
|
|
179
|
+
(observed_estimated_label or observed_label) % holiday_name, dt_observed
|
|
180
|
+
)
|
|
181
|
+
else:
|
|
182
|
+
for name in (name,) if name else self.get_list(dt):
|
|
183
|
+
super()._add_holiday(name, dt_observed)
|
|
169
184
|
|
|
170
185
|
return True, dt_observed
|
|
171
186
|
|
|
172
187
|
def _move_holiday(
|
|
173
|
-
self, dt: date, rule: Optional[ObservedRule] = None
|
|
188
|
+
self, dt: date, rule: Optional[ObservedRule] = None, show_observed_label: bool = True
|
|
174
189
|
) -> Tuple[bool, Optional[date]]:
|
|
175
|
-
is_observed, dt_observed = self._add_observed(
|
|
190
|
+
is_observed, dt_observed = self._add_observed(
|
|
191
|
+
dt, rule=rule, show_observed_label=show_observed_label
|
|
192
|
+
)
|
|
176
193
|
if is_observed:
|
|
177
194
|
self.pop(dt)
|
|
178
195
|
return is_observed, dt_observed if is_observed else dt
|
holidays/registry.py
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
# License: MIT (see LICENSE file)
|
|
12
12
|
|
|
13
13
|
import importlib
|
|
14
|
+
from threading import RLock
|
|
14
15
|
from typing import Any, Dict, Iterable, Optional, Tuple, Union
|
|
15
16
|
|
|
16
17
|
from holidays.holiday_base import HolidayBase
|
|
@@ -74,6 +75,7 @@ COUNTRIES: RegistryDict = {
|
|
|
74
75
|
"germany": ("Germany", "DE", "DEU"),
|
|
75
76
|
"ghana": ("Ghana", "GH", "GHA"),
|
|
76
77
|
"greece": ("Greece", "GR", "GRC"),
|
|
78
|
+
"greenland": ("Greenland", "GL", "GRL"),
|
|
77
79
|
"guam": ("Guam", "GU", "GUM", "HolidaysGU"),
|
|
78
80
|
"guatemala": ("Guatemala", "GT", "GUA"),
|
|
79
81
|
"honduras": ("Honduras", "HN", "HND"),
|
|
@@ -178,6 +180,11 @@ FINANCIAL: RegistryDict = {
|
|
|
178
180
|
"ny_stock_exchange": ("NewYorkStockExchange", "NYSE", "XNYS"),
|
|
179
181
|
}
|
|
180
182
|
|
|
183
|
+
# A re-entrant lock. Once a thread has acquired a re-entrant lock,
|
|
184
|
+
# the same thread may acquire it again without blocking.
|
|
185
|
+
# https://docs.python.org/3/library/threading.html#rlock-objects
|
|
186
|
+
IMPORT_LOCK = RLock()
|
|
187
|
+
|
|
181
188
|
|
|
182
189
|
class EntityLoader:
|
|
183
190
|
"""Country and financial holidays entities lazy loader."""
|
|
@@ -223,7 +230,10 @@ class EntityLoader:
|
|
|
223
230
|
def get_entity(self) -> Optional[HolidayBase]:
|
|
224
231
|
"""Return lazy-loaded entity."""
|
|
225
232
|
if self.entity is None:
|
|
226
|
-
|
|
233
|
+
# Avoid deadlock due to importlib.import_module not being thread-safe by caching all
|
|
234
|
+
# the first imports in a dedicated thread.
|
|
235
|
+
with IMPORT_LOCK:
|
|
236
|
+
self.entity = getattr(importlib.import_module(self.module_name), self.entity_name)
|
|
227
237
|
|
|
228
238
|
return self.entity
|
|
229
239
|
|
holidays/utils.py
CHANGED
|
@@ -261,7 +261,7 @@ def financial_holidays(
|
|
|
261
261
|
raise NotImplementedError(f"Financial market {market} not available")
|
|
262
262
|
|
|
263
263
|
|
|
264
|
-
def CountryHoliday(
|
|
264
|
+
def CountryHoliday( # noqa: N802
|
|
265
265
|
country: str,
|
|
266
266
|
subdiv: Optional[str] = None,
|
|
267
267
|
years: Optional[Union[int, Iterable[int]]] = None,
|
|
@@ -9,6 +9,7 @@ Alejandro Antunes
|
|
|
9
9
|
Alexander Schulze
|
|
10
10
|
Alexandre Carvalho
|
|
11
11
|
Anders Wenhaug
|
|
12
|
+
Andrei Klimenko
|
|
12
13
|
Andres Marrugo
|
|
13
14
|
Anthony Rose
|
|
14
15
|
Anton Daitche
|
|
@@ -52,6 +53,7 @@ Heikki Orsila
|
|
|
52
53
|
Henrik Sozzi
|
|
53
54
|
Hugh McNamara
|
|
54
55
|
Hugo van Kemenade
|
|
56
|
+
Isabelle COWAN-BERGMAN
|
|
55
57
|
Jacky Han
|
|
56
58
|
Jacob Punter
|
|
57
59
|
Jaemin Kim
|
|
@@ -124,6 +126,7 @@ Simon Gurcke
|
|
|
124
126
|
Sugato Ray
|
|
125
127
|
Sylvain Pasche
|
|
126
128
|
Sylvia van Os
|
|
129
|
+
Søren Klintrup
|
|
127
130
|
Takeshi Osoekawa
|
|
128
131
|
Tasnim Nishat Islam
|
|
129
132
|
Tewodros Meshesha
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: holidays
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.51
|
|
4
4
|
Summary: Generate and work with holidays in Python
|
|
5
5
|
Author-email: Maurizio Montel <dr.prodigy.github@gmail.com>
|
|
6
6
|
Maintainer-email: Arkadii Yakovets <ark@cho.red>, Serhii Murza <jhellico@gmail.com>
|
|
@@ -156,13 +156,13 @@ Quick Start
|
|
|
156
156
|
from datetime import date
|
|
157
157
|
import holidays
|
|
158
158
|
|
|
159
|
-
us_holidays = holidays.US() # this is a dict
|
|
159
|
+
us_holidays = holidays.US() # this is a dict-like object
|
|
160
160
|
# the below is the same, but takes a string:
|
|
161
|
-
us_holidays = holidays.country_holidays('US') # this is a dict
|
|
161
|
+
us_holidays = holidays.country_holidays('US') # this is a dict-like object
|
|
162
162
|
|
|
163
|
-
nyse_holidays = holidays.NYSE() # this is a dict
|
|
163
|
+
nyse_holidays = holidays.NYSE() # this is a dict-like object
|
|
164
164
|
# the below is the same, but takes a string:
|
|
165
|
-
nyse_holidays = holidays.financial_holidays('NYSE') # this is a dict
|
|
165
|
+
nyse_holidays = holidays.financial_holidays('NYSE') # this is a dict-like object
|
|
166
166
|
|
|
167
167
|
date(2015, 1, 1) in us_holidays # True
|
|
168
168
|
date(2015, 1, 2) in us_holidays # False
|
|
@@ -199,7 +199,7 @@ Available Countries
|
|
|
199
199
|
.. _ISO 639-1 code: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
|
200
200
|
.. _ISO 639-2 code: https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
|
|
201
201
|
|
|
202
|
-
We currently support
|
|
202
|
+
We currently support 148 country codes. The standard way to refer to a country
|
|
203
203
|
is by using its `ISO 3166-1 alpha-2 code`_, the same used for domain names, and
|
|
204
204
|
for a subdivision its `ISO 3166-2 code`_. Some countries have common or foreign
|
|
205
205
|
names or abbreviations as aliases for their subdivisions. These are defined in
|
|
@@ -271,7 +271,7 @@ All other default values are highlighted with bold:
|
|
|
271
271
|
* - Aruba
|
|
272
272
|
- AW
|
|
273
273
|
-
|
|
274
|
-
- en_US, nl, **
|
|
274
|
+
- en_US, nl, **pap_AW**, uk
|
|
275
275
|
-
|
|
276
276
|
* - Australia
|
|
277
277
|
- AU
|
|
@@ -416,7 +416,7 @@ All other default values are highlighted with bold:
|
|
|
416
416
|
* - Curacao
|
|
417
417
|
- CW
|
|
418
418
|
-
|
|
419
|
-
- en_US, nl, **
|
|
419
|
+
- en_US, nl, **pap_CW**, uk
|
|
420
420
|
-
|
|
421
421
|
* - Cyprus
|
|
422
422
|
- CY
|
|
@@ -492,7 +492,7 @@ All other default values are highlighted with bold:
|
|
|
492
492
|
- GE
|
|
493
493
|
-
|
|
494
494
|
- en_US, **ka**, uk
|
|
495
|
-
-
|
|
495
|
+
- GOVERNMENT
|
|
496
496
|
* - Germany
|
|
497
497
|
- DE
|
|
498
498
|
- States: BB, BE, BW, BY, BYP, HB, HE, HH, MV, NI, NW, RP, SH, SL, SN, ST, TH
|
|
@@ -508,6 +508,11 @@ All other default values are highlighted with bold:
|
|
|
508
508
|
-
|
|
509
509
|
- **el**, en_US, uk
|
|
510
510
|
- HALF_DAY
|
|
511
|
+
* - Greenland
|
|
512
|
+
- GL
|
|
513
|
+
-
|
|
514
|
+
- da, en_US, **kl**
|
|
515
|
+
- OPTIONAL
|
|
511
516
|
* - Guam
|
|
512
517
|
- GU
|
|
513
518
|
- Can also be loaded as country US, subdivision GU
|
|
@@ -540,7 +545,7 @@ All other default values are highlighted with bold:
|
|
|
540
545
|
-
|
|
541
546
|
* - India
|
|
542
547
|
- IN
|
|
543
|
-
- States: AN, AP, AR, AS, BR, CG, CH,
|
|
548
|
+
- States: AN, AP, AR, AS, BR, CG, CH, DH, DL, GA, GJ, HP, HR, JH, JK, KA, KL, LA, LD, MH, ML, MN, MP, MZ, NL, OD, PB, PY, RJ, SK, TN, TR, TS, UK, UP, WB
|
|
544
549
|
-
|
|
545
550
|
-
|
|
546
551
|
* - Indonesia
|