添加initinstall命令

This commit is contained in:
zema1 2017-11-07 19:04:41 +08:00
parent c16543c830
commit 2d00ed802d
7 changed files with 45 additions and 20 deletions

View File

@ -1,4 +1,3 @@
from django.core.exceptions import MultipleObjectsReturned
from django.db.models import Q from django.db.models import Q
from utils.api import APIView, validate_serializer from utils.api import APIView, validate_serializer

View File

@ -26,7 +26,7 @@ if [ $? -ne 0 ]; then
let "n+=1" let "n+=1"
continue continue
fi fi
python manage.py initadmin python manage.py initinstall
break break
done done

View File

@ -120,3 +120,8 @@ class ContestProblemSafeSerializer(BaseProblemSerializer):
model = Problem model = Problem
exclude = ("test_case_score", "test_case_id", "visible", "is_public", "difficulty", exclude = ("test_case_score", "test_case_id", "visible", "is_public", "difficulty",
"submission_number", "accepted_number", "statistic_info") "submission_number", "accepted_number", "statistic_info")
class ContestProblemMakePublicSerializer(serializers.Serializer):
id = serializers.IntegerField()
display_id = serializers.CharField(max_length=32)

View File

@ -13,7 +13,7 @@ from utils.shortcuts import rand_str, natural_sort_key
from ..models import Problem, ProblemRuleType, ProblemTag from ..models import Problem, ProblemRuleType, ProblemTag
from ..serializers import (CreateContestProblemSerializer, ContestProblemAdminSerializer, from ..serializers import (CreateContestProblemSerializer, ContestProblemAdminSerializer,
CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer, CreateProblemSerializer, EditProblemSerializer, EditContestProblemSerializer,
ProblemAdminSerializer, TestCaseUploadForm) ProblemAdminSerializer, TestCaseUploadForm, ContestProblemMakePublicSerializer)
class TestCaseUploadAPI(CSRFExemptAPIView): class TestCaseUploadAPI(CSRFExemptAPIView):
@ -339,15 +339,19 @@ class ContestProblemAPI(ProblemBase):
class MakeContestProblemPublicAPIView(APIView): class MakeContestProblemPublicAPIView(APIView):
@validate_serializer(ContestProblemMakePublicSerializer)
@problem_permission_required @problem_permission_required
def post(self, request): def post(self, request):
problem_id = request.data.get("problem_id") data = request.data
if not problem_id: display_id = data.get("display_id")
return self.error("problem_id is required") if Problem.objects.filter(_id=display_id, contest_id__isnull=True).exists():
return self.error("Duplicate display ID")
try: try:
problem = Problem.objects.get(id=problem_id) problem = Problem.objects.get(id=data["id"])
except Problem.DoesNotExist: except Problem.DoesNotExist:
return self.error("Problem does not exist") return self.error("Problem does not exist")
if not problem.contest or problem.is_public: if not problem.contest or problem.is_public:
return self.error("Alreay be a public problem") return self.error("Alreay be a public problem")
problem.is_public = True problem.is_public = True
@ -356,6 +360,7 @@ class MakeContestProblemPublicAPIView(APIView):
tags = problem.tags.all() tags = problem.tags.all()
problem.pk = None problem.pk = None
problem.contest = None problem.contest = None
problem._id = display_id
problem.submission_number = problem.accepted_number = 0 problem.submission_number = problem.accepted_number = 0
problem.statistic_info = {} problem.statistic_info = {}
problem.save() problem.save()

View File

@ -4,6 +4,7 @@ from judge.tasks import judge_task
# from judge.dispatcher import JudgeDispatcher # from judge.dispatcher import JudgeDispatcher
from problem.models import Problem, ProblemRuleType from problem.models import Problem, ProblemRuleType
from contest.models import Contest, ContestStatus, ContestRuleType from contest.models import Contest, ContestStatus, ContestRuleType
from options.options import SysOptions
from utils.api import APIView, validate_serializer from utils.api import APIView, validate_serializer
from utils.throttling import TokenBucket, BucketController from utils.throttling import TokenBucket, BucketController
from utils.captcha import Captcha from utils.captcha import Captcha
@ -144,7 +145,7 @@ class SubmissionListAPI(APIView):
except Problem.DoesNotExist: except Problem.DoesNotExist:
return self.error("Problem doesn't exist") return self.error("Problem doesn't exist")
submissions = submissions.filter(problem=problem) submissions = submissions.filter(problem=problem)
if myself and myself == "1": if (myself and myself == "1") and not SysOptions.submission_list_show_all:
submissions = submissions.filter(user_id=request.user.id) submissions = submissions.filter(user_id=request.user.id)
elif username: elif username:
submissions = submissions.filter(username=username) submissions = submissions.filter(username=username)

View File

@ -1,4 +1,3 @@
import os
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from account.models import AdminType, ProblemPermission, User, UserProfile from account.models import AdminType, ProblemPermission, User, UserProfile
@ -10,17 +9,16 @@ class Command(BaseCommand):
try: try:
admin = User.objects.get(username="root") admin = User.objects.get(username="root")
if admin.admin_type == AdminType.SUPER_ADMIN: if admin.admin_type == AdminType.SUPER_ADMIN:
if os.environ.get("OJ_ENV") != "production": self.stdout.write(self.style.WARNING("Super admin user 'root' already exists, "
self.stdout.write(self.style.WARNING("Super admin user 'root' already exists, " "would you like to reset it's password?\n"
"would you like to reset it's password?\n" "Input yes to confirm: "))
"Input yes to confirm: ")) if input() == "yes":
if input() == "yes": rand_password = "rootroot"
rand_password = "rootroot" admin.save()
admin.save() self.stdout.write(self.style.SUCCESS("Successfully created super admin user password.\n"
self.stdout.write(self.style.SUCCESS("Successfully created super admin user password.\n" "Username: root\nPassword: %s\n"
"Username: root\nPassword: %s\n" "Remember to change password and turn on two factors auth "
"Remember to change password and turn on two factors auth " "after installation." % rand_password))
"after installation." % rand_password))
else: else:
self.stdout.write(self.style.SUCCESS("Nothing happened")) self.stdout.write(self.style.SUCCESS("Nothing happened"))
else: else:

View File

@ -0,0 +1,17 @@
import os
from account.models import User
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
if User.objects.exists():
self.stdout.write(self.style.WARNING("Nothing happened\n"))
return
try:
if os.system("python manage.py initadmin") != 0:
self.stdout.write(self.style.ERROR("Failed to execute command 'initadmin'"))
exit(1)
self.stdout.write(self.style.SUCCESS("Done"))
except Exception as e:
self.stdout.write(self.style.ERROR("Failed to initialize, error: " + str(e)))