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

« back to all changes in this revision

Viewing changes to ivle/database.py

  • Committer: Matt Giuca
  • Date: 2009-04-25 14:37:42 UTC
  • mfrom: (1195.1.19 marks-fix)
  • Revision ID: matt.giuca@gmail.com-20090425143742-741mh2plk0cgib3e
Merged branch marks-fix. Fixes Google Code issue 144.

bin/ivle-marks: Completely rewritten. (Was hopelessly out-of-date, and didn't
    work at all. Now works on the current database model, and has new features
    to boot - able to select the semester and cutoff date).

ivle.worksheet.utils: Added calculate_mark, which is from the duplicated code
    in both bin/ivle-marks and ivle.webapp.tutorial.OfferingView.populate.
    Also added some extra optional arguments for calculating
    exercise/worksheet scores from a particular date.

ivle.webapp.tutorial: Call ivle.worksheet.utils.calculate_mark instead of
    manually calculating (avoid code duplication).

ivle.database: A few new methods on the Subject class, for retrieving
    offerings.

Show diffs side-by-side

added added

removed removed

Lines of Context:
256
256
                perms.add('edit')
257
257
        return perms
258
258
 
 
259
    def active_offerings(self):
 
260
        """Return a sequence of currently active offerings for this subject
 
261
        (offerings whose semester.state is "current"). There should be 0 or 1
 
262
        elements in this sequence, but it's possible there are more.
 
263
        """
 
264
        return self.offerings.find(Offering.semester_id == Semester.id,
 
265
                                   Semester.state == u'current')
 
266
 
 
267
    def offering_for_semester(self, year, semester):
 
268
        """Get the offering for the given year/semester, or None."""
 
269
        return self.offerings.find(Offering.semester_id == Semester.id,
 
270
                               Semester.year == unicode(year),
 
271
                               Semester.semester == unicode(semester)).one()
 
272
 
259
273
class Semester(Storm):
260
274
    __storm_table__ = "semester"
261
275
 
660
674
    def __repr__(self):
661
675
        return "<%s %s>" % (type(self).__name__, self.name)
662
676
 
663
 
    # XXX Refactor this - make it an instance method of Subject rather than a
664
 
    # class method of Worksheet. Can't do that now because Subject isn't
665
 
    # linked referentially to the Worksheet.
666
 
    @classmethod
667
 
    def get_by_name(cls, store, subjectname, worksheetname):
668
 
        """
669
 
        Get the Worksheet from the db associated with a given store, subject
670
 
        name and worksheet name.
671
 
        """
672
 
        return store.find(cls, cls.subject == unicode(subjectname),
673
 
            cls.name == unicode(worksheetname)).one()
674
 
 
675
677
    def remove_all_exercises(self):
676
678
        """
677
679
        Remove all exercises from this worksheet.