Ejemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        # /event/url/submissions
        self.event = kwargs.get('event', None)
        # /event/url/lesson/id/submissions
        self.lesson = kwargs.get('lesson', None)
        # /event/url/sheet/id/assignment/id/submissions
        self.assignment = kwargs.get('assignment', None)
        # /event/url/sheet/id/submissions
        self.sheet = kwargs.get('sheet', None)
        if self.event:
            pass
        elif self.lesson:
            self.event = self.lesson.event
        elif self.assignment:
            self.event = self.assignment.sheet.event
        elif self.sheet:
            self.event = self.sheet.event
        else:  # pragma: no cover
            log.warn('SubmissionController without any filter')
            flash('You can not view Submissions without any constraint.', 'error')
            abort(400)

        # Allow access for event teacher and lesson teacher
        self.allow_only = Any(
            user_is_in('teachers', self.event),
            user_is_in('tutors', self.lesson),
            has_permission('manage'),
            msg=u'You have no permission to manage this Lesson'
        )

        self.table = SubmissionTable(DBSession)
        self.table_filler = SubmissionTableFiller(DBSession, lesson=self.lesson)
Ejemplo n.º 2
0
    def __init__(self, *args, **kwargs):
        # /event/url/submissions
        self.event = kwargs.get('event', None)
        # /event/url/lesson/id/submissions
        self.lesson = kwargs.get('lesson', None)
        # /event/url/sheet/id/assignment/id/submissions
        self.assignment = kwargs.get('assignment', None)
        # /event/url/sheet/id/submissions
        self.sheet = kwargs.get('sheet', None)
        if self.event:
            pass
        elif self.lesson:
            self.event = self.lesson.event
        elif self.assignment:
            self.event = self.assignment.sheet.event
        elif self.sheet:
            self.event = self.sheet.event
        else:  # pragma: no cover
            log.warn('SubmissionController without any filter')
            flash('You can not view Submissions without any constraint.',
                  'error')
            abort(400)

        # Allow access for event teacher and lesson teacher
        self.allow_only = Any(
            user_is_in('teachers', self.event),
            user_is_in('tutors', self.lesson),
            has_permission('manage'),
            msg=u'You have no permission to manage this Lesson')

        self.table = SubmissionTable(DBSession)
        self.table_filler = SubmissionTableFiller(DBSession,
                                                  lesson=self.lesson)
Ejemplo n.º 3
0
    def __init__(self, event):
        self.event = event

        self.allow_only = Any(
            user_is_in('teachers', self.event),
            user_is_in('tutors', self.event),
            has_permission('manage'),
            msg=u'You have no permission to manage Lessons for this Event')
Ejemplo n.º 4
0
    def __init__(self, event):
        self.event = event

        self.allow_only = Any(
            user_is_in('teachers', self.event),
            user_is_in('tutors', self.event),
            has_permission('manage'),
            msg=u'You have no permission to manage Lessons for this Event'
        )
Ejemplo n.º 5
0
    def __init__(self, sheet):
        self.sheet = sheet
        self.event = sheet.event
        self.assignments = AssignmentsController(sheet=self.sheet)
        c.sheet = self.sheet

        self.allow_only = Any(is_public(self.sheet),
                              user_is_in('teachers', self.event),
                              user_is_in('tutors', self.event),
                              has_permission('manage'),
                              msg=u'This Sheet is not public')

        self.submissions = SubmissionsController(sheet=self.sheet)
Ejemplo n.º 6
0
    def __init__(self, assignment):
        self.assignment = assignment
        self.sheet = assignment.sheet
        self.event = self.sheet.event
        c.assignment = self.assignment

        self.allow_only = Any(is_public(self.assignment),
                              user_is_in('teachers', self.event),
                              user_is_in('tutors', self.event),
                              has_permission('manage'),
                              msg=u'This Assignment is not public')

        self.submissions = SubmissionsController(assignment=self.assignment)
        self.similarity = SimilarityController(assignment=self.assignment)
Ejemplo n.º 7
0
    def __init__(self, sheet):
        self.sheet = sheet
        self.event = sheet.event
        self.assignments = AssignmentsController(sheet=self.sheet)
        c.sheet = self.sheet

        self.allow_only = Any(
            is_public(self.sheet),
            user_is_in('teachers', self.event),
            user_is_in('tutors', self.event),
            has_permission('manage'),
            msg=u'This Sheet is not public'
        )

        self.submissions = SubmissionsController(sheet=self.sheet)
