Skip to content

Commit 18d9ce9

Browse files
committed
Add default_start_time and default_end_time to Course models
The `info` dict of models is internal -- it's read directly from the YAML, and might change in the future. It shoudn't be used in templates. Wrap a course's default start and end times in properties, and use those.
1 parent 81918e8 commit 18d9ce9

2 files changed

Lines changed: 35 additions & 17 deletions

File tree

naucse/models.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from naucse.notebook_util import convert_notebook
1313
from pathlib import Path
1414

15+
_TIMEZONE = 'Europe/Prague'
16+
1517

1618
class Lesson(Model):
1719
"""An individual lesson stored on naucse"""
@@ -302,25 +304,22 @@ def __str__(self):
302304
slug = DataProperty(info)
303305
date = DataProperty(info, default=None)
304306

305-
def _time(self, key):
306-
if self.date != None and self.course != None:
307-
default_time = self.course.info.get('default_time')
308-
if default_time != None:
309-
time = default_time[key]
310-
hour, minute = time.split(':')
311-
hour = int(hour)
312-
minute = int(minute)
313-
course_time = datetime.time(hour, minute, tzinfo=dateutil.tz.gettz('Europe/Prague'))
314-
return datetime.datetime.combine(self.date, course_time)
307+
def _time(self, key, default_time):
308+
if self.date != None and default_time != None:
309+
return datetime.datetime.combine(self.date, default_time)
315310
return None
316311

317312
@reify
318313
def start_time(self):
319-
return self._time('start')
314+
if self.course:
315+
return self._time('start', self.course.default_start_time)
316+
return None
320317

321318
@reify
322319
def end_time(self):
323-
return self._time('end')
320+
if self.course:
321+
return self._time('end', self.course.default_end_time)
322+
return None
324323

325324
@reify
326325
def materials(self):
@@ -432,6 +431,25 @@ def end_date(self):
432431
return None
433432
return max(dates)
434433

434+
def _default_time(self, key):
435+
default_time = self.info.get('default_time')
436+
if default_time:
437+
time_string = default_time[key]
438+
hour, minute = time_string.split(':')
439+
hour = int(hour)
440+
minute = int(minute)
441+
tzinfo = dateutil.tz.gettz(_TIMEZONE)
442+
return datetime.time(hour, minute, tzinfo=tzinfo)
443+
return None
444+
445+
@reify
446+
def default_start_time(self):
447+
return self._default_time('start')
448+
449+
@reify
450+
def default_end_time(self):
451+
return self._default_time('end')
452+
435453

436454
class RunYear(Model):
437455
"""A year of runs"""

naucse/templates/course.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ <h4>
5656
<div class="card-body">
5757
<div class="calendar-dates">
5858
{{ (course.start_date, course.end_date) | format_date_range }}
59-
</div>
60-
{% if course.info.get('default_time') != None %}
61-
<div class="default-times">
62-
{{ course.info.get('default_time')['start'] }}
59+
</div>
60+
{% if course.default_start_time != None %}
61+
<div class="default-times">
62+
{{ course.default_start_time }}
6363
64-
{{ course.info.get('default_time')['end'] }}
64+
{{ course.default_end_time }}
6565
</div>
6666
{% endif %}
6767
</div>

0 commit comments

Comments
 (0)