tg.request.user

Here are the examples of the python api tg.request.user taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

18 Examples 7

Example 1

Project: SAUCE Source File: event_request.py
Function: post
    @expose(inherit=True)
    def post(self, *args, **kw):
        # Inject
        kw['teacher'] = request.user
        # Force CrudController.post to return a dict
        ''':type request: tg.request_local.Request'''
        request._response_type = 'application/json'
        result = super(EventRequestController, self).post(*args, **kw)
        value = result['value']
        sendmail(u'[SAUCE] Event requested', u'''
A new Event has been requested in SAUCE.
Review the request at %s.
''' % url('/events/request', qualified=True), cc_managers=True)
        flash('Event "%s" successfully requested. Now awaiting administrator approval.' % (value.name), 'ok')
        return redirect('/')

Example 2

Project: SAUCE Source File: submissions.py
Function: before
    def _before(self, *args, **kwargs):
        '''Prepare tmpl_context with navigation menus'''
        c.sub_menu = menu(self.submission)
        if request.user:
            c.newer = self.submission.newer_submissions()
            if c.newer:
                log.debug('Newer submissions than %r: %s',
                    self.submission, ','.join(str(s.id) for s in c.newer))
        else:
            c.newer = []

        mode = self.submission.language.lexer_name if self.submission.language else None
        c.source_display = SourceDisplay(mode=mode)

Example 3

Project: SAUCE Source File: user.py
Function: profile
    @expose('sauce.templates.form')
    def profile(self, *args, **kwargs):
        '''Profile modifying page'''

        value = request.user
        if config.features.get('externalauth', False):  # pragma: no cover
            value.disable_submit = True
            flash('Profile changes are not possible because external authentication is used!', 'error')
        else:
            value.disable_submit = False

        c.form = ProfileForm(value=value, action=url('/user/post'))

        return dict(page='user', heading=u'User profile: %s' % request.user.display_name)

Example 4

Project: SAUCE Source File: authz.py
Function: evaluate
    def evaluate(self, environ, credentials):
        if request.user and self.obj:
            attr = getattr(self.obj, self.attribute, None)
            if request.user == attr:
                return
        self.unmet()

Example 5

Project: SAUCE Source File: authz.py
Function: evaluate
    def evaluate(self, environ, credentials):
        if request.user and self.obj:
            try:
                attr = getattr(self.obj, self.attribute, [])
                if request.user in attr:
                    return
            except:
                log.error('user_is_in failed', exc_info=True)
        self.unmet()

Example 6

Project: SAUCE Source File: base.py
Function: allowance
def _allowance(obj):
    """Recursively get teachers and tutors from the object hierarchy
    and check if request.user is a member"""
    if request.user:
        if 'manage' in request.permissions:
            return True
        try:
            while obj:
                for group in ('teachers', 'tutors'):
                    if request.user in getattr(obj, group, []):
                        return True
                for user in ('teacher', 'tutor'):
                    if request.user is getattr(obj, user, None):
                        return True
                obj = obj.parent
        except:
            pass
    return False

Example 7

Project: SAUCE Source File: submission_table.py
Function: user
    def user(self, obj):
        try:
            if obj.user == request.user:
                return u'<em>%s</em>' % obj.user.display_name
            else:
                return obj.user.display_name
        except AttributeError:  # pragma: no cover
            log.warn('Submission %r has no user', obj)
            return u'<span class="label label-inverse">None</a>'

Example 8

Project: SAUCE Source File: assignments.py
Function: index
    @expose('sauce.templates.assignment')
    def index(self, page=1, *args, **kwargs):
        '''Assignment detail page'''

        values = []

        if request.user:
            c.table = SubmissionTable(DBSession)

            values = SubmissionTableFiller(DBSession).get_value(
                assignment_id=self.assignment.id,
                user_id=request.user.id,
            )

            teams = set()
            for lesson in self.assignment.sheet.event.lessons:
                teams |= set(lesson.teams)
            teams &= set(request.user.teams)

            teammates = set()
            for team in teams:
                teammates |= set(team.members)
            teammates.discard(request.user)

            for teammate in teammates:
                values.extend(SubmissionTableFiller(DBSession).get_value(
                    assignment_id=self.assignment.id,
                    user_id=teammate.id,
                ))

        return dict(page='assignments', event=self.event, assignment=self.assignment, values=values)

