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

« back to all changes in this revision

Viewing changes to ivle/database.py

  • Committer: William Grant
  • Date: 2009-01-19 23:24:07 UTC
  • mto: This revision was merged to the branch mainline in revision 1090.
  • Revision ID: grantw@unimelb.edu.au-20090119232407-0z5y20e3738hl1eg
ivle.database: Add an Offering.enrol(user) method, which enrols the user in
    the offering or raises an AlreadyEnrolledError.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
            'Subject', 'Semester', 'Offering', 'Enrolment',
39
39
            'ProjectSet', 'Project', 'ProjectGroup', 'ProjectGroupMembership',
40
40
            'Exercise', 'Worksheet', 'WorksheetExercise',
41
 
            'ExerciseSave', 'ExerciseAttempt'
 
41
            'ExerciseSave', 'ExerciseAttempt',
 
42
            'AlreadyEnrolledError'
42
43
        ]
43
44
 
44
45
def _kwarg_init(self, **kwargs):
239
240
        return "<%s %r in %r>" % (type(self).__name__, self.subject,
240
241
                                  self.semester)
241
242
 
 
243
    def enrol(self, user):
 
244
        '''Enrol a user in this offering.'''
 
245
        # We'll get a horrible database constraint violation error if we try
 
246
        # to add a second enrolment.
 
247
        if Store.of(self).find(Enrolment,
 
248
                               Enrolment.user_id == user.id,
 
249
                               Enrolment.offering_id == self.id).count() == 1:
 
250
            raise AlreadyEnrolledError()
 
251
 
 
252
        e = Enrolment(user=user, offering=self, active=True)
 
253
        self.enrolments.add(e)
 
254
 
242
255
class Enrolment(Storm):
243
256
    __storm_table__ = "enrolment"
244
257
    __storm_primary__ = "user_id", "offering_id"
256
269
        return "<%s %r in %r>" % (type(self).__name__, self.user,
257
270
                                  self.offering)
258
271
 
 
272
class AlreadyEnrolledError(Exception):
 
273
    pass
 
274
 
259
275
# PROJECTS #
260
276
 
261
277
class ProjectSet(Storm):