def _create_or_add_assignment(self, assignment_name, parentnode, extras): assignment = Assignment(parentnode=parentnode, short_name=assignment_name, long_name=assignment_name.capitalize(), publishing_time=parentnode.start_time) try: assignment.full_clean() assignment.save() except ValidationError: assignment = Assignment.objects.get(parentnode=parentnode, short_name=assignment_name) # add the users (only admins allowed in subject) for admin in extras['admin']: assignment.admins.add(self._create_or_add_user(admin)) if extras['pub']: assignment.publishing_time += timedelta(days=int(extras['pub'][0])) if extras['anon']: if extras['anon'][0] == 'true': assignment.anonymous = True elif extras['anon'][0] == 'false': assignment.anonymous = False else: raise ValueError("anon must be 'true' or 'false'") assignment.full_clean() assignment.save() vars(self)[parentnode.parentnode.short_name + '_' + # subject parentnode.short_name + '_' + # period assignment.short_name] = assignment return assignment
def _create_or_add_assignment(self, assignment_name, parentnode, extras): # NOTE: Set default publishing_time two seconds after start_time to # make sure it evaluates as "within" the period. publishing_time = parentnode.start_time + timedelta(seconds=2) if extras['delivery_types']: deliverytype_alias = extras['delivery_types'][0] typemap = {'electronic': deliverytypes.ELECTRONIC, 'nonelectronic': deliverytypes.NON_ELECTRONIC} delivery_types = typemap[deliverytype_alias] else: delivery_types = deliverytypes.ELECTRONIC assignment = Assignment(parentnode=parentnode, short_name=assignment_name, long_name=assignment_name.capitalize(), publishing_time=publishing_time, delivery_types=delivery_types, max_points=200) try: assignment.full_clean() assignment.save() except ValidationError: assignment = Assignment.objects.get(parentnode=parentnode, short_name=assignment_name) # add the users (only admins allowed in subject) for admin in extras['admin']: assignment.admins.add(self._create_or_add_user(admin)) if extras['pub']: assignment.publishing_time += timedelta(days=int(extras['pub'][0])) if extras['anon']: if extras['anon'][0] == 'true': assignment.anonymous = True elif extras['anon'][0] == 'false': assignment.anonymous = False else: raise ValueError("anon must be 'true' or 'false'") if extras['ln']: assignment.long_name = extras['ln'][0] if extras['first_deadline']: days = int(extras['first_deadline'][0]) assignment.first_deadline = assignment.publishing_time if days == 0: assignment.first_deadline += timedelta(seconds=1) else: assignment.first_deadline += timedelta(days=days) assignment.full_clean() assignment.save() vars(self)[parentnode.parentnode.short_name + '_' + # subject parentnode.short_name + '_' + # period assignment.short_name] = assignment return assignment