holidays 0.63__py3-none-any.whl → 0.65__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.
Files changed (71) hide show
  1. holidays/calendars/hebrew.py +32 -3
  2. holidays/constants.py +1 -0
  3. holidays/countries/__init__.py +1 -0
  4. holidays/countries/afghanistan.py +192 -0
  5. holidays/countries/azerbaijan.py +2 -2
  6. holidays/countries/belarus.py +93 -14
  7. holidays/countries/el_salvador.py +45 -24
  8. holidays/countries/iran.py +3 -0
  9. holidays/countries/israel.py +55 -80
  10. holidays/countries/kazakhstan.py +2 -2
  11. holidays/countries/lithuania.py +1 -4
  12. holidays/countries/montenegro.py +143 -27
  13. holidays/countries/norway.py +1 -1
  14. holidays/countries/poland.py +9 -1
  15. holidays/countries/russia.py +1 -1
  16. holidays/countries/south_korea.py +2 -0
  17. holidays/countries/thailand.py +1 -2
  18. holidays/countries/ukraine.py +19 -10
  19. holidays/financial/ny_stock_exchange.py +81 -44
  20. holidays/groups/__init__.py +1 -0
  21. holidays/groups/christian.py +2 -0
  22. holidays/groups/custom.py +12 -0
  23. holidays/groups/hebrew.py +151 -0
  24. holidays/groups/persian.py +11 -0
  25. holidays/holiday_base.py +15 -8
  26. holidays/locale/be/LC_MESSAGES/BY.mo +0 -0
  27. holidays/locale/be/LC_MESSAGES/BY.po +53 -17
  28. holidays/locale/cnr/LC_MESSAGES/ME.mo +0 -0
  29. holidays/locale/cnr/LC_MESSAGES/ME.po +102 -0
  30. holidays/locale/en_US/LC_MESSAGES/AF.mo +0 -0
  31. holidays/locale/en_US/LC_MESSAGES/AF.po +92 -0
  32. holidays/locale/en_US/LC_MESSAGES/BY.mo +0 -0
  33. holidays/locale/en_US/LC_MESSAGES/BY.po +61 -20
  34. holidays/locale/en_US/LC_MESSAGES/ME.mo +0 -0
  35. holidays/locale/en_US/LC_MESSAGES/ME.po +102 -0
  36. holidays/locale/en_US/LC_MESSAGES/PL.mo +0 -0
  37. holidays/locale/en_US/LC_MESSAGES/PL.po +7 -5
  38. holidays/locale/en_US/LC_MESSAGES/SV.mo +0 -0
  39. holidays/locale/en_US/LC_MESSAGES/SV.po +75 -0
  40. holidays/locale/es/LC_MESSAGES/SV.mo +0 -0
  41. holidays/locale/es/LC_MESSAGES/SV.po +75 -0
  42. holidays/locale/fa_AF/LC_MESSAGES/AF.mo +0 -0
  43. holidays/locale/fa_AF/LC_MESSAGES/AF.po +92 -0
  44. holidays/locale/pl/LC_MESSAGES/PL.mo +0 -0
  45. holidays/locale/pl/LC_MESSAGES/PL.po +8 -4
  46. holidays/locale/ps_AF/LC_MESSAGES/AF.mo +0 -0
  47. holidays/locale/ps_AF/LC_MESSAGES/AF.po +92 -0
  48. holidays/locale/ru/LC_MESSAGES/BY.mo +0 -0
  49. holidays/locale/ru/LC_MESSAGES/BY.po +111 -0
  50. holidays/locale/th/LC_MESSAGES/BY.mo +0 -0
  51. holidays/locale/th/LC_MESSAGES/BY.po +109 -0
  52. holidays/locale/th/LC_MESSAGES/NO.mo +0 -0
  53. holidays/locale/th/LC_MESSAGES/NO.po +80 -0
  54. holidays/locale/th/LC_MESSAGES/RU.mo +0 -0
  55. holidays/locale/th/LC_MESSAGES/RU.po +90 -0
  56. holidays/locale/th/LC_MESSAGES/UA.mo +0 -0
  57. holidays/locale/th/LC_MESSAGES/UA.po +114 -0
  58. holidays/locale/uk/LC_MESSAGES/ME.mo +0 -0
  59. holidays/locale/uk/LC_MESSAGES/ME.po +102 -0
  60. holidays/locale/uk/LC_MESSAGES/PL.mo +0 -0
  61. holidays/locale/uk/LC_MESSAGES/PL.po +7 -5
  62. holidays/locale/uk/LC_MESSAGES/SV.mo +0 -0
  63. holidays/locale/uk/LC_MESSAGES/SV.po +75 -0
  64. holidays/registry.py +1 -0
  65. holidays/version.py +1 -1
  66. {holidays-0.63.dist-info → holidays-0.65.dist-info}/AUTHORS +1 -0
  67. {holidays-0.63.dist-info → holidays-0.65.dist-info}/METADATA +17 -12
  68. {holidays-0.63.dist-info → holidays-0.65.dist-info}/RECORD +71 -41
  69. {holidays-0.63.dist-info → holidays-0.65.dist-info}/WHEEL +1 -1
  70. {holidays-0.63.dist-info → holidays-0.65.dist-info}/LICENSE +0 -0
  71. {holidays-0.63.dist-info → holidays-0.65.dist-info}/top_level.txt +0 -0
