get what i want
This commit is contained in:
17
Dockerfile
17
Dockerfile
@@ -1,19 +1,9 @@
|
|||||||
FROM alpine:3.19 AS downloader
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
RUN <<EOS
|
|
||||||
set -ex
|
|
||||||
apk add unzip
|
|
||||||
wget https://github.com/QingdaoU/OnlineJudgeFE/releases/download/oj_2.7.5/dist.zip
|
|
||||||
unzip dist.zip
|
|
||||||
rm -f dist.zip
|
|
||||||
EOS
|
|
||||||
|
|
||||||
FROM python:3.12-alpine
|
FROM python:3.12-alpine
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
ARG TARGETVARIANT
|
ARG TARGETVARIANT
|
||||||
|
|
||||||
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
||||||
|
|
||||||
ENV OJ_ENV production
|
ENV OJ_ENV production
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -24,13 +14,14 @@ RUN --mount=type=cache,target=/etc/apk/cache,id=apk-cahce-$TARGETARCH$TARGETVARI
|
|||||||
--mount=type=cache,target=/root/.cache/pip,id=pip-cahce-$TARGETARCH$TARGETVARIANT-final \
|
--mount=type=cache,target=/root/.cache/pip,id=pip-cahce-$TARGETARCH$TARGETVARIANT-final \
|
||||||
<<EOS
|
<<EOS
|
||||||
set -ex
|
set -ex
|
||||||
|
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
apk add gcc libc-dev python3-dev libpq libpq-dev libjpeg-turbo libjpeg-turbo-dev zlib zlib-dev freetype freetype-dev supervisor openssl nginx curl unzip
|
apk add gcc libc-dev python3-dev libpq libpq-dev libjpeg-turbo libjpeg-turbo-dev zlib zlib-dev freetype freetype-dev supervisor openssl nginx curl unzip
|
||||||
pip install -r /app/deploy/requirements.txt
|
pip install -r /app/deploy/requirements.txt
|
||||||
apk del gcc libc-dev python3-dev libpq-dev libjpeg-turbo-dev zlib-dev freetype-dev
|
apk del gcc libc-dev python3-dev libpq-dev libjpeg-turbo-dev zlib-dev freetype-dev
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
COPY ./ /app/
|
COPY ./ /app/
|
||||||
COPY --from=downloader --link /app/dist/ /app/dist/
|
RUN mkdir -p /app/dist/
|
||||||
RUN chmod -R u=rwX,go=rX ./ && chmod +x ./deploy/entrypoint.sh
|
RUN chmod -R u=rwX,go=rX ./ && chmod +x ./deploy/entrypoint.sh
|
||||||
|
|
||||||
HEALTHCHECK --interval=5s CMD [ "/usr/local/bin/python3", "/app/deploy/health_check.py" ]
|
HEALTHCHECK --interval=5s CMD [ "/usr/local/bin/python3", "/app/deploy/health_check.py" ]
|
||||||
|
|||||||
@@ -376,10 +376,13 @@ class SessionManagementAPI(APIView):
|
|||||||
class UserRankAPI(APIView):
|
class UserRankAPI(APIView):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
rule_type = request.GET.get("rule")
|
rule_type = request.GET.get("rule")
|
||||||
|
username = request.GET.get("username")
|
||||||
|
if not username:
|
||||||
|
username = ""
|
||||||
if rule_type not in ContestRuleType.choices():
|
if rule_type not in ContestRuleType.choices():
|
||||||
rule_type = ContestRuleType.ACM
|
rule_type = ContestRuleType.ACM
|
||||||
profiles = UserProfile.objects.filter(user__admin_type=AdminType.REGULAR_USER, user__is_disabled=False) \
|
profiles = UserProfile.objects.filter(user__admin_type=AdminType.REGULAR_USER, user__is_disabled=False,\
|
||||||
.select_related("user")
|
user__username__icontains=username).select_related("user")
|
||||||
if rule_type == ContestRuleType.ACM:
|
if rule_type == ContestRuleType.ACM:
|
||||||
profiles = profiles.filter(submission_number__gt=0).order_by("-accepted_number", "submission_number")
|
profiles = profiles.filter(submission_number__gt=0).order_by("-accepted_number", "submission_number")
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -126,6 +126,19 @@ class ProblemSerializer(BaseProblemSerializer):
|
|||||||
"spj_code", "spj_version", "spj_compile_ok")
|
"spj_code", "spj_version", "spj_compile_ok")
|
||||||
|
|
||||||
|
|
||||||
|
class ProblemListSerializer(BaseProblemSerializer):
|
||||||
|
template = serializers.SerializerMethodField("get_public_template")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Problem
|
||||||
|
exclude = ("test_case_score", "test_case_id", "visible", "is_public",
|
||||||
|
"spj_code", "spj_version", "spj_compile_ok", "description",
|
||||||
|
"input_description", "output_description", "samples", "hint",
|
||||||
|
"source", "spj", "spj_language", "time_limit", "memory_limit",
|
||||||
|
"io_mode", "create_time", "languages", "last_update_time",
|
||||||
|
"total_score", "statistic_info", "share_submission")
|
||||||
|
|
||||||
|
|
||||||
class ProblemSafeSerializer(BaseProblemSerializer):
|
class ProblemSafeSerializer(BaseProblemSerializer):
|
||||||
template = serializers.SerializerMethodField("get_public_template")
|
template = serializers.SerializerMethodField("get_public_template")
|
||||||
|
|
||||||
@@ -203,7 +216,7 @@ class AddContestProblemSerializer(serializers.Serializer):
|
|||||||
display_id = serializers.CharField()
|
display_id = serializers.CharField()
|
||||||
|
|
||||||
|
|
||||||
class ExportProblemRequestSerialzier(serializers.Serializer):
|
class ExportProblemRequestSerializer(serializers.Serializer):
|
||||||
problem_id = serializers.ListField(child=serializers.IntegerField(), allow_empty=False)
|
problem_id = serializers.ListField(child=serializers.IntegerField(), allow_empty=False)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from ..serializers import (CreateContestProblemSerializer, CompileSPJSerializer,
|
|||||||
CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer,
|
CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer,
|
||||||
ProblemAdminSerializer, TestCaseUploadForm, ContestProblemMakePublicSerializer,
|
ProblemAdminSerializer, TestCaseUploadForm, ContestProblemMakePublicSerializer,
|
||||||
AddContestProblemSerializer, ExportProblemSerializer,
|
AddContestProblemSerializer, ExportProblemSerializer,
|
||||||
ExportProblemRequestSerialzier, UploadProblemForm, ImportProblemSerializer,
|
ExportProblemRequestSerializer, UploadProblemForm, ImportProblemSerializer,
|
||||||
FPSProblemSerializer)
|
FPSProblemSerializer)
|
||||||
from ..utils import TEMPLATE_BASE, build_problem_template
|
from ..utils import TEMPLATE_BASE, build_problem_template
|
||||||
|
|
||||||
@@ -527,7 +527,7 @@ class ExportProblemAPI(APIView):
|
|||||||
arcname=f"{index}/testcase/{v['output_name']}",
|
arcname=f"{index}/testcase/{v['output_name']}",
|
||||||
compress_type=compression)
|
compress_type=compression)
|
||||||
|
|
||||||
@validate_serializer(ExportProblemRequestSerialzier)
|
@validate_serializer(ExportProblemRequestSerializer)
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
problems = Problem.objects.filter(id__in=request.data["problem_id"])
|
problems = Problem.objects.filter(id__in=request.data["problem_id"])
|
||||||
for problem in problems:
|
for problem in problems:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from django.db.models import Q, Count
|
|||||||
from utils.api import APIView
|
from utils.api import APIView
|
||||||
from account.decorators import check_contest_permission
|
from account.decorators import check_contest_permission
|
||||||
from ..models import ProblemTag, Problem, ProblemRuleType
|
from ..models import ProblemTag, Problem, ProblemRuleType
|
||||||
from ..serializers import ProblemSerializer, TagSerializer, ProblemSafeSerializer
|
from ..serializers import ProblemSerializer, TagSerializer, ProblemSafeSerializer, ProblemListSerializer
|
||||||
from contest.models import ContestRuleType
|
from contest.models import ContestRuleType
|
||||||
|
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ class ProblemAPI(APIView):
|
|||||||
if not limit:
|
if not limit:
|
||||||
return self.error("Limit is needed")
|
return self.error("Limit is needed")
|
||||||
|
|
||||||
problems = Problem.objects.select_related("created_by").filter(contest_id__isnull=True, visible=True)
|
problems = Problem.objects.select_related("created_by").filter(contest_id__isnull=True, visible=True).order_by("-create_time")
|
||||||
# 按照标签筛选
|
# 按照标签筛选
|
||||||
tag_text = request.GET.get("tag")
|
tag_text = request.GET.get("tag")
|
||||||
if tag_text:
|
if tag_text:
|
||||||
@@ -78,7 +78,7 @@ class ProblemAPI(APIView):
|
|||||||
if difficulty:
|
if difficulty:
|
||||||
problems = problems.filter(difficulty=difficulty)
|
problems = problems.filter(difficulty=difficulty)
|
||||||
# 根据profile 为做过的题目添加标记
|
# 根据profile 为做过的题目添加标记
|
||||||
data = self.paginate_data(request, problems, ProblemSerializer)
|
data = self.paginate_data(request, problems, ProblemListSerializer)
|
||||||
self._add_problem_status(request, data)
|
self._add_problem_status(request, data)
|
||||||
return self.success(data)
|
return self.success(data)
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ class ContestProblemAPI(APIView):
|
|||||||
|
|
||||||
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
|
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
|
||||||
if self.contest.problem_details_permission(request.user):
|
if self.contest.problem_details_permission(request.user):
|
||||||
data = ProblemSerializer(contest_problems, many=True).data
|
data = ProblemListSerializer(contest_problems, many=True).data
|
||||||
self._add_problem_status(request, data)
|
self._add_problem_status(request, data)
|
||||||
else:
|
else:
|
||||||
data = ProblemSafeSerializer(contest_problems, many=True).data
|
data = ProblemSafeSerializer(contest_problems, many=True).data
|
||||||
|
|||||||
Reference in New Issue
Block a user