Skip to content

Commit

Permalink
Add support for Serbia holidays (#258)
Browse files Browse the repository at this point in the history
  • Loading branch information
kosugor authored and dr-prodigy committed Dec 30, 2019
1 parent 8d9162d commit 4fbaf2f
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ MANIFEST
.coverage
*.egg-info
*.pyc
.idea
.idea
.vscode/
46 changes: 46 additions & 0 deletions holidays.py
Original file line number Diff line number Diff line change
Expand Up @@ -5282,3 +5282,49 @@ def _populate(self, year):

class NI(Nicaragua):
pass


class Serbia(HolidayBase):
# https://en.wikipedia.org/wiki/Public_holidays_in_Serbia

def __init__(self, **kwargs):
self.country = 'RS'
HolidayBase.__init__(self, **kwargs)

def _populate(self, year):
# New Year's Day
name = "Нова година"
self[date(year, JAN, 1)] = name
self[date(year, JAN, 2)] = name
if self.observed and date(year, JAN, 1).weekday() in WEEKEND:
self[date(year, JAN, 3)] = name + " (Observed)"
# Orthodox Christmas
name = "Божић"
self[date(year, JAN, 7)] = name
# Statehood day
name = "Дан државности Србије"
self[date(year, FEB, 15)] = name
self[date(year, FEB, 16)] = name
if self.observed and date(year, FEB, 15).weekday() in WEEKEND:
self[date(year, FEB, 17)] = name + " (Observed)"
# International Workers' Day
name = "Празник рада"
self[date(year, MAY, 1)] = name
self[date(year, MAY, 2)] = name
if self.observed and date(year, MAY, 1).weekday() in WEEKEND:
self[date(year, MAY, 3)] = name + " (Observed)"
# Armistice day
name = "Дан примирја у Првом светском рату"
self[date(year, NOV, 11)] = name
if self.observed and date(year, NOV, 11).weekday() == SUN:
self[date(year, NOV, 12)] = name + " (Observed)"
# Easter
self[easter(year, method=EASTER_ORTHODOX)-rd(days=2)] = "Велики петак"
self[easter(year, method=EASTER_ORTHODOX)-rd(days=1)] = "Велика субота"
self[easter(year, method=EASTER_ORTHODOX)] = "Васкрс"
self[easter(year, method=EASTER_ORTHODOX)+rd(days=1)] = \
"Други дан Васкрса"


class RS(Serbia):
pass
48 changes: 48 additions & 0 deletions tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -5669,5 +5669,53 @@ def test_ni_holidays_2020(self):
self.assertIn(date(year, 8, 10), mn_holidays)


class TestSerbia(unittest.TestCase):
def setUp(self):
self.holidays = holidays.Serbia(observed=True)

def test_new_year(self):
# If January 1st is in Weekend, test oberved
self.assertIn(date(2017, 1, 1), self.holidays)
self.assertIn(date(2017, 1, 2), self.holidays)
self.assertIn(date(2017, 1, 3), self.holidays)
self.holidays.observed = False
self.assertNotIn(date(2017, 1, 3), self.holidays)

def test_statehood_day(self):
# If February 15th is in Weekend, test oberved
self.assertIn(date(2020, 2, 15), self.holidays)
self.assertIn(date(2020, 2, 16), self.holidays)
self.assertIn(date(2020, 2, 17), self.holidays)
self.holidays.observed = False
self.assertNotIn(date(2020, 2, 17), self.holidays)

def test_labour_day(self):
# If May 1st is in Weekend, test oberved
self.assertIn(date(2016, 5, 1), self.holidays)
self.assertIn(date(2016, 5, 2), self.holidays)
self.assertIn(date(2016, 5, 3), self.holidays)
self.holidays.observed = False
self.assertNotIn(date(2016, 5, 3), self.holidays)

def test_armistice_day(self):
# If November 11th is in Weekend, test oberved
self.assertIn(date(2018, 11, 11), self.holidays)
self.assertIn(date(2018, 11, 12), self.holidays)
self.holidays.observed = False
self.assertNotIn(date(2018, 11, 12), self.holidays)

def test_religious_holidays(self):
# Orthodox Christmas
self.assertIn(date(2020, 1, 7), self.holidays)
self.assertNotIn(date(2020, 1, 8), self.holidays)
# Orthodox Easter
self.assertNotIn(date(2020, 4, 16), self.holidays)
self.assertIn(date(2020, 4, 17), self.holidays)
self.assertIn(date(2020, 4, 18), self.holidays)
self.assertIn(date(2020, 4, 19), self.holidays)
self.assertIn(date(2020, 4, 20), self.holidays)
self.assertNotIn(date(2020, 4, 21), self.holidays)


if __name__ == "__main__":
unittest.main()

0 comments on commit 4fbaf2f

Please sign in to comment.