Skip to content

Commit

Permalink
Florida specific calendars
Browse files Browse the repository at this point in the history
  • Loading branch information
brunobord committed May 17, 2019
1 parent bac13df commit db6b559
Show file tree
Hide file tree
Showing 7 changed files with 296 additions and 23 deletions.
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## master (unreleased)

- Drop Python 3.4 support (#352).
- Added Florida specific calendars: Florida Legal, Florida Circuit Courts, Miami-Dade (#216).

## v4.4.0 (2019-05-17)

Expand Down
2 changes: 2 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ America
* Chicago, Illinois
* Guam
* Suffolk County, Massachusetts
* California Education, Berkeley, San Francisco, West Hollywood
* Florida Legal and Florida Circuit Courts, Miami-Dade
* Canada (including provincial and territory holidays)

Asia
Expand Down
153 changes: 148 additions & 5 deletions workalendar/tests/test_usa.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
# -*- coding: utf-8 -*-
from unittest import skip
from unittest import skip, skipIf
from datetime import date
import sys
import warnings

from workalendar.tests import GenericCalendarTest
from workalendar.usa import (
UnitedStates,
Alabama, AlabamaBaldwinCounty, AlabamaMobileCounty, AlabamaPerryCounty,
Florida, Arkansas, Alaska, Arizona, California, CaliforniaEducation,
CaliforniaBerkeley, CaliforniaSanFrancisco, CaliforniaWestHollywood,
Arkansas, Alaska, Arizona,
# California and others
California, CaliforniaEducation, CaliforniaBerkeley,
CaliforniaSanFrancisco, CaliforniaWestHollywood,
# Florida and others
Florida, FloridaLegal, FloridaCircuitCourts, FloridaMiamiDade,
Colorado, Connecticut, Delaware, DistrictOfColumbia, Georgia, Hawaii,
Indiana, Illinois, Idaho, Iowa, Kansas, Kentucky, Louisiana, Maine,
Maryland, Massachusetts, Minnesota, Michigan, Mississippi, Missouri,
Expand All @@ -18,6 +25,8 @@
AmericanSamoa, ChicagoIllinois, Guam, SuffolkCountyMassachusetts,
)

PY2 = sys.version_info[0] == 2


class UnitedStatesTest(GenericCalendarTest):
cal_class = UnitedStates
Expand Down Expand Up @@ -595,9 +604,13 @@ def test_state_year_2016(self):
self.assertIn(date(2016, 4, 16), holidays) # Emancipation Day


class FloridaTest(NoColumbus, NoPresidentialDay, UnitedStatesTest):
cal_class = Florida
class FloridaBasicTest(object):
"""
Core Florida tests.
The difference is that it includes the Thanksgiving Friday *and* its label
is renamed.
"""
def test_state_year_2014(self):
holidays = self.cal.holidays_set(2014)
self.assertIn(date(2014, 11, 28), holidays) # Thanksgiving Friday
Expand All @@ -613,6 +626,136 @@ def test_thanksgiving_friday_label(self):
self.assertEqual(label, "Friday after Thanksgiving")


class FloridaTest(NoColumbus, NoPresidentialDay, FloridaBasicTest,
UnitedStatesTest):
"""
Florida includes all federal holidays except
Washington's Birthday & Columbus day
"""
cal_class = Florida


class FloridaLegalTest(IncludeMardiGras, ElectionDayEveryYear,
FloridaBasicTest, UnitedStatesTest):
"""
Florida Legal Holidays include:
* All Florida State Holidays,
* Mardi Gras,
* Lincoln's Birthday,
* Susan B. Anthony Day,
* Washington's Birthday,
* Good Friday,
* Pascua Florida Day,
* Confederate Memorial Day,
* Jefferson Davies Birthday,
* Flag Day
* Columbus Day renamed as "Columbus and Farmers' Day"
* Election Day
"""
cal_class = FloridaLegal

@skipIf(PY2, "Python 2 warnings unsupported")
def test_init_warning(self):
warnings.simplefilter("always")
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
# Trigger a warning.
self.cal_class()
# Verify some things
assert len(w) == 1
assert issubclass(w[-1].category, UserWarning)
assert "Florida's laws separate the definitions between paid versus legal holidays." in str(w[-1].message) # noqa
warnings.simplefilter("ignore")

def test_specific_lincoln_birthday(self):
holidays = self.cal.holidays_set(2014)
self.assertIn(date(2014, 2, 12), holidays) # Lincoln's Birthday

holidays = self.cal.holidays_set(2015)
self.assertIn(date(2015, 2, 12), holidays) # Lincoln's Birthday

def test_susan_b_anthony_day(self):
holidays = self.cal.holidays_set(2019)
self.assertIn(date(2019, 2, 15), holidays) # Susan B. Anthony Day

def test_good_friday(self):
holidays = self.cal.holidays_set(2014)
self.assertIn(date(2014, 4, 18), holidays) # Good Friday
holidays = self.cal.holidays_set(2015)
self.assertIn(date(2015, 4, 3), holidays) # Good Friday

def test_pascua_florida_day(self):
holidays = self.cal.holidays_set(2019)
self.assertIn(date(2019, 4, 2), holidays) # Pascua Florida Day

def test_confederate_holidays(self):
holidays = self.cal.holidays_set(2014)
self.assertIn(date(2014, 4, 26), holidays) # Confederate Memorial Day
self.assertIn(date(2014, 6, 3), holidays) # Jefferson Davis' birthday

holidays = self.cal.holidays_set(2015)
self.assertIn(date(2015, 4, 26), holidays) # Confederate Memorial Day
self.assertIn(date(2015, 6, 3), holidays) # Jefferson Davis' birthday

holidays = self.cal.holidays_set(2018)
self.assertIn(date(2018, 4, 26), holidays) # Confederate Memorial Day
self.assertIn(date(2018, 6, 3), holidays) # Jefferson Davis' birthday

def test_flag_day(self):
holidays = self.cal.holidays_set(2018)
self.assertIn(date(2018, 6, 14), holidays) # Flag Day

holidays = self.cal.holidays_set(2019)
self.assertIn(date(2019, 6, 14), holidays) # Flag Day

def test_columbus_day_label(self):
_, label = self.cal.get_columbus_day(2017)
self.assertEqual(label, "Columbus Day and Farmers' Day")


class FloridaCircuitCourtsTest(NoColumbus, FloridaBasicTest, UnitedStatesTest):
cal_class = FloridaCircuitCourts

def test_good_friday(self):
holidays = self.cal.holidays_set(2014)
self.assertIn(date(2014, 4, 18), holidays) # Good Friday
holidays = self.cal.holidays_set(2015)
self.assertIn(date(2015, 4, 3), holidays) # Good Friday

def test_rosh_hashanah_2018(self):
# src: https://www.firstjudicialcircuit.org/about-court/court-holidays
rosh_hashanah = self.cal.get_rosh_hashanah(2018)
self.assertEqual(rosh_hashanah, date(2018, 9, 10))
holidays = self.cal.holidays_set(2018)
self.assertIn(rosh_hashanah, holidays)

def test_rosh_hashanah_2019(self):
# src: https://www.firstjudicialcircuit.org/about-court/court-holidays
rosh_hashanah = self.cal.get_rosh_hashanah(2019)
self.assertEqual(rosh_hashanah, date(2019, 9, 30))
holidays = self.cal.holidays_set(2019)
self.assertIn(rosh_hashanah, holidays)

def test_yom_kippur_2018(self):
# src: https://www.firstjudicialcircuit.org/about-court/court-holidays
yom_kippur = self.cal.get_yom_kippur(2018)
self.assertEqual(yom_kippur, date(2018, 9, 19))
holidays = self.cal.holidays_set(2018)
self.assertIn(yom_kippur, holidays)

def test_yom_kippur_2019(self):
# src: https://www.firstjudicialcircuit.org/about-court/court-holidays
yom_kippur = self.cal.get_yom_kippur(2019)
self.assertEqual(yom_kippur, date(2019, 10, 9))
holidays = self.cal.holidays_set(2019)
self.assertIn(yom_kippur, holidays)


class FloridaMiamiDadeTests(FloridaBasicTest, UnitedStatesTest):
cal_class = FloridaMiamiDade


class GeorgiaTest(NoPresidentialDay, UnitedStatesTest):
cal_class = Georgia

Expand Down
6 changes: 4 additions & 2 deletions workalendar/usa/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
from .connecticut import Connecticut
from .delaware import Delaware
from .district_columbia import DistrictOfColumbia
from .florida import Florida
from .florida import (
Florida, FloridaLegal, FloridaCircuitCourts, FloridaMiamiDade
)
from .georgia import Georgia
from .hawaii import Hawaii
from .idaho import Idaho
Expand Down Expand Up @@ -77,7 +79,7 @@
'Connecticut',
'Delaware',
'DistrictOfColumbia',
'Florida',
'Florida', 'FloridaLegal', 'FloridaCircuitCourts', 'FloridaMiamiDade',
'Georgia',
'Hawaii',
'Idaho',
Expand Down
15 changes: 1 addition & 14 deletions workalendar/usa/alabama.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,7 @@ class Alabama(UnitedStates):
presidents_day_label = "George Washington/Thomas Jefferson Birthday"
columbus_day_label = ("Columbus Day / Fraternal Day /"
" American Indian Heritage Day")

def get_jefferson_davis_birthday(self, year):
"""
The first MON of June is Jefferson Davis Birthday
"""
return (
self.get_nth_weekday_in_month(year, 6, MON, 1),
"Jefferson Davis Birthday"
)

def get_variable_days(self, year):
days = super(Alabama, self).get_variable_days(year)
days.append(self.get_jefferson_davis_birthday(year))
return days
include_jefferson_davis_birthday = True


class AlabamaBaldwinCounty(Alabama):
Expand Down
14 changes: 14 additions & 0 deletions workalendar/usa/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class UnitedStates(WesternCalendar, ChristianMixin):
columbus_day_label = "Columbus Day"
# Confederation day
include_confederation_day = False
# Jefferson Davis Birthday.
include_jefferson_davis_birthday = False

# Include Cesar Chavez day(s)
include_cesar_chavez_day = False
Expand Down Expand Up @@ -155,6 +157,15 @@ def get_confederate_day(self, year):
day = self.get_nth_weekday_in_month(year, 4, MON, 4)
return (day, "Confederate Memorial Day")

def get_jefferson_davis_birthday(self, year):
"""
The first MON of June is Jefferson Davis Birthday
"""
return (
self.get_nth_weekday_in_month(year, 6, MON, 1),
"Jefferson Davis Birthday"
)

def get_martin_luther_king_date(self, year):
"""
Martin Luther King is on 3rd MON of January, starting of 1985.
Expand Down Expand Up @@ -308,6 +319,9 @@ def get_variable_days(self, year):
if self.include_confederation_day:
days.append(self.get_confederate_day(year))

if self.include_jefferson_davis_birthday:
days.append(self.get_jefferson_davis_birthday(year))

if self.include_inauguration_day:
# Is it a "Inauguration year"?
if UnitedStates.is_presidential_year(year - 1):
Expand Down

0 comments on commit db6b559

Please sign in to comment.