mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
add new version api
This commit is contained in:
parent
8454b36792
commit
914c4727fc
@ -6,6 +6,7 @@ from django.utils import timezone
|
|||||||
from options.options import SysOptions
|
from options.options import SysOptions
|
||||||
from utils.api.tests import APITestCase
|
from utils.api.tests import APITestCase
|
||||||
from .models import JudgeServer
|
from .models import JudgeServer
|
||||||
|
from .views import CheckNewVersionAPI
|
||||||
|
|
||||||
|
|
||||||
class SMTPConfigTest(APITestCase):
|
class SMTPConfigTest(APITestCase):
|
||||||
@ -153,3 +154,27 @@ class TestCasePruneAPITest(APITestCase):
|
|||||||
resp = self.client.delete(self.url)
|
resp = self.client.delete(self.url)
|
||||||
self.assertSuccess(resp)
|
self.assertSuccess(resp)
|
||||||
mocked_delete_one.assert_called_once_with(valid_id)
|
mocked_delete_one.assert_called_once_with(valid_id)
|
||||||
|
|
||||||
|
|
||||||
|
class CheckNewVersionAPITest(APITestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.url = self.reverse("check_new_version_api")
|
||||||
|
self.create_super_admin()
|
||||||
|
self.latest_data = {"update": [
|
||||||
|
{
|
||||||
|
"version": "2099-12-25",
|
||||||
|
"level": 1,
|
||||||
|
"title": "Update at 2099-12-25",
|
||||||
|
"details": ["test get", ]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
|
||||||
|
@mock.patch("conf.views.requests.get", autospec=True)
|
||||||
|
def test_get_latest_version(self, mocked_requests):
|
||||||
|
resp = self.client.get(self.url)
|
||||||
|
self.assertSuccess(resp)
|
||||||
|
mocked_requests.assert_called_once()
|
||||||
|
|
||||||
|
def test_get_version(self):
|
||||||
|
version = CheckNewVersionAPI().get_latest_version(self.latest_data)
|
||||||
|
self.assertListEqual(version, [2099, 12, 25])
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
from ..views import SMTPAPI, JudgeServerAPI, WebsiteConfigAPI, TestCasePruneAPI, SMTPTestAPI
|
from ..views import SMTPAPI, JudgeServerAPI, WebsiteConfigAPI, TestCasePruneAPI, SMTPTestAPI
|
||||||
|
from ..views import CheckNewVersionAPI
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r"^smtp/?$", SMTPAPI.as_view(), name="smtp_admin_api"),
|
url(r"^smtp/?$", SMTPAPI.as_view(), name="smtp_admin_api"),
|
||||||
@ -8,4 +9,5 @@ urlpatterns = [
|
|||||||
url(r"^website/?$", WebsiteConfigAPI.as_view(), name="website_config_api"),
|
url(r"^website/?$", WebsiteConfigAPI.as_view(), name="website_config_api"),
|
||||||
url(r"^judge_server/?$", JudgeServerAPI.as_view(), name="judge_server_api"),
|
url(r"^judge_server/?$", JudgeServerAPI.as_view(), name="judge_server_api"),
|
||||||
url(r"^prune_test_case/?$", TestCasePruneAPI.as_view(), name="prune_test_case_api"),
|
url(r"^prune_test_case/?$", TestCasePruneAPI.as_view(), name="prune_test_case_api"),
|
||||||
|
url(r"^new_version/?$", CheckNewVersionAPI.as_view(), name="check_new_version_api"),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -2,6 +2,9 @@ import os
|
|||||||
import re
|
import re
|
||||||
import hashlib
|
import hashlib
|
||||||
import shutil
|
import shutil
|
||||||
|
import json
|
||||||
|
import requests
|
||||||
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -156,7 +159,7 @@ class TestCasePruneAPI(APIView):
|
|||||||
@super_admin_required
|
@super_admin_required
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
"""
|
"""
|
||||||
return isolated test_case list
|
return orphan test_case list
|
||||||
"""
|
"""
|
||||||
ret_data = []
|
ret_data = []
|
||||||
dir_to_be_removed = self.get_orphan_ids()
|
dir_to_be_removed = self.get_orphan_ids()
|
||||||
@ -190,3 +193,24 @@ class TestCasePruneAPI(APIView):
|
|||||||
test_case_dir = os.path.join(settings.TEST_CASE_DIR, id)
|
test_case_dir = os.path.join(settings.TEST_CASE_DIR, id)
|
||||||
if os.path.isdir(test_case_dir):
|
if os.path.isdir(test_case_dir):
|
||||||
shutil.rmtree(test_case_dir, ignore_errors=True)
|
shutil.rmtree(test_case_dir, ignore_errors=True)
|
||||||
|
|
||||||
|
|
||||||
|
class CheckNewVersionAPI(APIView):
|
||||||
|
@staticmethod
|
||||||
|
def get_latest_version(data):
|
||||||
|
return list(map(lambda x: int(x), data["update"][0]["version"].split("-")))
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
try:
|
||||||
|
resp = requests.get("https://raw.githubusercontent.com/QingdaoU/OnlineJudge/master/docs/data.json",
|
||||||
|
timeout=3)
|
||||||
|
remote = resp.json()
|
||||||
|
except (RequestException, ValueError):
|
||||||
|
return self.success()
|
||||||
|
with open("docs/data.json", "r") as f:
|
||||||
|
local = json.load(f)
|
||||||
|
remote_version = self.get_latest_version(remote)
|
||||||
|
local_version = self.get_latest_version(local)
|
||||||
|
if remote_version > local_version:
|
||||||
|
return self.success(remote["update"][0])
|
||||||
|
return self.success()
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"update": [
|
"update": [
|
||||||
{
|
{
|
||||||
"version": "2017-12-25",
|
"version": "2017-12-25",
|
||||||
"level": 1,
|
"level": "Recommend",
|
||||||
"title": "Update at 2017-12-25",
|
"title": "Update at 2017-12-25",
|
||||||
"details": [
|
"details": [
|
||||||
"Fix some issues under IE/Edge",
|
"Fix some issues under IE/Edge",
|
||||||
|
|||||||
@ -423,7 +423,7 @@ class MakeContestProblemPublicAPIView(APIView):
|
|||||||
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("Already be a public problem")
|
||||||
problem.is_public = True
|
problem.is_public = True
|
||||||
problem.save()
|
problem.save()
|
||||||
# https://docs.djangoproject.com/en/1.11/topics/db/queries/#copying-model-instances
|
# https://docs.djangoproject.com/en/1.11/topics/db/queries/#copying-model-instances
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user