Ejemplo n.º 8
0
    def __init__(self, assignment):
        self.assignment = assignment
        self.sheet = assignment.sheet
        self.event = self.sheet.event
        c.assignment = self.assignment

        self.allow_only = Any(
            is_public(self.assignment),
            user_is_in('teachers', self.event),
            user_is_in('tutors', self.event),
            has_permission('manage'),
            msg=u'This Assignment is not public'
        )

        self.submissions = SubmissionsController(assignment=self.assignment)
        self.similarity = SimilarityController(assignment=self.assignment)
Ejemplo n.º 9
0
    def __init__(self, submission):

        self.submission = submission
        self.assignment = submission.assignment
        self.event = self.assignment.event

        predicates = (user_is_in('tutors', l) for l in submission.lessons)
        self.allow_only = Any(
            is_public(submission),
            user_is('user', self.submission),
            user_is_in('team', self.submission),
            user_is_in('teachers', self.event),
            has_permission('manage'),
            msg=u'You are not allowed to view this submission',
            *predicates
        )
Ejemplo n.º 10
0
    def __init__(self, assignment):
        self.assignment = assignment
        self.submissions = sorted((s for s in self.assignment.submissions if s.source),
            key=lambda s: s.id)

        self.key = str(self.assignment.id)
        if self.submissions:
            self.key += '_' + '-'.join(str(s.id) for s in self.submissions)
            self.key += '_' + (max(self.submissions, key=lambda s: s.modified)
                .modified.strftime('%Y-%m-%d-%H-%M-%S'))

        self.allow_only = Any(
            user_is_in('teachers', self.assignment.sheet.event),
            user_is_in('tutors', self.assignment.sheet.event),
            has_permission('manage'),
            msg=u'You are not allowed to access this page.'
        )
Ejemplo n.º 11
0
    def __init__(self, event):
        self.event = event
        self.sheets = SheetsController(event=self.event)
        self.lessons = LessonsController(event=self.event)
        self.admin = EventAdminController(event=self.event)
        self.submissions = SubmissionsController(event=self.event)
        c.event = self.event

        self.allow_only = Any(
            is_public(self.event),
            user_is_in('teachers', self.event),
            has_permission('manage'),
            msg=u'This Event is not public'
        )

        c.sub_menu = menu(self.event, True)