@@ -12,20 +12,9 @@
12
12
 
13
13
  from gettext import gettext as tr
14
14
 
15
- from holidays.calendars import _HebrewLunisolar
16
15
  from holidays.calendars.gregorian import _timedelta, FRI, SAT
17
- from holidays.calendars.hebrew import (
18
- HANUKKAH,
19
- INDEPENDENCE_DAY,
20
- LAG_BAOMER,
21
- PASSOVER,
22
- PURIM,
23
- ROSH_HASHANAH,
24
- SHAVUOT,
25
- SUKKOT,
26
- YOM_KIPPUR,
27
- )
28
16
  from holidays.constants import OPTIONAL, PUBLIC, SCHOOL
17
+ from holidays.groups import HebrewCalendarHolidays
29
18
  from holidays.observed_holiday_base import (
30
19
  ObservedHolidayBase,
31
20
  MON_TO_NEXT_TUE,
@@ -38,7 +27,7 @@ from holidays.observed_holiday_base import (
38
27
  )
39
28
 
40
29
 
41
- class Israel(ObservedHolidayBase):
30
+ class Israel(ObservedHolidayBase, HebrewCalendarHolidays):
42
31
  """
43
32
  Israel holidays.
44
33
 
@@ -57,117 +46,103 @@ class Israel(ObservedHolidayBase):
57
46
  start_year = 1948
58
47
 
59
48
  def __init__(self, *args, **kwargs):
49
+ HebrewCalendarHolidays.__init__(self)
60
50
  kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_PREV_THU)
61
51
  super().__init__(*args, **kwargs)
62
52
 
63
- def _get_holiday(self, holiday: str):
64
- return _HebrewLunisolar._get_holiday(holiday, self._year)
53
+ def _add_observed(self, dt, name, rule):
54
+ is_observed, _ = super()._add_observed(dt, name, rule)
55
+ if not is_observed:
56
+ self._add_holiday(name, dt)
65
57
 
66
58
  def _populate_public_holidays(self):
67
59
  # Rosh Hashanah (New Year).
68
- name = tr("ראש השנה")
69
- rosh_hashanah_dt = self._get_holiday(ROSH_HASHANAH)
70
- self._add_holiday(name, rosh_hashanah_dt)
71
- self._add_holiday(name, _timedelta(rosh_hashanah_dt, +1))
60
+ self._add_rosh_hashanah(tr("ראש השנה"), range(2))
72
61
 
73
62
  # Yom Kippur (Day of Atonement).
74
- self._add_holiday(tr("יום כיפור"), self._get_holiday(YOM_KIPPUR))
63
+ self._add_yom_kippur(tr("יום כיפור"))
75
64
 
76
- sukkot_dt = self._get_holiday(SUKKOT)
77
65
  # Sukkot (Feast of Tabernacles).
78
- self._add_holiday(tr("סוכות"), sukkot_dt)
66
+ self._add_sukkot(tr("סוכות"))
79
67
  # Simchat Torah / Shemini Atzeret.
80
- self._add_holiday(tr("שמחת תורה/שמיני עצרת"), _timedelta(sukkot_dt, +7))
68
+ self._add_sukkot(tr("שמחת תורה/שמיני עצרת"), +7)
81
69
 
82
- passover_dt = self._get_holiday(PASSOVER)
83
70
  # Pesach (Passover).
84
- self._add_holiday(tr("פסח"), passover_dt)
71
+ self._add_passover(tr("פסח"))
85
72
  # Shvi'i shel Pesach (Seventh day of Passover)
86
- self._add_holiday(tr("שביעי של פסח"), _timedelta(passover_dt, +6))
73
+ self._add_passover(tr("שביעי של פסח"), +6)
87
74
 
88
- # Yom Ha-Atzmaut (Independence Day).
89
- name = tr("יום העצמאות")
90
- independence_day_dt = self._get_holiday(INDEPENDENCE_DAY)
91
75
  rule = FRI_TO_PREV_THU + SAT_TO_PREV_THU
92
76
  if self._year >= 2004:
93
77
  rule += MON_TO_NEXT_TUE
94
- is_observed, _ = self._add_observed(independence_day_dt, name, rule)
95
- if not is_observed:
96
- self._add_holiday(name, independence_day_dt)
78
+ self._add_observed(
79
+ self._hebrew_calendar.israel_independence_date(self._year),
80
+ # Yom Ha-Atzmaut (Independence Day).
81
+ tr("יום העצמאות"),
82
+ rule,
83
+ )
97
84
 
98
85
  # Shavuot.
99
- self._add_holiday(tr("שבועות"), self._get_holiday(SHAVUOT))
86
+ self._add_shavuot(tr("שבועות"))
100
87
 
101
88
  def _populate_optional_holidays(self):
102
- sukkot_dt = self._get_holiday(SUKKOT)
103
- for offset in range(1, 6):
104
- # Chol HaMoed Sukkot (Feast of Tabernacles holiday).
105
- self._add_holiday(tr("חול המועד סוכות"), _timedelta(sukkot_dt, offset))
89
+ # Chol HaMoed Sukkot (Feast of Tabernacles holiday).
90
+ self._add_sukkot(tr("חול המועד סוכות"), range(1, 6))
106
91
 
107
92
  if self._year >= 2008:
108
93
  # Sigd.
109
- self._add_holiday(tr("סיגד"), _timedelta(self._get_holiday(YOM_KIPPUR), +49))
94
+ self._add_yom_kippur(tr("סיגד"), +49)
110
95
 
111
96
  # Purim.
112
- self._add_holiday(tr("פורים"), self._get_holiday(PURIM))
97
+ self._add_purim(tr("פורים"))
113
98
 
114
- passover_dt = self._get_holiday(PASSOVER)
115
- for offset in range(1, 6):
116
- # Chol HaMoed Pesach (Passover holiday).
117
- self._add_holiday(tr("חול המועד פסח"), _timedelta(passover_dt, offset))
99
+ # Chol HaMoed Pesach (Passover holiday).
100
+ self._add_passover(tr("חול המועד פסח"), range(1, 6))
118
101
 
119
102
  if self._year >= 1963:
120
- # Yom Hazikaron (Fallen Soldiers and Victims of Terrorism Remembrance Day).
121
- name = tr("יום הזיכרון לחללי מערכות ישראל ונפגעי פעולות האיבה")
122
- remembrance_day_dt = _timedelta(self._get_holiday(INDEPENDENCE_DAY), -1)
123
103
  rule = THU_TO_PREV_WED + FRI_TO_PREV_WED
124
104
  if self._year >= 2004:
125
105
  rule += SUN_TO_NEXT_MON
126
- is_observed, _ = self._add_observed(remembrance_day_dt, name, rule)
127
- if not is_observed:
128
- self._add_holiday(name, remembrance_day_dt)
106
+ self._add_observed(
107
+ _timedelta(self._hebrew_calendar.israel_independence_date(self._year), -1),
108
+ # Yom Hazikaron (Fallen Soldiers and Victims of Terrorism Remembrance Day).
109
+ tr("יום הזיכרון לחללי מערכות ישראל ונפגעי פעולות האיבה"),
110
+ rule,
111
+ )
129
112
 
130
113
  if self._year >= 1998:
131
114
  # Yom Yerushalayim (Jerusalem Day).
132
- self._add_holiday(tr("יום ירושלים"), _timedelta(self._get_holiday(LAG_BAOMER), +10))
115
+ self._add_lag_baomer(tr("יום ירושלים"), +10)
133
116
 
134
- # Tisha B'Av (Tisha B'Av, fast).
135
- name = tr("תשעה באב")
136
- tisha_bav_dt = self._get_holiday("TISHA_BAV")
137
- is_observed, _ = self._add_observed(tisha_bav_dt, name, SAT_TO_NEXT_SUN)
138
- if not is_observed:
139
- self._add_holiday(name, tisha_bav_dt)
117
+ self._add_observed(
118
+ self._hebrew_calendar.tisha_bav_date(self._year),
119
+ # Tisha B'Av (Tisha B'Av, fast).
120
+ tr("תשעה באב"),
121
+ SAT_TO_NEXT_SUN,
122
+ )
140
123
 
141
124
  def _populate_school_holidays(self):
142
- sukkot_dt = self._get_holiday(SUKKOT)
143
- for offset in range(1, 6):
144
- # Chol HaMoed Sukkot (Feast of Tabernacles holiday).
145
- self._add_holiday(tr("חול המועד סוכות"), _timedelta(sukkot_dt, offset))
146
-
147
- for year in (self._year - 1, self._year):
148
- hanukkah_dt = _HebrewLunisolar._get_holiday(HANUKKAH, year)
149
- for offset in range(8):
150
- # Hanukkah.
151
- self._add_holiday(tr("חנוכה"), _timedelta(hanukkah_dt, offset))
152
-
153
- # Ta`anit Ester (Fast of Esther).
154
- name = tr("תענית אסתר")
155
- purim_dt = self._get_holiday(PURIM)
156
- taanit_ester_dt = _timedelta(purim_dt, -1)
157
- is_observed, _ = self._add_observed(taanit_ester_dt, name, SAT_TO_PREV_THU)
158
- if not is_observed:
159
- self._add_holiday(name, taanit_ester_dt)
125
+ # Chol HaMoed Sukkot (Feast of Tabernacles holiday).
126
+ self._add_sukkot(tr("חול המועד סוכות"), range(1, 6))
127
+
128
+ # Hanukkah.
129
+ self._add_hanukkah(tr("חנוכה"), range(8))
130
+
131
+ self._add_observed(
132
+ _timedelta(self._hebrew_calendar.purim_date(self._year), -1),
133
+ # Ta`anit Ester (Fast of Esther).
134
+ tr("תענית אסתר"),
135
+ SAT_TO_PREV_THU,
136
+ )
160
137
 
161
138
  # Purim.
162
- self._add_holiday(tr("פורים"), purim_dt)
139
+ self._add_purim(tr("פורים"))
163
140
 
164
- passover_dt = self._get_holiday(PASSOVER)
165
- for offset in range(1, 6):
166
- # Chol HaMoed Pesach (Passover holiday).
167
- self._add_holiday(tr("חול המועד פסח"), _timedelta(passover_dt, offset))
141
+ # Chol HaMoed Pesach (Passover holiday).
142
+ self._add_passover(tr("חול המועד פסח"), range(1, 6))
168
143
 
169
144
  # Lag Ba'omer (Lag BaOmer).
170
- self._add_holiday(tr('ל"ג בעומר'), self._get_holiday(LAG_BAOMER))
145
+ self._add_lag_baomer(tr('ל"ג בעומר'))
171
146
 
172
147
 
173
148
  class IL(Israel):
@@ -278,7 +278,6 @@ class KazakhstanStaticHolidays:
278
278
  2019: (MAY, 10, MAY, 4),
279
279
  2020: (
280
280
  (JAN, 3, JAN, 5),
281
- (MAY, 8, MAY, 11),
282
281
  (DEC, 18, DEC, 20),
283
282
  ),
284
283
  2021: (JUL, 5, JUL, 3),
@@ -293,5 +292,6 @@ class KazakhstanStaticHolidays:
293
292
  }
294
293
 
295
294
  special_public_holidays_observed = {
296
- 2020: (MAY, 8, MAY, 11),
295
+ # Victory Day.
296
+ 2020: (MAY, 8, tr("Жеңіс күні")),
297
297
  }
@@ -67,10 +67,7 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
67
67
  if self._year >= 1991:
68
68
  self._add_holiday_jul_6(
69
69
  # Statehood Day.
70
- tr(
71
- "Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) "
72
- "ir Tautiškos giesmės diena"
73
- )
70
+ tr("Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) ir Tautiškos giesmės diena")
74
71
  )
75
72
 
76
73
  # Assumption Day.
@@ -10,65 +10,141 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
+ from gettext import gettext as tr
14
+
15
+ from holidays.calendars import _CustomIslamicHolidays
16
+ from holidays.calendars.gregorian import GREGORIAN_CALENDAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
13
17
  from holidays.calendars.julian import JULIAN_CALENDAR
14
- from holidays.groups import ChristianHolidays, InternationalHolidays
18
+ from holidays.constants import CATHOLIC, HEBREW, ISLAMIC, ORTHODOX, PUBLIC, WORKDAY
19
+ from holidays.groups import (
20
+ ChristianHolidays,
21
+ HebrewCalendarHolidays,
22
+ InternationalHolidays,
23
+ IslamicHolidays,
24
+ StaticHolidays,
25
+ )
15
26
  from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON, SUN_TO_NEXT_TUE
16
27
 
17
28
 
18
- class Montenegro(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
29
+ class Montenegro(
30
+ ObservedHolidayBase,
31
+ ChristianHolidays,
32
+ HebrewCalendarHolidays,
33
+ InternationalHolidays,
34
+ IslamicHolidays,
35
+ StaticHolidays,
36
+ ):
19
37
  """
20
38
  References:
21
- - https://en.wikipedia.org/wiki/Public_holidays_in_Montenegro
22
- - https://me.usembassy.gov/holiday-calendar/
23
- - https://publicholidays.eu/montenegro/2023-dates/
24
- - https://www.officeholidays.com/countries/montenegro/2023
39
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Montenegro
40
+ - `Zakon o državnim i drugim praznicima <https://wapi.gov.me/download-preview/927f23a3-db4e-4f65-9f29-ce3c9dde0c90?version=1.0>`_
41
+ - `Zakon o svetkovanju vjerskih praznika <https://wapi.gov.me/download-preview/4f0b05a4-c85b-4eb2-bc29-0ad8363a9ba3?version=1.0>`_
25
42
  """
26
43
 
27
44
  country = "ME"
28
- observed_label = "%s (observed)"
45
+ default_language = "cnr"
46
+ # %s (estimated).
47
+ estimated_label = tr("%s (procijenjeno)")
48
+ # %s (observed).
49
+ observed_label = tr("%s (neradni dan)")
50
+ # %s (observed, estimated).
51
+ observed_estimated_label = tr("%s (neradni dan, procijenjeno)")
52
+ supported_languages = ("cnr", "en_US", "uk")
53
+ supported_categories = (CATHOLIC, ISLAMIC, HEBREW, ORTHODOX, PUBLIC, WORKDAY)
54
+ start_year = 2007
29
55
 
30
56
  def __init__(self, *args, **kwargs):
31
57
  ChristianHolidays.__init__(self, calendar=JULIAN_CALENDAR)
58
+ HebrewCalendarHolidays.__init__(self)
32
59
  InternationalHolidays.__init__(self)
60
+ IslamicHolidays.__init__(self, cls=MontenegroIslamicHolidays)
61
+ StaticHolidays.__init__(self, cls=MontenegroStaticHolidays)
33
62
  kwargs.setdefault("observed_rule", SUN_TO_NEXT_MON)
34
63
  super().__init__(*args, **kwargs)
35
64
 
36
65
  def _populate_public_holidays(self):
37
66
  # New Year's Day.
38
- name = "New Year's Day"
67
+ name = tr("Nova godina")
39
68
  self._add_observed(self._add_new_years_day(name), rule=SUN_TO_NEXT_TUE)
40
69
  self._add_observed(self._add_new_years_day_two(name))
41
70
 
42
- # Orthodox Christmas Eve.
43
- self._add_christmas_eve("Orthodox Christmas Eve")
44
-
45
- # Orthodox Christmas.
46
- self._add_christmas_day("Orthodox Christmas")
47
-
48
- # Labour Day.
49
- name = "Labour Day"
71
+ # Labor Day.
72
+ name = tr("Praznik rada")
50
73
  self._add_observed(self._add_labor_day(name), rule=SUN_TO_NEXT_TUE)
51
74
  self._add_observed(self._add_labor_day_two(name))
52
75
 
53
- # Good Friday.
54
- self._add_good_friday("Orthodox Good Friday")
55
-
56
- # Easter Sunday.
57
- self._add_easter_sunday("Orthodox Easter Sunday")
58
-
59
- # Easter Monday.
60
- self._add_easter_monday("Orthodox Easter Monday")
61
-
62
76
  # Independence Day.
63
- name = "Independence Day"
77
+ name = tr("Dan nezavisnosti")
64
78
  self._add_observed(self._add_holiday_may_21(name), rule=SUN_TO_NEXT_TUE)
65
79
  self._add_observed(self._add_holiday_may_22(name))
66
80
 
67
81
  # Statehood Day.
68
- name = "Statehood Day"
82
+ name = tr("Dan državnosti")
69
83
  self._add_observed(self._add_holiday_jul_13(name), rule=SUN_TO_NEXT_TUE)
70
84
  self._add_observed(self._add_holiday_jul_14(name))
71
85
 
86
+ if self._year >= 2022:
87
+ # Njegos Day.
88
+ self._add_observed(self._add_holiday_nov_13(tr("Njegošev dan")))
89
+
90
+ def _populate_catholic_holidays(self):
91
+ # Good Friday.
92
+ self._add_good_friday(tr("Veliki petak"), GREGORIAN_CALENDAR)
93
+
94
+ # Easter.
95
+ self._add_easter_monday(tr("Uskrs"), GREGORIAN_CALENDAR)
96
+
97
+ # All Saints' Day.
98
+ self._add_all_saints_day(tr("Svi Sveti"))
99
+
100
+ # Christmas Eve.
101
+ self._add_christmas_eve(tr("Badnji dan"), GREGORIAN_CALENDAR)
102
+
103
+ # Christmas.
104
+ name = tr("Božić")
105
+ self._add_christmas_day(name, GREGORIAN_CALENDAR)
106
+ self._add_christmas_day_two(name, GREGORIAN_CALENDAR)
107
+
108
+ def _populate_hebrew_holidays(self):
109
+ # Pesach.
110
+ self._add_passover(tr("Pasha"), range(2))
111
+
112
+ # Yom Kippur.
113
+ self._add_yom_kippur(tr("Jom Kipur"), range(2))
114
+
115
+ def _populate_islamic_holidays(self):
116
+ # Eid al-Fitr.
117
+ name = tr("Ramazanski bajram")
118
+ self._add_eid_al_fitr_day(name)
119
+ self._add_eid_al_fitr_day_two(name)
120
+ self._add_eid_al_fitr_day_three(name)
121
+
122
+ # Eid al-Adha.
123
+ name = tr("Kurbanski bajram")
124
+ self._add_eid_al_adha_day(name)
125
+ self._add_eid_al_adha_day_two(name)
126
+ self._add_eid_al_adha_day_three(name)
127
+
128
+ def _populate_orthodox_holidays(self):
129
+ # Good Friday.
130
+ self._add_good_friday(tr("Veliki petak"))
131
+
132
+ # Easter.
133
+ self._add_easter_monday(tr("Uskrs"))
134
+
135
+ # Christmas Eve.
136
+ self._add_christmas_eve(tr("Badnji dan"))
137
+
138
+ # Christmas.
139
+ name = tr("Božić")
140
+ self._add_christmas_day(name)
141
+ self._add_christmas_day_two(name)
142
+
143
+ def _populate_workday_holidays(self):
144
+ if self._year >= 2022:
145
+ # Ecological State Day.
146
+ self._add_holiday_sep_20(tr("Dan Ekološke države"))
147
+
72
148
 
73
149
  class ME(Montenegro):
74
150
  pass
@@ -76,3 +152,43 @@ class ME(Montenegro):
76
152
 
77
153
  class MNE(Montenegro):
78
154
  pass
155
+
156
+
157
+ class MontenegroIslamicHolidays(_CustomIslamicHolidays):
158
+ EID_AL_ADHA_DATES = {
159
+ 2012: (OCT, 26),
160
+ 2013: (OCT, 15),
161
+ 2014: (OCT, 5),
162
+ 2015: (SEP, 24),
163
+ 2016: (SEP, 13),
164
+ 2017: (SEP, 2),
165
+ 2018: (AUG, 22),
166
+ 2019: (AUG, 11),
167
+ 2020: (JUL, 31),
168
+ 2021: (JUL, 20),
169
+ 2022: (JUL, 9),
170
+ 2023: (JUN, 28),
171
+ 2024: (JUN, 16),
172
+ }
173
+
174
+ EID_AL_FITR_DATES = {
175
+ 2012: (AUG, 19),
176
+ 2013: (AUG, 8),
177
+ 2014: (JUL, 29),
178
+ 2015: (JUL, 18),
179
+ 2016: (JUL, 7),
180
+ 2017: (JUN, 26),
181
+ 2018: (JUN, 15),
182
+ 2019: (JUN, 4),
183
+ 2020: (MAY, 24),
184
+ 2021: (MAY, 13),
185
+ 2022: (MAY, 2),
186
+ 2023: (APR, 21),
187
+ 2024: (APR, 10),
188
+ }
189
+
190
+
191
+ class MontenegroStaticHolidays:
192
+ special_public_holidays = {
193
+ 2024: (NOV, 14, tr("Njegošev dan")),
194
+ }
@@ -35,7 +35,7 @@ class Norway(HolidayBase, ChristianHolidays, InternationalHolidays):
35
35
 
36
36
  country = "NO"
37
37
  default_language = "no"
38
- supported_languages = ("en_US", "no", "uk")
38
+ supported_languages = ("en_US", "no", "th", "uk")
39
39
 
40
40
  def __init__(self, include_sundays=False, *args, **kwargs):
41
41
  """
@@ -19,7 +19,10 @@ from holidays.holiday_base import HolidayBase
19
19
 
20
20
  class Poland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
21
21
  """
22
- https://pl.wikipedia.org/wiki/Dni_wolne_od_pracy_w_Polsce
22
+ References:
23
+ - https://en.wikipedia.org/wiki/Public_holidays_in_Poland
24
+ - https://pl.wikipedia.org/wiki/Dni_wolne_od_pracy_w_Polsce
25
+ - https://isap.sejm.gov.pl/isap.nsf/DocDetails.xsp?id=WDU20240001965
23
26
  """
24
27
 
25
28
  country = "PL"
@@ -104,8 +107,13 @@ class Poland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolida
104
107
  tr("Niepokalane Poczęcie Najświętszej Marii Panny")
105
108
  )
