WIP: Use approximate comparison when checking for changes to start dates
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<%inherit file="base.html" />
|
||||
<%!
|
||||
import logging
|
||||
from xmodule.util.date_utils import get_default_time_display
|
||||
from xmodule.util.date_utils import get_default_time_display, almost_same_datetime
|
||||
%>
|
||||
|
||||
<%! from django.core.urlresolvers import reverse %>
|
||||
@@ -47,9 +47,10 @@
|
||||
placeholder="HH:MM" class="time" size='10' autocomplete="off"/>
|
||||
</div>
|
||||
</div>
|
||||
% if subsection.lms.start != parent_item.lms.start and subsection.lms.start:
|
||||
% if subsection.lms.start and not almost_same_datetime(subsection.lms.start, parent_item.lms.start):
|
||||
% if parent_item.lms.start is None:
|
||||
<p class="notice">The date above differs from the release date of ${parent_item.display_name_with_default}, which is unset.
|
||||
<p class="notice">The date above differs from the release date of
|
||||
${parent_item.display_name_with_default}, which is unset.
|
||||
% else:
|
||||
<p class="notice">The date above differs from the release date of ${parent_item.display_name_with_default} –
|
||||
${get_default_time_display(parent_item.lms.start)}.
|
||||
|
||||
@@ -1,54 +1,81 @@
|
||||
# Tests for xmodule.util.date_utils
|
||||
|
||||
from nose.tools import assert_equals
|
||||
from xmodule.util import date_utils
|
||||
import datetime
|
||||
from nose.tools import assert_equals, assert_false
|
||||
from xmodule.util.date_utils import get_default_time_display, almost_same_datetime
|
||||
from datetime import datetime, timedelta, tzinfo
|
||||
from pytz import UTC
|
||||
|
||||
|
||||
def test_get_default_time_display():
|
||||
assert_equals("", date_utils.get_default_time_display(None))
|
||||
test_time = datetime.datetime(1992, 3, 12, 15, 3, 30, tzinfo=UTC)
|
||||
assert_equals("", get_default_time_display(None))
|
||||
test_time = datetime(1992, 3, 12, 15, 3, 30, tzinfo=UTC)
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03 UTC",
|
||||
date_utils.get_default_time_display(test_time))
|
||||
get_default_time_display(test_time))
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03 UTC",
|
||||
date_utils.get_default_time_display(test_time, True))
|
||||
get_default_time_display(test_time, True))
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03",
|
||||
date_utils.get_default_time_display(test_time, False))
|
||||
get_default_time_display(test_time, False))
|
||||
|
||||
def test_get_default_time_display_notz():
|
||||
test_time = datetime.datetime(1992, 3, 12, 15, 3, 30)
|
||||
test_time = datetime(1992, 3, 12, 15, 3, 30)
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03 UTC",
|
||||
date_utils.get_default_time_display(test_time))
|
||||
get_default_time_display(test_time))
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03 UTC",
|
||||
date_utils.get_default_time_display(test_time, True))
|
||||
get_default_time_display(test_time, True))
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03",
|
||||
date_utils.get_default_time_display(test_time, False))
|
||||
get_default_time_display(test_time, False))
|
||||
|
||||
# pylint: disable=W0232
|
||||
class NamelessTZ(datetime.tzinfo):
|
||||
class NamelessTZ(tzinfo):
|
||||
|
||||
def utcoffset(self, _dt):
|
||||
return datetime.timedelta(hours=-3)
|
||||
return timedelta(hours=-3)
|
||||
|
||||
def dst(self, _dt):
|
||||
return datetime.timedelta(0)
|
||||
return timedelta(0)
|
||||
|
||||
def test_get_default_time_display_no_tzname():
|
||||
assert_equals("", date_utils.get_default_time_display(None))
|
||||
test_time = datetime.datetime(1992, 3, 12, 15, 3, 30, tzinfo=NamelessTZ())
|
||||
assert_equals("", get_default_time_display(None))
|
||||
test_time = datetime(1992, 3, 12, 15, 3, 30, tzinfo=NamelessTZ())
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03-0300",
|
||||
date_utils.get_default_time_display(test_time))
|
||||
get_default_time_display(test_time))
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03-0300",
|
||||
date_utils.get_default_time_display(test_time, True))
|
||||
get_default_time_display(test_time, True))
|
||||
assert_equals(
|
||||
"Mar 12, 1992 at 15:03",
|
||||
date_utils.get_default_time_display(test_time, False))
|
||||
get_default_time_display(test_time, False))
|
||||
|
||||
def test_almost_same_datetime():
|
||||
assert almost_same_datetime(
|
||||
datetime(2013, 5, 3, 10, 20, 30),
|
||||
datetime(2013, 5, 3, 10, 21, 29)
|
||||
)
|
||||
|
||||
assert almost_same_datetime(
|
||||
datetime(2013, 5, 3, 11, 20, 30),
|
||||
datetime(2013, 5, 3, 10, 21, 29),
|
||||
timedelta(hours=1)
|
||||
)
|
||||
|
||||
assert_false(
|
||||
almost_same_datetime(
|
||||
datetime(2013, 5, 3, 11, 20, 30),
|
||||
datetime(2013, 5, 3, 10, 21, 29)
|
||||
)
|
||||
)
|
||||
|
||||
assert_false(
|
||||
almost_same_datetime(
|
||||
datetime(2013, 5, 3, 11, 20, 30),
|
||||
datetime(2013, 5, 3, 10, 21, 29),
|
||||
timedelta(minutes=10)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -185,6 +185,9 @@ class TestEdxJsonEncoder(unittest.TestCase):
|
||||
self.encoder.default(datetime(2013, 5, 3, 10, 20, 30, 0, self.null_utc_tz))
|
||||
)
|
||||
|
||||
def test_other_classes(self):
|
||||
def test_fallthrough(self):
|
||||
with self.assertRaises(TypeError):
|
||||
self.encoder.default(None)
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
self.encoder.default({})
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import datetime
|
||||
def get_default_time_display(dt, show_timezone=True):
|
||||
"""
|
||||
Converts a datetime to a string representation. This is the default
|
||||
@@ -20,3 +21,14 @@ def get_default_time_display(dt, show_timezone=True):
|
||||
else:
|
||||
timezone = " UTC"
|
||||
return dt.strftime("%b %d, %Y at %H:%M") + timezone
|
||||
|
||||
|
||||
def almost_same_datetime(dt1, dt2, allowed_delta=datetime.timedelta(minutes=1)):
|
||||
"""
|
||||
Returns true if these are w/in a minute of each other. (in case secs saved to db
|
||||
or timezone aren't same)
|
||||
|
||||
:param dt1:
|
||||
:param dt2:
|
||||
"""
|
||||
return abs(dt1 - dt2) < allowed_delta
|
||||
|
||||
Reference in New Issue
Block a user