Esempio n. 1
0
    def test_enroll_event(self):
        """Enrolling for Event"""
        demo = self.configure_event('demo', 'event', None)

        response = self.app.get('/events/demo/enroll', extra_environ=self.extra_environ)
        response = response.follow()
        response.mustcontain('Enrolled for Event', 'Programming 101 - Demo')
        user = DBSession.merge(self.user)
        demo = DBSession.merge(demo)
        assert user in demo.members
        assert demo in user._events
Esempio n. 2
0
    def test_enroll_event(self):
        """Enrolling for Event"""
        demo = self.configure_event('demo', 'event', None)

        response = self.app.get('/events/demo/enroll',
                                extra_environ=self.extra_environ)
        response = response.follow()
        response.mustcontain('Enrolled for Event', 'Programming 101 - Demo')
        user = DBSession.merge(self.user)
        demo = DBSession.merge(demo)
        assert user in demo.members
        assert demo in user._events
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)]

    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. 4
0
 def test_integration_2(self):
     test = Test(
         assignment_id=42,
         output_data=u'42 Bananas\n4711 Strawberrys\n1337 Apples\n',
         splitlines=True, sort=True,
     )
     DBSession.add(test)
     DBSession.flush()
     test = DBSession.merge(test)
     d = u'#Result:\n4711 Strawberrys\n42 Bananas\n1337 Apples\n'
     result, _, expected, output, _ = test.validate(d)
     converted_output = test.unconvert(test.convert(d))
     assert result is True, (expected, output, converted_output)
Esempio n. 5
0
 def test_integration_1(self):
     test = Test(
         assignment_id=42,
         output_data=u'1.0,2.0,3.0\n4.0,5.0,6.0\n7.0,8.0,9.0\n',
         separator=',', split=True, splitlines=True,
         parse_float=True, float_precision=1,
     )
     DBSession.add(test)
     DBSession.flush()
     test = DBSession.merge(test)
     d = u'#Result:\n1,2,3\n4,5,6\n,7,8,9\n'
     result, _, expected, output, _ = test.validate(d)
     converted_output = test.unconvert(test.convert(d))
     assert result is True, (expected, output, converted_output)
Esempio n. 6
0
    def test_enroll_lesson(self):
        """Enrolling for Lesson"""
        demo = self.configure_event('demo', 'lesson', None)

        response = self.app.get('/events/demo/enroll', extra_environ=self.extra_environ)
        response.mustcontain('Lesson A/B', 'Lesson C/D', 'Lesson E')

        response.form.set('lesson', 1)
        response = response.form.submit(extra_environ=self.extra_environ)

        user = DBSession.merge(self.user)
        lesson = Lesson.query.filter_by(id=1).one()
        assert user in lesson.members
        assert lesson in user._lessons
Esempio n. 7
0
    def test_enroll_lesson(self):
        """Enrolling for Lesson"""
        demo = self.configure_event('demo', 'lesson', None)

        response = self.app.get('/events/demo/enroll',
                                extra_environ=self.extra_environ)
        response.mustcontain('Lesson A/B', 'Lesson C/D', 'Lesson E')

        response.form.set('lesson', 1)
        response = response.form.submit(extra_environ=self.extra_environ)

        user = DBSession.merge(self.user)
        lesson = Lesson.query.filter_by(id=1).one()
        assert user in lesson.members
        assert lesson in user._lessons
Esempio n. 8
0
def _test_attr(args):
    kwargs, expected_output_data, good_output_data = args[0:3]
    bad_output_data = args[4:]
    test = Test(assignment_id=42, output_data=expected_output_data, **kwargs)
    DBSession.add(test)
    DBSession.flush()
    test = DBSession.merge(test)

    for d in good_output_data:
        result, _, expected, output, _ = test.validate(d)
        converted_output = test.unconvert(test.convert(d))
        assert result is True, (expected, output, converted_output)
    for d in bad_output_data:
        result, _, expected, output, _ = test.validate(d)
        converted_output = test.unconvert(test.convert(d))
        assert result is False, (expected, output, converted_output)
Esempio n. 9
0
    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:
            DBSession.rollback()
            log.warning('Error modifying profile of User %r',
                        user,
                        exc_info=True)
            flash('Error modifying profile', 'error')
        except:
            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'))
Esempio n. 10
0
    def test_enroll_team_new(self):
        """Enrolling for New Team"""
        demo = self.configure_event('demo', 'team_new', None)

        response = self.app.get('/events/demo/enroll', extra_environ=self.extra_environ)
        response.mustcontain('Lesson A/B', 'Lesson C/D', 'Lesson E')

        response.form.set('lesson', 1)
        response = response.form.submit(extra_environ=self.extra_environ)

        response.mustcontain('Lesson A/B', 'New Team', 'Team A', 'Team B')

        response.form.set('team', '__new__')
        response = response.form.submit(extra_environ=self.extra_environ)

        user = DBSession.merge(self.user)
        team = Team.query.filter(Team.name.like('New Team %%')).one()
        assert user in team.members
        assert team in user.teams
Esempio n. 11
0
    def test_enroll_team_new(self):
        """Enrolling for New Team"""
        demo = self.configure_event('demo', 'team_new', None)

        response = self.app.get('/events/demo/enroll',
                                extra_environ=self.extra_environ)
        response.mustcontain('Lesson A/B', 'Lesson C/D', 'Lesson E')

        response.form.set('lesson', 1)
        response = response.form.submit(extra_environ=self.extra_environ)

        response.mustcontain('Lesson A/B', 'New Team', 'Team A', 'Team B')

        response.form.set('team', '__new__')
        response = response.form.submit(extra_environ=self.extra_environ)

        user = DBSession.merge(self.user)
        team = Team.query.filter(Team.name.like('New Team %%')).one()
        assert user in team.members
        assert team in user.teams
Esempio n. 12
0
    def clone(self):
        s = Submission(
            user=request.user,
            assignment=self.submission.assignment,
            filename=self.submission.filename,
            source=self.submission.source,
            language=self.submission.language,
        )

        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'))
Esempio n. 13
0
File: user.py Progetto: Ayutac/SAUCE
    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:
            DBSession.rollback()
            log.warning('Error modifying profile of User %r', user, exc_info=True)
            flash('Error modifying profile', 'error')
        except:
            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'))
Esempio n. 14
0
    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?
        )

        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'))
Esempio n. 15
0
 def configure_event(self, url, enroll, password):
     event = Event.query.filter_by(_url=url).one()
     event.enroll = enroll
     event.password = password
     transaction.commit()
     return DBSession.merge(event)
Esempio n. 16
0
    #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
Esempio n. 17
0
 def configure_event(self, url, enroll, password):
     event = Event.query.filter_by(_url=url).one()
     event.enroll = enroll
     event.password = password
     transaction.commit()
     return DBSession.merge(event)