106
109
 
110
+ if self._year >= 2025:
111
+ # Christmas Eve.
112
+ self._add_christmas_eve(tr("Wigilia Bożego Narodzenia"))
113
+
107
114
  # Christmas Day.
108
115
  self._add_christmas_day(tr("Boże Narodzenie (pierwszy dzień)"))
116
+
109
117
  # Second Day of Christmas.
110
118
  self._add_christmas_day_two(tr("Boże Narodzenie (drugi dzień)"))
111
119
 
@@ -26,7 +26,7 @@ class Russia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
26
26
 
27
27
  country = "RU"
28
28
  default_language = "ru"
29
- supported_languages = ("en_US", "ru")
29
+ supported_languages = ("en_US", "ru", "th")
30
30
  start_year = 1991
31
31
 
32
32
  def __init__(self, *args, **kwargs):
@@ -617,6 +617,8 @@ class SouthKoreaStaticHolidays:
617
617
  2023: (OCT, 2, temporary_public_holiday),
618
618
  # 76th Anniversary of the Armed Forces of Korea.
619
619
  2024: (OCT, 1, armed_forces_day),
620
+ # Added to create a 6-day long holiday period.
621
+ 2025: (JAN, 27, temporary_public_holiday),
620
622
  }
621
623
  # Pre-2014 Alternate Holidays
