diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 0980a32..a913153 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -70,7 +70,7 @@ jobs: - name: Run Tests run: | python -m compileall ${APP_NAME}/ - coverage run ${APP_NAME}/test.py -v + python -Wd -m coverage run ${APP_NAME}/test.py -v - name: Report Test Coverage if: matrix.python-version == env.COVERAGE_PYTHON_VERSION diff --git a/uw_sws/models.py b/uw_sws/models.py index b856761..7dd731e 100644 --- a/uw_sws/models.py +++ b/uw_sws/models.py @@ -3,6 +3,8 @@ import json import re +from warnings import warn +import datetime from uw_pws.models import Person from uw_sws.exceptions import ( InvalidCanvasIndependentStudyCourse, InvalidCanvasSection) @@ -411,17 +413,38 @@ def is_grading_period_past(self, cmp_dt=None): cmp_dt > self.grade_submission_deadline) def get_week_of_term(self, cmp_dt=None): + depr_msg = 'get_week_of_term is deprecated; ' \ + 'use get_calendar_week_of_term' + warn(depr_msg, DeprecationWarning, stacklevel=2) if cmp_dt is None: cmp_dt = sws_now() return self.get_week_of_term_for_date(cmp_dt) def get_week_of_term_for_date(self, date): + depr_msg = 'get_week_of_term_for_date is deprecated; ' \ + 'use get_calendar_week_of_term_for_date' + warn(depr_msg, DeprecationWarning, stacklevel=2) days = (date.date() - self.first_day_quarter).days if days >= 0: return (days // 7) + 1 return (days // 7) + def get_calendar_week_of_term(self, cmp_dt=None): + if cmp_dt is None: + cmp_dt = sws_now() + return self.get_calendar_week_of_term_for_date(cmp_dt) + + def get_calendar_week_of_term_for_date(self, date): + start_date = self.first_day_quarter + start_of_first_week = start_date - datetime.timedelta( + days=start_date.isoweekday() % 7) + days = (date.date() - start_of_first_week).days + if days >= 0: + return (days // 7) + 1 + + return (days // 7) + def get_bod_first_day(self): # returns a datetime object of the midnight at begining of day return convert_to_begin_of_day(self.first_day_quarter) diff --git a/uw_sws/tests/test_term.py b/uw_sws/tests/test_term.py index 0ca131f..e084190 100644 --- a/uw_sws/tests/test_term.py +++ b/uw_sws/tests/test_term.py @@ -6,7 +6,7 @@ from uw_sws.dao import sws_now from uw_sws.util import fdao_sws_override from uw_pws.util import fdao_pws_override -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from restclients_core.exceptions import DataFailureException from uw_sws.models import Term from uw_sws.term import ( @@ -559,6 +559,54 @@ def test_week_of_term(self): self.assertEquals(term.get_week_of_term_for_date(now), -3, "-15 days") + def test_calendar_week_of_term(self): + term = get_current_term() + + start_dates = [date(2013, 3, 31), date(2013, 4, 1), date(2013, 4, 2), + date(2013, 4, 3), date(2013, 4, 4), date(2013, 4, 5), + date(2013, 4, 6)] + for start_date in start_dates: + with self.subTest("First day of class", i=start_date): + term.first_day_quarter = start_date + # Before the term + now = datetime(2013, 3, 30, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + -1, + "Sat before") + + now = datetime(2013, 3, 20, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + -2, + "two weeks before") + + # First day of class + now = datetime(2013, 4, 1, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + 1, + "Term starting now in first week, by date") + + # Week switch + now = datetime(2013, 4, 1, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + 1, "first Sat") + + now = datetime(2013, 4, 7, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + 2, "first Sun") + + now = datetime(2013, 4, 16, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + 3, "three weeks in") + + now = datetime(2013, 5, 16, 1, 0, 0) + self.assertEquals(term.get_calendar_week_of_term_for_date(now), + 7, "seven weeks in") + + term.first_day_quarter = start_dates[0] + now = datetime(2013, 4, 7, 1, 0, 0) + self.assertEqual(term.get_calendar_week_of_term(cmp_dt=now), + term.get_calendar_week_of_term_for_date(now)) + def test_canvas_sis_id(self): term = get_term_by_year_and_quarter(2013, 'spring') self.assertEquals(term.canvas_sis_id(), '2013-spring',