holidays 0.41__py3-none-any.whl → 0.43__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 +1 -1
- holidays/countries/__init__.py +2 -0
- holidays/countries/algeria.py +9 -8
- holidays/countries/angola.py +2 -4
- holidays/countries/argentina.py +2 -2
- holidays/countries/armenia.py +1 -1
- holidays/countries/aruba.py +2 -4
- holidays/countries/austria.py +82 -9
- holidays/countries/bahrain.py +8 -11
- holidays/countries/belarus.py +1 -1
- holidays/countries/belgium.py +2 -2
- holidays/countries/bosnia_and_herzegovina.py +16 -16
- holidays/countries/cambodia.py +1 -4
- holidays/countries/canada.py +1 -1
- holidays/countries/chile.py +5 -5
- holidays/countries/china.py +15 -2
- holidays/countries/colombia.py +3 -3
- holidays/countries/costa_rica.py +20 -16
- holidays/countries/croatia.py +15 -7
- holidays/countries/cuba.py +2 -2
- holidays/countries/denmark.py +1 -2
- holidays/countries/djibouti.py +2 -2
- holidays/countries/dominican_republic.py +1 -1
- holidays/countries/ecuador.py +1 -1
- holidays/countries/egypt.py +27 -29
- holidays/countries/ethiopia.py +4 -3
- holidays/countries/georgia.py +1 -1
- holidays/countries/germany.py +0 -1
- holidays/countries/ghana.py +97 -0
- holidays/countries/greece.py +14 -6
- holidays/countries/guatemala.py +10 -10
- holidays/countries/honduras.py +1 -1
- holidays/countries/hungary.py +1 -2
- holidays/countries/indonesia.py +4 -3
- holidays/countries/iran.py +1 -1
- holidays/countries/ireland.py +27 -23
- holidays/countries/isle_of_man.py +4 -0
- holidays/countries/jersey.py +234 -0
- holidays/countries/laos.py +4 -4
- holidays/countries/latvia.py +1 -1
- holidays/countries/liechtenstein.py +2 -2
- holidays/countries/lithuania.py +3 -3
- holidays/countries/madagascar.py +1 -1
- holidays/countries/moldova.py +5 -5
- holidays/countries/monaco.py +4 -4
- holidays/countries/morocco.py +1 -1
- holidays/countries/nicaragua.py +1 -1
- holidays/countries/norway.py +1 -1
- holidays/countries/peru.py +4 -4
- holidays/countries/poland.py +5 -4
- holidays/countries/portugal.py +2 -2
- holidays/countries/romania.py +1 -1
- holidays/countries/saudi_arabia.py +1 -1
- holidays/countries/serbia.py +3 -3
- holidays/countries/slovakia.py +1 -2
- holidays/countries/spain.py +1 -1
- holidays/countries/switzerland.py +289 -43
- holidays/countries/taiwan.py +114 -24
- holidays/countries/tanzania.py +1 -0
- holidays/countries/thailand.py +10 -18
- holidays/countries/timor_leste.py +1 -0
- holidays/countries/tunisia.py +3 -3
- holidays/countries/turkey.py +2 -1
- holidays/countries/ukraine.py +3 -3
- holidays/countries/united_arab_emirates.py +36 -28
- holidays/countries/united_kingdom.py +28 -0
- holidays/holiday_base.py +32 -14
- holidays/locale/am/LC_MESSAGES/ET.po +4 -3
- holidays/locale/ar/LC_MESSAGES/AE.po +3 -3
- holidays/locale/ar/LC_MESSAGES/BH.po +4 -4
- holidays/locale/ar/LC_MESSAGES/CA.po +1 -1
- holidays/locale/ar/LC_MESSAGES/DJ.mo +0 -0
- holidays/locale/ar/LC_MESSAGES/DJ.po +8 -8
- holidays/locale/ar/LC_MESSAGES/DZ.po +5 -5
- holidays/locale/ar/LC_MESSAGES/EG.po +19 -19
- holidays/locale/ar/LC_MESSAGES/ET.po +4 -3
- holidays/locale/ar/LC_MESSAGES/MA.po +1 -1
- holidays/locale/ar/LC_MESSAGES/SA.po +1 -1
- holidays/locale/ar/LC_MESSAGES/TN.po +3 -3
- holidays/locale/ar/LC_MESSAGES/UA.po +3 -3
- holidays/locale/be/LC_MESSAGES/BY.po +1 -1
- holidays/locale/bs/LC_MESSAGES/BA.po +5 -5
- holidays/locale/da/LC_MESSAGES/DK.po +1 -1
- holidays/locale/de/LC_MESSAGES/AT.mo +0 -0
- holidays/locale/de/LC_MESSAGES/AT.po +25 -1
- holidays/locale/de/LC_MESSAGES/BE.po +2 -2
- holidays/locale/de/LC_MESSAGES/CH.mo +0 -0
- holidays/locale/de/LC_MESSAGES/CH.po +6 -14
- holidays/locale/de/LC_MESSAGES/DE.po +0 -1
- holidays/locale/de/LC_MESSAGES/LI.mo +0 -0
- holidays/locale/de/LC_MESSAGES/LI.po +5 -5
- holidays/locale/de/LC_MESSAGES/LU.mo +0 -0
- holidays/locale/de/LC_MESSAGES/LU.po +3 -3
- holidays/locale/el/LC_MESSAGES/GR.po +3 -3
- holidays/locale/en_CA/LC_MESSAGES/CA.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/AE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AE.po +8 -8
- holidays/locale/en_US/LC_MESSAGES/AM.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AM.po +7 -7
- holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AR.po +7 -7
- holidays/locale/en_US/LC_MESSAGES/AT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AT.po +25 -1
- holidays/locale/en_US/LC_MESSAGES/BA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/BA.po +13 -13
- holidays/locale/en_US/LC_MESSAGES/BE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/BE.po +7 -7
- holidays/locale/en_US/LC_MESSAGES/BH.po +4 -4
- holidays/locale/en_US/LC_MESSAGES/BY.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/CA.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CH.po +7 -15
- holidays/locale/en_US/LC_MESSAGES/CL.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CL.po +12 -12
- holidays/locale/en_US/LC_MESSAGES/CN.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CN.po +8 -4
- holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CO.po +11 -11
- holidays/locale/en_US/LC_MESSAGES/CR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CR.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/CU.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CU.po +6 -6
- holidays/locale/en_US/LC_MESSAGES/CZ.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CZ.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/DE.po +0 -1
- holidays/locale/en_US/LC_MESSAGES/DJ.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/DJ.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/DK.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/DO.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/DO.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/DZ.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/EC.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/EC.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/EG.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/EG.po +25 -25
- holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/ES.po +3 -3
- holidays/locale/en_US/LC_MESSAGES/ET.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/ET.po +10 -9
- holidays/locale/en_US/LC_MESSAGES/GE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GE.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/GR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GR.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/GT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GT.po +16 -16
- holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/HN.po +4 -4
- holidays/locale/en_US/LC_MESSAGES/HR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/HR.po +17 -15
- holidays/locale/en_US/LC_MESSAGES/ID.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/ID.po +10 -9
- holidays/locale/en_US/LC_MESSAGES/IL.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/IL.po +1 -0
- holidays/locale/en_US/LC_MESSAGES/IR.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/LA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LA.po +3 -3
- holidays/locale/en_US/LC_MESSAGES/LI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LI.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/LT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LT.po +7 -7
- holidays/locale/en_US/LC_MESSAGES/LV.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LV.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/MA.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/MC.po +10 -10
- holidays/locale/en_US/LC_MESSAGES/MD.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/MD.po +10 -10
- holidays/locale/en_US/LC_MESSAGES/MG.po +1 -0
- holidays/locale/en_US/LC_MESSAGES/MX.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/MX.po +4 -4
- holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/NI.po +4 -4
- holidays/locale/en_US/LC_MESSAGES/NO.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/PE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/PE.po +8 -8
- holidays/locale/en_US/LC_MESSAGES/PL.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/PL.po +13 -12
- holidays/locale/en_US/LC_MESSAGES/PT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/PT.po +2 -2
- holidays/locale/en_US/LC_MESSAGES/RO.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/RO.po +5 -5
- holidays/locale/en_US/LC_MESSAGES/RS.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/RS.po +10 -9
- holidays/locale/en_US/LC_MESSAGES/SA.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/SI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/SI.po +1 -1
- holidays/locale/en_US/LC_MESSAGES/SK.po +1 -0
- holidays/locale/en_US/LC_MESSAGES/TH.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/TH.po +4 -4
- holidays/locale/en_US/LC_MESSAGES/TL.po +1 -0
- holidays/locale/en_US/LC_MESSAGES/TN.po +3 -3
- holidays/locale/en_US/LC_MESSAGES/TR.po +2 -1
- holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/TW.po +14 -5
- holidays/locale/en_US/LC_MESSAGES/TZ.po +1 -0
- holidays/locale/en_US/LC_MESSAGES/UA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/UA.po +7 -7
- holidays/locale/es/LC_MESSAGES/AR.po +2 -2
- holidays/locale/es/LC_MESSAGES/CL.po +5 -5
- holidays/locale/es/LC_MESSAGES/CO.po +3 -3
- holidays/locale/es/LC_MESSAGES/CU.po +2 -2
- holidays/locale/es/LC_MESSAGES/DO.po +1 -1
- holidays/locale/es/LC_MESSAGES/EC.po +1 -1
- holidays/locale/es/LC_MESSAGES/ES.po +1 -1
- holidays/locale/es/LC_MESSAGES/GT.po +10 -10
- holidays/locale/es/LC_MESSAGES/HN.po +1 -1
- holidays/locale/es/LC_MESSAGES/NI.po +1 -1
- holidays/locale/es/LC_MESSAGES/PE.po +4 -4
- holidays/locale/fa/LC_MESSAGES/IR.po +1 -1
- holidays/locale/fr/LC_MESSAGES/BE.po +2 -2
- holidays/locale/fr/LC_MESSAGES/CA.po +1 -1
- holidays/locale/fr/LC_MESSAGES/CH.mo +0 -0
- holidays/locale/fr/LC_MESSAGES/CH.po +6 -14
- holidays/locale/fr/LC_MESSAGES/DJ.po +2 -2
- holidays/locale/fr/LC_MESSAGES/DZ.po +5 -5
- holidays/locale/fr/LC_MESSAGES/MA.po +1 -1
- holidays/locale/fr/LC_MESSAGES/MC.po +4 -4
- holidays/locale/hr/LC_MESSAGES/HR.mo +0 -0
- holidays/locale/hr/LC_MESSAGES/HR.po +12 -10
- holidays/locale/hy/LC_MESSAGES/AM.po +1 -1
- holidays/locale/id/LC_MESSAGES/ID.po +4 -3
- holidays/locale/it/LC_MESSAGES/CH.mo +0 -0
- holidays/locale/it/LC_MESSAGES/CH.po +6 -14
- holidays/locale/ka/LC_MESSAGES/GE.po +1 -1
- holidays/locale/lo/LC_MESSAGES/LA.po +1 -1
- holidays/locale/lt/LC_MESSAGES/LT.po +3 -3
- holidays/locale/lv/LC_MESSAGES/LV.po +1 -1
- holidays/locale/mg/LC_MESSAGES/MG.po +1 -0
- holidays/locale/nl/LC_MESSAGES/BE.po +2 -2
- holidays/locale/no/LC_MESSAGES/NO.po +1 -1
- holidays/locale/pl/LC_MESSAGES/PL.po +5 -4
- holidays/locale/pt_PT/LC_MESSAGES/PT.po +1 -1
- holidays/locale/pt_TL/LC_MESSAGES/TL.po +1 -0
- holidays/locale/ro/LC_MESSAGES/MD.po +5 -5
- holidays/locale/ro/LC_MESSAGES/RO.po +1 -1
- holidays/locale/sk/LC_MESSAGES/SK.po +1 -0
- holidays/locale/sr/LC_MESSAGES/BA.po +5 -5
- holidays/locale/sr/LC_MESSAGES/RS.po +3 -3
- holidays/locale/sw/LC_MESSAGES/TZ.po +1 -0
- holidays/locale/tet/LC_MESSAGES/TL.po +1 -0
- holidays/locale/th/LC_MESSAGES/CA.po +1 -1
- holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
- holidays/locale/th/LC_MESSAGES/CN.po +8 -4
- holidays/locale/th/LC_MESSAGES/LA.po +1 -1
- holidays/locale/th/LC_MESSAGES/TH.po +1 -1
- holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/th/LC_MESSAGES/TW.po +14 -5
- holidays/locale/tr/LC_MESSAGES/TR.po +2 -1
- holidays/locale/uk/LC_MESSAGES/AR.po +2 -2
- holidays/locale/uk/LC_MESSAGES/AT.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/AT.po +25 -1
- holidays/locale/uk/LC_MESSAGES/BA.po +5 -5
- holidays/locale/uk/LC_MESSAGES/BE.po +2 -2
- holidays/locale/uk/LC_MESSAGES/CH.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CH.po +6 -14
- holidays/locale/uk/LC_MESSAGES/CL.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CL.po +6 -6
- holidays/locale/uk/LC_MESSAGES/CO.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CO.po +4 -4
- holidays/locale/uk/LC_MESSAGES/CU.po +2 -2
- holidays/locale/uk/LC_MESSAGES/DE.po +0 -1
- holidays/locale/uk/LC_MESSAGES/DK.po +1 -1
- holidays/locale/uk/LC_MESSAGES/DO.po +1 -1
- holidays/locale/uk/LC_MESSAGES/EC.po +1 -1
- holidays/locale/uk/LC_MESSAGES/ES.po +1 -1
- holidays/locale/uk/LC_MESSAGES/FR.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/FR.po +6 -6
- holidays/locale/uk/LC_MESSAGES/GE.po +1 -1
- holidays/locale/uk/LC_MESSAGES/GR.po +3 -3
- holidays/locale/uk/LC_MESSAGES/HN.po +1 -1
- holidays/locale/uk/LC_MESSAGES/HR.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/HR.po +14 -12
- holidays/locale/uk/LC_MESSAGES/ID.po +4 -3
- holidays/locale/uk/LC_MESSAGES/LI.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/LI.po +5 -5
- holidays/locale/uk/LC_MESSAGES/LT.po +3 -3
- holidays/locale/uk/LC_MESSAGES/LV.po +1 -1
- holidays/locale/uk/LC_MESSAGES/MC.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/MC.po +7 -7
- holidays/locale/uk/LC_MESSAGES/MD.po +5 -5
- holidays/locale/uk/LC_MESSAGES/MG.po +1 -0
- holidays/locale/uk/LC_MESSAGES/NI.po +1 -1
- holidays/locale/uk/LC_MESSAGES/NO.po +1 -1
- holidays/locale/uk/LC_MESSAGES/PE.po +4 -4
- holidays/locale/uk/LC_MESSAGES/PL.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/PL.po +11 -10
- holidays/locale/uk/LC_MESSAGES/PT.po +1 -1
- holidays/locale/uk/LC_MESSAGES/RO.po +1 -1
- holidays/locale/uk/LC_MESSAGES/SK.po +1 -0
- holidays/locale/uk/LC_MESSAGES/TR.po +2 -1
- holidays/locale/uk/LC_MESSAGES/UA.po +3 -3
- holidays/locale/zh_CN/LC_MESSAGES/CN.mo +0 -0
- holidays/locale/zh_CN/LC_MESSAGES/CN.po +8 -4
- holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/zh_CN/LC_MESSAGES/TW.po +15 -6
- holidays/locale/zh_TW/LC_MESSAGES/CN.mo +0 -0
- holidays/locale/zh_TW/LC_MESSAGES/CN.po +8 -4
- holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
- holidays/locale/zh_TW/LC_MESSAGES/TW.po +14 -5
- holidays/registry.py +2 -0
- holidays/utils.py +2 -2
- {holidays-0.41.dist-info → holidays-0.43.dist-info}/METADATA +23 -10
- {holidays-0.41.dist-info → holidays-0.43.dist-info}/RECORD +306 -304
- {holidays-0.41.dist-info → holidays-0.43.dist-info}/LICENSE +0 -0
- {holidays-0.41.dist-info → holidays-0.43.dist-info}/WHEEL +0 -0
- {holidays-0.41.dist-info → holidays-0.43.dist-info}/top_level.txt +0 -0
holidays/countries/taiwan.py
CHANGED
|
@@ -9,68 +9,86 @@
|
|
|
9
9
|
# Website: https://github.com/dr-prodigy/python-holidays
|
|
10
10
|
# License: MIT (see LICENSE file)
|
|
11
11
|
|
|
12
|
+
from datetime import date
|
|
12
13
|
from gettext import gettext as tr
|
|
14
|
+
from typing import Set
|
|
13
15
|
|
|
14
|
-
from holidays.
|
|
16
|
+
from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, SEP, OCT, DEC
|
|
17
|
+
from holidays.groups import ChineseCalendarHolidays, InternationalHolidays, StaticHolidays
|
|
15
18
|
from holidays.observed_holiday_base import (
|
|
16
19
|
ObservedHolidayBase,
|
|
20
|
+
ObservedRule,
|
|
17
21
|
SAT_TO_PREV_WORKDAY,
|
|
18
22
|
SUN_TO_NEXT_WORKDAY,
|
|
23
|
+
SAT_SUN_TO_NEXT_WORKDAY,
|
|
19
24
|
)
|
|
20
25
|
|
|
21
26
|
|
|
22
|
-
class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays):
|
|
27
|
+
class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays, StaticHolidays):
|
|
23
28
|
"""
|
|
24
29
|
References:
|
|
25
|
-
- https://www.dgpa.gov.tw/information?uid=353&pid=10659
|
|
26
30
|
- https://en.wikipedia.org/wiki/Public_holidays_in_Taiwan
|
|
27
31
|
- https://www.officeholidays.com/countries/taiwan
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
- `2024 <https://www.dgpa.gov.tw/en/information?uid=353&pid=11402>`_
|
|
33
|
+
- `2023 <https://www.dgpa.gov.tw/en/information?uid=353&pid=11016>`_
|
|
34
|
+
- `2022 <https://www.dgpa.gov.tw/en/information?uid=353&pid=10659>`_
|
|
35
|
+
- `2021 <https://www.dgpa.gov.tw/en/information?uid=353&pid=10181>`_
|
|
36
|
+
- `2020 <https://www.dgpa.gov.tw/en/information?uid=353&pid=9724>`_
|
|
37
|
+
- `2019 <https://www.dgpa.gov.tw/en/information?uid=353&pid=8178>`_
|
|
38
|
+
- `2018 <https://www.dgpa.gov.tw/en/information?uid=353&pid=7730>`_
|
|
39
|
+
- `2017 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6178>`_
|
|
40
|
+
- `2016 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6180>`_
|
|
41
|
+
- `2015 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6182>`_
|
|
42
|
+
- `2014 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6183>`_
|
|
43
|
+
- `2013 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6186>`_
|
|
44
|
+
- `2012 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6187>`_
|
|
45
|
+
- `2011 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6188>`_
|
|
46
|
+
- `2010 <https://www.dgpa.gov.tw/en/information?uid=353&pid=6189>`_
|
|
32
47
|
"""
|
|
33
48
|
|
|
34
49
|
country = "TW"
|
|
35
50
|
# %s (observed).
|
|
36
|
-
observed_label = tr("%s
|
|
51
|
+
observed_label = tr("%s(慶祝)")
|
|
37
52
|
default_language = "zh_TW"
|
|
38
53
|
supported_languages = ("en_US", "th", "zh_CN", "zh_TW")
|
|
39
54
|
|
|
40
55
|
def __init__(self, *args, **kwargs):
|
|
41
56
|
ChineseCalendarHolidays.__init__(self)
|
|
42
57
|
InternationalHolidays.__init__(self)
|
|
58
|
+
StaticHolidays.__init__(self, TaiwanStaticHolidays)
|
|
43
59
|
kwargs.setdefault("observed_rule", SAT_TO_PREV_WORKDAY + SUN_TO_NEXT_WORKDAY)
|
|
44
|
-
kwargs.setdefault("observed_since", 2015)
|
|
45
60
|
super().__init__(*args, **kwargs)
|
|
46
61
|
|
|
62
|
+
def _populate_observed(
|
|
63
|
+
self, dts: Set[date], rule: ObservedRule = None, since: int = 2015
|
|
64
|
+
) -> None:
|
|
65
|
+
if self._year < since:
|
|
66
|
+
return None
|
|
67
|
+
for dt in sorted(dts):
|
|
68
|
+
for name in self.get_list(dt):
|
|
69
|
+
self._add_observed(dt, name, rule)
|
|
70
|
+
|
|
47
71
|
def _populate_public_holidays(self):
|
|
48
72
|
if self._year <= 1911:
|
|
49
73
|
return None
|
|
50
74
|
|
|
51
75
|
dts_observed = set()
|
|
76
|
+
dts_observed_forward = set()
|
|
52
77
|
|
|
53
78
|
# Founding Day of the Republic of China.
|
|
54
79
|
name = tr("中華民國開國紀念日")
|
|
55
80
|
dts_observed.add(self._add_new_years_day(name))
|
|
56
|
-
self.
|
|
81
|
+
if self._year >= 2015:
|
|
82
|
+
self._add_observed(self._next_year_new_years_day, name=name)
|
|
57
83
|
|
|
58
84
|
# Chinese New Year's Eve.
|
|
59
|
-
self._add_chinese_new_years_eve(tr("農曆除夕"))
|
|
85
|
+
dts_observed_forward.add(self._add_chinese_new_years_eve(tr("農曆除夕")))
|
|
60
86
|
|
|
61
87
|
# Chinese New Year.
|
|
62
88
|
name = tr("春節")
|
|
63
|
-
|
|
64
|
-
self._add_chinese_new_years_day_two(name)
|
|
65
|
-
self._add_chinese_new_years_day_three(name)
|
|
66
|
-
if self.observed and self._year >= 2015:
|
|
67
|
-
if self._is_monday(dt):
|
|
68
|
-
self._add_chinese_new_years_day_four(name)
|
|
69
|
-
elif self._is_thursday(dt):
|
|
70
|
-
self._add_chinese_new_years_day_five(name)
|
|
71
|
-
elif self._is_friday(dt) or self._is_weekend(dt):
|
|
72
|
-
self._add_chinese_new_years_day_four(name)
|
|
73
|
-
self._add_chinese_new_years_day_five(name)
|
|
89
|
+
dts_observed_forward.add(self._add_chinese_new_years_day(name))
|
|
90
|
+
dts_observed_forward.add(self._add_chinese_new_years_day_two(name))
|
|
91
|
+
dts_observed_forward.add(self._add_chinese_new_years_day_three(name))
|
|
74
92
|
|
|
75
93
|
if self._year >= 1997:
|
|
76
94
|
# Peace Memorial Day.
|
|
@@ -78,7 +96,9 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
|
|
|
78
96
|
|
|
79
97
|
if 1990 <= self._year <= 1999 or self._year >= 2011:
|
|
80
98
|
# Children's Day.
|
|
81
|
-
|
|
99
|
+
apr_4 = self._add_holiday_apr_4(tr("兒童節"))
|
|
100
|
+
if self._year != 2021:
|
|
101
|
+
dts_observed.add(apr_4)
|
|
82
102
|
|
|
83
103
|
if self._year >= 1972:
|
|
84
104
|
# Tomb Sweeping Day.
|
|
@@ -94,7 +114,8 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
|
|
|
94
114
|
dts_observed.add(self._add_holiday_oct_10(tr("中華民國國慶日")))
|
|
95
115
|
|
|
96
116
|
if self.observed:
|
|
97
|
-
self._populate_observed(dts_observed
|
|
117
|
+
self._populate_observed(dts_observed)
|
|
118
|
+
self._populate_observed(dts_observed_forward, rule=SAT_SUN_TO_NEXT_WORKDAY, since=2010)
|
|
98
119
|
|
|
99
120
|
|
|
100
121
|
class TW(Taiwan):
|
|
@@ -103,3 +124,72 @@ class TW(Taiwan):
|
|
|
103
124
|
|
|
104
125
|
class TWN(Taiwan):
|
|
105
126
|
pass
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
class TaiwanStaticHolidays:
|
|
130
|
+
# Date format (see strftime() Format Codes).
|
|
131
|
+
substituted_date_format = tr("%Y-%m-%d")
|
|
132
|
+
# Day off (substituted from %s).
|
|
133
|
+
substituted_label = tr("休息日(%s日起取代)")
|
|
134
|
+
|
|
135
|
+
childrens_day = tr("兒童節")
|
|
136
|
+
|
|
137
|
+
special_public_holidays = {
|
|
138
|
+
2010: (FEB, 19, FEB, 6),
|
|
139
|
+
2012: (
|
|
140
|
+
(JAN, 27, FEB, 4),
|
|
141
|
+
(FEB, 27, MAR, 3),
|
|
142
|
+
(DEC, 31, DEC, 22),
|
|
143
|
+
),
|
|
144
|
+
2013: (
|
|
145
|
+
(FEB, 15, FEB, 23),
|
|
146
|
+
(SEP, 20, SEP, 14),
|
|
147
|
+
),
|
|
148
|
+
2015: (JAN, 2, DEC, 27, 2014),
|
|
149
|
+
2016: (
|
|
150
|
+
(FEB, 12, JAN, 30),
|
|
151
|
+
(JUN, 10, JUN, 4),
|
|
152
|
+
(SEP, 16, SEP, 10),
|
|
153
|
+
),
|
|
154
|
+
2017: (
|
|
155
|
+
(FEB, 27, FEB, 18),
|
|
156
|
+
(MAY, 29, JUN, 3),
|
|
157
|
+
(OCT, 9, SEP, 30),
|
|
158
|
+
),
|
|
159
|
+
2018: (
|
|
160
|
+
(APR, 6, MAR, 31),
|
|
161
|
+
(DEC, 31, DEC, 22),
|
|
162
|
+
),
|
|
163
|
+
2019: (
|
|
164
|
+
(FEB, 8, JAN, 19),
|
|
165
|
+
(MAR, 1, FEB, 23),
|
|
166
|
+
(OCT, 11, OCT, 5),
|
|
167
|
+
),
|
|
168
|
+
2020: (
|
|
169
|
+
(JAN, 23, FEB, 15),
|
|
170
|
+
(JUN, 26, JUN, 20),
|
|
171
|
+
(OCT, 2, SEP, 26),
|
|
172
|
+
),
|
|
173
|
+
2021: (
|
|
174
|
+
(FEB, 10, FEB, 20),
|
|
175
|
+
(SEP, 20, SEP, 11),
|
|
176
|
+
),
|
|
177
|
+
2022: (FEB, 4, JAN, 22),
|
|
178
|
+
2023: (
|
|
179
|
+
(JAN, 20, JAN, 7),
|
|
180
|
+
(JAN, 27, FEB, 4),
|
|
181
|
+
(FEB, 27, FEB, 18),
|
|
182
|
+
(APR, 3, MAR, 25),
|
|
183
|
+
(JUN, 23, JUN, 17),
|
|
184
|
+
(OCT, 9, SEP, 23),
|
|
185
|
+
),
|
|
186
|
+
2024: (FEB, 8, FEB, 17),
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
special_public_holidays_observed = {
|
|
190
|
+
2013: (APR, 5, childrens_day),
|
|
191
|
+
2016: (APR, 5, childrens_day),
|
|
192
|
+
2017: (APR, 3, childrens_day),
|
|
193
|
+
2021: (APR, 2, childrens_day),
|
|
194
|
+
2024: (APR, 5, childrens_day),
|
|
195
|
+
}
|
holidays/countries/tanzania.py
CHANGED
holidays/countries/thailand.py
CHANGED
|
@@ -237,7 +237,7 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
|
|
|
237
237
|
# *** NOTE: only observed by financial and private sectors.
|
|
238
238
|
|
|
239
239
|
if self._year >= 1974:
|
|
240
|
-
# National
|
|
240
|
+
# National Labor Day.
|
|
241
241
|
self._add_observed(self._add_labor_day(tr("วันแรงงานแห่งชาติ")))
|
|
242
242
|
|
|
243
243
|
# วันชาติ
|
|
@@ -338,8 +338,7 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
|
|
|
338
338
|
elif self._year >= 2019:
|
|
339
339
|
# Anniversary for the Death of King Bhumibol Adulyadej the Great.
|
|
340
340
|
k_bhumibol_memorial = tr(
|
|
341
|
-
"วันคล้ายวันสวรรคตพระบาทสมเด็จพระบรมชนกาธิเบศร "
|
|
342
|
-
"มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
|
|
341
|
+
"วันคล้ายวันสวรรคตพระบาทสมเด็จพระบรมชนกาธิเบศร มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
|
|
343
342
|
)
|
|
344
343
|
else:
|
|
345
344
|
# Anniversary for the Death of King Bhumibol Adulyadej.
|
|
@@ -375,10 +374,7 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
|
|
|
375
374
|
elif self._year >= 2016:
|
|
376
375
|
k_bhumibol_bday = (
|
|
377
376
|
# HM King Bhumibol Adulyadej Birthday Anniversary.
|
|
378
|
-
tr(
|
|
379
|
-
"วันคล้ายวันเฉลิมพระชนมพรรษา"
|
|
380
|
-
"พระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช บรมนาถบพิตร"
|
|
381
|
-
)
|
|
377
|
+
tr("วันคล้ายวันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช บรมนาถบพิตร")
|
|
382
378
|
)
|
|
383
379
|
else:
|
|
384
380
|
k_bhumibol_bday = (
|
|
@@ -504,10 +500,7 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
|
|
|
504
500
|
if self._year <= 2021:
|
|
505
501
|
self._add_holiday_apr_1(
|
|
506
502
|
# Additional Closing Day for Bank for Agriculture and Agricultural Cooperatives
|
|
507
|
-
tr(
|
|
508
|
-
"วันหยุดเพิ่มเติมสำหรับการปิดบัญชีประจำปีของ"
|
|
509
|
-
"ธนาคารเพื่อการเกษตรและสหกรณ์การเกษตร"
|
|
510
|
-
),
|
|
503
|
+
tr("วันหยุดเพิ่มเติมสำหรับการปิดบัญชีประจำปีของธนาคารเพื่อการเกษตรและสหกรณ์การเกษตร"),
|
|
511
504
|
)
|
|
512
505
|
|
|
513
506
|
# วันหยุดภาคครึ่งปีของสถาบันการเงินและสถาบันการเงินเฉพาะกิจ
|
|
@@ -728,13 +721,9 @@ class ThailandStaticHolidays:
|
|
|
728
721
|
# Day of Mourning for HM King Bhumibol Adulyadej.
|
|
729
722
|
rama_ix_mourning = tr("วันหยุดพิเศษ (ร่วมถวายอาลัย ส่งดวงพระวิญญาณพระบรมศพ)")
|
|
730
723
|
# HM King Bhumibol Adulyadej's Royal Cremation Ceremony.
|
|
731
|
-
rama_ix_cremation = tr(
|
|
732
|
-
"วันพระราชพิธีถวายพระเพลิงพระบรมศพพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช"
|
|
733
|
-
)
|
|
724
|
+
rama_ix_cremation = tr("วันพระราชพิธีถวายพระเพลิงพระบรมศพพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดช")
|
|
734
725
|
# HM King Maha Vajiralongkorn's Coronation Celebrations.
|
|
735
|
-
rama_x_coronation_celebrations = tr(
|
|
736
|
-
"พระราชพิธีบรมราชาภิเษก พระบาทสมเด็จพระวชิรเกล้าเจ้าอยู่หัว"
|
|
737
|
-
)
|
|
726
|
+
rama_x_coronation_celebrations = tr("พระราชพิธีบรมราชาภิเษก พระบาทสมเด็จพระวชิรเกล้าเจ้าอยู่หัว")
|
|
738
727
|
# Songkran Festival.
|
|
739
728
|
songkran_festival = tr("วันสงกรานต์")
|
|
740
729
|
|
|
@@ -840,7 +829,10 @@ class ThailandStaticHolidays:
|
|
|
840
829
|
(JUL, 31, thai_bridge_public_holiday),
|
|
841
830
|
(DEC, 29, thai_bridge_public_holiday),
|
|
842
831
|
),
|
|
843
|
-
2024: (
|
|
832
|
+
2024: (
|
|
833
|
+
(APR, 12, thai_bridge_public_holiday),
|
|
834
|
+
(DEC, 30, thai_bridge_public_holiday),
|
|
835
|
+
),
|
|
844
836
|
}
|
|
845
837
|
special_workday_holidays = {1999: (MAY, 14, tr("วันพืชมงคล"))}
|
|
846
838
|
|
holidays/countries/tunisia.py
CHANGED
|
@@ -21,7 +21,7 @@ class Tunisia(HolidayBase, InternationalHolidays, IslamicHolidays):
|
|
|
21
21
|
|
|
22
22
|
country = "TN"
|
|
23
23
|
default_language = "ar"
|
|
24
|
-
#
|
|
24
|
+
# %s (estimated).
|
|
25
25
|
estimated_label = tr("(تقدير) %s")
|
|
26
26
|
supported_languages = ("ar", "en_US")
|
|
27
27
|
|
|
@@ -68,14 +68,14 @@ class Tunisia(HolidayBase, InternationalHolidays, IslamicHolidays):
|
|
|
68
68
|
# Eid al-Adha.
|
|
69
69
|
name = tr("عيد الأضحى")
|
|
70
70
|
self._add_eid_al_adha_day(name)
|
|
71
|
-
# Eid al-Adha Holiday
|
|
71
|
+
# Eid al-Adha Holiday.
|
|
72
72
|
self._add_eid_al_adha_day_two(tr("عطلة عيد الأضحى"))
|
|
73
73
|
self._add_eid_al_adha_day_three(tr("عطلة عيد الأضحى"))
|
|
74
74
|
|
|
75
75
|
# Islamic New Year.
|
|
76
76
|
self._add_islamic_new_year_day(tr("رأس السنة الهجرية"))
|
|
77
77
|
|
|
78
|
-
# Prophet
|
|
78
|
+
# Prophet's Birthday.
|
|
79
79
|
self._add_mawlid_day(tr("عيد المولد النبوي"))
|
|
80
80
|
|
|
81
81
|
|
holidays/countries/turkey.py
CHANGED
|
@@ -30,7 +30,7 @@ class Turkey(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays
|
|
|
30
30
|
|
|
31
31
|
country = "TR"
|
|
32
32
|
default_language = "tr"
|
|
33
|
-
#
|
|
33
|
+
# %s (estimated).
|
|
34
34
|
estimated_label = tr("%s (tahmini)")
|
|
35
35
|
supported_categories = (HALF_DAY, PUBLIC)
|
|
36
36
|
supported_languages = ("en_US", "tr", "uk")
|
|
@@ -105,6 +105,7 @@ class Turkey(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays
|
|
|
105
105
|
if self._year <= 1935:
|
|
106
106
|
return None
|
|
107
107
|
|
|
108
|
+
# %s (from 1pm).
|
|
108
109
|
begin_time_label = self.tr("%s (saat 13.00'ten)")
|
|
109
110
|
|
|
110
111
|
# Republic Day.
|
holidays/countries/ukraine.py
CHANGED
|
@@ -79,7 +79,7 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
|
|
|
79
79
|
dts_observed.add(self._add_new_years_day(tr("Новий рік")))
|
|
80
80
|
|
|
81
81
|
dts_observed.add(
|
|
82
|
-
# Christmas (Julian calendar).
|
|
82
|
+
# Christmas Day (Julian calendar).
|
|
83
83
|
self._add_christmas_day(tr("Різдво Христове (за юліанським календарем)"))
|
|
84
84
|
)
|
|
85
85
|
|
|
@@ -97,7 +97,7 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
|
|
|
97
97
|
dts_observed.add(self._add_whit_sunday(tr("Трійця")))
|
|
98
98
|
|
|
99
99
|
name = (
|
|
100
|
-
#
|
|
100
|
+
# Labor Day.
|
|
101
101
|
tr("День праці")
|
|
102
102
|
if self._year >= 2018
|
|
103
103
|
# International Workers' Solidarity Day.
|
|
@@ -146,7 +146,7 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
|
|
|
146
146
|
if self._year >= 2017:
|
|
147
147
|
dts_observed.add(
|
|
148
148
|
self._add_christmas_day(
|
|
149
|
-
# Christmas (Gregorian calendar).
|
|
149
|
+
# Christmas Day (Gregorian calendar).
|
|
150
150
|
tr("Різдво Христове (за григоріанським календарем)"),
|
|
151
151
|
GREGORIAN_CALENDAR,
|
|
152
152
|
)
|
|
@@ -12,37 +12,26 @@
|
|
|
12
12
|
from gettext import gettext as tr
|
|
13
13
|
|
|
14
14
|
from holidays.calendars import _CustomIslamicHolidays
|
|
15
|
-
from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, NOV, FRI, SAT
|
|
15
|
+
from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, FRI, SAT
|
|
16
16
|
from holidays.groups import InternationalHolidays, IslamicHolidays
|
|
17
17
|
from holidays.holiday_base import HolidayBase
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class UnitedArabEmirates(HolidayBase, InternationalHolidays, IslamicHolidays):
|
|
21
21
|
"""
|
|
22
|
-
Holidays are regulated by the Article 74
|
|
23
|
-
of Federal Law No. 08 for the year 1980:
|
|
22
|
+
Holidays are regulated by the Article 74 of Federal Law No. 08 for the year 1980:
|
|
24
23
|
https://www.ilo.org/dyn/natlex/docs/ELECTRONIC/11956/69376/F417089305/ARE11956.pdf
|
|
25
|
-
However the law is not applied literally,
|
|
26
|
-
and was amended often in the past few years.
|
|
24
|
+
However the law is not applied literally, and was amended often in the past few years.
|
|
27
25
|
Sources:
|
|
28
26
|
2017: https://www.khaleejtimes.com/nation/uae-official-public-holidays-list-2017
|
|
29
27
|
2018: https://www.thenational.ae/uae/government/uae-public-holidays-2018-announced-by-abu-dhabi-government-1.691393 # noqa: E501
|
|
30
28
|
2019: https://www.thenational.ae/uae/government/uae-public-holidays-for-2019-and-2020-announced-by-cabinet-1.833425 # noqa: E501
|
|
31
29
|
2020: https://u.ae/en/information-and-services/public-holidays-and-religious-affairs/public-holidays # noqa: E501
|
|
32
|
-
|
|
33
|
-
Holidays based on the Islamic Calendar are estimated (and so denoted),
|
|
34
|
-
as are announced each year and based on moon sightings:
|
|
35
|
-
- Eid al-Fitr
|
|
36
|
-
- Eid al-Adha
|
|
37
|
-
- Arafat (Hajj) Day
|
|
38
|
-
- Al-Hijra (Islamic New Year
|
|
39
|
-
- Mawlud al-Nabi (Prophet Mohammad's Birthday)
|
|
40
|
-
- Leilat al-Miraj (Ascension of the Prophet), suspended after 2018.
|
|
41
30
|
"""
|
|
42
31
|
|
|
43
32
|
country = "AE"
|
|
44
33
|
default_language = "ar"
|
|
45
|
-
#
|
|
34
|
+
# %s (estimated).
|
|
46
35
|
estimated_label = tr("(تقدير) %s")
|
|
47
36
|
supported_languages = ("ar", "en_US")
|
|
48
37
|
weekend = {FRI, SAT}
|
|
@@ -56,7 +45,7 @@ class UnitedArabEmirates(HolidayBase, InternationalHolidays, IslamicHolidays):
|
|
|
56
45
|
# New Year's Day.
|
|
57
46
|
self._add_new_years_day(tr("رأس السنة الميلادية"))
|
|
58
47
|
|
|
59
|
-
if self._year
|
|
48
|
+
if 2015 <= self._year <= 2022:
|
|
60
49
|
# Commemoration Day.
|
|
61
50
|
name = tr("يوم الشهيد")
|
|
62
51
|
if self._year >= 2019:
|
|
@@ -65,34 +54,40 @@ class UnitedArabEmirates(HolidayBase, InternationalHolidays, IslamicHolidays):
|
|
|
65
54
|
self._add_holiday_nov_30(name)
|
|
66
55
|
|
|
67
56
|
# National Day.
|
|
68
|
-
|
|
69
|
-
self.
|
|
57
|
+
national_day = tr("اليوم الوطني")
|
|
58
|
+
self._add_holiday_dec_2(national_day)
|
|
59
|
+
self._add_holiday_dec_3(national_day)
|
|
70
60
|
|
|
71
61
|
# Eid al-Fitr.
|
|
72
62
|
self._add_eid_al_fitr_day(tr("عيد الفطر"))
|
|
63
|
+
|
|
73
64
|
# Eid al-Fitr Holiday.
|
|
74
|
-
|
|
75
|
-
self.
|
|
65
|
+
eid_al_fitr_holiday = tr("عطلة عيد الفطر")
|
|
66
|
+
self._add_eid_al_fitr_day_two(eid_al_fitr_holiday)
|
|
67
|
+
self._add_eid_al_fitr_day_three(eid_al_fitr_holiday)
|
|
68
|
+
if self._year >= 2019:
|
|
69
|
+
self._add_eid_al_fitr_eve(eid_al_fitr_holiday)
|
|
76
70
|
|
|
77
71
|
# Arafat Day.
|
|
78
72
|
self._add_arafah_day(tr("وقفة عرفة"))
|
|
79
73
|
|
|
80
74
|
# Eid al-Adha.
|
|
81
75
|
self._add_eid_al_adha_day(tr("عيد الأضحى"))
|
|
76
|
+
|
|
82
77
|
# Eid al-Adha Holiday.
|
|
83
|
-
|
|
84
|
-
self.
|
|
78
|
+
eid_al_adha_holiday = tr("عطلة عيد الأضحى")
|
|
79
|
+
self._add_eid_al_adha_day_two(eid_al_adha_holiday)
|
|
80
|
+
self._add_eid_al_adha_day_three(eid_al_adha_holiday)
|
|
85
81
|
|
|
86
82
|
# Islamic New Year.
|
|
87
83
|
self._add_islamic_new_year_day(tr("رأس السنة الهجرية"))
|
|
88
84
|
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
if self._year <= 2018:
|
|
86
|
+
# Isra' and Mi'raj.
|
|
91
87
|
self._add_isra_and_miraj_day(tr("ليلة المعراج"))
|
|
92
88
|
|
|
93
|
-
# Prophet
|
|
94
|
-
|
|
95
|
-
self._add_mawlid_day(tr("عيد المولد النبوي"))
|
|
89
|
+
# Prophet's Birthday.
|
|
90
|
+
self._add_mawlid_day(tr("عيد المولد النبوي"))
|
|
96
91
|
|
|
97
92
|
|
|
98
93
|
class AE(UnitedArabEmirates):
|
|
@@ -109,13 +104,19 @@ class UnitedArabEmiratesIslamicHolidays(_CustomIslamicHolidays):
|
|
|
109
104
|
2018: (AUG, 21),
|
|
110
105
|
2019: (AUG, 11),
|
|
111
106
|
2020: (JUL, 31),
|
|
107
|
+
2021: (JUL, 20),
|
|
108
|
+
2022: (JUL, 9),
|
|
109
|
+
2023: (JUN, 28),
|
|
112
110
|
}
|
|
113
111
|
|
|
114
112
|
EID_AL_FITR_DATES = {
|
|
115
113
|
2017: (JUN, 25),
|
|
116
114
|
2018: (JUN, 14),
|
|
117
|
-
2019: (JUN,
|
|
115
|
+
2019: (JUN, 4),
|
|
118
116
|
2020: (MAY, 24),
|
|
117
|
+
2021: (MAY, 13),
|
|
118
|
+
2022: (MAY, 2),
|
|
119
|
+
2023: (APR, 21),
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
HIJRI_NEW_YEAR_DATES = {
|
|
@@ -123,6 +124,9 @@ class UnitedArabEmiratesIslamicHolidays(_CustomIslamicHolidays):
|
|
|
123
124
|
2018: (SEP, 11),
|
|
124
125
|
2019: (AUG, 31),
|
|
125
126
|
2020: (AUG, 23),
|
|
127
|
+
2021: (AUG, 12),
|
|
128
|
+
2022: (JUL, 30),
|
|
129
|
+
2023: (JUL, 21),
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
ISRA_AND_MIRAJ_DATES = {
|
|
@@ -134,4 +138,8 @@ class UnitedArabEmiratesIslamicHolidays(_CustomIslamicHolidays):
|
|
|
134
138
|
2017: (NOV, 30),
|
|
135
139
|
2018: (NOV, 19),
|
|
136
140
|
2019: (NOV, 9),
|
|
141
|
+
2020: (OCT, 29),
|
|
142
|
+
2021: (OCT, 21),
|
|
143
|
+
2022: (OCT, 8),
|
|
144
|
+
2023: (SEP, 29),
|
|
137
145
|
}
|
|
@@ -25,8 +25,14 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
|
|
|
25
25
|
"""
|
|
26
26
|
References:
|
|
27
27
|
- https://en.wikipedia.org/wiki/Public_holidays_in_the_United_Kingdom
|
|
28
|
+
- https://archive.org/details/treatiseonbanki00walk/page/334/mode/2up
|
|
28
29
|
- https://www.gov.uk/bank-holidays
|
|
29
30
|
- https://www.timeanddate.com/holidays/uk/
|
|
31
|
+
|
|
32
|
+
The Anniversary of the Battle of the Boyne bank holiday is proclaimed annually by the
|
|
33
|
+
Secretary of State for Northern Ireland.
|
|
34
|
+
|
|
35
|
+
In-Lieu observance was first provided in the Bank Holidays Extension Act 1875.
|
|
30
36
|
"""
|
|
31
37
|
|
|
32
38
|
country = "GB"
|
|
@@ -51,9 +57,15 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
|
|
|
51
57
|
InternationalHolidays.__init__(self)
|
|
52
58
|
StaticHolidays.__init__(self, UnitedKingdomStaticHolidays)
|
|
53
59
|
kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
|
|
60
|
+
# Bank Holidays Extension Act 1875
|
|
61
|
+
kwargs.setdefault("observed_since", 1875)
|
|
54
62
|
super().__init__(*args, **kwargs)
|
|
55
63
|
|
|
56
64
|
def _populate_public_holidays(self) -> None:
|
|
65
|
+
# Bank Holidays Act 1871
|
|
66
|
+
if self._year <= 1871:
|
|
67
|
+
return None
|
|
68
|
+
|
|
57
69
|
# Good Friday
|
|
58
70
|
self._add_good_friday("Good Friday")
|
|
59
71
|
|
|
@@ -88,6 +100,10 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
|
|
|
88
100
|
self._populate_subdiv_wls_public_holidays()
|
|
89
101
|
|
|
90
102
|
def _populate_subdiv_holidays(self):
|
|
103
|
+
# Bank Holidays Act 1871
|
|
104
|
+
if self._year <= 1871:
|
|
105
|
+
return None
|
|
106
|
+
|
|
91
107
|
if self.subdiv not in {"SCT", "Scotland"}:
|
|
92
108
|
# New Year's Day
|
|
93
109
|
if self._year >= 1975:
|
|
@@ -109,6 +125,10 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
|
|
|
109
125
|
# Easter Monday
|
|
110
126
|
self._add_easter_monday("Easter Monday")
|
|
111
127
|
|
|
128
|
+
# Whit Monday.
|
|
129
|
+
if self._year <= 1970:
|
|
130
|
+
self._add_whit_monday("Whit Monday")
|
|
131
|
+
|
|
112
132
|
# Late Summer bank holiday (last Monday in August)
|
|
113
133
|
if self._year >= 1971:
|
|
114
134
|
self._add_holiday_last_mon_of_aug("Late Summer Bank Holiday")
|
|
@@ -121,6 +141,10 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
|
|
|
121
141
|
# Easter Monday
|
|
122
142
|
self._add_easter_monday("Easter Monday")
|
|
123
143
|
|
|
144
|
+
# Whit Monday.
|
|
145
|
+
if self._year <= 1970:
|
|
146
|
+
self._add_whit_monday("Whit Monday")
|
|
147
|
+
|
|
124
148
|
# Battle of the Boyne
|
|
125
149
|
self._add_observed(self._add_holiday_jul_12("Battle of the Boyne"))
|
|
126
150
|
|
|
@@ -161,6 +185,10 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
|
|
|
161
185
|
# Easter Monday
|
|
162
186
|
self._add_easter_monday("Easter Monday")
|
|
163
187
|
|
|
188
|
+
# Whit Monday.
|
|
189
|
+
if self._year <= 1970:
|
|
190
|
+
self._add_whit_monday("Whit Monday")
|
|
191
|
+
|
|
164
192
|
# Late Summer bank holiday (last Monday in August)
|
|
165
193
|
if self._year >= 1971:
|
|
166
194
|
self._add_holiday_last_mon_of_aug("Late Summer Bank Holiday")
|
holidays/holiday_base.py
CHANGED
|
@@ -209,6 +209,9 @@ class HolidayBase(Dict[date, str]):
|
|
|
209
209
|
"""The market's ISO 3166-1 alpha-2 code."""
|
|
210
210
|
subdivisions: Tuple[str, ...] = ()
|
|
211
211
|
"""The subdivisions supported for this country (see documentation)."""
|
|
212
|
+
subdivisions_aliases: Dict[str, str] = {}
|
|
213
|
+
"""Aliases for the ISO 3166-2 subdivision codes with the key as alias and
|
|
214
|
+
the value the ISO 3166-2 subdivision code."""
|
|
212
215
|
years: Set[int]
|
|
213
216
|
"""The years calculated."""
|
|
214
217
|
expand: bool
|
|
@@ -217,7 +220,7 @@ class HolidayBase(Dict[date, str]):
|
|
|
217
220
|
observed: bool
|
|
218
221
|
"""Whether dates when public holiday are observed are included."""
|
|
219
222
|
subdiv: Optional[str] = None
|
|
220
|
-
"""The subdiv requested."""
|
|
223
|
+
"""The subdiv requested as ISO 3166-2 code or one of the aliases."""
|
|
221
224
|
special_holidays: Dict[int, Union[SpecialHoliday, SubstitutedHoliday]] = {}
|
|
222
225
|
"""A list of the country-wide special (as opposite to regular) holidays for
|
|
223
226
|
a specific year."""
|
|
@@ -262,8 +265,8 @@ class HolidayBase(Dict[date, str]):
|
|
|
262
265
|
following Monday). This doesn't work for all countries.
|
|
263
266
|
|
|
264
267
|
:param subdiv:
|
|
265
|
-
The subdivision (e.g. state or province)
|
|
266
|
-
countries (see documentation).
|
|
268
|
+
The subdivision (e.g. state or province) as a ISO 3166-2 code
|
|
269
|
+
or its alias; not implemented for all countries (see documentation).
|
|
267
270
|
|
|
268
271
|
:param prov:
|
|
269
272
|
*deprecated* use subdiv instead.
|
|
@@ -304,10 +307,10 @@ class HolidayBase(Dict[date, str]):
|
|
|
304
307
|
if isinstance(subdiv, int):
|
|
305
308
|
subdiv = str(subdiv)
|
|
306
309
|
|
|
310
|
+
subdivisions_aliases = tuple(sorted(self.subdivisions_aliases))
|
|
307
311
|
# Unsupported subdivisions.
|
|
308
|
-
if (
|
|
309
|
-
|
|
310
|
-
and subdiv not in self.subdivisions + self._deprecated_subdivisions
|
|
312
|
+
if not isinstance(self, HolidaySum) and subdiv not in (
|
|
313
|
+
self.subdivisions + subdivisions_aliases + self._deprecated_subdivisions
|
|
311
314
|
):
|
|
312
315
|
raise NotImplementedError(
|
|
313
316
|
f"Entity `{self._entity_code}` does not have subdivision {subdiv}"
|
|
@@ -326,7 +329,9 @@ class HolidayBase(Dict[date, str]):
|
|
|
326
329
|
warnings.warn(
|
|
327
330
|
"This subdivision is deprecated and will be removed after "
|
|
328
331
|
"Dec, 1 2023. The list of supported subdivisions: "
|
|
329
|
-
f"{', '.join(sorted(self.subdivisions))}
|
|
332
|
+
f"{', '.join(sorted(self.subdivisions))}; "
|
|
333
|
+
"the list of supported subdivisions aliases: "
|
|
334
|
+
f"{', '.join(subdivisions_aliases)}.",
|
|
330
335
|
DeprecationWarning,
|
|
331
336
|
)
|
|
332
337
|
|
|
@@ -657,19 +662,32 @@ class HolidayBase(Dict[date, str]):
|
|
|
657
662
|
|
|
658
663
|
@cached_property
|
|
659
664
|
def _normalized_subdiv(self):
|
|
660
|
-
return
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
665
|
+
return (
|
|
666
|
+
self.subdivisions_aliases.get(self.subdiv, self.subdiv)
|
|
667
|
+
.translate(
|
|
668
|
+
str.maketrans(
|
|
669
|
+
{
|
|
670
|
+
"-": "_",
|
|
671
|
+
" ": "_",
|
|
672
|
+
}
|
|
673
|
+
)
|
|
666
674
|
)
|
|
667
|
-
|
|
675
|
+
.lower()
|
|
676
|
+
)
|
|
668
677
|
|
|
669
678
|
@cached_property
|
|
670
679
|
def _sorted_categories(self):
|
|
671
680
|
return sorted(self.categories)
|
|
672
681
|
|
|
682
|
+
@classmethod
|
|
683
|
+
def get_subdivision_aliases(cls) -> Dict[str, List]:
|
|
684
|
+
"""Get subdivision aliases."""
|
|
685
|
+
subdivision_aliases: Dict[str, List[str]] = {s: [] for s in cls.subdivisions}
|
|
686
|
+
for alias, subdivision in cls.subdivisions_aliases.items():
|
|
687
|
+
subdivision_aliases[subdivision].append(alias)
|
|
688
|
+
|
|
689
|
+
return subdivision_aliases
|
|
690
|
+
|
|
673
691
|
def _is_leap_year(self) -> bool:
|
|
674
692
|
"""
|
|
675
693
|
Returns True if the year is leap. Returns False otherwise.
|