def _create_copydata(self):
        self.add(nodes="uni",
                 subjects=["sub"],
                 periods=["p1"],
                 assignments=['a1'])
        self.add_to_path('uni;sub.p1.a1.g1:candidate(student1):examiner(examiner1).d1')

        # Create delivery for alias_delivery
        self.add_to_path('uni;sub.p_old.a1.g1:candidate(student1):examiner(examiner1).d1')
        old_delivery = self.add_delivery("sub.p_old.a1.g1", {"secondtry.py": "print second"})

        # Make a delivery without any of the default/generated values, so when
        # we check that they are copied, we get no generate stuff
        g1 = self.sub_p1_a1_g1
        d1 = self.sub_p1_a1_g1_d1
        time_of_delivery = datetime(2005, 1, 1, 0, 0, 0)
        delivery = Delivery(deadline=d1,
                            number=10,
                            successful=False,
                            delivery_type=1,
                            delivered_by=g1.candidates.all()[0],
                            alias_delivery=old_delivery,
                            time_of_delivery=time_of_delivery)
        delivery.full_clean()
        delivery.save()
        delivery.add_file('test.txt', ['Hello', ' world'])
        return delivery, old_delivery
    def mark_as_delivered_in_previous(self, group, oldgroup=None, feedback=None):
        if oldgroup:
            oldfeedback = oldgroup.feedback
            alias_delivery = oldfeedback.delivery
            if not feedback:
                feedback = {'grade': oldfeedback.grade,
                            'is_passing_grade': oldfeedback.is_passing_grade,
                            'points': oldfeedback.points,
                            'rendered_view': oldfeedback.rendered_view,
                            'saved_by': oldfeedback.saved_by}
        elif feedback:
            alias_delivery = None
        else:
            raise ValueError('oldgroup or feedback is required arguments.')

        latest_deadline = group.deadlines.order_by('-deadline')[0]
        latest_deadline.deadline = datetime.now() + timedelta(seconds=60)
        delivery = Delivery(
            deadline=latest_deadline,
            delivery_type=deliverytypes.ALIAS,
            alias_delivery=alias_delivery)
        delivery.set_number()
        delivery.save()
        if isinstance(feedback, dict):
            feedback = delivery.feedbacks.create(**feedback)
        else:
            delivery.feedbacks.add(feedback)
        delivery.full_clean() # NOTE: We have to validate after adding feedback, or the delivery will fail to validate
        feedback.full_clean()
        return feedback
 def __create_delivery(self):
     delivery = Delivery(
         deadline_id=self.group.last_deadline_id,
         successful=True,
         delivered_by=self.__get_canidate(),
         time_of_delivery=datetime.now())
     delivery.set_number()
     delivery.full_clean()
     delivery.save()
     return delivery
 def add_nonelectronic_delivery(self):
     from devilry.apps.core.models import Delivery
     for group in self.all():
         deadline = group.last_deadline
         delivery = Delivery(
             deadline=deadline,
             delivery_type=deliverytypes.NON_ELECTRONIC,
             time_of_delivery=datetime.now())
         delivery.set_number()
         delivery.full_clean()
         delivery.save()
    def test_override_autoset(self):
        self.add(nodes="uni",
                 subjects=["sub"],
                 periods=["p1"],
                 assignments=['a1'])
        self.add_to_path('uni;sub.p1.a1.g1:candidate(student1):examiner(examiner1).d1')
        d1 = self.sub_p1_a1_g1_d1

        time_of_delivery = datetime(2005, 1, 1, 0, 0, 0)
        delivery = Delivery(deadline=d1,
                            number=10,
                            successful=False,
                            time_of_delivery=time_of_delivery)
        delivery.full_clean()
        delivery.save()
        self.assertEquals(delivery.number, 10)
        self.assertEquals(delivery.successful, False)
        self.assertEquals(delivery.time_of_delivery, time_of_delivery)