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
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 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)
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)
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
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)
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'))
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
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'))
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'))
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'))
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)
#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