From 32c1b8908021588a7c143c191ec55a6e98c923df Mon Sep 17 00:00:00 2001 From: virusdefender Date: Mon, 23 Jan 2017 16:25:14 +0800 Subject: [PATCH] flake8 --- .flake8 | 7 +++++++ .travis.yml | 1 + account/decorators.py | 1 - account/middleware.py | 2 +- account/urls/admin.py | 2 +- account/urls/oj.py | 6 +++--- announcement/tests.py | 2 +- announcement/urls/admin.py | 2 +- conf/serializers.py | 7 +++---- conf/tests.py | 6 +++--- conf/urls/admin.py | 6 +++--- conf/urls/oj.py | 4 ++-- conf/views.py | 8 +------- contest/admin.py | 3 --- contest/models.py | 2 +- contest/tests.py | 3 --- contest/views.py | 3 --- deploy/requirements.txt | 1 + group/admin.py | 3 --- group/apps.py | 7 ------- group/tests.py | 3 --- group/views.py | 3 --- oj/__init__.py | 9 --------- oj/custom_settings.example.py | 2 -- oj/db_router.py | 8 ++++---- oj/urls.py | 10 +++++----- problem/admin.py | 3 --- problem/models.py | 1 - problem/tests.py | 3 --- problem/views.py | 3 --- utils/api/__init__.py | 4 ++-- utils/api/_serializers.py | 2 +- utils/api/tests.py | 2 +- utils/captcha/__init__.py | 29 ++++++++++++++--------------- utils/models.py | 6 ------ 35 files changed, 56 insertions(+), 108 deletions(-) create mode 100644 .flake8 delete mode 100644 contest/admin.py delete mode 100644 group/admin.py delete mode 100644 group/apps.py delete mode 100644 problem/admin.py diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..73f40c5c --- /dev/null +++ b/.flake8 @@ -0,0 +1,7 @@ +[flake8] +exclude = + xss_filter.py, + migrations/, + *settings.py +max-line-length = 180 +inline-quotes = " diff --git a/.travis.yml b/.travis.yml index cc7748e4..b41d54b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,5 @@ install: - python manage.py migrate - python manage.py initadmin script: + - flake8 . - python manage.py test diff --git a/account/decorators.py b/account/decorators.py index c5da9215..baa7aad5 100644 --- a/account/decorators.py +++ b/account/decorators.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals import functools -from django.http import HttpResponse from django.utils.translation import ugettext as _ from utils.api import JSONResponse diff --git a/account/middleware.py b/account/middleware.py index d0927213..e494f1a0 100644 --- a/account/middleware.py +++ b/account/middleware.py @@ -23,4 +23,4 @@ class AdminRequiredMiddleware(object): path = request.path_info if path.startswith("/admin/") or path.startswith("/api/admin/"): if not(request.user.is_authenticated() and request.user.is_admin()): - return JSONResponse.response({"error": "login-required", "data": _("Please login in first")}) \ No newline at end of file + return JSONResponse.response({"error": "login-required", "data": _("Please login in first")}) diff --git a/account/urls/admin.py b/account/urls/admin.py index 8f1b7f18..372ba244 100644 --- a/account/urls/admin.py +++ b/account/urls/admin.py @@ -3,5 +3,5 @@ from django.conf.urls import url from ..views.admin import UserAdminAPI urlpatterns = [ - url(r'^user$', UserAdminAPI.as_view(), name="user_admin_api"), + url(r"^user$", UserAdminAPI.as_view(), name="user_admin_api"), ] diff --git a/account/urls/oj.py b/account/urls/oj.py index e7badd92..bdcde3c5 100644 --- a/account/urls/oj.py +++ b/account/urls/oj.py @@ -3,7 +3,7 @@ from django.conf.urls import url from ..views.oj import UserLoginAPI, UserRegisterAPI, UserChangePasswordAPI urlpatterns = [ - url(r'^login$', UserLoginAPI.as_view(), name="user_login_api"), - url(r'^register$', UserRegisterAPI.as_view(), name="user_register_api"), - url(r'^change_password$', UserChangePasswordAPI.as_view(), name="user_change_password_api") + url(r"^login$", UserLoginAPI.as_view(), name="user_login_api"), + url(r"^register$", UserRegisterAPI.as_view(), name="user_register_api"), + url(r"^change_password$", UserChangePasswordAPI.as_view(), name="user_change_password_api") ] diff --git a/announcement/tests.py b/announcement/tests.py index 03543065..adab067f 100644 --- a/announcement/tests.py +++ b/announcement/tests.py @@ -32,6 +32,6 @@ class AnnouncementAdminTest(APITestCase): def test_delete_announcemen(self): id = self.test_create_announcement().data["data"]["id"] - resp = self.client.delete(self.url, data={'id': id}) + resp = self.client.delete(self.url, data={"id": id}) self.assertSuccess(resp) self.assertFalse(Announcement.objects.filter(id=id).exists()) diff --git a/announcement/urls/admin.py b/announcement/urls/admin.py index c3e22033..fefc160d 100644 --- a/announcement/urls/admin.py +++ b/announcement/urls/admin.py @@ -3,5 +3,5 @@ from django.conf.urls import url from ..views import AnnouncementAdminAPI urlpatterns = [ - url(r'^announcement$', AnnouncementAdminAPI.as_view(), name="announcement_admin_api"), + url(r"^announcement$", AnnouncementAdminAPI.as_view(), name="announcement_admin_api"), ] diff --git a/conf/serializers.py b/conf/serializers.py index 37640b33..693c11ea 100644 --- a/conf/serializers.py +++ b/conf/serializers.py @@ -13,17 +13,17 @@ class EditSMTPConfigSerializer(serializers.Serializer): class CreateSMTPConfigSerializer(EditSMTPConfigSerializer): password = serializers.CharField(max_length=128) - + class SMTPConfigSerializer(serializers.ModelSerializer): class Meta: model = SMTPConfig exclude = ["id", "password"] - + class TestSMTPConfigSerializer(serializers.Serializer): email = serializers.EmailField() - + class CreateEditWebsiteConfigSerializer(serializers.Serializer): base_url = serializers.CharField(max_length=128) @@ -56,4 +56,3 @@ class JudgeServerHeartbeatSerializer(serializers.Serializer): cpu = serializers.FloatField(min_value=0, max_value=100) action = serializers.ChoiceField(choices=("heartbeat", )) service_url = serializers.CharField(max_length=128, required=False) - diff --git a/conf/tests.py b/conf/tests.py index f6777716..647d9448 100644 --- a/conf/tests.py +++ b/conf/tests.py @@ -51,7 +51,7 @@ class SMTPConfigTest(APITestCase): class WebsiteConfigAPITest(APITestCase): def test_create_website_config(self): - user = self.create_super_admin() + self.create_super_admin() url = self.reverse("website_config_api") data = {"base_url": "http://test.com", "name": "test name", "name_shortcut": "test oj", "footer": "test", @@ -60,7 +60,7 @@ class WebsiteConfigAPITest(APITestCase): self.assertSuccess(resp) def test_edit_website_config(self): - user = self.create_super_admin() + self.create_super_admin() url = self.reverse("website_config_api") data = {"base_url": "http://test.com", "name": "test name", "name_shortcut": "test oj", "footer": "test", @@ -103,7 +103,7 @@ class JudgeServerHeartbeatest(APITestCase): self.assertSuccess(resp) server = JudgeServer.objects.first() self.assertEqual(server.ip, "127.0.0.1") - self.assertEqual(server.service_url ,None) + self.assertEqual(server.service_url, None) def test_new_heartbeat_service_url(self): service_url = "http://1.2.3.4:8000/api/judge" diff --git a/conf/urls/admin.py b/conf/urls/admin.py index 456e6c01..daecea22 100644 --- a/conf/urls/admin.py +++ b/conf/urls/admin.py @@ -3,7 +3,7 @@ from django.conf.urls import url from ..views import WebsiteConfigAPI, SMTPAPI, JudgeServerAPI urlpatterns = [ - url(r'^smtp$', SMTPAPI.as_view(), name="smtp_admin_api"), - url(r'^website$', WebsiteConfigAPI.as_view(), name="website_config_api"), - url(r'^judge_server', JudgeServerAPI.as_view(), name="judge_server_api") + url(r"^smtp$", SMTPAPI.as_view(), name="smtp_admin_api"), + url(r"^website$", WebsiteConfigAPI.as_view(), name="website_config_api"), + url(r"^judge_server", JudgeServerAPI.as_view(), name="judge_server_api") ] diff --git a/conf/urls/oj.py b/conf/urls/oj.py index 3e3c1962..47a8dd89 100644 --- a/conf/urls/oj.py +++ b/conf/urls/oj.py @@ -4,6 +4,6 @@ from ..views import WebsiteConfigAPI, JudgeServerHeartbeatAPI urlpatterns = [ - url(r'^website$', WebsiteConfigAPI.as_view(), name="website_info_api"), - url(r'^judge_server_heartbeat$', JudgeServerHeartbeatAPI.as_view(), name="judge_server_heartbeat_api") + url(r"^website$", WebsiteConfigAPI.as_view(), name="website_info_api"), + url(r"^judge_server_heartbeat$", JudgeServerHeartbeatAPI.as_view(), name="judge_server_heartbeat_api") ] diff --git a/conf/views.py b/conf/views.py index 746fbfb2..5c6be3f0 100644 --- a/conf/views.py +++ b/conf/views.py @@ -49,8 +49,6 @@ class SMTPTestAPI(APIView): @super_admin_required @validate_serializer(TestSMTPConfigSerializer) def post(self, request): - email = request.data["email"] - # todo: test send email return self.success({"result": True}) @@ -111,7 +109,7 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView): server.cpu_core = data["cpu_core"] server.memory_usage = data["memory"] server.cpu_usage = data["cpu"] - server.service_url= service_url + server.service_url = service_url server.ip = ip server.last_heartbeat = timezone.now() server.save() @@ -126,7 +124,3 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView): last_heartbeat=timezone.now(), ) return self.success() - - - - diff --git a/contest/admin.py b/contest/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/contest/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/contest/models.py b/contest/models.py index c7d3b4ab..b61bad0a 100644 --- a/contest/models.py +++ b/contest/models.py @@ -103,4 +103,4 @@ class OIContestRank(ContestRank): submission_info = JSONField(default={}) class Meta: - db_table = "oi_contenst_rank" \ No newline at end of file + db_table = "oi_contenst_rank" diff --git a/contest/tests.py b/contest/tests.py index 7ce503c2..e69de29b 100644 --- a/contest/tests.py +++ b/contest/tests.py @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/contest/views.py b/contest/views.py index 91ea44a2..e69de29b 100644 --- a/contest/views.py +++ b/contest/views.py @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/deploy/requirements.txt b/deploy/requirements.txt index 39972325..47f3b9f2 100644 --- a/deploy/requirements.txt +++ b/deploy/requirements.txt @@ -3,3 +3,4 @@ djangorestframework==3.3.3 pillow jsonfield otpauth +flake8-quotes diff --git a/group/admin.py b/group/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/group/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/group/apps.py b/group/apps.py deleted file mode 100644 index d1471c0d..00000000 --- a/group/apps.py +++ /dev/null @@ -1,7 +0,0 @@ -from __future__ import unicode_literals - -from django.apps import AppConfig - - -class GroupConfig(AppConfig): - name = 'group' diff --git a/group/tests.py b/group/tests.py index 7ce503c2..e69de29b 100644 --- a/group/tests.py +++ b/group/tests.py @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/group/views.py b/group/views.py index 91ea44a2..e69de29b 100644 --- a/group/views.py +++ b/group/views.py @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/oj/__init__.py b/oj/__init__.py index c19c0794..e69de29b 100644 --- a/oj/__init__.py +++ b/oj/__init__.py @@ -1,9 +0,0 @@ -""" - ___ _ _ __ _ _ _ - /___\ _ __ | |(_) _ __ ___ \ \ _ _ __| | __ _ ___ | |__ _ _ __ _ __| | _ _ - // //| '_ \ | || || '_ \ / _ \ \ \| | | | / _` | / _` | / _ \ | '_ \ | | | | / _` | / _` || | | | -/ \_// | | | || || || | | || __/ /\_/ /| |_| || (_| || (_| || __/ | |_) || |_| | | (_| || (_| || |_| | -\___/ |_| |_||_||_||_| |_| \___| \___/ \__,_| \__,_| \__, | \___| |_.__/ \__, | \__, | \__,_| \__,_| - |___/ |___/ |_| -https://github.com/QingdaoU/OnlineJudge -""" \ No newline at end of file diff --git a/oj/custom_settings.example.py b/oj/custom_settings.example.py index 89c8c0ec..5def48ed 100644 --- a/oj/custom_settings.example.py +++ b/oj/custom_settings.example.py @@ -2,5 +2,3 @@ # please set your own SECRET_KEY to a long random string # SECRET_KEY = "" - - diff --git a/oj/db_router.py b/oj/db_router.py index 3a20427c..c264ba4f 100644 --- a/oj/db_router.py +++ b/oj/db_router.py @@ -3,13 +3,13 @@ class DBRouter(object): def db_for_read(self, model, **hints): - if model._meta.app_label == 'submission': - return 'submission' + if model._meta.app_label == "submission": + return "submission" return "default" def db_for_write(self, model, **hints): - if model._meta.app_label == 'submission': - return 'submission' + if model._meta.app_label == "submission": + return "submission" return "default" def allow_relation(self, obj1, obj2, **hints): diff --git a/oj/urls.py b/oj/urls.py index 162e4392..dc3930ef 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -2,9 +2,9 @@ from django.conf.urls import include, url urlpatterns = [ - url(r'^api/', include("account.urls.oj")), - url(r'^api/admin/', include("account.urls.admin")), - url(r'^api/admin/', include("announcement.urls.admin")), - url(r'^api/', include("conf.urls.oj")), - url(r'^api/admin/', include("conf.urls.admin")) + url(r"^api/", include("account.urls.oj")), + url(r"^api/admin/", include("account.urls.admin")), + url(r"^api/admin/", include("announcement.urls.admin")), + url(r"^api/", include("conf.urls.oj")), + url(r"^api/admin/", include("conf.urls.admin")) ] diff --git a/problem/admin.py b/problem/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/problem/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/problem/models.py b/problem/models.py index 6cdbd615..97d623b9 100644 --- a/problem/models.py +++ b/problem/models.py @@ -1,4 +1,3 @@ -# coding=utf-8 from __future__ import unicode_literals from jsonfield import JSONField diff --git a/problem/tests.py b/problem/tests.py index 7ce503c2..e69de29b 100644 --- a/problem/tests.py +++ b/problem/tests.py @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/problem/views.py b/problem/views.py index 91ea44a2..e69de29b 100644 --- a/problem/views.py +++ b/problem/views.py @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/utils/api/__init__.py b/utils/api/__init__.py index 0cf3185a..dedbe3a9 100644 --- a/utils/api/__init__.py +++ b/utils/api/__init__.py @@ -1,2 +1,2 @@ -from .api import * -from ._serializers import * \ No newline at end of file +from .api import * # NOQA +from ._serializers import * # NOQA diff --git a/utils/api/_serializers.py b/utils/api/_serializers.py index d0488901..3e887873 100644 --- a/utils/api/_serializers.py +++ b/utils/api/_serializers.py @@ -18,4 +18,4 @@ class DateTimeTZField(serializers.DateTimeField): class IDOnlySerializer(serializers.Serializer): - id = serializers.IntegerField() \ No newline at end of file + id = serializers.IntegerField() diff --git a/utils/api/tests.py b/utils/api/tests.py index 5cf83c68..5ff30f85 100644 --- a/utils/api/tests.py +++ b/utils/api/tests.py @@ -30,4 +30,4 @@ class APITestCase(TestCase): self.assertTrue(response.data["error"] is None) def assertFailed(self, response): - self.assertTrue(response.data["error"] is not None) \ No newline at end of file + self.assertTrue(response.data["error"] is not None) diff --git a/utils/captcha/__init__.py b/utils/captcha/__init__.py index a05d237e..f1754a4f 100644 --- a/utils/captcha/__init__.py +++ b/utils/captcha/__init__.py @@ -1,5 +1,3 @@ -# coding:utf-8 - """ Copyright 2013 TY @@ -20,6 +18,7 @@ import os import time import random +from io import StringIO from django.http import HttpResponse from PIL import Image, ImageDraw, ImageFont @@ -27,19 +26,19 @@ from PIL import Image, ImageDraw, ImageFont class Captcha(object): def __init__(self, request): - """ + """ 初始化,设置各种属性 """ self.django_request = request - self.session_key = '_django_captcha_key' - self.captcha_expires_time = '_django_captcha_expires_time' + self.session_key = "_django_captcha_key" + self.captcha_expires_time = "_django_captcha_expires_time" # 验证码图片尺寸 self.img_width = 90 self.img_height = 30 def _get_font_size(self, code): - """ + """ 将图片高度的80%作为字体大小 """ s1 = int(self.img_height * 0.8) @@ -47,7 +46,7 @@ class Captcha(object): return int(min((s1, s2)) + max((s1, s2)) * 0.05) def _set_answer(self, answer): - """ + """ 设置答案和过期时间 """ self.django_request.session[self.session_key] = str(answer) @@ -57,7 +56,7 @@ class Captcha(object): """ 生成随机数或随机字符串 """ - string = random.sample('abcdefghkmnpqrstuvwxyzABCDEFGHGKMNOPQRSTUVWXYZ23456789', 4) + string = random.sample("abcdefghkmnpqrstuvwxyzABCDEFGHGKMNOPQRSTUVWXYZ23456789", 4) self._set_answer("".join(string)) return string @@ -68,9 +67,9 @@ class Captcha(object): background = (random.randrange(200, 255), random.randrange(200, 255), random.randrange(200, 255)) code_color = (random.randrange(0, 50), random.randrange(0, 50), random.randrange(0, 50), 255) - font_path = os.path.join(os.path.normpath(os.path.dirname(__file__)), 'timesbi.ttf') + font_path = os.path.join(os.path.normpath(os.path.dirname(__file__)), "timesbi.ttf") - image = Image.new('RGB', (self.img_width, self.img_height), background) + image = Image.new("RGB", (self.img_width, self.img_height), background) code = self._make_code() font_size = self._get_font_size(code) draw = ImageDraw.Draw(image) @@ -82,22 +81,22 @@ class Captcha(object): # 字符y坐标 y = random.randrange(1, 7) # 随机字符大小 - font = ImageFont.truetype(font_path.replace('\\', '/'), font_size + random.randrange(-3, 7)) + font = ImageFont.truetype(font_path.replace("\\", "/"), font_size + random.randrange(-3, 7)) draw.text((x, y), i, font=font, fill=code_color) # 随机化字符之间的距离 字符粘连可以降低识别率 x += font_size * random.randrange(6, 8) / 10 - buf = StringIO.StringIO() - image.save(buf, 'gif') + buf = StringIO() + image.save(buf, "gif") self.django_request.session[self.session_key] = "".join(code) - return HttpResponse(buf.getvalue(), 'image/gif') + return HttpResponse(buf.getvalue(), "image/gif") def check(self, code): """ 检查用户输入的验证码是否正确 """ - _code = self.django_request.session.get(self.session_key) or '' + _code = self.django_request.session.get(self.session_key) or "" if not _code: return False expires_time = self.django_request.session.get(self.captcha_expires_time) or 0 diff --git a/utils/models.py b/utils/models.py index 5e229864..a3e15b06 100644 --- a/utils/models.py +++ b/utils/models.py @@ -1,5 +1,3 @@ -# coding=utf-8 -import json from django.db import models from utils.xss_filter import XssHtml @@ -15,7 +13,3 @@ class RichTextField(models.TextField): parser.feed(value) parser.close() return parser.getHtml() - - -class JsonField(models.TextField): - pass \ No newline at end of file