Example 9

Project: SAUCE Source File: events.py
Function: enroll
    @expose('sauce.templates.form')
    @require(not_anonymous(msg=u'Only logged in users can enroll for events'))
    def enroll(self, password=None, lesson=None, team=None, *args, **kwargs):
        '''Event enrolling page'''

        params = {}

        if not self.event.enroll:
            flash('Enroll not allowed', 'error')
            return HTTPForbidden()

        if self.event.password and password != self.event.password:
            if password:
                flash('Wrong password', 'error')
            c.text = u'Please enter the password to enroll for this event:'
            c.form = PasswordEnrollForm
        else:
            if password:
                params['password'] = password

            if self.event.enroll == 'event':
                try:
                    self.event._members.append(request.user)
                    DBSession.flush()
                except SQLAlchemyError:
                    log.warn('Error while enrolling user %r for event %r:', request.user, self.event, exc_info=True)
                    flash('An error occured', 'error')
                else:
                    flash('Enrolled for Event "%s"' % self.event.name,
                        'ok')
                    redirect(self.event.url)

            if self.event.enroll in ('lesson_team', 'team', 'team_new') and team:
                if self.event.enroll == 'team_new' and team == '__new__':
                    try:
                        lesson = Lesson.query.get(int(lesson))
                    except ValueError:
                        lesson = team = None
                    else:
                        # Get unique team name
                        q = Team.query.filter_by(lesson=lesson)
                        i = q.count() + 1
                        while True:
                            name = 'New Team %d' % i
                            t = q.filter_by(name=name).first()
                            if not t:
                                break
                            i = i + 1
                        team = Team(lesson=lesson, name=name)
                        DBSession.add(team)
                else:
                    try:
                        team = Team.query.get(int(team))
                    except ValueError:
                        team = None
                if team:
                    try:
                        team.members.append(request.user)
                        DBSession.flush()
                    except SQLAlchemyError:
                        log.warn('Error while enrolling user %r for team %r:', request.user, team, exc_info=True)
                        flash('An error occured', 'error')
                        lesson = lesson.id
                    else:
                        flash('Enrolled for Team "%s" in Lesson "%s" in Event "%s"'
                                % (team.name, team.lesson.name, self.event.name),
                            'ok')
                        redirect(self.event.url)
                else:
                    flash('Selected Team does not exist', 'error')

            if self.event.enroll in ('lesson', 'lesson_team', 'team', 'team_new') and not lesson:
                c.text = u'Please select the lesson you would like to attend:'
                c.form = LessonSelectionForm(event=self.event, action=url('', params))

            if self.event.enroll == 'lesson' and lesson:
                try:
                    lesson = Lesson.query.get(int(lesson))
                except ValueError:
                    lesson = None
                if lesson:
                    try:
                        lesson._members.append(request.user)
                        DBSession.flush()
                    except SQLAlchemyError:
                        log.warn('Error while enrolling user %r for lesson %r:', request.user, lesson, exc_info=True)
                        flash('An error occured', 'error')
                    else:
                        flash('Enrolled for Lesson "%s" in Event "%s"'
                                % (lesson.name, self.event.name),
                            'ok')
                        redirect(self.event.url)
                else:
                    flash('Selected Lesson does not exist',
                        'error')

            if self.event.enroll in ('lesson_team', 'team', 'team_new') and lesson:
                try:
                    lesson = Lesson.query.get(int(lesson))
                except ValueError:
                    lesson = None
                else:
                    params['lesson'] = lesson.id
                    c.text = u'Please select the team in which you would like to work:'
                    c.form = TeamSelectionForm(
                        lesson=lesson,
                        new=bool(self.event.enroll == 'team_new'),
                        action=url('', params),
                    )

        return dict(page='events', heading=u'Enroll for %s' % self.event.name)

Example 10

Project: SAUCE Source File: event_admin.py
Function: init
    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_entity_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,
            allow_copy=True,
            **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'
        )

