Esempio n. 1
0
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()
Esempio n. 2
0
    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)
Esempio n. 3
0
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)]
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
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
Esempio n. 7
0
    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)
Esempio n. 8
0
 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)
Esempio n. 9
0
 def index(self, *args, **kwargs):
     languages = DBSession.query(Language)
     return dict(page='language', language=None, languages=languages)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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':
Esempio n. 12
0
File: user.py Progetto: Ayutac/SAUCE
 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()
Esempio n. 13
0
File: user.py Progetto: Ayutac/SAUCE
 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()
Esempio n. 14
0
 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()
Esempio n. 15
0
 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()
Esempio n. 16
0
 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)
Esempio n. 17
0
 def index(self):
     languages = DBSession.query(Language)
     return dict(page='language', language=None, languages=languages)