From d37bbb3eabb74bbfc988495bc601caaec846c05d Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 10 Aug 2015 16:59:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=A4=E9=A2=98?= =?UTF-8?q?=E7=9A=84=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84=EF=BC=9B=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0celery=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- judge/__init__.py | 1 + judge/controller/README.md | 1 + judge/controller/__init__.py | 1 + judge/controller/celery.py | 5 +++++ judge/controller/tasks.py | 8 ++++++++ judge/judger/__init__.py | 0 judge/{ => judger}/client.py | 0 judge/{ => judger}/compiler.py | 0 judge/{ => judger}/judge_exceptions.py | 0 judge/{ => judger}/language.py | 0 judge/{ => judger}/result.py | 0 judge/{ => judger}/settings.py | 0 judge/{ => judger}/utils.py | 0 13 files changed, 16 insertions(+) create mode 100644 judge/controller/README.md create mode 100644 judge/controller/__init__.py create mode 100644 judge/controller/celery.py create mode 100644 judge/controller/tasks.py create mode 100644 judge/judger/__init__.py rename judge/{ => judger}/client.py (100%) rename judge/{ => judger}/compiler.py (100%) rename judge/{ => judger}/judge_exceptions.py (100%) rename judge/{ => judger}/language.py (100%) rename judge/{ => judger}/result.py (100%) rename judge/{ => judger}/settings.py (100%) rename judge/{ => judger}/utils.py (100%) 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 From a6268dcb53b62cd7af1e787356855e2f7ff20a82 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 10 Aug 2015 17:59:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=A2=98=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E7=9B=B8=E5=85=B3=E7=9A=84=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/urls.py | 3 +- .../0002_remove_problemtag_description.py | 18 ++++++++++++ problem/models.py | 2 +- problem/serizalizers.py | 11 +++++++- problem/views.py | 28 ++++++++++++++++++- 5 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 problem/migrations/0002_remove_problemtag_description.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):