diff --git a/judge/__init__.py b/judge/__init__.py index e69de29..9bad579 100644 --- a/judge/__init__.py +++ b/judge/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/judge/controller/README.md b/judge/controller/README.md new file mode 100644 index 0000000..9dd5603 --- /dev/null +++ b/judge/controller/README.md @@ -0,0 +1 @@ +celery -A judge.controller worker -l DEBUG \ No newline at end of file diff --git a/judge/controller/__init__.py b/judge/controller/__init__.py new file mode 100644 index 0000000..9bad579 --- /dev/null +++ b/judge/controller/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/judge/controller/celery.py b/judge/controller/celery.py new file mode 100644 index 0000000..8e776e2 --- /dev/null +++ b/judge/controller/celery.py @@ -0,0 +1,5 @@ +# coding=utf-8 +from __future__ import absolute_import +from celery import Celery + +app = Celery("judge", broker="redis://localhost:6379/0", include=["judge.controller.tasks"]) \ No newline at end of file diff --git a/judge/controller/tasks.py b/judge/controller/tasks.py new file mode 100644 index 0000000..f0c32bc --- /dev/null +++ b/judge/controller/tasks.py @@ -0,0 +1,8 @@ +# coding=utf-8 +from __future__ import absolute_import +from judge.controller.celery import app + + +@app.task +def judge(source_code, language, test_case_id): + print source_code, language, test_case_id \ No newline at end of file diff --git a/judge/judger/__init__.py b/judge/judger/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/judge/client.py b/judge/judger/client.py similarity index 100% rename from judge/client.py rename to judge/judger/client.py diff --git a/judge/compiler.py b/judge/judger/compiler.py similarity index 100% rename from judge/compiler.py rename to judge/judger/compiler.py diff --git a/judge/judge_exceptions.py b/judge/judger/judge_exceptions.py similarity index 100% rename from judge/judge_exceptions.py rename to judge/judger/judge_exceptions.py diff --git a/judge/language.py b/judge/judger/language.py similarity index 100% rename from judge/language.py rename to judge/judger/language.py diff --git a/judge/result.py b/judge/judger/result.py similarity index 100% rename from judge/result.py rename to judge/judger/result.py diff --git a/judge/settings.py b/judge/judger/settings.py similarity index 100% rename from judge/settings.py rename to judge/judger/settings.py diff --git a/judge/utils.py b/judge/judger/utils.py similarity index 100% rename from judge/utils.py rename to judge/judger/utils.py diff --git a/oj/urls.py b/oj/urls.py index 1431dc6..fbe7856 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -11,7 +11,7 @@ from group.views import GroupAdminAPIView from admin.views import AdminTemplateView from problem.views import ProblemAdminAPIView -from problem.views import TestCaseUploadAPIView +from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView urlpatterns = [ @@ -41,4 +41,5 @@ urlpatterns = [ url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"), url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"), url(r'^api/admin/test_case_upload/$', TestCaseUploadAPIView.as_view(), name="test_case_upload_api"), + url(r'^api/admin/tag/$', ProblemTagAdminAPIView.as_view(), name="problem_tag_admin_api"), ] diff --git a/problem/migrations/0002_remove_problemtag_description.py b/problem/migrations/0002_remove_problemtag_description.py new file mode 100644 index 0000000..2953e68 --- /dev/null +++ b/problem/migrations/0002_remove_problemtag_description.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('problem', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='problemtag', + name='description', + ), + ] diff --git a/problem/models.py b/problem/models.py index 0132072..3e236af 100644 --- a/problem/models.py +++ b/problem/models.py @@ -6,7 +6,7 @@ from account.models import User class ProblemTag(models.Model): name = models.CharField(max_length=30) - description = models.CharField(max_length=50) + # description = models.CharField(max_length=50) class Meta: db_table = "problem_tag" diff --git a/problem/serizalizers.py b/problem/serizalizers.py index 441c9c5..66f3d75 100644 --- a/problem/serizalizers.py +++ b/problem/serizalizers.py @@ -4,7 +4,7 @@ import json from rest_framework import serializers from account.models import User -from .models import Problem +from .models import Problem, ProblemTag class ProblemSampleSerializer(serializers.ListField): @@ -60,3 +60,12 @@ class EditProblemSerializer(serializers.Serializer): hint = serializers.CharField(max_length=10000) visible = serializers.BooleanField() + + +class ProblemTagSerializer(serializers.ModelSerializer): + class Meta: + model = ProblemTag + + +class CreateProblemTagSerializer(serializers.Serializer): + name = serializers.CharField(max_length=10) \ No newline at end of file diff --git a/problem/views.py b/problem/views.py index 0a5490f..eda2c72 100644 --- a/problem/views.py +++ b/problem/views.py @@ -11,10 +11,36 @@ from django.db.models import Q from rest_framework.views import APIView from utils.shortcuts import serializer_invalid_response, error_response, success_response, paginate, rand_str -from .serizalizers import CreateProblemSerializer, EditProblemSerializer, ProblemSerializer +from .serizalizers import (CreateProblemSerializer, EditProblemSerializer, ProblemSerializer, + ProblemTagSerializer, CreateProblemTagSerializer) from .models import Problem, ProblemTag +class ProblemTagAdminAPIView(APIView): + def post(self, request): + """ + 创建标签的接口 + --- + request_serializer: CreateProblemTagSerializer + """ + serializer = CreateProblemTagSerializer(data=request.data) + if serializer.is_valid(): + try: + tag = ProblemTag.objects.get(name=serializer.data["name"]) + except ProblemTag.DoesNotExist: + tag = ProblemTag.objects.create(name=serializer.data["name"]) + return success_response(ProblemTagSerializer(tag).data) + else: + return error_response(serializer) + + def get(self, request): + keyword = request.GET.get("keyword", None) + if not keyword: + return error_response(u"参数错误") + tags = ProblemTag.objects.filter(name__contains=keyword) + return success_response(ProblemTagSerializer(tags, many=True).data) + + def problem_page(request, problem_id):