~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-20 08:31:02 UTC
  • Revision ID: matt.giuca@gmail.com-20100720083102-i739uh74be6dcl1c
Added new function on Project page to export a Bash script which exports all submissions for that project. (LP: #579771)

Show diffs side-by-side

added added

removed removed

Lines of Context:
150
150
            Offering.semester_id == Semester.id,
151
151
            Offering.subject_id == Subject.id).order_by(
152
152
                Desc(Semester.year),
153
 
                Desc(Semester.display_name),
 
153
                Desc(Semester.semester),
154
154
                Desc(Subject.code)
155
155
            )
156
156
 
298
298
        """
299
299
        return self.offerings.find(Offering.semester_id == Semester.id,
300
300
                               Semester.year == unicode(year),
301
 
                               Semester.url_name == unicode(semester)).one()
 
301
                               Semester.semester == unicode(semester)).one()
302
302
 
303
303
class Semester(Storm):
304
304
    """A semester in which subjects can be run."""
307
307
 
308
308
    id = Int(primary=True, name="semesterid")
309
309
    year = Unicode()
310
 
    code = Unicode()
311
 
    url_name = Unicode()
312
 
    display_name = Unicode()
 
310
    semester = Unicode()
313
311
    state = Unicode()
314
312
 
315
313
    offerings = ReferenceSet(id, 'Offering.semester_id')
321
319
    __init__ = _kwarg_init
322
320
 
323
321
    def __repr__(self):
324
 
        return "<%s %s/%s>" % (type(self).__name__, self.year, self.code)
 
322
        return "<%s %s/%s>" % (type(self).__name__, self.year, self.semester)
325
323
 
326
324
class Offering(Storm):
327
325
    """An offering of a subject in a particular semester."""
612
610
        return "<%s '%s' in %r>" % (type(self).__name__, self.short_name,
613
611
                                  self.project_set.offering)
614
612
 
615
 
    def can_submit(self, principal, user, late=False):
616
 
        """
617
 
        @param late: If True, does not take the deadline into account.
618
 
        """
 
613
    def can_submit(self, principal, user):
619
614
        return (self in principal.get_projects() and
620
 
                (late or not self.has_deadline_passed(user)))
 
615
                not self.has_deadline_passed(user))
621
616
 
622
 
    def submit(self, principal, path, revision, who, late=False):
 
617
    def submit(self, principal, path, revision, who):
623
618
        """Submit a Subversion path and revision to a project.
624
619
 
625
620
        @param principal: The owner of the Subversion repository, and the
627
622
        @param path: A path within that repository to submit.
628
623
        @param revision: The revision of that path to submit.
629
624
        @param who: The user who is actually making the submission.
630
 
        @param late: If True, will not raise a DeadlinePassed exception even
631
 
            after the deadline. (Default False.)
632
625
        """
633
626
 
634
 
        if not self.can_submit(principal, who, late=late):
 
627
        if not self.can_submit(principal, who):
635
628
            raise DeadlinePassed()
636
629
 
637
630
        a = Assessed.get(Store.of(self), principal, self)
746
739
        path = 'groups/%s_%s_%s_%s' % (
747
740
                self.project_set.offering.subject.short_name,
748
741
                self.project_set.offering.semester.year,
749
 
                self.project_set.offering.semester.url_name,
 
742
                self.project_set.offering.semester.semester,
750
743
                self.name
751
744
                )
752
745
        return urlparse.urljoin(url, path)
867
860
    id = Int(name="extensionid", primary=True)
868
861
    assessed_id = Int(name="assessedid")
869
862
    assessed = Reference(assessed_id, Assessed.id)
870
 
    days = Int()
 
863
    deadline = DateTime()
871
864
    approver_id = Int(name="approver")
872
865
    approver = Reference(approver_id, User.id)
873
866
    notes = Unicode()
953
946
            raise SubmissionError("Path must not contain '\\n', '[' or ']'")
954
947
        return os.path.normpath(path)
955
948
 
956
 
    @property
957
 
    def late(self):
958
 
        """True if the project was submitted late."""
959
 
        return self.days_late > 0
960
 
 
961
 
    @property
962
 
    def days_late(self):
963
 
        """The number of days the project was submitted late (rounded up), or
964
 
        0 if on-time."""
965
 
        # XXX: Need to respect extensions.
966
 
        return max(0,
967
 
            (self.date_submitted - self.assessed.project.deadline).days + 1)
968
 
 
969
949
# WORKSHEETS AND EXERCISES #
970
950
 
971
951
class Exercise(Storm):