Ejemplo n.º 1
0
 def get(self, request, *args, **kwargs):
     try:
         contests = Contest.objects.all().order_by('-created_time')[:500]
         serializer = ContestListSerializer(contests, many=True)
         return Response(res_format(serializer.data), status=status.HTTP_200_OK)
     except DatabaseError:
         return Response(res_format('System error', status=Message.ERROR))
Ejemplo n.º 2
0
 def get(self, request, *args, **kwargs):
     if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
         return Response(res_format('Permission Denied',
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     support = Support.objects.all()
     return Response(res_format(SupportSerializer(support, many=True).data))
Ejemplo n.º 3
0
 def get(self, request, remote_oj, remote_id, **kwargs):
     remote_oj = Controller.get_real_remote_oj(remote_oj)
     if not Controller.is_support(remote_oj):
         return Response(res_format('remote_oj not valid',
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     if not remote_id.isalnum():
         return Response(res_format('remote_id not valid',
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     try:
         problem = Problem.objects.get(remote_oj=remote_oj,
                                       remote_id=remote_id)
         if problem.request_status in [
                 Spider_Problem.Status.STATUS_SUBMIT_FAILED.value,
                 Spider_Problem.Status.STATUS_PROBLEM_NOT_EXIST.value,
                 Spider_Problem.Status.STATUS_NO_ACCOUNT.value,
                 Spider_Problem.Status.STATUS_PARSE_ERROR.value
         ]:
             get_problem_task.delay(problem.id)
     except ObjectDoesNotExist:
         try:
             problem = Problem(
                 remote_oj=remote_oj,
                 remote_id=remote_id,
                 request_status=Spider_Problem.Status.STATUS_PENDING.value)
             problem.save()
             get_problem_task.delay(problem.id)
         except IntegrityError:
             return Response(res_format('System error', Message.ERROR),
                             status=status.HTTP_200_OK)
     return Response(res_format(ProblemSerializer(problem).data),
                     status=status.HTTP_200_OK)
Ejemplo n.º 4
0
 def get(self, request, *args, **kwargs):
     if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
         return Response(res_format('Permission Denied',
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     accounts = Account.objects.all().order_by('-id')
     return Response(res_format(
         AccountSerializer(accounts, many=True).data))
Ejemplo n.º 5
0
 def get(self, request, **kwargs):
     if request.user is None or request.user.is_authenticated is False:
         return Response(res_format('Login required', status=Message.ERROR))
     try:
         user = UserProfile.objects.get(username=str(request.user))
         return Response(res_format(user.hook))
     except DatabaseError:
         return Response(res_format('System error', status=Message.ERROR))
Ejemplo n.º 6
0
 def get(self, request, **kwargs):
     if request.user and request.user.is_authenticated:
         user_profile = UserProfile.objects.get(username=request.user)
         serializer = UserProfileSerializer(user_profile)
         res_data = serializer.data
         res_data['email'] = hashlib.md5(
             str(res_data['email']).encode('utf-8')).hexdigest()
         return Response(res_format(res_data, status=Message.SUCCESS))
     return Response(res_format('Login required', status=Message.ERROR))
Ejemplo n.º 7
0
 def post(self, request, **kwargs):
     register = RegisterSerializer(data=request.data)
     if register.is_valid():
         if register.save():
             return Response(res_format('Register success'))
         else:
             return Response(
                 res_format('System error', status=Message.ERROR))
     return Response(res_format(register.errors, status=Message.ERROR))
Ejemplo n.º 8
0
 def post(self, request, **kwargs):
     if request.user is None or request.user.is_authenticated is False:
         return Response(res_format('Login required', status=Message.ERROR))
     serializer = HookSerializer(data=request.data)
     if serializer.is_valid():
         if serializer.save(str(request.user)):
             return Response(res_format('Update hook url success'))
         return Response(res_format('System error', status=Message.ERROR))
     return Response(res_format('Post data not valid',
                                status=Message.ERROR))
Ejemplo n.º 9
0
 def get(self, request, *args, **kwargs):
     if request.user and request.user.is_authenticated:
         try:
             user = UserProfile.objects.get(username=request.user)
             return Response(
                 res_format(UserProfileSerializer(user).data,
                            status=Message.SUCCESS))
         except:
             return Response(res_format('System Error', Message.ERROR))
     return Response(res_format('Login required', Message.ERROR))
Ejemplo n.º 10
0
 def get(self, request, submission_id, *args, **kwargs):
     try:
         submission = Submission.objects.get(id=submission_id)
         if submission.user == str(request.user):
             return Response(res_format(VerdictSerializer(submission).data), status=status.HTTP_200_OK)
         else:
             res_data = VerdictSerializer(submission).data
             res_data['code'] = None
             return Response(res_format(res_data), status=status.HTTP_200_OK)
     except ObjectDoesNotExist:
         return Response(res_format('submission not exist', status=Message.ERROR), status=status.HTTP_200_OK)
Ejemplo n.º 11
0
 def post(self,request,**kwargs):
     serializers = LoginSerializer(data=request.data)
     if serializers.is_valid():
         user = serializers.login(request)
         if user:
             return Response(res_format(UserProfileSerializers(user).data,status=Message.SUCCESS),
                             status=status.HTTP_200_OK)
         else:
             return Response(res_format('Incorrect username or password',status=Message.ERROR))
     print('serializers.errors')
     return Response(res_format(serializers.errors,Message.ERROR))
Ejemplo n.º 12
0
 def get(self, request, *args, **kwargs):
     try:
         support = list({
             item.oj_name
             for item in Support.objects.filter(oj_enable=True)
         })
         support.sort()
         return Response(res_format(support), status=status.HTTP_200_OK)
     except DatabaseError:
         return Response(res_format('System error', status=Message.ERROR),
                         status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Ejemplo n.º 13
0
 def get(self, request, *args, **kwargs):
     try:
         if request.GET.get('user'):
             submissions = Submission.objects.filter(user=request.GET.get('user')).order_by('-create_time')[:500]
             return Response(res_format(SubmissionListSerializer(submissions, many=True).data),
                             status=status.HTTP_200_OK)
         submissions = Submission.objects.all().order_by('-create_time')[:500]
         return Response(res_format(SubmissionListSerializer(submissions, many=True).data),
                         status=status.HTTP_200_OK)
     except DatabaseError:
         return Response(res_format('System error', status=Message.ERROR),
                         status=status.HTTP_200_OK)
Ejemplo n.º 14
0
    def get(self, request, problem_id, param=None, **kwargs):
        try:
            problem = Problem.objects.get(id=problem_id)
            if param == 'html':
                return HttpResponse(problem.html)
            return Response(res_format(ProblemSerializer(problem).data),
                            status=status.HTTP_200_OK)

        except ObjectDoesNotExist:
            return Response(res_format('problem not exist',
                                       status=Message.ERROR),
                            status=status.HTTP_200_OK)
Ejemplo n.º 15
0
 def post(self, request, *args, **kwargs):
     if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
         return Response(res_format('Admin required', status=Message.ERROR),
                         status=status.HTTP_200_OK)
     try:
         accounts = Account.objects.all()
         for remote_oj in {account.oj_name for account in accounts}:
             update_language_task.delay(remote_oj)
         return Response(res_format('Fresh successfully'),
                         status=status.HTTP_200_OK)
     except DatabaseError:
         return Response(res_format('Fresh error', status=Message.ERROR),
                         status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Ejemplo n.º 16
0
    def post(self, request, *args, **kwargs):
        if request.user is None or request.user.is_authenticated is False:
            return Response(res_format('Login required', status=Message.ERROR), status=status.HTTP_200_OK)
        if request.user.is_admin is False:
            return Response(res_format('Admin required', status=Message.ERROR), status=status.HTTP_200_OK)

        serializer = ContestSerializer(data=request.data)
        if serializer.is_valid():
            contest = serializer.save(request.user)
            if contest:
                return Response(res_format(contest.id), status=status.HTTP_200_OK)
            return Response(res_format('System error', status=Message.ERROR), status=status.HTTP_200_OK)
        return Response(res_format(serializer.errors, status=Message.ERROR), status=status.HTTP_200_OK)
Ejemplo n.º 17
0
    def post(self, request, *args, **kwargs):
        if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
            return Response(res_format('Permission Denied',
                                       status=Message.ERROR),
                            status=status.HTTP_200_OK)
        request_type = request.GET.get('type')
        if request_type == 'enable':
            serializer = UpdateEnableSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(res_format('success'))
            else:
                print(serializer.errors)
                return Response(res_format('error', Message.ERROR))
        elif request_type == 'reuse':
            serializer = UpdateReuseSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(res_format('success'))
            else:
                print(serializer.errors)
                return Response(res_format('error', Message.ERROR))

        elif request_type == 'fresh':
            platform = request.GET.get('platform')
            if platform:
                update_oj_status.delay(platform)
            else:
                try:
                    for item in Core.get_supports():
                        if not Support.objects.filter(oj_name=item):
                            Support.objects.create(oj_name=item).save()
                        Support.objects.filter(oj_name=item).update(
                            oj_status='PENDING')
                        update_oj_status.delay(item)
                except Exception as e:
                    print(e)
                    return Response(res_format('error', Message.ERROR))
                return Response(res_format('success'))
        elif request_type == 'proxies':
            serializer = UpdateProxiesSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(res_format('success'))
            else:
                return Response(res_format('error', Message.ERROR))
        support = list(
            {item.oj_name
             for item in Support.objects.filter(oj_enable=True)})
        support.sort()
        return Response(res_format(support), status=status.HTTP_200_OK)
Ejemplo n.º 18
0
 def post(self, request, *args, **kwargs):
     if request.user and request.user.is_authenticated:
         serializer = ChangePasswordSerializer(data=request.data)
         if serializer.is_valid():
             user = serializer.save()
             if user is not None:
                 return Response(
                     res_format(UserProfileSerializer(user).data,
                                status=Message.SUCCESS))
             return Response(
                 res_format('Change password failed', status=Message.ERROR))
         return Response(res_format(serializer.errors,
                                    status=Message.ERROR))
     return Response(res_format('Login required', status=Message.ERROR))
Ejemplo n.º 19
0
 def post(self, request, **kwargs):
     if request.user is None or request.user.is_authenticated is False:
         return Response(res_format('Login required', status=Message.ERROR))
     serializer = HookSerializer(data=request.data)
     if serializer.is_valid():
         try:
             url = serializer.validated_data['hook']
             UserProfile.objects.filter(username=request.user).update(
                 hook=url)
             return Response(res_format('success'))
         except:
             pass
         return Response(res_format('System error', status=Message.ERROR))
     return Response(res_format('Post data not valid',
                                status=Message.ERROR))
Ejemplo n.º 20
0
 def get(self, request, raw_oj_name, *args, **kwargs):
     remote_oj = control.Controller.get_real_remote_oj(raw_oj_name)
     if control.Controller.is_support(remote_oj):
         try:
             languages = Language.objects.filter(oj_name=remote_oj)
             return Response(res_format(
                 LanguagesSerializer(languages, many=True).data),
                             status=status.HTTP_200_OK)
         except DatabaseError:
             return Response(res_format('System error',
                                        status=Message.ERROR),
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     return Response(res_format('we do not support it',
                                status=Message.ERROR),
                     status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 21
0
 def delete(self, request, *args, **kwargs):
     if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
         return Response(res_format('Permission Denied',
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     platform = request.GET.get('platform')
     username = request.GET.get('username')
     if platform and username:
         try:
             Account.objects.filter(oj_name=platform,
                                    oj_username=username).delete()
             return Response(res_format('success'))
         except:
             pass
     return Response(res_format('error', Message.ERROR))
Ejemplo n.º 22
0
 def post(self, request, submission_id, *args, **kwargs):
     try:
         submission = Submission.objects.get(id=submission_id)
         if submission.status == config.Result.Status.STATUS_SPIDER_ERROR.value:
             submission.status = config.Result.Status.STATUS_PENDING.value
             submission.save()
             submit_task.delay(submission_id)
             return Response(res_format('rejudge submit success'), status=status.HTTP_200_OK)
         elif submission.status == config.Result.Status.STATUS_RESULT_SUCCESS.value and \
                 submission.verdict == config.Result.Verdict.VERDICT_RUNNING.value:
             reload_result_task.delay(submission.id)
             return Response(res_format('reload submit success'), status=status.HTTP_200_OK)
         return Response(res_format('nothing has done'), status=status.HTTP_200_OK)
     except ObjectDoesNotExist:
         return Response(res_format('system error', status=Message.ERROR), status=status.HTTP_200_OK)
     except DatabaseError:
         return Response(res_format('reload failed', status=Message.ERROR), status=status.HTTP_200_OK)
Ejemplo n.º 23
0
 def post(self, request, *args, **kwargs):
     if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
         return Response(res_format('Permission Denied',
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     serializer = AccountSerializer(data=request.data)
     if serializer.is_valid():
         if serializer.save():
             update_language_task.delay(
                 serializer.validated_data['oj_name'])
             return Response(res_format('success'),
                             status=status.HTTP_200_OK)
         else:
             return Response(res_format('error', status=Message.ERROR),
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     else:
         return Response(res_format(serializer.errors,
                                    status=Message.ERROR),
                         status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 24
0
    def post(self, request, *args, **kwargs):
        if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
            return Response(res_format('Permission Denied',
                                       status=Message.ERROR),
                            status=status.HTTP_200_OK)
        serializer = AccountSerializer(data=request.data)
        if serializer.is_valid():
            if serializer.save():
                return Response(res_format('operation success',
                                           status=Message.SUCCESS),
                                status=status.HTTP_200_OK)
            else:
                return Response(res_format('operation failed',
                                           status=Message.ERROR),
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)

        else:
            return Response(res_format(serializer.errors,
                                       status=Message.ERROR),
                            status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 25
0
 def get(self, request, *args, **kwargs):
     today = datetime.fromisoformat(
         datetime_safe.datetime.today().strftime("%Y-%m-%d"))
     counts = []
     for offset in range(6, -1, -1):
         counts.append(
             Submission.objects.filter(create_time__gte=today -
                                       timedelta(days=offset),
                                       create_time__lt=today -
                                       timedelta(days=offset - 1)).count())
     return Response(res_format(counts), status=status.HTTP_200_OK)
Ejemplo n.º 26
0
 def get(self, request, remote_oj, remote_id, **kwargs):
     last_submit_time = request.session.get('last_refresh_time', None)
     if last_submit_time and (
             datetime.now() -
             datetime.fromtimestamp(last_submit_time)).seconds < 5:
         return Response(res_format("Cannot  Refresh within five seconds",
                                    status=Message.ERROR),
                         status=status.HTTP_200_OK)
     request.session['last_refresh_time'] = datetime.now().timestamp()
     try:
         problem = Problem.objects.get(remote_oj=remote_oj,
                                       remote_id=remote_id)
         problem.request_status = Spider_Problem.Status.STATUS_PENDING.value
         problem.save()
         get_problem_task.delay(problem.id)
         return Response(res_format(ProblemSerializer(problem).data),
                         status=status.HTTP_200_OK)
     except ObjectDoesNotExist:
         return Response(res_format('System error', Message.ERROR),
                         status=status.HTTP_200_OK)
Ejemplo n.º 27
0
    def get(self, request, remote_oj, remote_id, **kwargs):
        if remote_oj not in list({item.oj_name for item in Support.objects.filter(oj_enable=True)}):
            return Response(
                res_format('remote_oj not valid', status=Message.ERROR),
                status=status.HTTP_200_OK)
        if not remote_id.isalnum():
            return Response(
                res_format('remote_id not valid', status=Message.ERROR),
                status=status.HTTP_200_OK)
        if request.GET.get('fresh') and request.GET.get('html'):
            return Response(res_format('\"fresh\" and \"html\" cannot exist together', Message.ERROR),
                            status=status.HTTP_200_OK)
        if request.GET.get('fresh'):
            last_submit_time = request.session.get('last_fresh_time', None)
            if last_submit_time and (datetime.now() - datetime.fromtimestamp(last_submit_time)).seconds < 5:
                return Response(res_format("Cannot fresh within five seconds", status=Message.ERROR),
                                status=status.HTTP_200_OK)
            request.session['last_fresh_time'] = datetime.now().timestamp()
            try:
                problem = Problem.objects.get(remote_oj=remote_oj, remote_id=remote_id)
                problem.request_status = config.Problem.Status.STATUS_PENDING.value
                problem.save()
                get_problem_task.delay(problem.id)
                return Response(res_format(ProblemSerializer(problem).data), status=status.HTTP_200_OK)
            except ObjectDoesNotExist:
                return Response(res_format('System error', Message.ERROR), status=status.HTTP_200_OK)

        if request.GET.get('html'):
            try:
                problem = Problem.objects.get(remote_oj=remote_oj, remote_id=remote_id)
                return HttpResponse(problem.html)
            except:
                return Response(res_format('', status=Message.ERROR))
        try:
            problem = Problem.objects.get(remote_oj=remote_oj, remote_id=remote_id)
            if problem.request_status == config.Problem.Status.STATUS_RETRYABLE.value:
                get_problem_task.delay(problem.id)
        except ObjectDoesNotExist:
            try:
                problem = Problem(remote_oj=remote_oj, remote_id=remote_id,
                                  request_status=config.Problem.Status.STATUS_PENDING.value)
                problem.save()
                get_problem_task.delay(problem.id)
            except IntegrityError:
                return Response(res_format('System error', Message.ERROR), status=status.HTTP_200_OK)
        return Response(res_format(ProblemSerializer(problem).data), status=status.HTTP_200_OK)
Ejemplo n.º 28
0
 def get(self, request, *args, **kwargs):
     problems = Problem.objects.filter(
         Q(remote_oj__in=[item.oj_name for item in Support.objects.filter(oj_enable=True)]) & Q(
             html__isnull=False)).order_by('-update_time')
     if request.GET.get('remote_oj'):
         remote_oj = request.GET.get('remote_oj')
         problems = problems.filter(remote_oj=remote_oj)
     if request.GET.get('remote_id'):
         problems = problems.filter(remote_id__contains=request.GET.get('remote_id'))
     if request.GET.get('title'):
         problems = problems.filter(title__contains=request.GET.get('title'))
     return Response(res_format(ProblemListSerializer(problems, many=True).data), status=status.HTTP_200_OK)
Ejemplo n.º 29
0
 def post(self, request, submission_id, *args, **kwargs):
     if request.user is None or request.user.is_authenticated is False:
         return Response(res_format('Login required', status=Message.ERROR),
                         status=status.HTTP_200_OK)
     try:
         submission = Submission.objects.get(id=submission_id)
         if submission.status in {
                 config.Result.Status.STATUS_NO_ACCOUNT.value,
                 config.Result.Status.STATUS_NETWORK_ERROR.value
         }:
             submission.status = config.Result.Status.STATUS_PENDING.value
             submission.save()
             submit_task.delay(submission_id)
             return Response(res_format('rejudge submit success'),
                             status=status.HTTP_200_OK)
     except ObjectDoesNotExist:
         return Response(res_format('System error', status=Message.ERROR),
                         status=status.HTTP_200_OK)
     except DatabaseError:
         return Response(res_format('rejudge failed', status=Message.ERROR),
                         status=status.HTTP_200_OK)
Ejemplo n.º 30
0
 def get(self, request, *args, **kwargs):
     remote_oj = request.GET.get('platform')
     if remote_oj is None:
         if request.user is None or request.user.is_authenticated is False or request.user.is_admin is False:
             return Response(res_format('Admin required',
                                        status=Message.ERROR),
                             status=status.HTTP_200_OK)
         try:
             languages = Language.objects.all()
             return Response(res_format(
                 LanguagesSerializer(languages, many=True).data),
                             status=status.HTTP_200_OK)
         except DatabaseError:
             return Response(res_format('System error',
                                        status=Message.ERROR),
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     if Core.is_support(remote_oj):
         try:
             languages = Language.objects.filter(oj_name=remote_oj)
             return Response(res_format(
                 LanguagesSerializer(languages, many=True).data),
                             status=status.HTTP_200_OK)
         except DatabaseError:
             return Response(res_format('System error',
                                        status=Message.ERROR),
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     return Response(res_format('we do not support it',
                                status=Message.ERROR),
                     status=status.HTTP_400_BAD_REQUEST)