~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/database.py

  • Committer: Matt Giuca
  • Date: 2010-07-22 02:12:36 UTC
  • mfrom: (1812.1.13 late-submit)
  • Revision ID: matt.giuca@gmail.com-20100722021236-k8kt4cqdtywzpk24
Merge from trunk late-submit.
Students may now submit projects after the deadline, but they are warned that the submission is late.
Lecturers are now given data on which submissions were made late, and how many days.
(LP: #598346)

Show diffs side-by-side

added added

removed removed

Lines of Context:
610
610
        return "<%s '%s' in %r>" % (type(self).__name__, self.short_name,
611
611
                                  self.project_set.offering)
612
612
 
613
 
    def can_submit(self, principal, user):
 
613
    def can_submit(self, principal, user, late=False):
 
614
        """
 
615
        @param late: If True, does not take the deadline into account.
 
616
        """
614
617
        return (self in principal.get_projects() and
615
 
                not self.has_deadline_passed(user))
 
618
                (late or not self.has_deadline_passed(user)))
616
619
 
617
 
    def submit(self, principal, path, revision, who):
 
620
    def submit(self, principal, path, revision, who, late=False):
618
621
        """Submit a Subversion path and revision to a project.
619
622
 
620
623
        @param principal: The owner of the Subversion repository, and the
622
625
        @param path: A path within that repository to submit.
623
626
        @param revision: The revision of that path to submit.
624
627
        @param who: The user who is actually making the submission.
 
628
        @param late: If True, will not raise a DeadlinePassed exception even
 
629
            after the deadline. (Default False.)
625
630
        """
626
631
 
627
 
        if not self.can_submit(principal, who):
 
632
        if not self.can_submit(principal, who, late=late):
628
633
            raise DeadlinePassed()
629
634
 
630
635
        a = Assessed.get(Store.of(self), principal, self)
946
951
            raise SubmissionError("Path must not contain '\\n', '[' or ']'")
947
952
        return os.path.normpath(path)
948
953
 
 
954
    @property
 
955
    def late(self):
 
956
        """True if the project was submitted late."""
 
957
        return self.days_late > 0
 
958
 
 
959
    @property
 
960
    def days_late(self):
 
961
        """The number of days the project was submitted late (rounded up), or
 
962
        0 if on-time."""
 
963
        # XXX: Need to respect extensions.
 
964
        return max(0,
 
965
            (self.date_submitted - self.assessed.project.deadline).days + 1)
 
966
 
949
967
# WORKSHEETS AND EXERCISES #
950
968
 
951
969
class Exercise(Storm):