Commit 4f152585 by Bridger Maxwell

Changed behavior of due date tagger to be more like downward inheritance

--HG--
branch : profiledev
parent fa63a17a
...@@ -88,37 +88,28 @@ def id_tag(course): ...@@ -88,37 +88,28 @@ def id_tag(course):
else: else:
elem.set('id', fasthash(etree.tostring(elem))) elem.set('id', fasthash(etree.tostring(elem)))
def due_tag(course): def due_tag(element, parent_due_date=None):
# The primary purpose of this tagging is to make sure that each problem ''' This call is to pass down due dates. If an element has a due date,
# inherits the due date from the section that it is in. We also make all of the elements children will inherit this due date (unless the element
# sure that each section has a due date. If it does not, it inherits has a due date of its own). This is called recursively'''
# the last section's due date. This is to make sure that the sections
# are in chronological order. It is an exception to have a later section if (parent_due_date == None): #This is the entry call. Select all due elements
# due before an earlier one. all_due_elements = element.xpath("//*[@due]")
for due_element in all_due_elements:
# How are due dates handled for different time zones? What _time_ are things due? due_date = due_element.get('due')
for child_element in due_element:
# First, we grab the first due date to occur. This is our starting date. due_tag(child_element, due_date)
firstSectionDue = course.xpath("//section[@due]")[0]
# I tried adding [1] to the end of the query string to select the first,
# but it didn't work. Is this not supported in etree?
# All new dates must be further than currentDate
currentDate = firstSectionDue.get('due')
sections = course.xpath("//section")
for section in sections:
existingDate = section.get('due')
if existingDate:
#TODO: Make sure existing date is further into the future than currentDate
currentDate = existingDate
else: else:
section.set('due', currentDate) #The hack below is because we would get _ContentOnlyELements from the
#iterator that can't have due dates set. We can't find API for it
problems=course.xpath('//section[@name=$section]//problem', section=section.get('name')) if not element.get('due') and type(element) == etree._Element:
element.set('due', parent_due_date)
due_date = parent_due_date
else:
due_date = element.get('due')
for problem in problems: for child_element in element:
problem.set('due', currentDate) due_tag(child_element, due_date)
def course_file(user): def course_file(user):
# TODO: Cache. # TODO: Cache.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment