43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
# lint-amnesty, pylint: disable=missing-module-docstring
|
|
|
|
import logging
|
|
|
|
from xmodule.fields import Timedelta
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class TimeInfo:
|
|
"""
|
|
This is a simple object that calculates and stores datetime information for an XModule
|
|
based on the due date and the grace period string
|
|
|
|
So far it parses out three different pieces of time information:
|
|
self.display_due_date - the 'official' due date that gets displayed to students
|
|
self.grace_period - the length of the grace period
|
|
self.close_date - the real due date
|
|
|
|
"""
|
|
_delta_standin = Timedelta()
|
|
|
|
def __init__(self, due_date, grace_period_string_or_timedelta):
|
|
if due_date is not None:
|
|
self.display_due_date = due_date
|
|
|
|
else:
|
|
self.display_due_date = None
|
|
|
|
if grace_period_string_or_timedelta is not None and self.display_due_date:
|
|
if isinstance(grace_period_string_or_timedelta, str):
|
|
try:
|
|
self.grace_period = TimeInfo._delta_standin.from_json(grace_period_string_or_timedelta)
|
|
except:
|
|
log.error(f"Error parsing the grace period {grace_period_string_or_timedelta}")
|
|
raise
|
|
else:
|
|
self.grace_period = grace_period_string_or_timedelta
|
|
self.close_date = self.display_due_date + self.grace_period
|
|
else:
|
|
self.grace_period = None
|
|
self.close_date = self.display_due_date
|