622
624
  # https://namu.wiki/w/대체%20휴일%20제도#s-4.2.1
@@ -556,8 +556,7 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
556
556
  if self._year >= 2019:
557
557
  # HM King Bhumibol Adulyadej the Great's Birthday Anniversary.
558
558
  name = tr(
559
- "วันคล้ายวันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระบรมชนกาธิเบศร "
560
- "มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
559
+ "วันคล้ายวันเฉลิมพระชนมพรรษาพระบาทสมเด็จพระบรมชนกาธิเบศร มหาภูมิพลอดุลยเดชมหาราช บรมนาถบพิตร"
561
560
  )
562
561
  elif self._year >= 2016:
563
562
  # HM King Bhumibol Adulyadej Birthday Anniversary.
@@ -25,8 +25,9 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
25
25
  """
26
26
  Ukraine holidays.
27
27
 
28
- Current holidays list:
29
- - https://zakon1.rada.gov.ua/laws/show/322-08/paran454#n454
28
+ References:
29
+ - Labor Code of Ukraine, Art. 73 `<https://zakon1.rada.gov.ua/laws/show/322-08/paran454#n454>`_
30
+ - https://zakon.rada.gov.ua/laws/show/585-12
30
31
  """
31
32
 
32
33
  country = "UA"
