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

« back to all changes in this revision

Viewing changes to ivle/database.py

Merge the empty/non-empty project lists.

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
234
227
        they may do everything. Otherwise they may do nothing.
235
228
        """
236
229
        if user and user.admin or user is self:
237
 
            return set(['view_public', 'view', 'edit', 'submit_project'])
 
230
            return set(['view', 'edit', 'submit_project'])
238
231
        else:
239
 
            return set(['view_public'])
 
232
            return set()
240
233
 
241
234
# SUBJECTS AND ENROLMENTS #
242
235
 
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')
399
 
 
400
382
class Enrolment(Storm):
401
383
    """An enrolment of a user in an offering.
402
384
 
456
438
    def get_permissions(self, user):
457
439
        return self.offering.get_permissions(user)
458
440
 
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
466
 
        if self.max_students_per_group is None:
467
 
            return self.offering.students
468
 
        else:
469
 
            return self.project_groups
470
 
 
471
441
class Project(Storm):
472
442
    """A student project for which submissions can be made."""
473
443
 
524
494
    def get_permissions(self, user):
525
495
        return self.project_set.offering.get_permissions(user)
526
496
 
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
497
 
541
498
class ProjectGroup(Storm):
542
499
    """A group of students working together on a project."""
565
522
 
566
523
    @property
567
524
    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
 
525
        return '%s (%s)' % (self.nick, self.name)
575
526
 
576
527
    def get_projects(self, offering=None, active_only=True):
577
528
        '''Find projects that the group can submit.
642
593
            self.user or self.project_group, self.project)
643
594
 
644
595
    @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
596
    def principal(self):
651
597
        return self.project_group or self.user
652
598