Example 11

Project: SAUCE Source File: submissions.py
Function: edit_permissions
    def _edit_permissions(self):
        '''Check current users permissions for editing and generate appropriate warnings'''
        if (request.user in self.event.tutorsandteachers or
                'manage' in request.permissions):
            if self.submission.user == request.user:
                # Teacher on Teachers own submission
                if not self.assignment.is_active:
                    flash('The assignment is not active, you should not edit this submission anymore.', 'warning')
            else:
                # Teacher on Students Submission
                flash('You are a teacher trying to edit a student\'s submission. '
                      'You probably want to go to the judgement page instead!', 'warning')
        else:
            if self.submission.user != request.user:
                abort(status.HTTP_403_FORBIDDEN)
            # Student on own Submission
            if not self.assignment.is_active:
                flash('This assignment is not active, you can not edit this submission anymore.', 'warning')
                redirect(url(self.submission.url + '/show'))
            elif self.submission.judgement:
                flash('This submission has already been judged, you should not edit it anymore.', 'warning')

Example 12

Project: SAUCE Source File: submissions.py
Function: judge
    @expose()
    @post
    @validate(JudgementForm, error_handler=judge)
    def judge_(self, grade=None, comment=None, corrected_source=None, annotations=None,
            public=None, *args, **kwargs):  # pylint:disable=too-many-arguments

        self._judge_permissions()

        judgement_annotations = None
        if annotations:
            key = lambda d: d['line']
            judgement_annotations = dict(
                (k, ', '.join((d['comment'] for d in g if d['comment'])))
                    for k, g in groupby(sorted(annotations, key=key), key=key)
            )

        judgement_attrs = dict(
            grade=grade, comment=comment, corrected_source=corrected_source,
            annotations=judgement_annotations or None, public=public,
        )

        if any((True for x in judgement_attrs.itervalues() if x is not None)):
            # Judgement is not empty
            judgement = self.submission.judgement or Judgement(submission=self.submission)
            judgement.tutor = request.user
            judgement.date = datetime.now()
            for k in judgement_attrs:
                setattr(judgement, k, judgement_attrs[k])
        else:
            # Judgement is empty
            judgement = None

        self.submission.judgement = judgement

        try:
            DBSession.flush()
        except SQLAlchemyError:
            DBSession.rollback()
            log.warn('Submission %r, judgement could not be saved:', self.submission, exc_info=True)
            flash('Error saving judgement', 'error')

        redirect(self.submission.url + '/judge')

Example 13

Project: SAUCE Source File: submissions.py
Function: clone
    @expose()
    def clone(self, *args, **kwargs):
        s = Submission(
            user=request.user,
            assignment=self.submission.assignment,
            filename=self.submission.filename,
            source=self.submission.source,
            language=self.submission.language,
            # TODO: Clone comment or not?
            # TODO: Put logic in model
        )

        DBSession.add(s)

        try:
            DBSession.flush()
        except SQLAlchemyError:
            DBSession.rollback()
            flash('Error cloning submission', 'error')
            redirect(url(self.submission.url + '/show'))
        finally:
            s = DBSession.merge(s)
            flash('Cloned submission %d from %d' % (s.id, self.submission.id), 'ok')
            redirect(url(s.url + '/show'))

Example 14

Project: SAUCE Source File: user.py
Function: index
    @expose('sauce.templates.user')
    def index(self, *args, **kwargs):
        #TODO: Ugly.

        memberships = defaultdict(list)

        if request.user:
            memberships['teams'] = request.user.teams
            memberships['lessons'] = request.user._lessons
            memberships['tutored_lessons'] = request.user.tutored_lessons
            #memberships['events'] = request.user.events

        c.table = SubmissionTable(DBSession)

#        events = set((event for event in memberships['events']))
#        events |= set((lesson.event for lesson in memberships['lessons']))
#        events |= set((team.lesson.event for team in memberships['teams']))
#
#        for event in events:
#            for sheet in event.sheets:
#                for assignment in sheet.assignments:
#                    pass

