holidays 0.65__py3-none-any.whl → 0.67__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/calendars/__init__.py +1 -0
- holidays/calendars/persian.py +6 -0
- holidays/calendars/sinhala.py +414 -0
- holidays/countries/__init__.py +3 -0
- holidays/countries/australia.py +6 -6
- holidays/countries/cambodia.py +1 -1
- holidays/countries/chile.py +1 -1
- holidays/countries/cuba.py +1 -1
- holidays/countries/czechia.py +39 -30
- holidays/countries/denmark.py +1 -1
- holidays/countries/finland.py +19 -19
- holidays/countries/germany.py +11 -22
- holidays/countries/greenland.py +22 -19
- holidays/countries/guatemala.py +1 -1
- holidays/countries/haiti.py +3 -3
- holidays/countries/hongkong.py +124 -174
- holidays/countries/iceland.py +16 -8
- holidays/countries/iran.py +522 -43
- holidays/countries/isle_of_man.py +15 -11
- holidays/countries/israel.py +1 -1
- holidays/countries/kazakhstan.py +1 -1
- holidays/countries/laos.py +2 -2
- holidays/countries/netherlands.py +1 -1
- holidays/countries/nicaragua.py +1 -1
- holidays/countries/panama.py +69 -31
- holidays/countries/peru.py +1 -1
- holidays/countries/saint_lucia.py +88 -0
- holidays/countries/seychelles.py +4 -4
- holidays/countries/singapore.py +1 -1
- holidays/countries/slovakia.py +14 -7
- holidays/countries/slovenia.py +63 -19
- holidays/countries/spain.py +9 -9
- holidays/countries/sri_lanka.py +515 -0
- holidays/countries/sweden.py +6 -9
- holidays/countries/switzerland.py +1 -1
- holidays/countries/thailand.py +1 -1
- holidays/countries/tuvalu.py +174 -0
- holidays/countries/ukraine.py +1 -1
- holidays/countries/united_arab_emirates.py +95 -11
- holidays/countries/united_kingdom.py +72 -56
- holidays/countries/united_states.py +141 -10
- holidays/countries/uruguay.py +1 -1
- holidays/countries/vatican_city.py +134 -53
- holidays/financial/brasil_bolsa_balcao.py +1 -1
- holidays/groups/__init__.py +1 -0
- holidays/groups/christian.py +10 -0
- holidays/groups/persian.py +12 -0
- holidays/groups/sinhala.py +192 -0
- holidays/holiday_base.py +62 -13
- holidays/locale/ar/LC_MESSAGES/AE.mo +0 -0
- holidays/locale/ar/LC_MESSAGES/UA.mo +0 -0
- holidays/locale/cs/LC_MESSAGES/CZ.mo +0 -0
- holidays/locale/da/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/en_GB/LC_MESSAGES/GB.mo +0 -0
- holidays/locale/en_GB/LC_MESSAGES/IM.mo +0 -0
- holidays/locale/en_GB/LC_MESSAGES/TV.mo +0 -0
- holidays/locale/en_HK/LC_MESSAGES/HK.mo +0 -0
- holidays/locale/en_LC/LC_MESSAGES/LC.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/AR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CH.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CL.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CO.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CU.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/CZ.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/DK.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/ES.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/FI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GB.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/GT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/HK.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/HT.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/IM.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/IR.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/IS.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/KH.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/KZ.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LC.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/LK.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/NI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/PA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/PE.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/RU.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/SC.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/SI.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/TV.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/UA.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/UY.mo +0 -0
- holidays/locale/en_US/LC_MESSAGES/VA.mo +0 -0
- holidays/locale/es/LC_MESSAGES/PA.mo +0 -0
- holidays/locale/{fa → fa_IR}/LC_MESSAGES/IR.mo +0 -0
- holidays/locale/fi/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/fy/LC_MESSAGES/NL.mo +0 -0
- holidays/locale/is/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/is/LC_MESSAGES/IS.mo +0 -0
- holidays/locale/it/LC_MESSAGES/VA.mo +0 -0
- holidays/locale/kl/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/no/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/si_LK/LC_MESSAGES/LK.mo +0 -0
- holidays/locale/sk/LC_MESSAGES/CZ.mo +0 -0
- holidays/locale/sl/LC_MESSAGES/SI.mo +0 -0
- holidays/locale/sv/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/ta_LK/LC_MESSAGES/LK.mo +0 -0
- holidays/locale/th/LC_MESSAGES/AE.mo +0 -0
- holidays/locale/th/LC_MESSAGES/GB.mo +0 -0
- holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
- holidays/locale/th/LC_MESSAGES/IL.mo +0 -0
- holidays/locale/th/LC_MESSAGES/IM.mo +0 -0
- holidays/locale/th/LC_MESSAGES/UA.mo +0 -0
- holidays/locale/th/LC_MESSAGES/VA.mo +0 -0
- holidays/locale/tvl/LC_MESSAGES/TV.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/AO.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CL.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CR.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CU.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/CZ.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/DK.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/EE.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/ES.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/GE.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/GL.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/IS.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/MC.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/MG.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/MZ.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/PA.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/PL.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/RO.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/SI.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/UA.mo +0 -0
- holidays/locale/uk/LC_MESSAGES/UZ.mo +0 -0
- holidays/locale/zh_CN/LC_MESSAGES/HK.mo +0 -0
- holidays/locale/zh_HK/LC_MESSAGES/HK.mo +0 -0
- holidays/registry.py +3 -0
- holidays/version.py +1 -1
- {holidays-0.65.dist-info → holidays-0.67.dist-info}/AUTHORS +1 -0
- {holidays-0.65.dist-info → holidays-0.67.dist-info}/METADATA +46 -25
- holidays-0.67.dist-info/RECORD +560 -0
- holidays/locale/am/LC_MESSAGES/ET.po +0 -92
- holidays/locale/ar/LC_MESSAGES/AE.po +0 -76
- holidays/locale/ar/LC_MESSAGES/BH.po +0 -76
- holidays/locale/ar/LC_MESSAGES/CA.po +0 -161
- holidays/locale/ar/LC_MESSAGES/DJ.po +0 -85
- holidays/locale/ar/LC_MESSAGES/DZ.po +0 -80
- holidays/locale/ar/LC_MESSAGES/EG.po +0 -104
- holidays/locale/ar/LC_MESSAGES/ET.po +0 -93
- holidays/locale/ar/LC_MESSAGES/JO.po +0 -79
- holidays/locale/ar/LC_MESSAGES/KW.po +0 -75
- holidays/locale/ar/LC_MESSAGES/MA.po +0 -88
- holidays/locale/ar/LC_MESSAGES/SA.po +0 -67
- holidays/locale/ar/LC_MESSAGES/TN.po +0 -92
- holidays/locale/ar/LC_MESSAGES/UA.po +0 -113
- holidays/locale/az/LC_MESSAGES/AZ.po +0 -136
- holidays/locale/be/LC_MESSAGES/BY.po +0 -109
- holidays/locale/bg/LC_MESSAGES/BG.po +0 -87
- holidays/locale/bs/LC_MESSAGES/BA.po +0 -113
- holidays/locale/cnr/LC_MESSAGES/ME.po +0 -102
- holidays/locale/cs/LC_MESSAGES/CZ.po +0 -88
- holidays/locale/da/LC_MESSAGES/DK.po +0 -87
- holidays/locale/da/LC_MESSAGES/GL.po +0 -91
- holidays/locale/de/LC_MESSAGES/AT.po +0 -115
- holidays/locale/de/LC_MESSAGES/BE.po +0 -88
- holidays/locale/de/LC_MESSAGES/CH.po +0 -123
- holidays/locale/de/LC_MESSAGES/DE.po +0 -121
- holidays/locale/de/LC_MESSAGES/LI.po +0 -115
- holidays/locale/de/LC_MESSAGES/LU.po +0 -72
- holidays/locale/el/LC_MESSAGES/CY.po +0 -99
- holidays/locale/el/LC_MESSAGES/GR.po +0 -89
- holidays/locale/en_AU/LC_MESSAGES/AU.po +0 -177
- holidays/locale/en_CA/LC_MESSAGES/CA.po +0 -161
- holidays/locale/en_CY/LC_MESSAGES/CY.po +0 -100
- holidays/locale/en_PH/LC_MESSAGES/PH.po +0 -128
- holidays/locale/en_SC/LC_MESSAGES/SC.po +0 -117
- holidays/locale/en_SG/LC_MESSAGES/SG.po +0 -98
- holidays/locale/en_US/LC_MESSAGES/AE.po +0 -77
- holidays/locale/en_US/LC_MESSAGES/AF.po +0 -92
- holidays/locale/en_US/LC_MESSAGES/AL.po +0 -106
- holidays/locale/en_US/LC_MESSAGES/AM.po +0 -88
- holidays/locale/en_US/LC_MESSAGES/AO.po +0 -117
- holidays/locale/en_US/LC_MESSAGES/AR.po +0 -139
- holidays/locale/en_US/LC_MESSAGES/AT.po +0 -116
- holidays/locale/en_US/LC_MESSAGES/AU.po +0 -177
- holidays/locale/en_US/LC_MESSAGES/AW.po +0 -84
- holidays/locale/en_US/LC_MESSAGES/AZ.po +0 -136
- holidays/locale/en_US/LC_MESSAGES/BA.po +0 -113
- holidays/locale/en_US/LC_MESSAGES/BE.po +0 -88
- holidays/locale/en_US/LC_MESSAGES/BG.po +0 -87
- holidays/locale/en_US/LC_MESSAGES/BH.po +0 -77
- holidays/locale/en_US/LC_MESSAGES/BN.po +0 -109
- holidays/locale/en_US/LC_MESSAGES/BO.po +0 -117
- holidays/locale/en_US/LC_MESSAGES/BR.po +0 -263
- holidays/locale/en_US/LC_MESSAGES/BVMF.po +0 -79
- holidays/locale/en_US/LC_MESSAGES/BY.po +0 -114
- holidays/locale/en_US/LC_MESSAGES/CA.po +0 -161
- holidays/locale/en_US/LC_MESSAGES/CG.po +0 -67
- holidays/locale/en_US/LC_MESSAGES/CH.po +0 -124
- holidays/locale/en_US/LC_MESSAGES/CL.po +0 -136
- holidays/locale/en_US/LC_MESSAGES/CN.po +0 -102
- holidays/locale/en_US/LC_MESSAGES/CO.po +0 -105
- holidays/locale/en_US/LC_MESSAGES/CR.po +0 -85
- holidays/locale/en_US/LC_MESSAGES/CU.po +0 -69
- holidays/locale/en_US/LC_MESSAGES/CW.po +0 -84
- holidays/locale/en_US/LC_MESSAGES/CY.po +0 -100
- holidays/locale/en_US/LC_MESSAGES/CZ.po +0 -88
- holidays/locale/en_US/LC_MESSAGES/DE.po +0 -126
- holidays/locale/en_US/LC_MESSAGES/DJ.po +0 -84
- holidays/locale/en_US/LC_MESSAGES/DK.po +0 -88
- holidays/locale/en_US/LC_MESSAGES/DO.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/DZ.po +0 -81
- holidays/locale/en_US/LC_MESSAGES/EC.po +0 -73
- holidays/locale/en_US/LC_MESSAGES/EE.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/EG.po +0 -105
- holidays/locale/en_US/LC_MESSAGES/ES.po +0 -225
- holidays/locale/en_US/LC_MESSAGES/ET.po +0 -93
- holidays/locale/en_US/LC_MESSAGES/FI.po +0 -164
- holidays/locale/en_US/LC_MESSAGES/FR.po +0 -116
- holidays/locale/en_US/LC_MESSAGES/GE.po +0 -96
- holidays/locale/en_US/LC_MESSAGES/GL.po +0 -92
- holidays/locale/en_US/LC_MESSAGES/GR.po +0 -89
- holidays/locale/en_US/LC_MESSAGES/GT.po +0 -72
- holidays/locale/en_US/LC_MESSAGES/HN.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/HR.po +0 -94
- holidays/locale/en_US/LC_MESSAGES/HT.po +0 -127
- holidays/locale/en_US/LC_MESSAGES/HU.po +0 -101
- holidays/locale/en_US/LC_MESSAGES/ID.po +0 -195
- holidays/locale/en_US/LC_MESSAGES/IL.po +0 -105
- holidays/locale/en_US/LC_MESSAGES/IR.po +0 -125
- holidays/locale/en_US/LC_MESSAGES/IS.po +0 -92
- holidays/locale/en_US/LC_MESSAGES/JO.po +0 -80
- holidays/locale/en_US/LC_MESSAGES/JP.po +0 -128
- holidays/locale/en_US/LC_MESSAGES/KH.po +0 -132
- holidays/locale/en_US/LC_MESSAGES/KR.po +0 -219
- holidays/locale/en_US/LC_MESSAGES/KW.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/KZ.po +0 -103
- holidays/locale/en_US/LC_MESSAGES/LA.po +0 -160
- holidays/locale/en_US/LC_MESSAGES/LI.po +0 -116
- holidays/locale/en_US/LC_MESSAGES/LT.po +0 -94
- holidays/locale/en_US/LC_MESSAGES/LU.po +0 -72
- holidays/locale/en_US/LC_MESSAGES/LV.po +0 -106
- holidays/locale/en_US/LC_MESSAGES/MA.po +0 -89
- holidays/locale/en_US/LC_MESSAGES/MC.po +0 -85
- holidays/locale/en_US/LC_MESSAGES/MD.po +0 -84
- holidays/locale/en_US/LC_MESSAGES/ME.po +0 -102
- holidays/locale/en_US/LC_MESSAGES/MG.po +0 -92
- holidays/locale/en_US/LC_MESSAGES/MT.po +0 -83
- holidays/locale/en_US/LC_MESSAGES/MX.po +0 -60
- holidays/locale/en_US/LC_MESSAGES/MY.po +0 -250
- holidays/locale/en_US/LC_MESSAGES/MZ.po +0 -69
- holidays/locale/en_US/LC_MESSAGES/NI.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/NL.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/NO.po +0 -80
- holidays/locale/en_US/LC_MESSAGES/PE.po +0 -88
- holidays/locale/en_US/LC_MESSAGES/PH.po +0 -128
- holidays/locale/en_US/LC_MESSAGES/PL.po +0 -115
- holidays/locale/en_US/LC_MESSAGES/PT.po +0 -184
- holidays/locale/en_US/LC_MESSAGES/PY.po +0 -88
- holidays/locale/en_US/LC_MESSAGES/RO.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/RS.po +0 -69
- holidays/locale/en_US/LC_MESSAGES/RU.po +0 -93
- holidays/locale/en_US/LC_MESSAGES/SA.po +0 -67
- holidays/locale/en_US/LC_MESSAGES/SC.po +0 -117
- holidays/locale/en_US/LC_MESSAGES/SE.po +0 -104
- holidays/locale/en_US/LC_MESSAGES/SG.po +0 -98
- holidays/locale/en_US/LC_MESSAGES/SI.po +0 -76
- holidays/locale/en_US/LC_MESSAGES/SK.po +0 -97
- holidays/locale/en_US/LC_MESSAGES/SV.po +0 -75
- holidays/locale/en_US/LC_MESSAGES/TH.po +0 -354
- holidays/locale/en_US/LC_MESSAGES/TL.po +0 -169
- holidays/locale/en_US/LC_MESSAGES/TN.po +0 -93
- holidays/locale/en_US/LC_MESSAGES/TO.po +0 -91
- holidays/locale/en_US/LC_MESSAGES/TR.po +0 -89
- holidays/locale/en_US/LC_MESSAGES/TW.po +0 -78
- holidays/locale/en_US/LC_MESSAGES/TZ.po +0 -119
- holidays/locale/en_US/LC_MESSAGES/UA.po +0 -113
- holidays/locale/en_US/LC_MESSAGES/UY.po +0 -120
- holidays/locale/en_US/LC_MESSAGES/UZ.po +0 -96
- holidays/locale/en_US/LC_MESSAGES/VE.po +0 -92
- holidays/locale/en_US/LC_MESSAGES/VN.po +0 -93
- holidays/locale/es/LC_MESSAGES/AR.po +0 -135
- holidays/locale/es/LC_MESSAGES/BO.po +0 -117
- holidays/locale/es/LC_MESSAGES/CL.po +0 -136
- holidays/locale/es/LC_MESSAGES/CO.po +0 -105
- holidays/locale/es/LC_MESSAGES/CR.po +0 -85
- holidays/locale/es/LC_MESSAGES/CU.po +0 -69
- holidays/locale/es/LC_MESSAGES/DO.po +0 -76
- holidays/locale/es/LC_MESSAGES/EC.po +0 -73
- holidays/locale/es/LC_MESSAGES/ES.po +0 -225
- holidays/locale/es/LC_MESSAGES/GT.po +0 -72
- holidays/locale/es/LC_MESSAGES/HN.po +0 -76
- holidays/locale/es/LC_MESSAGES/HT.po +0 -127
- holidays/locale/es/LC_MESSAGES/MX.po +0 -60
- holidays/locale/es/LC_MESSAGES/NI.po +0 -76
- holidays/locale/es/LC_MESSAGES/PE.po +0 -88
- holidays/locale/es/LC_MESSAGES/PY.po +0 -88
- holidays/locale/es/LC_MESSAGES/SV.po +0 -75
- holidays/locale/es/LC_MESSAGES/UY.po +0 -120
- holidays/locale/es/LC_MESSAGES/VE.po +0 -92
- holidays/locale/et/LC_MESSAGES/EE.po +0 -76
- holidays/locale/fa/LC_MESSAGES/IR.po +0 -125
- holidays/locale/fa_AF/LC_MESSAGES/AF.po +0 -92
- holidays/locale/fi/LC_MESSAGES/FI.po +0 -164
- holidays/locale/fil/LC_MESSAGES/PH.po +0 -129
- holidays/locale/fr/LC_MESSAGES/BE.po +0 -88
- holidays/locale/fr/LC_MESSAGES/CA.po +0 -161
- holidays/locale/fr/LC_MESSAGES/CG.po +0 -67
- holidays/locale/fr/LC_MESSAGES/CH.po +0 -123
- holidays/locale/fr/LC_MESSAGES/DJ.po +0 -84
- holidays/locale/fr/LC_MESSAGES/DZ.po +0 -81
- holidays/locale/fr/LC_MESSAGES/FR.po +0 -116
- holidays/locale/fr/LC_MESSAGES/LU.po +0 -72
- holidays/locale/fr/LC_MESSAGES/MA.po +0 -89
- holidays/locale/fr/LC_MESSAGES/MC.po +0 -85
- holidays/locale/fr_HT/LC_MESSAGES/HT.po +0 -127
- holidays/locale/he/LC_MESSAGES/IL.po +0 -104
- holidays/locale/hr/LC_MESSAGES/HR.po +0 -94
- holidays/locale/ht/LC_MESSAGES/HT.po +0 -127
- holidays/locale/hu/LC_MESSAGES/HU.po +0 -101
- holidays/locale/hy/LC_MESSAGES/AM.po +0 -87
- holidays/locale/id/LC_MESSAGES/ID.po +0 -195
- holidays/locale/is/LC_MESSAGES/IS.po +0 -92
- holidays/locale/it/LC_MESSAGES/CH.po +0 -123
- holidays/locale/ja/LC_MESSAGES/JP.po +0 -128
- holidays/locale/ka/LC_MESSAGES/GE.po +0 -96
- holidays/locale/kk/LC_MESSAGES/KZ.po +0 -103
- holidays/locale/kl/LC_MESSAGES/GL.po +0 -91
- holidays/locale/km/LC_MESSAGES/KH.po +0 -132
- holidays/locale/ko/LC_MESSAGES/KR.po +0 -219
- holidays/locale/lb/LC_MESSAGES/LU.po +0 -72
- holidays/locale/lo/LC_MESSAGES/LA.po +0 -160
- holidays/locale/lt/LC_MESSAGES/LT.po +0 -94
- holidays/locale/lv/LC_MESSAGES/LV.po +0 -104
- holidays/locale/mg/LC_MESSAGES/MG.po +0 -92
- holidays/locale/ms/LC_MESSAGES/BN.po +0 -107
- holidays/locale/ms_MY/LC_MESSAGES/MY.po +0 -250
- holidays/locale/mt/LC_MESSAGES/MT.po +0 -83
- holidays/locale/nl/LC_MESSAGES/AW.po +0 -84
- holidays/locale/nl/LC_MESSAGES/BE.po +0 -88
- holidays/locale/nl/LC_MESSAGES/CW.po +0 -84
- holidays/locale/nl/LC_MESSAGES/NL.po +0 -76
- holidays/locale/no/LC_MESSAGES/NO.po +0 -80
- holidays/locale/pap_AW/LC_MESSAGES/AW.po +0 -84
- holidays/locale/pap_CW/LC_MESSAGES/CW.po +0 -84
- holidays/locale/pl/LC_MESSAGES/PL.po +0 -115
- holidays/locale/ps_AF/LC_MESSAGES/AF.po +0 -92
- holidays/locale/pt_AO/LC_MESSAGES/AO.po +0 -117
- holidays/locale/pt_BR/LC_MESSAGES/BR.po +0 -263
- holidays/locale/pt_BR/LC_MESSAGES/BVMF.po +0 -79
- holidays/locale/pt_MZ/LC_MESSAGES/MZ.po +0 -69
- holidays/locale/pt_PT/LC_MESSAGES/PT.po +0 -184
- holidays/locale/pt_TL/LC_MESSAGES/TL.po +0 -167
- holidays/locale/ro/LC_MESSAGES/MD.po +0 -82
- holidays/locale/ro/LC_MESSAGES/RO.po +0 -76
- holidays/locale/ru/LC_MESSAGES/BY.po +0 -111
- holidays/locale/ru/LC_MESSAGES/RU.po +0 -91
- holidays/locale/sk/LC_MESSAGES/CZ.po +0 -88
- holidays/locale/sk/LC_MESSAGES/SK.po +0 -96
- holidays/locale/sl/LC_MESSAGES/SI.po +0 -76
- holidays/locale/sq/LC_MESSAGES/AL.po +0 -106
- holidays/locale/sr/LC_MESSAGES/BA.po +0 -113
- holidays/locale/sr/LC_MESSAGES/RS.po +0 -68
- holidays/locale/sv/LC_MESSAGES/SE.po +0 -104
- holidays/locale/sv_FI/LC_MESSAGES/FI.po +0 -164
- holidays/locale/sw/LC_MESSAGES/TZ.po +0 -119
- holidays/locale/tet/LC_MESSAGES/TL.po +0 -167
- holidays/locale/th/LC_MESSAGES/AU.po +0 -177
- holidays/locale/th/LC_MESSAGES/BN.po +0 -109
- holidays/locale/th/LC_MESSAGES/BY.po +0 -109
- holidays/locale/th/LC_MESSAGES/CA.po +0 -161
- holidays/locale/th/LC_MESSAGES/CN.po +0 -101
- holidays/locale/th/LC_MESSAGES/DE.po +0 -126
- holidays/locale/th/LC_MESSAGES/ID.po +0 -195
- holidays/locale/th/LC_MESSAGES/JP.po +0 -128
- holidays/locale/th/LC_MESSAGES/KH.po +0 -138
- holidays/locale/th/LC_MESSAGES/KR.po +0 -219
- holidays/locale/th/LC_MESSAGES/LA.po +0 -160
- holidays/locale/th/LC_MESSAGES/MY.po +0 -250
- holidays/locale/th/LC_MESSAGES/NO.po +0 -80
- holidays/locale/th/LC_MESSAGES/PH.po +0 -128
- holidays/locale/th/LC_MESSAGES/RU.po +0 -90
- holidays/locale/th/LC_MESSAGES/SE.po +0 -104
- holidays/locale/th/LC_MESSAGES/SG.po +0 -98
- holidays/locale/th/LC_MESSAGES/TH.po +0 -352
- holidays/locale/th/LC_MESSAGES/TW.po +0 -78
- holidays/locale/th/LC_MESSAGES/UA.po +0 -114
- holidays/locale/th/LC_MESSAGES/VN.po +0 -93
- holidays/locale/to/LC_MESSAGES/TO.po +0 -91
- holidays/locale/tr/LC_MESSAGES/TR.po +0 -90
- holidays/locale/uk/LC_MESSAGES/AL.po +0 -106
- holidays/locale/uk/LC_MESSAGES/AO.po +0 -117
- holidays/locale/uk/LC_MESSAGES/AR.po +0 -138
- holidays/locale/uk/LC_MESSAGES/AT.po +0 -116
- holidays/locale/uk/LC_MESSAGES/AW.po +0 -84
- holidays/locale/uk/LC_MESSAGES/AZ.po +0 -136
- holidays/locale/uk/LC_MESSAGES/BA.po +0 -114
- holidays/locale/uk/LC_MESSAGES/BE.po +0 -88
- holidays/locale/uk/LC_MESSAGES/BG.po +0 -89
- holidays/locale/uk/LC_MESSAGES/BO.po +0 -117
- holidays/locale/uk/LC_MESSAGES/BR.po +0 -263
- holidays/locale/uk/LC_MESSAGES/BVMF.po +0 -79
- holidays/locale/uk/LC_MESSAGES/CH.po +0 -123
- holidays/locale/uk/LC_MESSAGES/CL.po +0 -136
- holidays/locale/uk/LC_MESSAGES/CO.po +0 -105
- holidays/locale/uk/LC_MESSAGES/CR.po +0 -85
- holidays/locale/uk/LC_MESSAGES/CU.po +0 -69
- holidays/locale/uk/LC_MESSAGES/CW.po +0 -84
- holidays/locale/uk/LC_MESSAGES/CY.po +0 -100
- holidays/locale/uk/LC_MESSAGES/CZ.po +0 -88
- holidays/locale/uk/LC_MESSAGES/DE.po +0 -126
- holidays/locale/uk/LC_MESSAGES/DK.po +0 -88
- holidays/locale/uk/LC_MESSAGES/DO.po +0 -76
- holidays/locale/uk/LC_MESSAGES/EC.po +0 -73
- holidays/locale/uk/LC_MESSAGES/EE.po +0 -76
- holidays/locale/uk/LC_MESSAGES/ES.po +0 -225
- holidays/locale/uk/LC_MESSAGES/FI.po +0 -164
- holidays/locale/uk/LC_MESSAGES/FR.po +0 -116
- holidays/locale/uk/LC_MESSAGES/GE.po +0 -96
- holidays/locale/uk/LC_MESSAGES/GR.po +0 -89
- holidays/locale/uk/LC_MESSAGES/HN.po +0 -76
- holidays/locale/uk/LC_MESSAGES/HR.po +0 -94
- holidays/locale/uk/LC_MESSAGES/HU.po +0 -101
- holidays/locale/uk/LC_MESSAGES/ID.po +0 -195
- holidays/locale/uk/LC_MESSAGES/IL.po +0 -104
- holidays/locale/uk/LC_MESSAGES/IS.po +0 -92
- holidays/locale/uk/LC_MESSAGES/KZ.po +0 -103
- holidays/locale/uk/LC_MESSAGES/LI.po +0 -116
- holidays/locale/uk/LC_MESSAGES/LT.po +0 -94
- holidays/locale/uk/LC_MESSAGES/LU.po +0 -72
- holidays/locale/uk/LC_MESSAGES/LV.po +0 -105
- holidays/locale/uk/LC_MESSAGES/MC.po +0 -85
- holidays/locale/uk/LC_MESSAGES/MD.po +0 -84
- holidays/locale/uk/LC_MESSAGES/ME.po +0 -102
- holidays/locale/uk/LC_MESSAGES/MG.po +0 -92
- holidays/locale/uk/LC_MESSAGES/MX.po +0 -60
- holidays/locale/uk/LC_MESSAGES/MZ.po +0 -69
- holidays/locale/uk/LC_MESSAGES/NI.po +0 -76
- holidays/locale/uk/LC_MESSAGES/NL.po +0 -76
- holidays/locale/uk/LC_MESSAGES/NO.po +0 -80
- holidays/locale/uk/LC_MESSAGES/PE.po +0 -88
- holidays/locale/uk/LC_MESSAGES/PL.po +0 -115
- holidays/locale/uk/LC_MESSAGES/PT.po +0 -184
- holidays/locale/uk/LC_MESSAGES/PY.po +0 -88
- holidays/locale/uk/LC_MESSAGES/RO.po +0 -76
- holidays/locale/uk/LC_MESSAGES/SE.po +0 -104
- holidays/locale/uk/LC_MESSAGES/SI.po +0 -76
- holidays/locale/uk/LC_MESSAGES/SK.po +0 -96
- holidays/locale/uk/LC_MESSAGES/SV.po +0 -75
- holidays/locale/uk/LC_MESSAGES/TR.po +0 -89
- holidays/locale/uk/LC_MESSAGES/UA.po +0 -112
- holidays/locale/uk/LC_MESSAGES/UY.po +0 -120
- holidays/locale/uk/LC_MESSAGES/UZ.po +0 -96
- holidays/locale/uk/LC_MESSAGES/VE.po +0 -92
- holidays/locale/uz/LC_MESSAGES/UZ.po +0 -96
- holidays/locale/vi/LC_MESSAGES/VN.po +0 -93
- holidays/locale/zh_CN/LC_MESSAGES/CN.po +0 -100
- holidays/locale/zh_CN/LC_MESSAGES/TW.po +0 -78
- holidays/locale/zh_TW/LC_MESSAGES/CN.po +0 -100
- holidays/locale/zh_TW/LC_MESSAGES/TW.po +0 -78
- holidays-0.65.dist-info/RECORD +0 -841
- {holidays-0.65.dist-info → holidays-0.67.dist-info}/LICENSE +0 -0
- {holidays-0.65.dist-info → holidays-0.67.dist-info}/WHEEL +0 -0
- {holidays-0.65.dist-info → holidays-0.67.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
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/holidays
|
|
11
|
+
# License: MIT (see LICENSE file)
|
|
12
|
+
|
|
13
|
+
from collections.abc import Iterable
|
|
14
|
+
from datetime import date
|
|
15
|
+
from typing import Optional
|
|
16
|
+
|
|
17
|
+
from holidays.calendars import _SinhalaLunar
|
|
18
|
+
from holidays.groups.eastern import EasternCalendarHolidays
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class SinhalaCalendarHolidays(EasternCalendarHolidays):
|
|
22
|
+
"""
|
|
23
|
+
Sinhala holidays.
|
|
24
|
+
|
|
25
|
+
Sinhala Buddhist Uposatha day calculation method is different from Thai LuniSolar
|
|
26
|
+
and Buddhist (Mahayana) used in East Asia.
|
|
27
|
+
|
|
28
|
+
Due to the fact that Poya (Uposatha) days are calculated astronomically
|
|
29
|
+
based on how close a particular day is closest to full moon at noon, and that
|
|
30
|
+
an extra month is added every 33 months interval, this is hardcoded for now.
|
|
31
|
+
|
|
32
|
+
Adhi month dates are instead hardcoded in Sri Lanka country implementation.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, cls=None, show_estimated=False) -> None:
|
|
36
|
+
self._sinhala_calendar = cls() if cls else _SinhalaLunar()
|
|
37
|
+
self._sinhala_calendar_show_estimated = show_estimated
|
|
38
|
+
|
|
39
|
+
def _add_sinhala_calendar_holiday(
|
|
40
|
+
self, name: str, dt_estimated: tuple[Optional[date], bool]
|
|
41
|
+
) -> Optional[date]:
|
|
42
|
+
"""
|
|
43
|
+
Add Sinhala calendar holiday.
|
|
44
|
+
|
|
45
|
+
Adds customizable estimation label to holiday name if holiday date
|
|
46
|
+
is an estimation.
|
|
47
|
+
"""
|
|
48
|
+
return self._add_eastern_calendar_holiday(
|
|
49
|
+
name, dt_estimated, self._sinhala_calendar_show_estimated
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
def _add_sinhala_calendar_holiday_set(
|
|
53
|
+
self, name: str, dts_estimated: Iterable[tuple[date, bool]], days_delta: int = 0
|
|
54
|
+
) -> set[date]:
|
|
55
|
+
"""
|
|
56
|
+
Add Sinhala calendar holidays.
|
|
57
|
+
|
|
58
|
+
Adds customizable estimation label to holiday name if holiday date
|
|
59
|
+
is an estimation.
|
|
60
|
+
"""
|
|
61
|
+
added_dates = set()
|
|
62
|
+
for dt_estimated in dts_estimated:
|
|
63
|
+
if dt := self._add_eastern_calendar_holiday(
|
|
64
|
+
name, dt_estimated, self._sinhala_calendar_show_estimated, days_delta=days_delta
|
|
65
|
+
):
|
|
66
|
+
added_dates.add(dt)
|
|
67
|
+
|
|
68
|
+
return added_dates
|
|
69
|
+
|
|
70
|
+
def _add_bak_poya(self, name) -> Optional[date]:
|
|
71
|
+
"""
|
|
72
|
+
Add Bak Poya (first full moon day of the 5th lunar month).
|
|
73
|
+
|
|
74
|
+
https://us.lakpura.com/pages/bak-poya
|
|
75
|
+
"""
|
|
76
|
+
return self._add_sinhala_calendar_holiday(
|
|
77
|
+
name, self._sinhala_calendar.bak_poya_date(self._year)
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
def _add_binara_poya(self, name) -> Optional[date]:
|
|
81
|
+
"""
|
|
82
|
+
Add Binara Poya (first full moon day of the 10th lunar month).
|
|
83
|
+
|
|
84
|
+
https://us.lakpura.com/pages/binara-poya
|
|
85
|
+
"""
|
|
86
|
+
return self._add_sinhala_calendar_holiday(
|
|
87
|
+
name, self._sinhala_calendar.binara_poya_date(self._year)
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def _add_duruthu_poya(self, name) -> set[date]:
|
|
91
|
+
"""
|
|
92
|
+
Add Duruthu Poya (first full moon day of the 2nd lunar month).
|
|
93
|
+
|
|
94
|
+
https://us.lakpura.com/pages/duruthu-poya
|
|
95
|
+
"""
|
|
96
|
+
return self._add_sinhala_calendar_holiday_set(
|
|
97
|
+
name, self._sinhala_calendar.duruthu_poya_date(self._year)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def _add_esala_poya(self, name) -> Optional[date]:
|
|
101
|
+
"""
|
|
102
|
+
Add Esala Poya (first full moon day of the 8th lunar month).
|
|
103
|
+
|
|
104
|
+
https://us.lakpura.com/pages/esala-poya
|
|
105
|
+
"""
|
|
106
|
+
return self._add_sinhala_calendar_holiday(
|
|
107
|
+
name, self._sinhala_calendar.esala_poya_date(self._year)
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def _add_il_poya(self, name) -> Optional[date]:
|
|
111
|
+
"""
|
|
112
|
+
Add Il Poya (first full moon day of the 12th lunar month).
|
|
113
|
+
|
|
114
|
+
Also known as "Ill Poya"
|
|
115
|
+
https://us.lakpura.com/pages/il-poya
|
|
116
|
+
"""
|
|
117
|
+
return self._add_sinhala_calendar_holiday(
|
|
118
|
+
name, self._sinhala_calendar.il_poya_date(self._year)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
def _add_medin_poya(self, name) -> Optional[date]:
|
|
122
|
+
"""
|
|
123
|
+
Add Medin Poya (first full moon day of the 4th lunar month).
|
|
124
|
+
|
|
125
|
+
https://us.lakpura.com/pages/medin-poya
|
|
126
|
+
"""
|
|
127
|
+
return self._add_sinhala_calendar_holiday(
|
|
128
|
+
name, self._sinhala_calendar.medin_poya_date(self._year)
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def _add_nawam_poya(self, name) -> Optional[date]:
|
|
132
|
+
"""
|
|
133
|
+
Add Nawam Poya (first full moon day of the 3rd lunar month).
|
|
134
|
+
|
|
135
|
+
Also known as "Navam Poya" and "Magha Puja".
|
|
136
|
+
https://us.lakpura.com/pages/navam-poya
|
|
137
|
+
"""
|
|
138
|
+
return self._add_sinhala_calendar_holiday(
|
|
139
|
+
name, self._sinhala_calendar.nawam_poya_date(self._year)
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
def _add_nikini_poya(self, name) -> Optional[date]:
|
|
143
|
+
"""
|
|
144
|
+
Add Nikini Poya (first full moon day of the 9th lunar month).
|
|
145
|
+
|
|
146
|
+
https://us.lakpura.com/pages/nikini-poya
|
|
147
|
+
"""
|
|
148
|
+
return self._add_sinhala_calendar_holiday(
|
|
149
|
+
name, self._sinhala_calendar.nikini_poya_date(self._year)
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
def _add_poson_poya(self, name) -> Optional[date]:
|
|
153
|
+
"""
|
|
154
|
+
Add Poson Poya (first full moon day of the 7th lunar month).
|
|
155
|
+
|
|
156
|
+
https://us.lakpura.com/pages/poson
|
|
157
|
+
"""
|
|
158
|
+
return self._add_sinhala_calendar_holiday(
|
|
159
|
+
name, self._sinhala_calendar.poson_poya_date(self._year)
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
def _add_unduvap_poya(self, name) -> Optional[date]:
|
|
163
|
+
"""
|
|
164
|
+
Add Unduvap Poya (first full moon day of the 1st lunar month).
|
|
165
|
+
|
|
166
|
+
Also known as "Undawap Poya".
|
|
167
|
+
https://us.lakpura.com/pages/unduvap-poya
|
|
168
|
+
"""
|
|
169
|
+
return self._add_sinhala_calendar_holiday(
|
|
170
|
+
name, self._sinhala_calendar.unduvap_poya_date(self._year)
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
def _add_vap_poya(self, name) -> Optional[date]:
|
|
174
|
+
"""
|
|
175
|
+
Add Vap Poya (first full moon day of the 11th lunar month).
|
|
176
|
+
|
|
177
|
+
https://us.lakpura.com/pages/vap-poya
|
|
178
|
+
"""
|
|
179
|
+
return self._add_sinhala_calendar_holiday(
|
|
180
|
+
name, self._sinhala_calendar.vap_poya_date(self._year)
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
def _add_vesak_poya(self, name) -> Optional[date]:
|
|
184
|
+
"""
|
|
185
|
+
Add Vesak Poya (first full moon day of the 6th lunar month).
|
|
186
|
+
|
|
187
|
+
Also known as "Wesak Poya".
|
|
188
|
+
https://us.lakpura.com/pages/vesak
|
|
189
|
+
"""
|
|
190
|
+
return self._add_sinhala_calendar_holiday(
|
|
191
|
+
name, self._sinhala_calendar.vesak_poya_date(self._year)
|
|
192
|
+
)
|
holidays/holiday_base.py
CHANGED
|
@@ -14,13 +14,14 @@ __all__ = ("DateLike", "HolidayBase", "HolidaySum")
|
|
|
14
14
|
|
|
15
15
|
import copy
|
|
16
16
|
import warnings
|
|
17
|
+
from bisect import bisect_left, bisect_right
|
|
17
18
|
from calendar import isleap
|
|
18
19
|
from collections.abc import Iterable
|
|
19
20
|
from datetime import date, datetime, timedelta, timezone
|
|
20
21
|
from functools import cached_property
|
|
21
22
|
from gettext import gettext, translation
|
|
22
23
|
from pathlib import Path
|
|
23
|
-
from typing import Any,
|
|
24
|
+
from typing import Any, Literal, Optional, Union, cast
|
|
24
25
|
|
|
25
26
|
from dateutil.parser import parse
|
|
26
27
|
|
|
@@ -249,6 +250,8 @@ class HolidayBase(dict[date, str]):
|
|
|
249
250
|
"""Start year of holidays presence for this entity."""
|
|
250
251
|
end_year: int = DEFAULT_END_YEAR
|
|
251
252
|
"""End year of holidays presence for this entity."""
|
|
253
|
+
parent_entity: Optional[type["HolidayBase"]] = None
|
|
254
|
+
"""Optional parent entity to reference as a base."""
|
|
252
255
|
|
|
253
256
|
def __init__(
|
|
254
257
|
self,
|
|
@@ -364,16 +367,32 @@ class HolidayBase(dict[date, str]):
|
|
|
364
367
|
self.weekend_workdays = getattr(self, "weekend_workdays", set())
|
|
365
368
|
|
|
366
369
|
supported_languages = set(self.supported_languages)
|
|
367
|
-
self.
|
|
368
|
-
|
|
370
|
+
if self._entity_code is not None:
|
|
371
|
+
fallback = language not in supported_languages
|
|
372
|
+
languages = [language] if language in supported_languages else None
|
|
373
|
+
locale_directory = str(Path(__file__).with_name("locale"))
|
|
374
|
+
|
|
375
|
+
# Add entity native content translations.
|
|
376
|
+
entity_translation = translation(
|
|
369
377
|
self._entity_code,
|
|
370
|
-
fallback=
|
|
371
|
-
languages=
|
|
372
|
-
localedir=
|
|
373
|
-
)
|
|
374
|
-
if
|
|
375
|
-
|
|
376
|
-
|
|
378
|
+
fallback=fallback,
|
|
379
|
+
languages=languages,
|
|
380
|
+
localedir=locale_directory,
|
|
381
|
+
)
|
|
382
|
+
# Add a fallback if entity has parent translations.
|
|
383
|
+
if parent_entity := self.parent_entity:
|
|
384
|
+
entity_translation.add_fallback(
|
|
385
|
+
translation(
|
|
386
|
+
parent_entity.country or parent_entity.market,
|
|
387
|
+
fallback=fallback,
|
|
388
|
+
languages=languages,
|
|
389
|
+
localedir=locale_directory,
|
|
390
|
+
)
|
|
391
|
+
)
|
|
392
|
+
self.tr = entity_translation.gettext
|
|
393
|
+
else:
|
|
394
|
+
self.tr = gettext
|
|
395
|
+
|
|
377
396
|
self.years = _normalize_arguments(int, years)
|
|
378
397
|
|
|
379
398
|
# Populate holidays.
|
|
@@ -418,7 +437,7 @@ class HolidayBase(dict[date, str]):
|
|
|
418
437
|
if not isinstance(key, (date, datetime, float, int, str)):
|
|
419
438
|
raise TypeError(f"Cannot convert type '{type(key)}' to date.")
|
|
420
439
|
|
|
421
|
-
return dict.__contains__(cast("
|
|
440
|
+
return dict.__contains__(cast("dict[Any, Any]", self), self.__keytransform__(key))
|
|
422
441
|
|
|
423
442
|
def __eq__(self, other: object) -> bool:
|
|
424
443
|
if not isinstance(other, HolidayBase):
|
|
@@ -428,7 +447,7 @@ class HolidayBase(dict[date, str]):
|
|
|
428
447
|
if getattr(self, attribute_name, None) != getattr(other, attribute_name, None):
|
|
429
448
|
return False
|
|
430
449
|
|
|
431
|
-
return dict.__eq__(cast("
|
|
450
|
+
return dict.__eq__(cast("dict[Any, Any]", self), other)
|
|
432
451
|
|
|
433
452
|
def __getattr__(self, name):
|
|
434
453
|
try:
|
|
@@ -967,6 +986,36 @@ class HolidayBase(dict[date, str]):
|
|
|
967
986
|
|
|
968
987
|
raise AttributeError(f"Unknown lookup type: {lookup}")
|
|
969
988
|
|
|
989
|
+
def get_closest_holiday(
|
|
990
|
+
self,
|
|
991
|
+
target_date: DateLike = None,
|
|
992
|
+
direction: Literal["forward", "backward"] = "forward",
|
|
993
|
+
) -> Optional[tuple[date, str]]:
|
|
994
|
+
"""Return the date and name of the next holiday for a target_date
|
|
995
|
+
if direction is "forward" or the previous holiday if direction is "backward".
|
|
996
|
+
If target_date is not provided the current date will be used by default."""
|
|
997
|
+
|
|
998
|
+
if direction not in {"backward", "forward"}:
|
|
999
|
+
raise AttributeError(f"Unknown direction: {direction}")
|
|
1000
|
+
|
|
1001
|
+
dt = self.__keytransform__(target_date or datetime.now().date())
|
|
1002
|
+
if direction == "forward" and (next_year := dt.year + 1) not in self.years:
|
|
1003
|
+
self._populate(next_year)
|
|
1004
|
+
elif direction == "backward" and (previous_year := dt.year - 1) not in self.years:
|
|
1005
|
+
self._populate(previous_year)
|
|
1006
|
+
|
|
1007
|
+
sorted_dates = sorted(self.keys())
|
|
1008
|
+
position = (
|
|
1009
|
+
bisect_right(sorted_dates, dt)
|
|
1010
|
+
if direction == "forward"
|
|
1011
|
+
else bisect_left(sorted_dates, dt) - 1
|
|
1012
|
+
)
|
|
1013
|
+
if 0 <= position < len(sorted_dates):
|
|
1014
|
+
dt = sorted_dates[position]
|
|
1015
|
+
return dt, self[dt]
|
|
1016
|
+
|
|
1017
|
+
return None
|
|
1018
|
+
|
|
970
1019
|
def get_nth_working_day(self, key: DateLike, n: int) -> date:
|
|
971
1020
|
"""Return n-th working day from provided date (if n is positive)
|
|
972
1021
|
or n-th working day before provided date (if n is negative).
|
|
@@ -1201,4 +1250,4 @@ country_holidays('CA') + country_holidays('MX')
|
|
|
1201
1250
|
def _populate(self, year):
|
|
1202
1251
|
for operand in self.holidays:
|
|
1203
1252
|
operand._populate(year)
|
|
1204
|
-
self.update(cast("
|
|
1253
|
+
self.update(cast("dict[DateLike, str]", operand))
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
holidays/registry.py
CHANGED
|
@@ -142,6 +142,7 @@ COUNTRIES: RegistryDict = {
|
|
|
142
142
|
"romania": ("Romania", "RO", "ROU"),
|
|
143
143
|
"russia": ("Russia", "RU", "RUS"),
|
|
144
144
|
"saint_kitts_and_nevis": ("SaintKittsAndNevis", "KN", "KNA"),
|
|
145
|
+
"saint_lucia": ("SaintLucia", "LC", "LCA"),
|
|
145
146
|
"samoa": ("Samoa", "WS", "WSM"),
|
|
146
147
|
"san_marino": ("SanMarino", "SM", "SMR"),
|
|
147
148
|
"saudi_arabia": ("SaudiArabia", "SA", "SAU"),
|
|
@@ -153,6 +154,7 @@ COUNTRIES: RegistryDict = {
|
|
|
153
154
|
"south_africa": ("SouthAfrica", "ZA", "ZAF"),
|
|
154
155
|
"south_korea": ("SouthKorea", "KR", "KOR", "Korea"),
|
|
155
156
|
"spain": ("Spain", "ES", "ESP"),
|
|
157
|
+
"sri_lanka": ("SriLanka", "LK", "LKA"),
|
|
156
158
|
"sweden": ("Sweden", "SE", "SWE"),
|
|
157
159
|
"switzerland": ("Switzerland", "CH", "CHE"),
|
|
158
160
|
"taiwan": ("Taiwan", "TW", "TWN"),
|
|
@@ -162,6 +164,7 @@ COUNTRIES: RegistryDict = {
|
|
|
162
164
|
"tonga": ("Tonga", "TO", "TON"),
|
|
163
165
|
"tunisia": ("Tunisia", "TN", "TUN"),
|
|
164
166
|
"turkey": ("Turkey", "TR", "TUR"),
|
|
167
|
+
"tuvalu": ("Tuvalu", "TV", "TUV"),
|
|
165
168
|
"ukraine": ("Ukraine", "UA", "UKR"),
|
|
166
169
|
"united_arab_emirates": ("UnitedArabEmirates", "AE", "ARE"),
|
|
167
170
|
"united_kingdom": ("UnitedKingdom", "GB", "GBR", "UK"),
|
holidays/version.py
CHANGED