def test_oionsite_user_info_page(self): contest = Contest.objects.get() contest.controller_name = \ 'oioioi.oi.controllers.OIOnsiteContestController' contest.save() user = User.objects.get(username='******') p = Participant(contest=contest, user=user) p.save() reg = OIOnsiteRegistration(participant=p, number=3, local_number=5) reg.save() self.client.login(username='******') url = reverse('user_info', kwargs={'contest_id': contest.id, 'user_id': user.id}) response = self.client.get(url) self.assertIn('<h4>OI info:</h4>', response.content)
def handle(self, *args, **options): if len(args) != 2: raise CommandError(_("Expected two arguments")) try: contest = Contest.objects.get(id=args[0]) except Contest.DoesNotExist: raise CommandError(_("Contest %s does not exist") % args[0]) rcontroller = contest.controller.registration_controller() if not issubclass(getattr(rcontroller, 'participant_admin', None), OIOnsiteRegistrationParticipantAdmin): raise CommandError(_("Wrong type of contest")) arg = args[1] if arg.startswith('http://') or arg.startswith('https://'): self.stdout.write(_("Fetching %s...\n") % (arg,)) stream = urllib2.urlopen(arg) else: if not os.path.exists(arg): raise CommandError(_("File not found: ") + arg) stream = open(arg, 'r') reader = csv.reader(stream) header = reader.next() if header != self.COLUMNS: raise CommandError(_("Missing header or invalid columns: " "%(header)s\nExpected: %(expected)s") % { 'header': ', '.join(header), 'expected': ', '.join(self.COLUMNS)}) with transaction.commit_on_success(): ok = True all_count = 0 for row in reader: all_count += 1 for i, column in enumerate(self.COLUMNS): row[i] = row[i].decode('utf8') try: user = User.objects.get(username=row[1]) region = Region.objects.get(short_name=row[2], contest=contest) participant, created = Participant.objects \ .get_or_create(contest=contest, user=user) reg = OIOnsiteRegistration(participant=participant, number=row[0], local_number=row[3], region=region) reg.full_clean() reg.save() except User.DoesNotExist: self.stdout.write(_("Error for user=%(user)s: user does" " not exist\n") % {'user': row[1]}) ok = False except Region.DoesNotExist: self.stdout.write(_( "Error for user=%(user)s: region %(region)s does" " not exist\n") % {'user': row[1], 'region': row[2]}) ok = False except DatabaseError, e: self.stdout.write(_( "DB Error for user=%(user)s: %(message)s\n") % {'user': row[1], 'message': e.message}) ok = False except ValidationError, e: for k, v in e.message_dict.iteritems(): for message in v: if k == '__all__': self.stdout.write(_( "Error for user=%(user)s: %s\n") % (row[1], message)) else: self.stdout.write( _("Error for user=%(user)s, " "field %(field)s: %(message)s\n") % {'user': row[1], 'field': k, 'message': message}) ok = False
def handle(self, *args, **options): if len(args) != 2: raise CommandError(_("Expected two arguments")) try: contest = Contest.objects.get(id=args[0]) except Contest.DoesNotExist: raise CommandError(_("Contest %s does not exist") % args[0]) rcontroller = contest.controller.registration_controller() if not issubclass(getattr(rcontroller, 'participant_admin', None), OIOnsiteRegistrationParticipantAdmin): raise CommandError(_("Wrong type of contest")) arg = args[1] if arg.startswith('http://') or arg.startswith('https://'): self.stdout.write(_("Fetching %s...\n") % (arg, )) stream = urllib2.urlopen(arg) else: if not os.path.exists(arg): raise CommandError(_("File not found: ") + arg) stream = open(arg, 'r') reader = csv.reader(stream) header = reader.next() if header != self.COLUMNS: raise CommandError( _("Missing header or invalid columns: " "%(header)s\nExpected: %(expected)s") % { 'header': ', '.join(header), 'expected': ', '.join(self.COLUMNS) }) with transaction.commit_on_success(): ok = True all_count = 0 for row in reader: all_count += 1 for i, _column in enumerate(self.COLUMNS): row[i] = row[i].decode('utf8') try: user = User.objects.get(username=row[1]) region = Region.objects.get(short_name=row[2], contest=contest) participant, created = Participant.objects \ .get_or_create(contest=contest, user=user) reg = OIOnsiteRegistration(participant=participant, number=row[0], local_number=row[3], region=region) reg.full_clean() reg.save() except User.DoesNotExist: self.stdout.write( _("Error for user=%(user)s: user does" " not exist\n") % {'user': row[1]}) ok = False except Region.DoesNotExist: self.stdout.write( _("Error for user=%(user)s: region %(region)s does" " not exist\n") % { 'user': row[1], 'region': row[2] }) ok = False except DatabaseError, e: self.stdout.write( _("DB Error for user=%(user)s: %(message)s\n") % { 'user': row[1], 'message': e.message }) ok = False except ValidationError, e: for k, v in e.message_dict.iteritems(): for message in v: if k == '__all__': self.stdout.write( _("Error for user=%(user)s: %s\n") % (row[1], message)) else: self.stdout.write( _("Error for user=%(user)s, " "field %(field)s: %(message)s\n") % { 'user': row[1], 'field': k, 'message': message }) ok = False