Ejemplo n.º 12
0
    def __init__(self, event, **kwargs):
        self.event = event

        menu_items = OrderedDict((
            ('./events/', 'Event'),
            ('./tutors/', 'Tutors'),
            ('./lessons/', 'Lessons'),
            ('./teams/', 'Teams'),
            ('./students/', 'Students'),
            ('./sheets/', 'Sheets'),
            ('./assignments/', 'Assignments'),
            ('./tests/', 'Tests'),
            ('./newsitems/', 'NewsItems'),
        ))
        self.menu_items = menu_items

        super(EventAdminController, self).__init__(**kwargs)

        self.events = EventsCrudController(
            inject=dict(teacher=request.user),
            query_modifier=lambda qry: qry.filter_by(id=self.event.id),
            menu_items=self.menu_items,
            allow_new=False,
            allow_delete=False,
            **kwargs)

        self.lessons = LessonsCrudController(
            inject=dict(event=self.event),
            query_modifier=lambda qry: qry.filter_by(event_id=self.event.id),
            query_modifiers={
                # Disabled so that the teacher can assign any users as tutors
                #'tutor': lambda qry: qry.filter(User.id.in_((t.id for t in self.event.tutors))),
                'teams':
                lambda qry: qry.join(Team.lesson).filter_by(event_id=self.event
                                                            .id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.teams = TeamsCrudController(
            #query_modifier=lambda qry: qry.filter(Team.lesson_id.in_((l.id for l in self.event.lessons))),
            query_modifier=lambda qry: qry.join(Team.lesson).filter_by(
                event_id=self.event.id),
            query_modifiers={
                'lesson': lambda qry: qry.filter_by(event_id=self.event.id),
                # Disabled so that the teacher can assign any users as members
                #'members': lambda qry: qry.filter(User.id.in_((u.id for u in self.lesson.event.members))),
            },
            menu_items=self.menu_items,
            hints=dict(event=self.event),
            **kwargs)

        self.students = StudentsCrudController(
            query_modifier=lambda qry: qry.select_from(
                union(
                    qry.join(event_members).join(Event).filter_by(
                        id=self.event.id).order_by(None),
                    qry.join(lesson_members).join(Lesson).filter_by(
                        event_id=self.event.id).order_by(None),
                    qry.join(team_members).join(Team).join(Lesson).filter_by(
                        event_id=self.event.id).order_by(None),
                )).order_by(User.user_name),
            query_modifiers={
                #'teams': lambda qry: qry.filter(Team.lesson_id.in_((l.id for l in self.event.lessons))),
                'teams':
                lambda qry: qry.join(Team.lesson).filter_by(event_id=self.event
                                                            .id),
                '_lessons':
                lambda qry: qry.filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            hints=dict(event=self.event),
            **kwargs)

        self.tutors = TutorsCrudController(
            query_modifier=lambda qry: (qry.join(lesson_tutors).join(
                Lesson).filter_by(event_id=self.event.id).order_by(User.id)),
            query_modifiers={
                'tutored_lessons':
                lambda qry: qry.filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            hints=dict(event=self.event),
            **kwargs)

        self.sheets = SheetsCrudController(
            inject=dict(event=self.event, _teacher=request.user),
            query_modifier=lambda qry: qry.filter_by(event_id=self.event.id),
            menu_items=self.menu_items,
            **kwargs)

        self.assignments = AssignmentsCrudController(
            inject=dict(_teacher=request.user),
            query_modifier=lambda qry: qry.join(Assignment.sheet).filter_by(
                event_id=self.event.id),
            query_modifiers={
                'sheet': lambda qry: qry.filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.tests = TestsCrudController(
            inject=dict(user=request.user),
            query_modifier=lambda qry: (qry.join(Test.assignment).join(
                Assignment.sheet).filter_by(event_id=self.event.id)),
            query_modifiers={
                'assignment':
                lambda qry: qry.join(Assignment.sheet).filter_by(event_id=self.
                                                                 event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.newsitems = NewsItemController(
            inject=dict(user=request.user),
            query_modifier=lambda qry: qry.filter(
                or_(NewsItem.event == None, NewsItem.event == self.event)),
            query_modifiers={
                'event': lambda qry: qry.filter_by(id=self.event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.allow_only = Any(
            user_is_in('teachers', self.event),
            has_permission('manage'),
            msg=u'You have no permission to manage this Event')
Ejemplo n.º 13
0
    def __init__(self, event, **kwargs):
        self.event = event

        menu_items = OrderedDict((
            ('./events/', 'Event'),
            ('./tutors/', 'Tutors'),
            ('./lessons/', 'Lessons'),
            ('./teams/', 'Teams'),
            ('./students/', 'Students'),
            ('./sheets/', 'Sheets'),
            ('./assignments/', 'Assignments'),
            ('./tests/', 'Tests'),
            ('./newsitems/', 'NewsItems'),
        ))
        self.menu_items = menu_items

        super(EventAdminController, self).__init__(**kwargs)

        self.events = EventsCrudController(
            inject=dict(teacher=request.user),
            query_modifier=lambda qry: qry.filter_by(id=self.event.id),
            menu_items=self.menu_items,
            allow_new=False, allow_delete=False,
            **kwargs)

        self.lessons = LessonsCrudController(
            inject=dict(event=self.event),
            query_modifier=lambda qry: qry.filter_by(event_id=self.event.id),
            query_modifiers={
                # Disabled so that the teacher can assign any users as tutors
                #'tutor': lambda qry: qry.filter(User.id.in_((t.id for t in self.event.tutors))),
                'teams': lambda qry: qry.join(Team.lesson).filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.teams = TeamsCrudController(
            #query_modifier=lambda qry: qry.filter(Team.lesson_id.in_((l.id for l in self.event.lessons))),
            query_modifier=lambda qry: qry.join(Team.lesson).filter_by(event_id=self.event.id),
            query_modifiers={
                'lesson': lambda qry: qry.filter_by(event_id=self.event.id),
                # Disabled so that the teacher can assign any users as members
                #'members': lambda qry: qry.filter(User.id.in_((u.id for u in self.lesson.event.members))),
            },
            menu_items=self.menu_items,
            hints=dict(event=self.event),
            **kwargs)

        self.students = StudentsCrudController(
            query_modifier=lambda qry: qry.select_from(union(
                    qry.join(event_members).join(Event)
                        .filter_by(id=self.event.id).order_by(None),
                    qry.join(lesson_members).join(Lesson)
                        .filter_by(event_id=self.event.id).order_by(None),
                    qry.join(team_members).join(Team).join(Lesson)
                        .filter_by(event_id=self.event.id).order_by(None),
                )).order_by(User.user_name),
            query_modifiers={
                #'teams': lambda qry: qry.filter(Team.lesson_id.in_((l.id for l in self.event.lessons))),
                'teams': lambda qry: qry.join(Team.lesson).filter_by(event_id=self.event.id),
                '_lessons': lambda qry: qry.filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            hints=dict(event=self.event),
            **kwargs)

        self.tutors = TutorsCrudController(
            query_modifier=lambda qry: (qry.join(lesson_tutors).join(Lesson)
                .filter_by(event_id=self.event.id).order_by(User.id)),
            query_modifiers={
                'tutored_lessons': lambda qry: qry.filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            hints=dict(event=self.event),
            **kwargs)

        self.sheets = SheetsCrudController(
            inject=dict(event=self.event, _teacher=request.user),
            query_modifier=lambda qry: qry.filter_by(event_id=self.event.id),
            menu_items=self.menu_items,
            **kwargs)

        self.assignments = AssignmentsCrudController(
            inject=dict(_teacher=request.user),
            query_modifier=lambda qry: qry.join(Assignment.sheet).filter_by(event_id=self.event.id),
            query_modifiers={
                'sheet': lambda qry: qry.filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.tests = TestsCrudController(
            inject=dict(user=request.user),
            query_modifier=lambda qry: (qry.join(Test.assignment).join(Assignment.sheet)
                .filter_by(event_id=self.event.id)),
            query_modifiers={
                'assignment': lambda qry: qry.join(Assignment.sheet).filter_by(event_id=self.event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.newsitems = NewsItemController(
            inject=dict(user=request.user),
            query_modifier=lambda qry: qry.filter(or_(NewsItem.event == None, NewsItem.event == self.event)),
            query_modifiers={
                'event': lambda qry: qry.filter_by(id=self.event.id),
            },
            menu_items=self.menu_items,
            **kwargs)

        self.allow_only = Any(
            user_is_in('teachers', self.event),
            has_permission('manage'),
            msg=u'You have no permission to manage this Event'
        )
Ejemplo n.º 14
0
    def __init__(self, lesson, **kwargs):
        self.lesson = lesson

        menu_items = OrderedDict((
            ('./lessons/', 'Lesson'),
            ('./tutors/', 'Tutor'),
            ('./teams/', 'Teams'),
            ('./students/', 'Students'),
            #('./submissions/', 'Submissions'),
        ))
        self.menu_items = menu_items

        super(LessonController, self).__init__(**kwargs)

        self.lessons = LessonsCrudController(
            # inject=dict(tutor=request.user, event=self.lesson.event),  # No new lesson to be created
            query_modifier=lambda qry: qry.filter_by(id=self.lesson.id),
            query_modifiers={
                # Tutors can only delegate ownership to other tutors
                #'tutor': lambda qry: qry.filter(User.id.in_((t.id for t in self.lesson.event.tutors))),
                'tutor': lambda qry: qry.join(User.tutored_lessons).filter_by(event_id=self.lesson.event.id)
            },
            allow_new=False, allow_delete=False,
            menu_items=self.menu_items,
            **kwargs)
        self.students = StudentsCrudController(
            inject=dict(_lessons=[self.lesson]),
            query_modifier=lambda qry: qry.select_from(union(
                    qry.join(lesson_members).filter_by(lesson_id=self.lesson.id).order_by(None),
                    qry.join(team_members).join(Team).filter_by(lesson_id=self.lesson.id).order_by(None),
                )).order_by(User.id),
            query_modifiers={
                'teams': lambda qry: qry.filter_by(lesson_id=self.lesson.id),
                '_lessons': lambda qry: qry.filter_by(id=self.lesson.id),
            },
            menu_items=self.menu_items,
            allow_delete=False,
            hints=dict(lesson=self.lesson, event=self.lesson.event),
            **kwargs)
        self.teams = TeamsCrudController(
            # inject=dict(lesson=self.lesson),  # Field shows only one value
            query_modifier=lambda qry: qry.filter_by(lesson_id=self.lesson.id),
            query_modifiers={
                #'members': lambda qry: qry.filter(User.id.in_((u.id for u in self.lesson.event.members))),
                'members': lambda qry: qry.select_from(union(
                        qry.join(lesson_members).join(Lesson).filter_by(event_id=self.lesson.event.id).order_by(None),
                        qry.join(team_members).join(Team).join(Team.lesson).filter_by(event_id=self.lesson.event.id).order_by(None),
                    )).order_by(User.id),
                'lesson': lambda qry: qry.filter_by(id=self.lesson.id),
            },
            menu_items=self.menu_items,
            hints=dict(lesson=self.lesson, event=self.lesson.event),
            **kwargs)
        self.tutors = TutorsCrudController(
            query_modifier=lambda qry: (qry.join(lesson_tutors).filter_by(lesson_id=self.lesson.id)
                .order_by(User.id)),
            query_modifiers={
                'tutored_lessons': lambda qry: qry.filter(Lesson.event == self.lesson.event),
            },
            menu_items=self.menu_items, allow_new=False, allow_delete=False,
            hints=dict(lesson=self.lesson, event=self.lesson.event),
            **kwargs)

        self.submissions = SubmissionsController(lesson=self.lesson, menu_items=self.menu_items, **kwargs)

        # Allow access for event teacher and lesson teacher
        self.allow_only = Any(
            user_is_in('teachers', self.lesson.event),
            user_is_in('tutors', self.lesson),
            has_permission('manage'),
            msg=u'You have no permission to manage this Lesson'
        )
Ejemplo n.º 15
0
    def __init__(self, lesson, **kwargs):
        self.lesson = lesson

        menu_items = OrderedDict((
            ('./lessons/', 'Lesson'),
            ('./tutors/', 'Tutor'),
            ('./teams/', 'Teams'),
            ('./students/', 'Students'),
            #('./submissions/', 'Submissions'),
        ))
        self.menu_items = menu_items

        super(LessonController, self).__init__(**kwargs)

        self.lessons = LessonsCrudController(
            # inject=dict(tutor=request.user, event=self.lesson.event),  # No new lesson to be created
            query_modifier=lambda qry: qry.filter_by(id=self.lesson.id),
            query_modifiers={
                # Tutors can only delegate ownership to other tutors
                #'tutor': lambda qry: qry.filter(User.id.in_((t.id for t in self.lesson.event.tutors))),
                'tutor':
                lambda qry: qry.join(User.tutored_lessons).filter_by(
                    event_id=self.lesson.event.id)
            },
            allow_new=False,
            allow_delete=False,
            menu_items=self.menu_items,
            **kwargs)
        self.students = StudentsCrudController(
            inject=dict(_lessons=[self.lesson]),
            query_modifier=lambda qry: qry.select_from(
                union(
                    qry.join(lesson_members).filter_by(lesson_id=self.lesson.id
                                                       ).order_by(None),
                    qry.join(team_members).join(Team).filter_by(
                        lesson_id=self.lesson.id).order_by(None),
                )).order_by(User.id),
            query_modifiers={
                'teams': lambda qry: qry.filter_by(lesson_id=self.lesson.id),
                '_lessons': lambda qry: qry.filter_by(id=self.lesson.id),
            },
            menu_items=self.menu_items,
            allow_delete=False,
            hints=dict(lesson=self.lesson, event=self.lesson.event),
            **kwargs)
        self.teams = TeamsCrudController(
            # inject=dict(lesson=self.lesson),  # Field shows only one value
            query_modifier=lambda qry: qry.filter_by(lesson_id=self.lesson.id),
            query_modifiers={
                #'members': lambda qry: qry.filter(User.id.in_((u.id for u in self.lesson.event.members))),
                'members':
                lambda qry: qry.select_from(
                    union(
                        qry.join(lesson_members).join(Lesson).filter_by(
                            event_id=self.lesson.event.id).order_by(None),
                        qry.join(team_members).join(Team).join(Team.lesson).
                        filter_by(event_id=self.lesson.event.id).order_by(None
                                                                          ),
                    )).order_by(User.id),
                'lesson':
                lambda qry: qry.filter_by(id=self.lesson.id),
            },
            menu_items=self.menu_items,
            hints=dict(lesson=self.lesson, event=self.lesson.event),
            **kwargs)
        self.tutors = TutorsCrudController(
            query_modifier=lambda qry: (qry.join(lesson_tutors).filter_by(
                lesson_id=self.lesson.id).order_by(User.id)),
            query_modifiers={
                'tutored_lessons':
                lambda qry: qry.filter(Lesson.event == self.lesson.event),
            },
            menu_items=self.menu_items,
            allow_new=False,
            allow_delete=False,
            hints=dict(lesson=self.lesson, event=self.lesson.event),
            **kwargs)

        self.submissions = SubmissionsController(lesson=self.lesson,
                                                 menu_items=self.menu_items,
                                                 **kwargs)

        # Allow access for event teacher and lesson teacher
        self.allow_only = Any(
            user_is_in('teachers', self.lesson.event),
            user_is_in('tutors', self.lesson),
            has_permission('manage'),
            msg=u'You have no permission to manage this Lesson')