holidays 0.25__py3-none-any.whl → 0.27__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/calendars/__init__.py +9 -7
- holidays/calendars/buddhist.py +445 -0
- holidays/calendars/chinese.py +1238 -431
- holidays/calendars/custom.py +1 -3
- holidays/calendars/hebrew.py +2 -2
- holidays/calendars/hindu.py +445 -0
- holidays/calendars/islamic.py +1347 -1347
- holidays/calendars/thai.py +229 -38
- holidays/countries/__init__.py +8 -0
- holidays/countries/albania.py +6 -17
- holidays/countries/andorra.py +2 -6
- holidays/countries/angola.py +53 -39
- holidays/countries/argentina.py +25 -35
- holidays/countries/armenia.py +1 -0
- holidays/countries/aruba.py +109 -48
- holidays/countries/australia.py +31 -69
- holidays/countries/austria.py +1 -0
- holidays/countries/azerbaijan.py +44 -71
- holidays/countries/bahrain.py +7 -7
- holidays/countries/bangladesh.py +1 -3
- holidays/countries/belarus.py +2 -3
- holidays/countries/belize.py +128 -0
- holidays/countries/bolivia.py +2 -6
- holidays/countries/bosnia_and_herzegovina.py +5 -17
- holidays/countries/botswana.py +37 -44
- holidays/countries/brazil.py +4 -7
- holidays/countries/brunei.py +427 -0
- holidays/countries/bulgaria.py +3 -6
- holidays/countries/burkina_faso.py +141 -0
- holidays/countries/burundi.py +2 -5
- holidays/countries/cambodia.py +323 -0
- holidays/countries/cameroon.py +183 -0
- holidays/countries/canada.py +20 -28
- holidays/countries/chad.py +133 -0
- holidays/countries/chile.py +6 -13
- holidays/countries/china.py +21 -25
- holidays/countries/colombia.py +18 -15
- holidays/countries/costa_rica.py +25 -27
- holidays/countries/cuba.py +28 -15
- holidays/countries/curacao.py +100 -46
- holidays/countries/cyprus.py +3 -6
- holidays/countries/czechia.py +4 -12
- holidays/countries/denmark.py +2 -3
- holidays/countries/dominican_republic.py +2 -3
- holidays/countries/ecuador.py +55 -54
- holidays/countries/egypt.py +2 -5
- holidays/countries/el_salvador.py +101 -0
- holidays/countries/eswatini.py +34 -44
- holidays/countries/ethiopia.py +7 -14
- holidays/countries/finland.py +2 -3
- holidays/countries/france.py +1 -0
- holidays/countries/gabon.py +139 -0
- holidays/countries/georgia.py +1 -0
- holidays/countries/germany.py +1 -0
- holidays/countries/greece.py +7 -6
- holidays/countries/honduras.py +17 -13
- holidays/countries/hongkong.py +117 -126
- holidays/countries/hungary.py +93 -92
- holidays/countries/iceland.py +1 -0
- holidays/countries/india.py +4 -11
- holidays/countries/indonesia.py +178 -142
- holidays/countries/ireland.py +5 -15
- holidays/countries/isle_of_man.py +23 -5
- holidays/countries/israel.py +12 -24
- holidays/countries/italy.py +6 -7
- holidays/countries/jamaica.py +10 -18
- holidays/countries/japan.py +11 -16
- holidays/countries/kazakhstan.py +7 -22
- holidays/countries/kenya.py +44 -26
- holidays/countries/kyrgyzstan.py +2 -5
- holidays/countries/latvia.py +2 -6
- holidays/countries/lesotho.py +52 -32
- holidays/countries/liechtenstein.py +1 -0
- holidays/countries/lithuania.py +4 -12
- holidays/countries/madagascar.py +3 -9
- holidays/countries/malawi.py +34 -26
- holidays/countries/malaysia.py +335 -343
- holidays/countries/marshall_islands.py +4 -9
- holidays/countries/mexico.py +2 -3
- holidays/countries/moldova.py +4 -6
- holidays/countries/monaco.py +17 -26
- holidays/countries/montenegro.py +34 -24
- holidays/countries/morocco.py +8 -5
- holidays/countries/mozambique.py +35 -31
- holidays/countries/namibia.py +54 -35
- holidays/countries/netherlands.py +1 -0
- holidays/countries/new_zealand.py +166 -134
- holidays/countries/nicaragua.py +27 -22
- holidays/countries/nigeria.py +6 -17
- holidays/countries/north_macedonia.py +3 -8
- holidays/countries/norway.py +2 -3
- holidays/countries/pakistan.py +73 -75
- holidays/countries/panama.py +25 -24
- holidays/countries/paraguay.py +55 -47
- holidays/countries/peru.py +1 -0
- holidays/countries/philippines.py +6 -2
- holidays/countries/poland.py +4 -9
- holidays/countries/portugal.py +4 -11
- holidays/countries/romania.py +4 -5
- holidays/countries/russia.py +1 -0
- holidays/countries/san_marino.py +26 -27
- holidays/countries/saudi_arabia.py +8 -22
- holidays/countries/serbia.py +22 -31
- holidays/countries/singapore.py +181 -189
- holidays/countries/slovakia.py +2 -4
- holidays/countries/south_africa.py +60 -62
- holidays/countries/south_korea.py +59 -26
- holidays/countries/spain.py +7 -10
- holidays/countries/sweden.py +2 -3
- holidays/countries/switzerland.py +1 -0
- holidays/countries/taiwan.py +20 -20
- holidays/countries/thailand.py +36 -82
- holidays/countries/turkey.py +1 -3
- holidays/countries/ukraine.py +7 -18
- holidays/countries/united_arab_emirates.py +23 -31
- holidays/countries/united_kingdom.py +124 -116
- holidays/countries/united_states.py +42 -72
- holidays/countries/uruguay.py +1 -0
- holidays/countries/vatican_city.py +64 -32
- holidays/countries/venezuela.py +9 -6
- holidays/countries/vietnam.py +6 -20
- holidays/countries/zambia.py +63 -33
- holidays/countries/zimbabwe.py +56 -37
- holidays/financial/european_central_bank.py +15 -16
- holidays/financial/ny_stock_exchange.py +80 -86
- holidays/groups/__init__.py +18 -0
- holidays/groups/buddhist.py +71 -0
- holidays/groups/chinese.py +235 -0
- holidays/groups/christian.py +483 -0
- holidays/groups/hindu.py +71 -0
- holidays/groups/international.py +157 -0
- holidays/groups/islamic.py +288 -0
- holidays/groups/thai.py +157 -0
- holidays/helpers.py +20 -0
- holidays/holiday_base.py +54 -76
- holidays/holiday_groups.py +11 -1053
- holidays/locale/am/LC_MESSAGES/ET.mo +0 -0
- holidays/locale/am/LC_MESSAGES/ET.po +20 -15
- holidays/locale/ar/LC_MESSAGES/CA.mo +0 -0
- holidays/locale/ar/LC_MESSAGES/CA.po +184 -0
- holidays/locale/ar/LC_MESSAGES/ET.mo +0 -0
- holidays/locale/ar/LC_MESSAGES/ET.po +92 -0
- holidays/locale/ar/LC_MESSAGES/UA.mo +0 -0
- holidays/locale/ar/LC_MESSAGES/UA.po +97 -0
- holidays/locale/be/LC_MESSAGES/BY.po +11 -13
- holidays/locale/bg/LC_MESSAGES/BG.po +13 -15
- holidays/locale/da/LC_MESSAGES/DK.po +13 -12
- holidays/locale/de/LC_MESSAGES/AT.po +14 -14
- holidays/locale/de/LC_MESSAGES/CH.po +91 -56
- holidays/locale/de/LC_MESSAGES/DE.po +32 -32
- holidays/locale/de/LC_MESSAGES/LI.po +23 -23
- holidays/locale/el/LC_MESSAGES/CY.po +16 -16
- holidays/locale/el/LC_MESSAGES/GR.mo +0 -0
- holidays/locale/el/LC_MESSAGES/GR.po +21 -17
- holidays/locale/en/LC_MESSAGES/CA.po +43 -43
- holidays/locale/en_US/LC_MESSAGES/AM.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AM.po +20 -20
- holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AR.po +34 -33
- holidays/locale/en_US/LC_MESSAGES/AT.po +13 -13
- holidays/locale/en_US/LC_MESSAGES/AW.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AW.po +87 -0
- holidays/locale/en_US/LC_MESSAGES/BG.po +13 -15
- holidays/locale/en_US/LC_MESSAGES/BN.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/BN.po +96 -0
- holidays/locale/en_US/LC_MESSAGES/BY.po +11 -13
- holidays/locale/en_US/LC_MESSAGES/CA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CA.po +70 -37
- holidays/locale/en_US/LC_MESSAGES/CH.po +91 -56
- holidays/locale/en_US/LC_MESSAGES/CL.po +39 -38
- holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CO.po +27 -27
- holidays/locale/en_US/LC_MESSAGES/CR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CR.po +19 -19
- holidays/locale/en_US/LC_MESSAGES/CU.po +10 -10
- holidays/locale/en_US/LC_MESSAGES/CW.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CW.po +82 -0
- holidays/locale/en_US/LC_MESSAGES/CY.po +16 -16
- holidays/locale/en_US/LC_MESSAGES/DE.po +30 -30
- holidays/locale/en_US/LC_MESSAGES/DK.po +12 -11
- holidays/locale/en_US/LC_MESSAGES/DO.po +12 -12
- holidays/locale/en_US/LC_MESSAGES/EC.po +11 -12
- holidays/locale/en_US/LC_MESSAGES/ET.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/ET.po +20 -15
- holidays/locale/en_US/LC_MESSAGES/FI.po +15 -15
- holidays/locale/en_US/LC_MESSAGES/FR.po +27 -24
- holidays/locale/en_US/LC_MESSAGES/GE.po +23 -27
- holidays/locale/en_US/LC_MESSAGES/GR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GR.po +21 -17
- holidays/locale/en_US/LC_MESSAGES/HN.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/HN.po +17 -12
- holidays/locale/en_US/LC_MESSAGES/HU.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/HU.po +109 -0
- holidays/locale/en_US/LC_MESSAGES/IS.po +17 -17
- holidays/locale/en_US/LC_MESSAGES/JP.po +25 -25
- holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/KH.po +139 -0
- holidays/locale/en_US/LC_MESSAGES/LI.po +22 -22
- holidays/locale/en_US/LC_MESSAGES/MC.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/MC.po +27 -27
- holidays/locale/en_US/LC_MESSAGES/MD.po +13 -13
- holidays/locale/en_US/LC_MESSAGES/MX.po +9 -12
- holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/NI.po +15 -15
- holidays/locale/en_US/LC_MESSAGES/NL.po +12 -12
- holidays/locale/en_US/LC_MESSAGES/NO.po +13 -13
- holidays/locale/en_US/LC_MESSAGES/PE.po +30 -30
- holidays/locale/en_US/LC_MESSAGES/PL.po +38 -21
- holidays/locale/en_US/LC_MESSAGES/PT.po +39 -36
- holidays/locale/en_US/LC_MESSAGES/PY.po +16 -16
- holidays/locale/en_US/LC_MESSAGES/RO.po +12 -12
- holidays/locale/en_US/LC_MESSAGES/RS.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/RS.po +17 -19
- holidays/locale/en_US/LC_MESSAGES/RU.po +11 -10
- holidays/locale/en_US/LC_MESSAGES/SE.po +19 -19
- holidays/locale/en_US/LC_MESSAGES/SK.po +17 -18
- holidays/locale/en_US/LC_MESSAGES/TH.po +41 -41
- holidays/locale/en_US/LC_MESSAGES/UA.po +18 -19
- holidays/locale/en_US/LC_MESSAGES/UY.po +15 -15
- holidays/locale/en_US/LC_MESSAGES/VE.po +16 -16
- holidays/locale/es/LC_MESSAGES/AR.mo +0 -0
- holidays/locale/es/LC_MESSAGES/AR.po +34 -33
- holidays/locale/es/LC_MESSAGES/CL.po +39 -38
- holidays/locale/es/LC_MESSAGES/CO.mo +0 -0
- holidays/locale/es/LC_MESSAGES/CO.po +24 -24
- holidays/locale/es/LC_MESSAGES/CR.mo +0 -0
- holidays/locale/es/LC_MESSAGES/CR.po +19 -19
- holidays/locale/es/LC_MESSAGES/CU.po +10 -10
- holidays/locale/es/LC_MESSAGES/DO.po +12 -12
- holidays/locale/es/LC_MESSAGES/EC.po +11 -12
- holidays/locale/es/LC_MESSAGES/HN.mo +0 -0
- holidays/locale/es/LC_MESSAGES/HN.po +17 -12
- holidays/locale/es/LC_MESSAGES/MX.po +9 -12
- holidays/locale/es/LC_MESSAGES/NI.po +12 -12
- holidays/locale/es/LC_MESSAGES/PE.po +30 -30
- holidays/locale/es/LC_MESSAGES/PY.po +16 -16
- holidays/locale/es/LC_MESSAGES/UY.po +15 -15
- holidays/locale/es/LC_MESSAGES/VE.po +16 -16
- holidays/locale/fi/LC_MESSAGES/FI.po +16 -16
- holidays/locale/fr/LC_MESSAGES/CA.po +43 -43
- holidays/locale/fr/LC_MESSAGES/CH.po +91 -56
- holidays/locale/fr/LC_MESSAGES/FR.po +27 -24
- holidays/locale/fr/LC_MESSAGES/MC.po +23 -23
- holidays/locale/hu/LC_MESSAGES/HU.mo +0 -0
- holidays/locale/hu/LC_MESSAGES/HU.po +109 -0
- holidays/locale/hy/LC_MESSAGES/AM.po +16 -16
- holidays/locale/is/LC_MESSAGES/IS.po +18 -18
- holidays/locale/it/LC_MESSAGES/CH.po +91 -56
- holidays/locale/ja/LC_MESSAGES/JP.po +25 -25
- holidays/locale/ka/LC_MESSAGES/GE.po +23 -27
- holidays/locale/km/LC_MESSAGES/KH.mo +0 -0
- holidays/locale/km/LC_MESSAGES/KH.po +139 -0
- holidays/locale/ms/LC_MESSAGES/BN.mo +0 -0
- holidays/locale/ms/LC_MESSAGES/BN.po +96 -0
- holidays/locale/nl/LC_MESSAGES/AW.mo +0 -0
- holidays/locale/nl/LC_MESSAGES/AW.po +87 -0
- holidays/locale/nl/LC_MESSAGES/CW.mo +0 -0
- holidays/locale/nl/LC_MESSAGES/CW.po +82 -0
- holidays/locale/nl/LC_MESSAGES/NL.po +13 -13
- holidays/locale/no/LC_MESSAGES/NO.po +14 -14
- holidays/locale/pap/LC_MESSAGES/AW.mo +0 -0
- holidays/locale/pap/LC_MESSAGES/AW.po +87 -0
- holidays/locale/pap/LC_MESSAGES/CW.mo +0 -0
- holidays/locale/pap/LC_MESSAGES/CW.po +82 -0
- holidays/locale/pl/LC_MESSAGES/PL.po +38 -21
- holidays/locale/pt_PT/LC_MESSAGES/PT.po +39 -36
- holidays/locale/ro/LC_MESSAGES/MD.po +14 -15
- holidays/locale/ro/LC_MESSAGES/RO.po +13 -14
- holidays/locale/ru/LC_MESSAGES/RU.po +11 -9
- holidays/locale/sk/LC_MESSAGES/SK.po +17 -18
- holidays/locale/sr/LC_MESSAGES/RS.mo +0 -0
- holidays/locale/sr/LC_MESSAGES/RS.po +15 -17
- holidays/locale/sv/LC_MESSAGES/FI.po +16 -16
- holidays/locale/sv/LC_MESSAGES/SE.po +20 -20
- holidays/locale/th/LC_MESSAGES/BN.mo +0 -0
- holidays/locale/th/LC_MESSAGES/BN.po +96 -0
- holidays/locale/th/LC_MESSAGES/CA.po +42 -42
- holidays/locale/th/LC_MESSAGES/KH.mo +0 -0
- holidays/locale/th/LC_MESSAGES/KH.po +145 -0
- holidays/locale/th/LC_MESSAGES/TH.po +41 -41
- holidays/locale/uk/LC_MESSAGES/AR.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/AR.po +35 -35
- holidays/locale/uk/LC_MESSAGES/AT.po +15 -16
- holidays/locale/uk/LC_MESSAGES/AW.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/AW.po +87 -0
- holidays/locale/uk/LC_MESSAGES/CH.po +92 -58
- holidays/locale/uk/LC_MESSAGES/CL.po +40 -40
- holidays/locale/uk/LC_MESSAGES/CO.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CO.po +28 -29
- holidays/locale/uk/LC_MESSAGES/CR.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CR.po +20 -21
- holidays/locale/uk/LC_MESSAGES/CU.po +11 -12
- holidays/locale/uk/LC_MESSAGES/CW.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CW.po +82 -0
- holidays/locale/uk/LC_MESSAGES/DE.po +33 -34
- holidays/locale/uk/LC_MESSAGES/DK.po +14 -14
- holidays/locale/uk/LC_MESSAGES/DO.po +13 -14
- holidays/locale/uk/LC_MESSAGES/EC.po +12 -14
- holidays/locale/uk/LC_MESSAGES/FI.po +17 -18
- holidays/locale/uk/LC_MESSAGES/FR.po +28 -26
- holidays/locale/uk/LC_MESSAGES/HN.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/HN.po +18 -14
- holidays/locale/uk/LC_MESSAGES/HU.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/HU.po +109 -0
- holidays/locale/uk/LC_MESSAGES/IS.po +19 -20
- holidays/locale/uk/LC_MESSAGES/LI.po +24 -25
- holidays/locale/uk/LC_MESSAGES/MC.po +27 -28
- holidays/locale/uk/LC_MESSAGES/MD.po +14 -15
- holidays/locale/uk/LC_MESSAGES/MX.po +10 -14
- holidays/locale/uk/LC_MESSAGES/NI.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/NI.po +16 -17
- holidays/locale/uk/LC_MESSAGES/NL.po +14 -15
- holidays/locale/uk/LC_MESSAGES/NO.po +15 -16
- holidays/locale/uk/LC_MESSAGES/PE.po +31 -32
- holidays/locale/uk/LC_MESSAGES/PL.po +38 -21
- holidays/locale/uk/LC_MESSAGES/PY.po +17 -18
- holidays/locale/uk/LC_MESSAGES/RO.po +13 -14
- holidays/locale/uk/LC_MESSAGES/SE.po +21 -22
- holidays/locale/uk/LC_MESSAGES/SK.po +18 -20
- holidays/locale/uk/LC_MESSAGES/UA.po +17 -17
- holidays/locale/uk/LC_MESSAGES/UY.po +16 -17
- holidays/locale/uk/LC_MESSAGES/VE.po +17 -18
- holidays/registry.py +21 -12
- holidays/utils.py +87 -17
- {holidays-0.25.dist-info → holidays-0.27.dist-info}/METADATA +282 -265
- holidays-0.27.dist-info/RECORD +449 -0
- holidays-0.25.dist-info/RECORD +0 -390
- {holidays-0.25.dist-info → holidays-0.27.dist-info}/LICENSE +0 -0
- {holidays-0.25.dist-info → holidays-0.27.dist-info}/WHEEL +0 -0
- {holidays-0.25.dist-info → holidays-0.27.dist-info}/top_level.txt +0 -0
holidays/countries/singapore.py
CHANGED
|
@@ -10,27 +10,39 @@
|
|
|
10
10
|
# License: MIT (see LICENSE file)
|
|
11
11
|
|
|
12
12
|
from datetime import timedelta as td
|
|
13
|
-
from typing import Dict, Tuple
|
|
14
13
|
|
|
15
|
-
from holidays.
|
|
16
|
-
|
|
14
|
+
from holidays.calendars import (
|
|
15
|
+
_CustomBuddhistCalendar,
|
|
16
|
+
_CustomChineseCalendar,
|
|
17
|
+
_CustomIslamicCalendar,
|
|
18
|
+
_CustomHinduCalendar,
|
|
19
|
+
)
|
|
20
|
+
from holidays.constants import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
|
|
17
21
|
from holidays.holiday_base import HolidayBase
|
|
18
|
-
from holidays.holiday_groups import
|
|
19
|
-
|
|
22
|
+
from holidays.holiday_groups import (
|
|
23
|
+
BuddhistCalendarHolidays,
|
|
24
|
+
ChineseCalendarHolidays,
|
|
25
|
+
ChristianHolidays,
|
|
26
|
+
HinduCalendarHolidays,
|
|
27
|
+
InternationalHolidays,
|
|
28
|
+
IslamicHolidays,
|
|
29
|
+
)
|
|
20
30
|
|
|
21
31
|
|
|
22
32
|
class Singapore(
|
|
23
33
|
HolidayBase,
|
|
34
|
+
BuddhistCalendarHolidays,
|
|
24
35
|
ChineseCalendarHolidays,
|
|
25
36
|
ChristianHolidays,
|
|
37
|
+
HinduCalendarHolidays,
|
|
26
38
|
InternationalHolidays,
|
|
27
39
|
IslamicHolidays,
|
|
28
40
|
):
|
|
29
41
|
country = "SG"
|
|
30
42
|
special_holidays = {
|
|
31
|
-
2001: (
|
|
32
|
-
2006: (
|
|
33
|
-
2011: (
|
|
43
|
+
2001: (NOV, 3, "Polling Day"),
|
|
44
|
+
2006: (MAY, 6, "Polling Day"),
|
|
45
|
+
2011: (MAY, 7, "Polling Day"),
|
|
34
46
|
2015: (
|
|
35
47
|
# SG50 Public holiday
|
|
36
48
|
# Announced on 14 March 2015
|
|
@@ -38,7 +50,7 @@ class Singapore(
|
|
|
38
50
|
(AUG, 7, "SG50 Public Holiday"),
|
|
39
51
|
(SEP, 11, "Polling Day"),
|
|
40
52
|
),
|
|
41
|
-
2020: (
|
|
53
|
+
2020: (JUL, 10, "Polling Day"),
|
|
42
54
|
}
|
|
43
55
|
|
|
44
56
|
def __init__(self, *args, **kwargs) -> None:
|
|
@@ -75,10 +87,16 @@ class Singapore(
|
|
|
75
87
|
|
|
76
88
|
See parameters and usage in :py:class:`HolidayBase`.
|
|
77
89
|
"""
|
|
78
|
-
|
|
90
|
+
BuddhistCalendarHolidays.__init__(
|
|
91
|
+
self, calendar=SingaporeBuddhistCalendar(), show_estimated=True
|
|
92
|
+
)
|
|
93
|
+
ChineseCalendarHolidays.__init__(
|
|
94
|
+
self, calendar=SingaporeChineseCalendar(), show_estimated=True
|
|
95
|
+
)
|
|
79
96
|
ChristianHolidays.__init__(self)
|
|
97
|
+
HinduCalendarHolidays.__init__(self, calendar=SingaporeHinduCalendar())
|
|
80
98
|
InternationalHolidays.__init__(self)
|
|
81
|
-
IslamicHolidays.__init__(self)
|
|
99
|
+
IslamicHolidays.__init__(self, calendar=SingaporeIslamicCalendar())
|
|
82
100
|
super().__init__(*args, **kwargs)
|
|
83
101
|
|
|
84
102
|
def _populate(self, year) -> None:
|
|
@@ -90,98 +108,16 @@ class Singapore(
|
|
|
90
108
|
|
|
91
109
|
# Chinese New Year (two days)
|
|
92
110
|
name = "Chinese New Year"
|
|
93
|
-
observed_dates.add(self._add_chinese_new_years_day(name))
|
|
94
|
-
observed_dates.add(self._add_chinese_new_years_day_two(name))
|
|
95
|
-
|
|
96
|
-
# Hari Raya Puasa
|
|
97
|
-
# aka Eid al-Fitr
|
|
98
|
-
# Date of observance is announced yearly.
|
|
99
|
-
# An Islamic holiday could fall twice in the same Gregorian year.
|
|
100
|
-
dates_fixed_multiple_obs: Dict[int, Tuple[Tuple[int, int], ...]] = {
|
|
101
|
-
2001: ((DEC, 16),),
|
|
102
|
-
2002: ((DEC, 6),),
|
|
103
|
-
2003: ((NOV, 25),),
|
|
104
|
-
2004: ((NOV, 14),),
|
|
105
|
-
2005: ((NOV, 3),),
|
|
106
|
-
2006: ((OCT, 24),),
|
|
107
|
-
2007: ((OCT, 13),),
|
|
108
|
-
2008: ((OCT, 1),),
|
|
109
|
-
2009: ((SEP, 20),),
|
|
110
|
-
2010: ((SEP, 10),),
|
|
111
|
-
2011: ((AUG, 30),),
|
|
112
|
-
2012: ((AUG, 19),),
|
|
113
|
-
2013: ((AUG, 8),),
|
|
114
|
-
2014: ((JUL, 28),),
|
|
115
|
-
2015: ((JUL, 17),),
|
|
116
|
-
2016: ((JUL, 6),),
|
|
117
|
-
2017: ((JUN, 25),),
|
|
118
|
-
2018: ((JUN, 15),),
|
|
119
|
-
2019: ((JUN, 5),),
|
|
120
|
-
2020: ((MAY, 24),),
|
|
121
|
-
2021: ((MAY, 13),),
|
|
122
|
-
2022: ((MAY, 3),),
|
|
123
|
-
2023: ((APR, 22),),
|
|
124
|
-
}
|
|
125
|
-
if year in dates_fixed_multiple_obs:
|
|
126
|
-
for hol_date in dates_fixed_multiple_obs[year]:
|
|
127
|
-
observed_dates.add(
|
|
128
|
-
self._add_holiday( # type: ignore[arg-type]
|
|
129
|
-
"Hari Raya Puasa", *hol_date
|
|
130
|
-
)
|
|
131
|
-
)
|
|
132
|
-
# Second day of Hari Raya Puasa (up to and including 1968)
|
|
133
|
-
# Removed since we don't have Hari Raya Puasa dates for the
|
|
134
|
-
# the years <= 1968.
|
|
135
|
-
else:
|
|
136
|
-
observed_dates.update(
|
|
137
|
-
self._add_eid_al_fitr_day("Hari Raya Puasa* (*estimated)")
|
|
138
|
-
)
|
|
139
|
-
# Second day of Hari Raya Puasa (up to and including 1968)
|
|
140
|
-
if year <= 1968:
|
|
141
|
-
self._add_eid_al_fitr_day_two(
|
|
142
|
-
"Second day of Hari Raya Puasa* (*estimated)"
|
|
143
|
-
)
|
|
111
|
+
observed_dates.add(self._add_chinese_new_years_day(name)) # type: ignore[arg-type]
|
|
112
|
+
observed_dates.add(self._add_chinese_new_years_day_two(name)) # type: ignore[arg-type]
|
|
144
113
|
|
|
145
|
-
# Hari Raya
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
2003: ((FEB, 12),),
|
|
153
|
-
2004: ((FEB, 1),),
|
|
154
|
-
2005: ((JAN, 21),),
|
|
155
|
-
2006: ((JAN, 10), (DEC, 31)),
|
|
156
|
-
2007: ((DEC, 20),),
|
|
157
|
-
2008: ((DEC, 8),),
|
|
158
|
-
2009: ((NOV, 27),),
|
|
159
|
-
2010: ((NOV, 17),),
|
|
160
|
-
2011: ((NOV, 6),),
|
|
161
|
-
2012: ((OCT, 26),),
|
|
162
|
-
2013: ((OCT, 15),),
|
|
163
|
-
2014: ((OCT, 5),),
|
|
164
|
-
2015: ((SEP, 24),),
|
|
165
|
-
2016: ((SEP, 12),),
|
|
166
|
-
2017: ((SEP, 1),),
|
|
167
|
-
2018: ((AUG, 22),),
|
|
168
|
-
2019: ((AUG, 11),),
|
|
169
|
-
2020: ((JUL, 31),),
|
|
170
|
-
2021: ((JUL, 20),),
|
|
171
|
-
2022: ((JUL, 10),),
|
|
172
|
-
2023: ((JUN, 29),),
|
|
173
|
-
}
|
|
174
|
-
if year in dates_fixed_multiple_obs:
|
|
175
|
-
for hol_date in dates_fixed_multiple_obs[year]:
|
|
176
|
-
observed_dates.add(
|
|
177
|
-
self._add_holiday( # type: ignore[arg-type]
|
|
178
|
-
"Hari Raya Haji", *hol_date
|
|
179
|
-
)
|
|
180
|
-
)
|
|
181
|
-
else:
|
|
182
|
-
observed_dates.update(
|
|
183
|
-
self._add_eid_al_adha_day("Hari Raya Haji* (*estimated)")
|
|
184
|
-
)
|
|
114
|
+
# Hari Raya Puasa (Eid al-Fitr)
|
|
115
|
+
observed_dates.update(self._add_eid_al_fitr_day("Hari Raya Puasa"))
|
|
116
|
+
if year <= 1968:
|
|
117
|
+
self._add_eid_al_fitr_day_two("Second day of Hari Raya Puasa")
|
|
118
|
+
|
|
119
|
+
# Hari Raya Haji (Eid al-Adha)
|
|
120
|
+
observed_dates.update(self._add_eid_al_adha_day("Hari Raya Haji"))
|
|
185
121
|
|
|
186
122
|
# Good Friday
|
|
187
123
|
self._add_good_friday("Good Friday")
|
|
@@ -197,94 +133,13 @@ class Singapore(
|
|
|
197
133
|
observed_dates.add(self._add_labor_day("Labour Day"))
|
|
198
134
|
|
|
199
135
|
# Vesak Day
|
|
200
|
-
#
|
|
201
|
-
# https://en.wikipedia.org/wiki/Vesak#Dates_of_observance
|
|
202
|
-
dates_fixed_obs: Dict[int, Tuple[int, int]] = {
|
|
203
|
-
2001: (MAY, 7),
|
|
204
|
-
2002: (MAY, 26),
|
|
205
|
-
2003: (MAY, 15),
|
|
206
|
-
2004: (JUN, 2),
|
|
207
|
-
2005: (MAY, 22),
|
|
208
|
-
2006: (MAY, 12),
|
|
209
|
-
2007: (MAY, 31),
|
|
210
|
-
2008: (MAY, 19),
|
|
211
|
-
2009: (MAY, 9),
|
|
212
|
-
2010: (MAY, 28),
|
|
213
|
-
2011: (MAY, 17),
|
|
214
|
-
2012: (MAY, 5),
|
|
215
|
-
2013: (MAY, 24),
|
|
216
|
-
2014: (MAY, 13),
|
|
217
|
-
2015: (JUN, 1),
|
|
218
|
-
2016: (MAY, 21),
|
|
219
|
-
2017: (MAY, 10),
|
|
220
|
-
2018: (MAY, 29),
|
|
221
|
-
2019: (MAY, 19),
|
|
222
|
-
2020: (MAY, 7),
|
|
223
|
-
2021: (MAY, 26),
|
|
224
|
-
2022: (MAY, 15),
|
|
225
|
-
# 2023 date revised by MOM on 29-sep-22
|
|
226
|
-
# https://www.mom.gov.sg/newsroom/press-releases/2022/0929-revised-date-for-vesak-day-2023
|
|
227
|
-
2023: (JUN, 2),
|
|
228
|
-
}
|
|
229
|
-
if year in dates_fixed_obs:
|
|
230
|
-
observed_dates.add(
|
|
231
|
-
self._add_holiday( # type: ignore[arg-type]
|
|
232
|
-
"Vesak Day", *dates_fixed_obs[year]
|
|
233
|
-
)
|
|
234
|
-
)
|
|
235
|
-
else:
|
|
236
|
-
observed_dates.add(
|
|
237
|
-
self._add_chinese_calendar_holiday(
|
|
238
|
-
"Vesak Day* (*estimated)", 4, 15
|
|
239
|
-
)
|
|
240
|
-
)
|
|
136
|
+
observed_dates.add(self._add_vesak("Vesak Day")) # type: ignore[arg-type]
|
|
241
137
|
|
|
242
138
|
# National Day
|
|
243
|
-
observed_dates.add(
|
|
244
|
-
self._add_holiday("National Day", AUG, 9) # type: ignore[arg-type]
|
|
245
|
-
)
|
|
139
|
+
observed_dates.add(self._add_holiday("National Day", AUG, 9)) # type: ignore[arg-type]
|
|
246
140
|
|
|
247
|
-
# Deepavali
|
|
248
|
-
#
|
|
249
|
-
# date of observance is announced yearly
|
|
250
|
-
dates_fixed_obs = {
|
|
251
|
-
2001: (NOV, 14),
|
|
252
|
-
2002: (NOV, 3),
|
|
253
|
-
2003: (OCT, 23),
|
|
254
|
-
2004: (NOV, 11),
|
|
255
|
-
2005: (NOV, 1),
|
|
256
|
-
2006: (OCT, 21),
|
|
257
|
-
2007: (NOV, 8),
|
|
258
|
-
2008: (OCT, 27),
|
|
259
|
-
2009: (NOV, 15),
|
|
260
|
-
2010: (NOV, 5),
|
|
261
|
-
2011: (OCT, 26),
|
|
262
|
-
2012: (NOV, 13),
|
|
263
|
-
2013: (NOV, 2),
|
|
264
|
-
2014: (OCT, 22),
|
|
265
|
-
2015: (NOV, 10),
|
|
266
|
-
2016: (OCT, 29),
|
|
267
|
-
2017: (OCT, 18),
|
|
268
|
-
2018: (NOV, 6),
|
|
269
|
-
2019: (OCT, 27),
|
|
270
|
-
2020: (NOV, 14),
|
|
271
|
-
2021: (NOV, 4),
|
|
272
|
-
2022: (OCT, 24),
|
|
273
|
-
2023: (NOV, 12),
|
|
274
|
-
}
|
|
275
|
-
if year in dates_fixed_obs:
|
|
276
|
-
observed_dates.add(
|
|
277
|
-
self._add_holiday( # type: ignore[arg-type]
|
|
278
|
-
"Deepavali", *dates_fixed_obs[year]
|
|
279
|
-
)
|
|
280
|
-
)
|
|
281
|
-
else:
|
|
282
|
-
observed_dates.add(
|
|
283
|
-
self._add_holiday( # type: ignore[arg-type]
|
|
284
|
-
"Deepavali* (*estimated)",
|
|
285
|
-
self._convert_chinese_to_gre(10, 1) + td(days=-2),
|
|
286
|
-
)
|
|
287
|
-
)
|
|
141
|
+
# Deepavali (Diwali)
|
|
142
|
+
observed_dates.add(self._add_diwali("Deepavali")) # type: ignore[arg-type]
|
|
288
143
|
|
|
289
144
|
# Christmas Day
|
|
290
145
|
observed_dates.add(self._add_christmas_day("Christmas Day"))
|
|
@@ -305,8 +160,7 @@ class Singapore(
|
|
|
305
160
|
continue
|
|
306
161
|
self._add_holiday(
|
|
307
162
|
"%s (Observed)" % self[dt],
|
|
308
|
-
dt
|
|
309
|
-
+ td(days=2 if dt + td(days=+1) in observed_dates else 1),
|
|
163
|
+
dt + td(days=2 if dt + td(days=+1) in observed_dates else 1),
|
|
310
164
|
)
|
|
311
165
|
|
|
312
166
|
# special case (observed from previous year)
|
|
@@ -320,3 +174,141 @@ class SG(Singapore):
|
|
|
320
174
|
|
|
321
175
|
class SGP(Singapore):
|
|
322
176
|
pass
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class SingaporeBuddhistCalendar(_CustomBuddhistCalendar):
|
|
180
|
+
VESAK_DATES = {
|
|
181
|
+
2001: (MAY, 7),
|
|
182
|
+
2002: (MAY, 26),
|
|
183
|
+
2003: (MAY, 15),
|
|
184
|
+
2004: (JUN, 2),
|
|
185
|
+
2005: (MAY, 22),
|
|
186
|
+
2006: (MAY, 12),
|
|
187
|
+
2007: (MAY, 31),
|
|
188
|
+
2008: (MAY, 19),
|
|
189
|
+
2009: (MAY, 9),
|
|
190
|
+
2010: (MAY, 28),
|
|
191
|
+
2011: (MAY, 17),
|
|
192
|
+
2012: (MAY, 5),
|
|
193
|
+
2013: (MAY, 24),
|
|
194
|
+
2014: (MAY, 13),
|
|
195
|
+
2015: (JUN, 1),
|
|
196
|
+
2016: (MAY, 21),
|
|
197
|
+
2017: (MAY, 10),
|
|
198
|
+
2018: (MAY, 29),
|
|
199
|
+
2019: (MAY, 19),
|
|
200
|
+
2020: (MAY, 7),
|
|
201
|
+
2021: (MAY, 26),
|
|
202
|
+
2022: (MAY, 15),
|
|
203
|
+
2023: (JUN, 2),
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class SingaporeChineseCalendar(_CustomChineseCalendar):
|
|
208
|
+
LUNAR_NEW_YEAR_DATES = {
|
|
209
|
+
2001: (JAN, 24),
|
|
210
|
+
2002: (FEB, 12),
|
|
211
|
+
2003: (FEB, 1),
|
|
212
|
+
2004: (JAN, 22),
|
|
213
|
+
2005: (FEB, 9),
|
|
214
|
+
2006: (JAN, 30),
|
|
215
|
+
2007: (FEB, 19),
|
|
216
|
+
2008: (FEB, 7),
|
|
217
|
+
2009: (JAN, 26),
|
|
218
|
+
2010: (FEB, 14),
|
|
219
|
+
2011: (FEB, 3),
|
|
220
|
+
2012: (JAN, 23),
|
|
221
|
+
2013: (FEB, 10),
|
|
222
|
+
2014: (JAN, 31),
|
|
223
|
+
2015: (FEB, 19),
|
|
224
|
+
2016: (FEB, 8),
|
|
225
|
+
2017: (JAN, 28),
|
|
226
|
+
2018: (FEB, 16),
|
|
227
|
+
2019: (FEB, 5),
|
|
228
|
+
2020: (JAN, 25),
|
|
229
|
+
2021: (FEB, 12),
|
|
230
|
+
2022: (FEB, 1),
|
|
231
|
+
2023: (JAN, 22),
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class SingaporeHinduCalendar(_CustomHinduCalendar):
|
|
236
|
+
DIWALI_DATES = {
|
|
237
|
+
2001: (NOV, 14),
|
|
238
|
+
2002: (NOV, 3),
|
|
239
|
+
2003: (OCT, 23),
|
|
240
|
+
2004: (NOV, 11),
|
|
241
|
+
2005: (NOV, 1),
|
|
242
|
+
2006: (OCT, 21),
|
|
243
|
+
2007: (NOV, 8),
|
|
244
|
+
2008: (OCT, 27),
|
|
245
|
+
2009: (NOV, 15),
|
|
246
|
+
2010: (NOV, 5),
|
|
247
|
+
2011: (OCT, 26),
|
|
248
|
+
2012: (NOV, 13),
|
|
249
|
+
2013: (NOV, 2),
|
|
250
|
+
2014: (OCT, 22),
|
|
251
|
+
2015: (NOV, 10),
|
|
252
|
+
2016: (OCT, 29),
|
|
253
|
+
2017: (OCT, 18),
|
|
254
|
+
2018: (NOV, 6),
|
|
255
|
+
2019: (OCT, 27),
|
|
256
|
+
2020: (NOV, 14),
|
|
257
|
+
2021: (NOV, 4),
|
|
258
|
+
2022: (OCT, 24),
|
|
259
|
+
2023: (NOV, 12),
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
class SingaporeIslamicCalendar(_CustomIslamicCalendar):
|
|
264
|
+
EID_AL_ADHA_DATES = {
|
|
265
|
+
2001: (MAR, 6),
|
|
266
|
+
2002: (FEB, 23),
|
|
267
|
+
2003: (FEB, 12),
|
|
268
|
+
2004: (FEB, 1),
|
|
269
|
+
2005: (JAN, 21),
|
|
270
|
+
2006: ((JAN, 10), (DEC, 31)),
|
|
271
|
+
2007: (DEC, 20),
|
|
272
|
+
2008: (DEC, 8),
|
|
273
|
+
2009: (NOV, 27),
|
|
274
|
+
2010: (NOV, 17),
|
|
275
|
+
2011: (NOV, 6),
|
|
276
|
+
2012: (OCT, 26),
|
|
277
|
+
2013: (OCT, 15),
|
|
278
|
+
2014: (OCT, 5),
|
|
279
|
+
2015: (SEP, 24),
|
|
280
|
+
2016: (SEP, 12),
|
|
281
|
+
2017: (SEP, 1),
|
|
282
|
+
2018: (AUG, 22),
|
|
283
|
+
2019: (AUG, 11),
|
|
284
|
+
2020: (JUL, 31),
|
|
285
|
+
2021: (JUL, 20),
|
|
286
|
+
2022: (JUL, 10),
|
|
287
|
+
2023: (JUN, 29),
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
EID_AL_FITR_DATES = {
|
|
291
|
+
2001: (DEC, 16),
|
|
292
|
+
2002: (DEC, 6),
|
|
293
|
+
2003: (NOV, 25),
|
|
294
|
+
2004: (NOV, 14),
|
|
295
|
+
2005: (NOV, 3),
|
|
296
|
+
2006: (OCT, 24),
|
|
297
|
+
2007: (OCT, 13),
|
|
298
|
+
2008: (OCT, 1),
|
|
299
|
+
2009: (SEP, 20),
|
|
300
|
+
2010: (SEP, 10),
|
|
301
|
+
2011: (AUG, 30),
|
|
302
|
+
2012: (AUG, 19),
|
|
303
|
+
2013: (AUG, 8),
|
|
304
|
+
2014: (JUL, 28),
|
|
305
|
+
2015: (JUL, 17),
|
|
306
|
+
2016: (JUL, 6),
|
|
307
|
+
2017: (JUN, 25),
|
|
308
|
+
2018: (JUN, 15),
|
|
309
|
+
2019: (JUN, 5),
|
|
310
|
+
2020: (MAY, 24),
|
|
311
|
+
2021: (MAY, 13),
|
|
312
|
+
2022: (MAY, 3),
|
|
313
|
+
2023: (APR, 22),
|
|
314
|
+
}
|
holidays/countries/slovakia.py
CHANGED
|
@@ -36,6 +36,7 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
36
36
|
),
|
|
37
37
|
)
|
|
38
38
|
}
|
|
39
|
+
supported_languages = ("en_US", "sk", "uk")
|
|
39
40
|
|
|
40
41
|
def __init__(self, *args, **kwargs):
|
|
41
42
|
ChristianHolidays.__init__(self)
|
|
@@ -53,10 +54,7 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
|
53
54
|
|
|
54
55
|
# Epiphany.
|
|
55
56
|
self._add_epiphany_day(
|
|
56
|
-
tr(
|
|
57
|
-
"Zjavenie Pána (Traja králi a "
|
|
58
|
-
"vianočnýsviatok pravoslávnych kresťanov)"
|
|
59
|
-
)
|
|
57
|
+
tr("Zjavenie Pána (Traja králi a vianočnýsviatok pravoslávnych kresťanov)")
|
|
60
58
|
)
|
|
61
59
|
|
|
62
60
|
# Good Friday.
|
|
@@ -12,15 +12,13 @@
|
|
|
12
12
|
from datetime import date
|
|
13
13
|
from datetime import timedelta as td
|
|
14
14
|
|
|
15
|
-
from dateutil.easter import easter
|
|
16
|
-
|
|
17
15
|
from holidays.calendars import _get_nth_weekday_of_month
|
|
18
|
-
from holidays.constants import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT
|
|
19
|
-
from holidays.constants import NOV, DEC, MON, FRI
|
|
16
|
+
from holidays.constants import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, MON, FRI
|
|
20
17
|
from holidays.holiday_base import HolidayBase
|
|
18
|
+
from holidays.holiday_groups import ChristianHolidays, InternationalHolidays
|
|
21
19
|
|
|
22
20
|
|
|
23
|
-
class SouthAfrica(HolidayBase):
|
|
21
|
+
class SouthAfrica(HolidayBase, ChristianHolidays, InternationalHolidays):
|
|
24
22
|
"""
|
|
25
23
|
http://www.gov.za/about-sa/public-holidays
|
|
26
24
|
https://en.wikipedia.org/wiki/Public_holidays_in_South_Africa
|
|
@@ -32,46 +30,48 @@ class SouthAfrica(HolidayBase):
|
|
|
32
30
|
(JUN, 2, "National and provincial government elections"),
|
|
33
31
|
(DEC, 31, "Y2K changeover"),
|
|
34
32
|
),
|
|
35
|
-
2000: (
|
|
36
|
-
2004: (
|
|
37
|
-
2006: (
|
|
38
|
-
2008: (
|
|
39
|
-
2009: (
|
|
33
|
+
2000: (JAN, 2, "Y2K changeover"),
|
|
34
|
+
2004: (APR, 14, "National and provincial government elections"),
|
|
35
|
+
2006: (MAR, 1, "Local government elections"),
|
|
36
|
+
2008: (MAY, 2, "Public holiday by presidential decree"),
|
|
37
|
+
2009: (APR, 22, "National and provincial government elections"),
|
|
40
38
|
2011: (
|
|
41
39
|
(MAY, 18, "Local government elections"),
|
|
42
40
|
(DEC, 27, "Public holiday by presidential decree"),
|
|
43
41
|
),
|
|
44
|
-
2014: (
|
|
42
|
+
2014: (MAY, 7, "National and provincial government elections"),
|
|
45
43
|
2016: (
|
|
46
44
|
(AUG, 3, "Local government elections"),
|
|
47
45
|
(DEC, 27, "Public holiday by presidential decree"),
|
|
48
46
|
),
|
|
49
|
-
2019: (
|
|
50
|
-
2021: (
|
|
51
|
-
2022: (
|
|
47
|
+
2019: (MAY, 8, "National and provincial government elections"),
|
|
48
|
+
2021: (NOV, 1, "Municipal elections"),
|
|
49
|
+
2022: (DEC, 27, "Public holiday by presidential decree"),
|
|
52
50
|
}
|
|
53
51
|
|
|
54
|
-
def
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
def __init__(self, *args, **kwargs):
|
|
53
|
+
ChristianHolidays.__init__(self)
|
|
54
|
+
InternationalHolidays.__init__(self)
|
|
55
|
+
super().__init__(*args, **kwargs)
|
|
56
|
+
|
|
57
|
+
def _add_observed(self, dt: date) -> None:
|
|
58
|
+
# As of 1995/1/1, whenever a public holiday falls on a Sunday,
|
|
59
|
+
# it rolls over to the following Monday
|
|
60
|
+
if self.observed and self._is_sunday(dt) and self._year >= 1995:
|
|
61
|
+
self._add_holiday("%s (Observed)" % self[dt], dt + td(days=+1))
|
|
61
62
|
|
|
63
|
+
def _populate(self, year):
|
|
62
64
|
# Observed since 1910, with a few name changes
|
|
63
65
|
if year <= 1909:
|
|
64
66
|
return None
|
|
65
67
|
|
|
66
68
|
super()._populate(year)
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
self._add_observed(self._add_new_years_day("New Year's Day"))
|
|
69
71
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
self
|
|
73
|
-
"Family Day" if year >= 1980 else "Easter Monday"
|
|
74
|
-
)
|
|
72
|
+
self._add_good_friday("Good Friday")
|
|
73
|
+
|
|
74
|
+
self._add_easter_monday("Family Day" if year >= 1980 else "Easter Monday")
|
|
75
75
|
|
|
76
76
|
if year <= 1951:
|
|
77
77
|
name = "Dingaan's Day"
|
|
@@ -81,72 +81,70 @@ class SouthAfrica(HolidayBase):
|
|
|
81
81
|
name = "Day of the Vow"
|
|
82
82
|
else:
|
|
83
83
|
name = "Day of Reconciliation"
|
|
84
|
-
|
|
84
|
+
self._add_observed(self._add_holiday(name, DEC, 16))
|
|
85
85
|
|
|
86
|
-
self
|
|
86
|
+
self._add_christmas_day("Christmas Day")
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
self._add_observed(
|
|
89
|
+
self._add_christmas_day_two(
|
|
90
|
+
"Day of Goodwill" if year >= 1980 else "Boxing Day",
|
|
91
|
+
)
|
|
91
92
|
)
|
|
92
93
|
|
|
93
|
-
# Observed since 1995/1/1
|
|
94
94
|
if year >= 1995:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
self._add_observed(self._add_holiday("Human Rights Day", MAR, 21))
|
|
96
|
+
|
|
97
|
+
self._add_observed(self._add_holiday("Freedom Day", APR, 27))
|
|
98
|
+
|
|
99
|
+
self._add_observed(self._add_labor_day("Workers' Day"))
|
|
100
|
+
|
|
101
|
+
self._add_observed(self._add_holiday("Youth Day", JUN, 16))
|
|
102
|
+
|
|
103
|
+
self._add_observed(self._add_holiday("National Women's Day", AUG, 9))
|
|
104
|
+
|
|
105
|
+
self._add_observed(self._add_holiday("Heritage Day", SEP, 24))
|
|
101
106
|
|
|
102
107
|
# Special holiday http://tiny.cc/za_y2k
|
|
103
108
|
if self.observed and year == 2000:
|
|
104
|
-
self
|
|
109
|
+
self._add_holiday("Y2K changeover (Observed)", JAN, 3)
|
|
105
110
|
|
|
106
111
|
# Historic public holidays no longer observed
|
|
107
112
|
if 1952 <= year <= 1973:
|
|
108
|
-
self
|
|
113
|
+
self._add_holiday("Van Riebeeck's Day", APR, 6)
|
|
109
114
|
elif 1980 <= year <= 1994:
|
|
110
|
-
self
|
|
115
|
+
self._add_holiday("Founder's Day", APR, 6)
|
|
111
116
|
|
|
112
117
|
if 1987 <= year <= 1989:
|
|
113
|
-
|
|
114
|
-
self[_get_nth_weekday_of_month(1, FRI, MAY, year)] = "Workers' Day"
|
|
118
|
+
self._add_holiday("Workers' Day", _get_nth_weekday_of_month(1, FRI, MAY, year))
|
|
115
119
|
|
|
116
120
|
if year <= 1993:
|
|
117
|
-
self
|
|
121
|
+
self._add_ascension_thursday("Ascension Day")
|
|
118
122
|
|
|
119
123
|
if year <= 1951:
|
|
120
|
-
self
|
|
124
|
+
self._add_holiday("Empire Day", MAY, 24)
|
|
121
125
|
|
|
122
126
|
if year <= 1960:
|
|
123
|
-
self
|
|
127
|
+
self._add_holiday("Union Day", MAY, 31)
|
|
124
128
|
elif year <= 1993:
|
|
125
|
-
self
|
|
129
|
+
self._add_holiday("Republic Day", MAY, 31)
|
|
126
130
|
|
|
127
131
|
if 1952 <= year <= 1960:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
_get_nth_weekday_of_month(2, MON, JUL, year)
|
|
131
|
-
|
|
132
|
+
self._add_holiday(
|
|
133
|
+
"Queen's Birthday",
|
|
134
|
+
_get_nth_weekday_of_month(2, MON, JUL, year),
|
|
135
|
+
)
|
|
132
136
|
|
|
133
137
|
if 1961 <= year <= 1973:
|
|
134
|
-
self
|
|
138
|
+
self._add_holiday("Family Day", JUL, 10)
|
|
135
139
|
|
|
136
140
|
if year <= 1951:
|
|
137
|
-
|
|
138
|
-
self[
|
|
139
|
-
_get_nth_weekday_of_month(1, MON, AUG, year)
|
|
140
|
-
] = "King's Birthday"
|
|
141
|
+
self._add_holiday("King's Birthday", _get_nth_weekday_of_month(1, MON, AUG, year))
|
|
141
142
|
|
|
142
143
|
if 1952 <= year <= 1979:
|
|
143
|
-
|
|
144
|
-
self[
|
|
145
|
-
_get_nth_weekday_of_month(1, MON, SEP, year)
|
|
146
|
-
] = "Settlers' Day"
|
|
144
|
+
self._add_holiday("Settlers' Day", _get_nth_weekday_of_month(1, MON, SEP, year))
|
|
147
145
|
|
|
148
146
|
if 1952 <= year <= 1993:
|
|
149
|
-
self
|
|
147
|
+
self._add_holiday("Kruger Day", OCT, 10)
|
|
150
148
|
|
|
151
149
|
|
|
152
150
|
class ZA(SouthAfrica):
|