11from collections import OrderedDict
22import copy
3+ import datetime
34
45import jinja2
56
@@ -279,10 +280,11 @@ def merge_dict(base, patch):
279280
280281class Session (Model ):
281282 """An ordered collection of materials"""
282- def __init__ (self , root , path , base_course , info , index ):
283+ def __init__ (self , root , path , base_course , info , index , course = None ):
283284 super ().__init__ (root , path )
284285 base_name = info .get ('base' )
285286 self .index = index
287+ self .course = course
286288 if base_name is None :
287289 self .info = info
288290 else :
@@ -299,6 +301,33 @@ def __str__(self):
299301 slug = DataProperty (info )
300302 date = DataProperty (info , default = None )
301303
304+ @reify
305+ def start (self ):
306+ if self .date != None and self .course != None :
307+ default_time = self .course .info .get ('default_time' )
308+ if default_time != None :
309+ start_time = default_time ['start' ]
310+ hour , minute = start_time .split (':' )
311+ hour = int (hour )
312+ minute = int (minute )
313+ start_time = datetime .time (hour , minute )
314+ return datetime .datetime .combine (self .date , start_time )
315+ return None
316+
317+ @reify
318+ def end (self ):
319+ if self .date != None and self .course != None :
320+ default_time = self .course .info .get ('default_time' )
321+ if default_time != None :
322+ end_time = default_time ['end' ]
323+ hour , minute = end_time .split (':' )
324+ hour = int (hour )
325+ minute = int (minute )
326+ end_time = datetime .time (hour , minute )
327+ return datetime .datetime .combine (self .date , end_time )
328+ return None
329+
330+
302331 @reify
303332 def materials (self ):
304333 materials = [material (self .root , self .path , s )
@@ -337,7 +366,7 @@ def _get_sessions(course, plan):
337366 result = OrderedDict ()
338367 for index , sess_info in enumerate (plan ):
339368 session = Session (course .root , course .path , course .base_course ,
340- sess_info , index = index )
369+ sess_info , index = index , course = course )
341370 result [session .slug ] = session
342371
343372 sessions = list (result .values ())
0 commit comments