@@ -34,7 +35,7 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
34
35
  # %s (observed).
35
36
  observed_label = tr("%s (вихідний)")
36
37
  supported_categories = (PUBLIC, WORKDAY)
37
- supported_languages = ("ar", "en_US", "uk")
38
+ supported_languages = ("ar", "en_US", "th", "uk")
38
39
  # The current set of holidays came into force in 1991.
39
40
  start_year = 1991
40
41
 
@@ -71,10 +72,9 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
71
72
  # International Women's Day.
72
73
  dts_observed.add(self._add_womens_day(tr("Міжнародний жіночий день")))
73
74
 
74
- if (self._year >= 2022) == is_martial_law:
75
- if self._year >= 1992:
76
- # Easter Sunday (Pascha).
77
- dts_observed.add(self._add_easter_sunday(tr("Великдень (Пасха)")))
75
+ if (self._year >= 2022) is is_martial_law:
76
+ # Easter Sunday (Pascha).
77
+ dts_observed.add(self._add_easter_sunday(tr("Великдень (Пасха)")))
78
78
 
79
79
  # Holy Trinity Day.
80
80
  dts_observed.add(self._add_whit_sunday(tr("Трійця")))
@@ -169,6 +169,7 @@ class UKR(Ukraine):
169
169
  class UkraineStaticHolidays:
