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
3
Example 1
@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('/')
3
Example 2
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)
3
Example 3
@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)
3
Example 4
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()
3
Example 5
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()
3
Example 6
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
3
Example 7
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>'
0
Example 8
@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)
0
Example 9
@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)
0
Example 10
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'
)
0
Example 11
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')
0
Example 12
@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')
0
Example 13
@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'))
0
Example 14
@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)
0
Example 15
@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'))
0
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>'))
0
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)
0
Example 18
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