#         teammates = set()
#         for team in memberships['teams']:
#             teammates |= set(team.students)
#         teammates.discard(request.user)

        values = SubmissionTableFiller(DBSession).get_value(user_id=request.user.id)

#         for teammate in teammates:
#             values.extend(SubmissionTableFiller(DBSession).get_value(user_id=teammate.id))

        return dict(page='user', user=request.user, values=values, memberships=memberships)

Example 15

Project: SAUCE Source File: user.py
Function: post
    @validate(ProfileForm, error_handler=profile)
    @expose()
    def post(self, *args, **kwargs):
        '''Process form data into user profile'''

        if config.features.get('externalauth', False):  # pragma: no cover
            flash('Profile changes are not possible because external authentication is used!', 'error')
            redirect(url('/user/profile'))

        user = DBSession.merge(request.user)

#        try:
#            d = User.query.filter_by(email_address=kwargs['email_address']).one()
#        except:
#            pass
#        else:
#            if d.user_name != request.user.user_name:
#                flash('The email address "%s" is already registered!' % (kwargs['email_address']), 'error')
#                redirect(url('/user/profile'))

        try:
            user._display_name = kwargs.get('display_name', '')
#            user.first_name = kwargs['first_name']
#            user.last_name = kwargs['last_name']
            user.email_address = kwargs.get('email_address', '')
            # Only attempt to change password if both values are set
            if (kwargs.get('password_1', None) and
                    kwargs.get('password_1', None) == kwargs.get('password_2', None)):
                user.password = kwargs.get('password_1', '')
            DBSession.flush()
        except SQLAlchemyError:  # pragma: no cover
            DBSession.rollback()
            log.warning('Error modifying profile of User %r', user, exc_info=True)
            flash('Error modifying profile', 'error')
        except:  # pragma: no cover
            log.warning('Error modifying profile of User %r', user, exc_info=True)
            flash('Error modifying profile', 'error')
        else:
            flash('Profile modified', 'ok')
        finally:
            redirect(url('/user/profile'))

Example 16

Project: SAUCE Source File: menu.py
def menu_entity(obj, short=False):
    def generate_menuitems(item, last=True):
        def menu_submissions(assignment, active=None):
            # The hardest part are the submissions
            submissions = assignment.submissions_by_user(request.user, team=True)
            if submissions.count() > 0:
                s = []
                groups = groupby(submissions.all(), lambda s: s.user)
                for (user, subm) in groups:
                    if user == request.user:
                        s.insert(0, (user.display_name, list(subm)))
                    else:
                        s.append((user.display_name, list(subm)))
                submissions = s
            else:
                submissions = [(request.user.display_name, [Dummy(name='No Submissions', url='#')])]

            event = assignment.sheet.event
            if request.allowance(event):
                # Which lessons are we talking about?
                lessons = [l for l in event.lessons
                    if request.user in l.tutors
                        or request.user in event.teachers
                        or 'manage' in request.permissions]
                if lessons:
                    l = []
                    for lesson in lessons:
                        l.append(Dummy(name=u'Lesson %d: %s' % (lesson.lesson_id, lesson.name),
                            url=event.url + '/lessons/%d/submissions/sheet/%d/assignment/%d'
                                % (lesson.lesson_id, assignment.sheet.sheet_id, assignment.assignment_id)))
                    if request.user in event.teachers or 'manage' in request.permissions:
                        l.append(Dummy(name=u'All Submissions', url=assignment.url + '/submissions'))
                    submissions.append(('Lessons', l))

                submissions.append((u'Similarity', [
                    Dummy(name=u'Table', url=assignment.url + '/similarity/table'),
                    Dummy(name=u'List', url=assignment.url + '/similarity/list'),
                    Dummy(name=u'Dendrogram', url=assignment.url + '/similarity/dendrogram')
                ]))

            return menu_generic('Submissions', submissions, active)

        if item.parent:
            # Recurse first
            for i in generate_menuitems(item.parent, last=False):
                yield i

        if isinstance(item, model.Event):
            yield menuitem_generic(item)
            if last:
                yield menu_generic('Sheets', sorted(item.sheets, key=lambda s: s.sheet_id))
        elif isinstance(item, model.Sheet):
            yield menu_generic(item.name, sorted(item.parent.children, key=lambda s: s.sheet_id), item)
            if last:
                yield menu_generic('Assignments', sorted(item.assignments, key=lambda a: a.assignment_id))
        elif isinstance(item, model.Assignment):
            yield menu_generic(item.name, sorted(item.parent.children, key=lambda a: a.assignment_id), item)
            if last and request.user:
                yield menu_submissions(item)
        elif isinstance(item, model.Submission):
            yield menu_submissions(item.assignment, item)

    if short:
        # Only return first element
        return [generate_menuitems(obj).next()]
    else:
        # Insert chevrons inbetween
        return separator(generate_menuitems(obj), MenuHeader(u'<i class="icon-chevron-right icon-white"></i>'))

