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

« back to all changes in this revision

Viewing changes to ivle/database.py

  • Committer: William Grant
  • Date: 2009-05-11 04:51:08 UTC
  • mto: (1165.3.65 submissions-admin)
  • mto: This revision was merged to the branch mainline in revision 1247.
  • Revision ID: grantw@unimelb.edu.au-20090511045108-z70ij6oti5cazyo4
Add an ivle-refreshfilesystem script, which currently just rewrites svn(-group).conf.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
from storm.locals import create_database, Store, Int, Unicode, DateTime, \
30
30
                         Reference, ReferenceSet, Bool, Storm, Desc
31
 
from storm.expr import Select, Max
32
31
from storm.exceptions import NotOneError, IntegrityError
33
32
 
34
33
from ivle.worksheet.rst import rst
117
116
 
118
117
    @property
119
118
    def display_name(self):
120
 
        """Returns the "nice name" of the user or group."""
121
119
        return self.fullname
122
120
 
123
121
    @property
124
 
    def short_name(self):
125
 
        """Returns the database "identifier" name of the user or group."""
126
 
        return self.login
127
 
 
128
 
    @property
129
122
    def password_expired(self):
130
123
        fieldval = self.pass_exp
131
124
        return fieldval is not None and datetime.datetime.now() > fieldval
386
379
 
387
380
        return enrolment
388
381
 
389
 
    def get_members_by_role(self, role):
390
 
        return Store.of(self).find(User,
391
 
                Enrolment.user_id == User.id,
392
 
                Enrolment.offering_id == self.id,
393
 
                Enrolment.role == role
394
 
                )
395
 
 
396
 
    @property
397
 
    def students(self):
398
 
        return self.get_members_by_role(u'student')
 
382
    def get_students(self):
 
383
        enrolments = self.enrolments.find(role=u'student')
 
384
        return [enrolment.user for enrolment in enrolments]
399
385
 
400
386
class Enrolment(Storm):
401
387
    """An enrolment of a user in an offering.
456
442
    def get_permissions(self, user):
457
443
        return self.offering.get_permissions(user)
458
444
 
459
 
    @property
460
 
    def assigned(self):
461
 
        """Get the entities (groups or users) assigned to submit this project.
462
 
 
463
 
        This will be a Storm ResultSet.
464
 
        """
465
 
        #If its a solo project, return everyone in offering
 
445
    # Get the individuals (groups or users) Assigned to this project
 
446
    def get_assigned(self):
 
447
        #If its a Solo project, return everyone in offering
466
448
        if self.max_students_per_group is None:
467
 
            return self.offering.students
 
449
            return self.offering.get_students()
468
450
        else:
469
451
            return self.project_groups
470
452
 
524
506
    def get_permissions(self, user):
525
507
        return self.project_set.offering.get_permissions(user)
526
508
 
527
 
    @property
528
 
    def latest_submissions(self):
529
 
        """Return the latest submission for each Assessed."""
530
 
        return Store.of(self).find(ProjectSubmission,
531
 
            Assessed.project_id == self.id,
532
 
            ProjectSubmission.assessed_id == Assessed.id,
533
 
            ProjectSubmission.date_submitted == Select(
534
 
                    Max(ProjectSubmission.date_submitted),
535
 
                    ProjectSubmission.assessed_id == Assessed.id,
536
 
                    tables=ProjectSubmission
537
 
            )
538
 
        )
539
 
 
540
509
 
541
510
class ProjectGroup(Storm):
542
511
    """A group of students working together on a project."""
565
534
 
566
535
    @property
567
536
    def display_name(self):
568
 
        """Returns the "nice name" of the user or group."""
569
 
        return self.nick
570
 
 
571
 
    @property
572
 
    def short_name(self):
573
 
        """Returns the database "identifier" name of the user or group."""
574
 
        return self.name
 
537
        return '%s (%s)' % (self.nick, self.name)
575
538
 
576
539
    def get_projects(self, offering=None, active_only=True):
577
540
        '''Find projects that the group can submit.
642
605
            self.user or self.project_group, self.project)
643
606
 
644
607
    @property
645
 
    def is_group(self):
646
 
        """True if the Assessed is a group, False if it is a user."""
647
 
        return self.project_group is not None
648
 
 
649
 
    @property
650
608
    def principal(self):
651
609
        return self.project_group or self.user
652
610