170
170
  """
171
171
  Substituted holidays:
172
+ - `1991 <https://zakon.rada.gov.ua/laws/show/60-91-%D0%BF>`_
172
173
  - `1992 [1] <https://zakon.rada.gov.ua/laws/show/202-92-%D0%BF>`_
173
174
  - `1992 [2] <https://zakon.rada.gov.ua/laws/show/377-91-%D0%BF>`_
174
175
  - `1993 [1] <https://zakon.rada.gov.ua/laws/show/563-93-%D0%BF>`_
@@ -178,8 +179,9 @@ class UkraineStaticHolidays:
178
179
  - `1995 [2] <https://zakon.rada.gov.ua/laws/show/634-95-%D0%BF>`_
179
180
  - `1995 [3] <https://zakon.rada.gov.ua/laws/show/266-95-%D0%BF>`_
180
181
  - `1996 <https://zakon.rada.gov.ua/laws/show/424-96-%D0%BF>`_
181
- - `1997[1] <https://zakon.rada.gov.ua/laws/show/326-97-%D0%BF>`_
182
- - `1997[2] <https://zakon.rada.gov.ua/laws/show/1547-96-%D0%BF>`_
182
+ - `1997 [1] <https://zakon.rada.gov.ua/laws/show/326-97-%D0%BF>`_
183
+ - `1997 [2] <https://zakon.rada.gov.ua/laws/show/1547-96-%D0%BF>`_
184
+ - `1998 <https://zakon.rada.gov.ua/laws/show/1404-97-%D0%BF>`_,
183
185
  - `1999 [1] <https://zakon.rada.gov.ua/laws/show/1433-99-%D0%BF>`_,
184
186
  - `1999 [2] <https://zakon.rada.gov.ua/laws/show/558-99-%D0%BF>`_,
185
187
  - `1999 [3] <https://zakon.rada.gov.ua/laws/show/2070-98-%D0%BF>`_
@@ -221,6 +223,11 @@ class UkraineStaticHolidays:
221
223
  # Day off (substituted from %s).
222
224
  substituted_label = tr("Вихідний день (перенесено з %s)")
223
225
  special_public_holidays = {
226
+ 1991: (
227
+ (MAY, 3, MAY, 5),
228
+ (MAY, 10, MAY, 12),
229
+ (JUL, 15, JUL, 13),
230
+ ),
224
231
  1992: (
225
232
  (JAN, 6, JAN, 4),
226
233
  (APR, 27, MAY, 16),
@@ -244,9 +251,11 @@ class UkraineStaticHolidays:
244
251
  1997: (
245
252
  (JAN, 2, DEC, 28, 1996),
246
253
  (JAN, 6, JAN, 4),
254
+ (JAN, 8, JAN, 11),
247
255
  (APR, 29, APR, 19),
248
256
  (APR, 30, MAY, 17),
249
257
  ),
258
+ 1998: (JAN, 2, JAN, 4),
250
259
  1999: (
251
260
  (JAN, 8, JAN, 10),
252
261
  (APR, 12, APR, 24),
@@ -324,7 +333,7 @@ class UkraineStaticHolidays:
324
333
  ),
325
334
  2012: (
326
335
  (MAR, 9, MAR, 3),
327
- (APR, 20, APR, 28),
336
+ (APR, 30, APR, 28),
328
337
  (JUN, 29, JUL, 7),
329
338
  (DEC, 31, DEC, 29),
330
339
  ),