Exemple #1
0
    def test_onsite_user_info_page(self):
        contest = Contest.objects.get()
        contest.controller_name = \
                'oioioi.participants.tests.OnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()
        reg = OnsiteRegistration(participant=p, number=3, local_number=5)
        reg.save()

        self.assertTrue(self.client.login(username='******'))
        url = reverse('user_info', kwargs={'contest_id': contest.id,
                                           'user_id': user.id})
        response = self.client.get(url)

        self.assertContains(response, '<h4>OI info:</h4>')
Exemple #2
0
    def test_onsite_user_info_page(self):
        contest = Contest.objects.get()
        contest.controller_name = 'oioioi.participants.tests.OnsiteContestController'
        contest.save()
        user = User.objects.get(username='******')

        p = Participant(contest=contest, user=user)
        p.save()
        reg = OnsiteRegistration(participant=p, number=3, local_number=5)
        reg.save()

        self.assertTrue(self.client.login(username='******'))
        url = reverse('user_info',
                      kwargs={
                          'contest_id': contest.id,
                          'user_id': user.id
                      })
        response = self.client.get(url)

        self.assertContains(response, '<h4>OI info:</h4>')
Exemple #3
0
    def handle(self, *args, **options):
        try:
            contest = Contest.objects.get(id=options['contest_id'])
        except Contest.DoesNotExist:
            raise CommandError(
                _("Contest %s does not exist") % options['contest_id'])

        rcontroller = contest.controller.registration_controller()
        print(rcontroller)
        if not issubclass(getattr(rcontroller, 'participant_admin', None),
                          OnsiteRegistrationParticipantAdmin):
            raise CommandError(_("Wrong type of contest"))

        arg = options['filename_or_url']

        if arg.startswith('http://') or arg.startswith('https://'):
            self.stdout.write(_("Fetching %s...\n") % (arg, ))
            stream = six.moves.urllib.request.urlopen(arg)
        else:
            if not os.path.exists(arg):
                raise CommandError(_("File not found: ") + arg)
            stream = open(arg, 'r')

        reader = csv.reader(stream)
        header = next(reader)
        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.atomic():
            ok = True
            all_count = 0
            for row in reader:
                all_count += 1

                for i, _column in enumerate(self.COLUMNS):
                    if not isinstance(row[i], six.text_type):
                        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 = OnsiteRegistration(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 as e:
                    # This assumes that we'll get the message in this
                    # encoding. It is not perfect, but much better than
                    # ascii.
                    message = e.message.decode('utf-8')
                    self.stdout.write(
                        _("DB Error for user=%(user)s: %(message)s\n") % {
                            'user': row[1],
                            'message': message
                        })
                    ok = False
                except ValidationError as e:
                    for k, v in six.iteritems(e.message_dict):
                        for message in v:
                            if k == '__all__':
                                self.stdout.write(
                                    _("Error for user=%(user)s: %(message)s\n")
                                    % {
                                        'user': row[1],
                                        'message': 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

            if ok:
                self.stdout.write(_("Processed %d entries") % (all_count))
            else:
                raise CommandError(
                    _("There were some errors. Database not "
                      "changed.\n"))
Exemple #4
0
    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()
        print rcontroller
        if not issubclass(getattr(rcontroller, 'participant_admin', None),
                          OnsiteRegistrationParticipantAdmin):
            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.atomic():
            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 = OnsiteRegistration(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:
                    # This assumes that we'll get the message in this
                    # encoding. It is not perfect, but much better than
                    # ascii.
                    message = e.message.decode('utf-8')
                    self.stdout.write(_(
                        "DB Error for user=%(user)s: %(message)s\n")
                            % {'user': row[1], 'message': 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: %(message)s\n")
                                    % {'user': row[1], 'message': 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