Example 17

Project: SAUCE Source File: menu.py
def menu_admin(event):
    result = []

    # Which lessons are we talking about?
    lessons = [l for l in event.lessons
        if request.user in l.tutors or request.user in event.teachers or 'manage' in request.permissions]

    if len(lessons) == 1:
        nav = Menu(u'Lesson %d: %s' % (lessons[0].lesson_id, lessons[0].name))
    elif len(lessons) > 1:
        nav = Menu(u'Lessons')
    else:
        nav = Dummy(u'', '')

    for lesson in lessons:
        if len(lessons) > 1:
            nav.append(MenuHeader(u'Lesson %d: %s' % (lesson.lesson_id, lesson.name)))
        nav.append(MenuItem(text=u'Administration',
            href=url(event.url + '/lessons/%d/' % (lesson.lesson_id)), icon_name='cog'))
        nav.append(MenuItem(text=u'Submissions', icon_name='inbox',
            href=url(event.url + '/lessons/%d/submissions' % (lesson.lesson_id))))
        qry = lesson.members_query()
        nav.append(MenuItem(text=u'eMail to Students', icon_name='envelope',
            href='mailto:%s?subject=[SAUCE]'
                % (','.join('%s' % (s.email_address)
                    for s in qry if s is not request.user)),
            onclick='return confirm("This will send an eMail to %d people. Are you sure?")' % (qry.count())))
    result.append(nav)

    if (request.user and request.user in event.teachers
            or 'manage' in request.permissions):
        nav = Menu(u'Administration')
        nav.append(MenuHeader(u'Event %s: %s' % (event._url, event.name)))
        nav.append(MenuItem(text=u'Administration',
            href=url(event.url + '/admin/'), icon_name='cog'))
        nav.append(MenuItem(text=u'Submissions', icon_name='inbox',
            href=url(event.url + '/submissions')))
        qry = event.members_query()
        nav.append(MenuItem(text=u'eMail to Students', icon_name='envelope',
            href='mailto:%s?subject=[SAUCE]'
                % (','.join('%s' % (s.email_address)
                    for s in qry if s is not request.user)),
            onclick='return confirm("This will send an eMail to %d people. Are you sure?")' % (qry.count())))
        qry = event.tutors_query()
        nav.append(MenuItem(text=u'eMail to Tutors', icon_name='envelope',
            href='mailto:%s?subject=[SAUCE]'
                % (','.join('%s' % (t.email_address)
                    for t in qry if t is not request.user)),
            onclick='return confirm("This will send an eMail to %d people. Are you sure?")' % (qry.count())))
        result.append(nav)

    # Insert divider inbetween
    return separator(iter(result), MenuDivider)

Example 18

Project: SAUCE Source File: menu.py
Function: menu
def menu(obj, short=False):
    '''Generate a full-featured menu with the hierarchy-based obj

    if short:
        only the uppermost item will be itemized, no further navigation
    '''
    c = Container()
    m = Menu()
    m.extend(menu_entity(obj, short))
    c.append(m)

    # Get the event and name it so
    event = obj
    while not isinstance(event, model.Event) and event.parent:
        event = event.parent
    if request.user in event.tutorsandteachers or 'manage' in request.permissions:
        m = Menu(class_menu='pull-right')
        m.extend(menu_admin(event))
        c.append(m)

    return c