Skip to content

Commit

Permalink
Merge pull request #216 from uw-it-aca/fix/term-week-count
Browse files Browse the repository at this point in the history
Fix/term week count
  • Loading branch information
jlaney committed Feb 12, 2024
2 parents 53088e6 + e38017d commit 1c81023
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
23 changes: 23 additions & 0 deletions uw_sws/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
50 changes: 49 additions & 1 deletion uw_sws/tests/test_term.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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',
Expand Down

0 comments on commit 1c81023

Please sign in to comment.