def main(): args = parse_args() load_config(args.conf_file) #print model.DBSession.query(model.User.user_name).all() events = Session.query(model.Event).all() print[(i, e.name) for i, e in enumerate(events)] event_id = raw_input('event_id: ') event = events[int(event_id)] fix_languages = raw_input("Allow all languages on all assignments? [y]") if fix_languages == 'y': l = Session.query(model.Language).all() for a in Session.query( model.Assignment).filter_by(event_id=event.id).all(): a = Session.merge(a) a.allowed_languages = l Session.add(a) try: transaction.commit() except IntegrityError: print traceback.format_exc() transaction.abort() fix_visible_tests = raw_input( "Fix boolean visible attribute on tests? [y]") if fix_visible_tests == 'y': for a in Session.query( model.Assignment).filter_by(event_id=event.id).all(): a = Session.merge(a) print u'Assignment: %s' % a.name for t in a.tests: print u'Test %d, Output length %d' % (t.id, len(t.output)) visible = raw_input('Make test visible? [y]') if visible == 'y': t.visible = True Session.add(t) try: transaction.commit() except IntegrityError: print traceback.format_exc() transaction.abort()
def index(self): assignment_query = DBSession.query(Assignment) submission_query = DBSession.query(Submission).join(Assignment) team_query = DBSession.query(Team) if self.event_id: assignment_query = assignment_query.filter( Assignment.event_id == self.event_id) submission_query = submission_query.filter( Assignment.event_id == self.event_id) #team_query = team_query.join(team_to_event).filter_by(event_id=self.event_id) teams = team_query.all() for team in teams: team.score = 0 team.count = 0 team.assignments = [] for assignment in assignment_query.all(): assignment.done = {} assignment.solution = {} for submission in (submission for submission in assignment.submissions if submission.result is not None): try: assert submission.team in teams if not assignment.done.get(submission.team.id): if submission.testrun.result: submission.team.score += int( (submission.testrun.date - assignment.start_time).seconds / 60) submission.team.count += 1 assignment.done[submission.team.id] = True assignment.solution[ submission.team.id] = submission submission.team.assignments.append(assignment) else: submission.team.score += penalty except Exception as e: log.warn('Error in submission %d: %s' % (submission.id, e)) teams = sorted(sorted(teams, key=lambda team: team.score), key=lambda team: team.count, reverse=True) return dict(page='scores', event=self.event, teams=teams)
def main(): args = parse_args() load_config(args.conf_file) #print model.DBSession.query(model.User.user_name).all() events = Session.query(model.Event).all() print [(i, e.name) for i,e in enumerate(events)]
def index(self): assignment_query = DBSession.query(Assignment) submission_query = DBSession.query(Submission).join(Assignment) team_query = DBSession.query(Team) if self.event_id: assignment_query = assignment_query.filter(Assignment.event_id == self.event_id) submission_query = submission_query.filter(Assignment.event_id == self.event_id) #team_query = team_query.join(team_to_event).filter_by(event_id=self.event_id) teams = team_query.all() for team in teams: team.score = 0 team.count = 0 team.assignments = [] for assignment in assignment_query.all(): assignment.done = {} assignment.solution = {} for submission in (submission for submission in assignment.submissions if submission.result is not None): try: assert submission.team in teams if not assignment.done.get(submission.team.id): if submission.testrun.result: submission.team.score += int((submission.testrun.date - assignment.start_time).seconds / 60) submission.team.count += 1 assignment.done[submission.team.id] = True assignment.solution[submission.team.id] = submission submission.team.assignments.append(assignment) else: submission.team.score += penalty except Exception as e: log.warn('Error in submission %d: %s' % (submission.id, e)) teams = sorted(sorted(teams, key=lambda team: team.score), key=lambda team: team.count, reverse=True) return dict(page='scores', event=self.event, teams=teams)
def _default(self, language_id, *args, **kwargs): try: language_id = int(language_id) language = DBSession.query(Language).filter_by(id=language_id).one() except ValueError: flash('Invalid Language id: %s' % language_id, 'error') abort(400) except NoResultFound: flash('Language %d not found' % language_id, 'error') abort(404) except MultipleResultsFound: # pragma: no cover log.error('Database inconsistency: Language %d', language_id, exc_info=True) flash('An error occurred while accessing Language %d' % language_id, 'error') abort(500) return dict(page='language', language=language, languages=None)
def main(): args = parse_args() load_config(args.conf_file) #print model.DBSession.query(model.User.user_name).all() events = Session.query(model.Event).all() print[(i, e.name) for i, e in enumerate(events)] event_id = raw_input('event_id: ') event = events[int(event_id)] while True: teamname = raw_input("Team-Name: ") if not isinstance(teamname, unicode): teamname = teamname.decode('utf-8') password = getpass("Password: "******"Next Team? [y]") if next != 'y': break
def _default(self, language_id, *args, **kw): try: language_id = int(language_id) language = DBSession.query(Language).filter_by( id=language_id).one() except ValueError: flash('Invalid Language id: %s' % language_id, 'error') abort(400) except NoResultFound: flash('Language %d not found' % language_id, 'error') abort(404) except MultipleResultsFound: log.error('Database inconsistency: Language %d' % language_id, exc_info=True) flash( 'An error occurred while accessing Language %d' % language_id, 'error') abort(500) return dict(page='language', language=language, languages=None)
def test_query_obj(self): """Model objects can be queried""" obj = DBSession.query(self.klass).one() for key, value in self.attrs.iteritems(): assert_equals(getattr(obj, key), value)
def index(self, *args, **kwargs): languages = DBSession.query(Language) return dict(page='language', language=None, languages=languages)
def _default(self, *args, **kw): #TODO: This filtering really needs to be rewritten! filters = dict(zip(args[::2], args[1::2])) real_filters = dict(assignment_id=set(), user_id=set()) if self.assignment: real_filters['assignment_id'] = self.assignment.id else: sheet = None if self.sheet: sheet = self.sheet elif 'sheet' in filters: try: s = int(filters['sheet']) sheet = DBSession.query(Sheet).filter_by(event_id=self.event.id)\ .filter_by(sheet_id=s).one() except NoResultFound: pass if sheet: if 'assignment' in filters: try: a = int(filters['assignment']) a_id = DBSession.query(Assignment.id).filter_by(sheet_id=sheet.id)\ .filter_by(assignment_id=a).one().id real_filters['assignment_id'] |= set((a_id, )) except NoResultFound: pass else: real_filters['assignment_id'] |= set((a.id for a in sheet.assignments)) if self.event: # Dirty, dirty hack to properly filter assignments by event if real_filters['assignment_id']: # Only allow filters by assignments from the set event real_filters['assignment_id'] &= set((a.id for s in self.event.sheets for a in s.assignments)) else: # Simply filter by assignments for this event real_filters['assignment_id'] = set((a.id for s in self.event.sheets for a in s.assignments)) if 'lesson' in filters: try: l = int(filters['lesson']) q1 = DBSession.query(User.id).join(lesson_members).filter_by(lesson_id=l) q2 = DBSession.query(User.id).join(team_members).join(Team).filter_by(lesson_id=l) students = q1.union(q2) real_filters['user_id'] |= set((s.id for s in students)) except SQLAlchemyError: pass if 'team' in filters: try: students = DBSession.query(User.id).join(team_members)\ .filter_by(team_id=int(filters['team'])).join(Team) if self.lesson: students = students.filter_by(lesson_id=self.lesson.id) else: #students = students.filter(Team.lesson_id.in_(l.id for l in self.event.lessons)) students = students.join(Team.lesson).filter_by(event_id=self.event.id) real_filters['user_id'] |= set((s.id for s in students)) except SQLAlchemyError: pass if 'user' in filters: try: user_id = DBSession.query(User.id).filter_by(id=int(filters['user'])).one().id real_filters['user_id'] |= set((user_id, )) except NoResultFound: pass # Cleanup filters for performancy definite_filters = dict() for (k, v) in real_filters.iteritems(): if v: if isinstance(v, (list, tuple, set)) and len(v) == 1: definite_filters[k] = v.pop() else: definite_filters[k] = v c.table = self.table values = self.table_filler.get_value(filters=definite_filters) return dict(page='event', view=None, values=values)
args = parse_args() load_config(args.conf_file) #print model.DBSession.query(model.User.user_name).all() events = Session.query(model.Event).all() print [(i, e.name) for i,e in enumerate(events)] event_id = raw_input('event_id: ') event = events[int(event_id)] fix_languages = raw_input("Allow all languages on all assignments? [y]") if fix_languages == 'y': l = Session.query(model.Language).all() for a in Session.query(model.Assignment).filter_by(event_id=event.id).all(): a = Session.merge(a) a.allowed_languages=l Session.add(a) try: transaction.commit() except IntegrityError: print traceback.format_exc() transaction.abort() fix_visible_tests = raw_input("Fix boolean visible attribute on tests? [y]") if fix_visible_tests == 'y':
def by_user_name(cls, username): """Return the user object whose user name is ``username``.""" return DBSession.query(cls).filter_by(user_name=username).first()
def by_email_address(cls, email): """Return the user object whose email address is ``email``.""" return DBSession.query(cls).filter_by(email_address=email).first()
def index(self): languages = DBSession.query(Language) return dict(page='language', language=None, languages=languages)