From eea8e0aab80536041fcc20de28d4a620cedaa341 Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Thu, 29 Apr 2021 20:37:38 +0300 Subject: [PATCH] Pylint improvements --- README.md | 2 +- access_controller/settings.py | 32 +++++++++++++------------------- main/extra_func.py | 10 ++++------ main/models.py | 16 +++++++--------- main/serializers.py | 4 ++-- main/views.py | 8 ++++---- 6 files changed, 31 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 154ca60..ea118fe 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ docker run -d -p 8000:8000 \ Пример полной конфигурации можно найти в [.env.example](.env.example). Почту и токен админа ZenDesk взять у руководителя (если вы не админ). ## Для проверки pylint используем: -pylint ../access_controller +pylint ## Для приведения файлов к стандарту PEP8 используем: autopep8 --in-place diff --git a/access_controller/settings.py b/access_controller/settings.py index 7b1f707..cc29c25 100644 --- a/access_controller/settings.py +++ b/access_controller/settings.py @@ -13,18 +13,16 @@ import os from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. -import django as django - BASE_DIR = Path(__file__).resolve().parent.parent # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.getenv('ACTRL_SECRET_KEY','empty') +SECRET_KEY = os.getenv('ACTRL_SECRET_KEY', 'empty') # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = bool(int(os.getenv('ACTRL_DEBUG',1))) +DEBUG = bool(int(os.getenv('ACTRL_DEBUG', '1'))) ALLOWED_HOSTS = [ '127.0.0.1', @@ -59,13 +57,13 @@ MIDDLEWARE = [ ROOT_URLCONF = 'access_controller.urls' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST','smtp.gmail.com') -EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT',587)) -EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS',1))) -EMAIL_HOST_USER = os.getenv('ACTRL_EMAIL_HOST_USER','group02django@gmail.com') -EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD','djangogroup02') -DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL',EMAIL_HOST_USER) -SERVER_EMAIL = os.getenv('ACTRL_SERVER_EMAIL',EMAIL_HOST_USER) +EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST', 'smtp.gmail.com') +EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT', '587')) +EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS', '1'))) +EMAIL_HOST_USER = os.getenv('ACTRL_EMAIL_HOST_USER', 'group02django@gmail.com') +EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD', 'djangogroup02') +DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL', EMAIL_HOST_USER) +SERVER_EMAIL = os.getenv('ACTRL_SERVER_EMAIL', EMAIL_HOST_USER) TEMPLATES = [ { @@ -142,8 +140,6 @@ ACCOUNT_ACTIVATION_DAYS = 7 LOGIN_REDIRECT_URL = '/' LOGOUT_REDIRECT_URL = '/' - - # Название_приложения.Название_файла.Название_класса_обработчика AUTHENTICATION_BACKENDS = [ 'access_controller.auth.EmailAuthBackend', @@ -154,8 +150,8 @@ AUTHENTICATION_BACKENDS = [ ZENDESK_ROLES = { - 'engineer': int(os.getenv('ENG_CROLE_ID',0)), - 'light_agent': int(os.getenv('LA_CROLE_ID',0)), + 'engineer': int(os.getenv('ENG_CROLE_ID', '0')), + 'light_agent': int(os.getenv('LA_CROLE_ID', '0')), } ZENDESK_GROUPS = { @@ -165,7 +161,7 @@ ZENDESK_GROUPS = { SOLVED_TICKETS_EMAIL = os.getenv('ST_EMAIL') -ZENDESK_MAX_AGENTS = int(os.getenv('LICENSE_NO',0)) +ZENDESK_MAX_AGENTS = int(os.getenv('LICENSE_NO', '0')) REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, @@ -175,11 +171,9 @@ REST_FRAMEWORK = { ] } -ONE_DAY = int(os.getenv('SHIFTH',0)) # Количество часов в 1 рабочем дне +ONE_DAY = int(os.getenv('SHIFTH', '0')) # Количество часов в 1 рабочем дне ACTRL_ZENDESK_SUBDOMAIN = os.getenv('ACTRL_ZENDESK_SUBDOMAIN') or os.getenv('ZD_DOMAIN') ACTRL_API_EMAIL = os.getenv('ACTRL_API_EMAIL') or os.getenv('ACCESS_CONTROLLER_API_EMAIL') ACTRL_API_TOKEN = os.getenv('ACTRL_API_TOKEN') or os.getenv('ACCESS_CONTROLLER_API_TOKEN') ACTRL_API_PASSWORD = os.getenv('ACTRL_API_PASSWORD') or os.getenv('ACCESS_CONTROLLER_API_PASSWORD') - - diff --git a/main/extra_func.py b/main/extra_func.py index f215544..9cbbbdf 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -36,7 +36,7 @@ def update_role(user_profile: UserProfile, role: int) -> None: zendesk.admin.users.update(user) -def make_engineer(user_profile: UserProfile, who_changes: User) -> None: +def make_engineer(user_profile: UserProfile) -> None: """ Функция устанавливает пользователю роль инженера. @@ -47,7 +47,7 @@ def make_engineer(user_profile: UserProfile, who_changes: User) -> None: update_role(user_profile, ROLES['engineer']) -def make_light_agent(user_profile: UserProfile, who_changes: User) -> None: +def make_light_agent(user_profile: UserProfile) -> None: """ Функция устанавливает пользователю роль легкого агента. @@ -293,8 +293,7 @@ class StatisticData: stat = self._use_display(stat) stat = self._use_interval(stat) return stat - else: - return None + return None def is_valid_statistic(self) -> bool: """ @@ -336,8 +335,7 @@ class StatisticData: """ if self.is_valid_data(): return self.data - else: - return None + return None def is_valid_data(self) -> bool: """ diff --git a/main/models.py b/main/models.py index fcde327..172549f 100644 --- a/main/models.py +++ b/main/models.py @@ -1,10 +1,8 @@ """ Модели, использующиеся в приложении. """ - - +from django.contrib.auth import get_user_model from django.db import models -from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver from django.utils import timezone @@ -24,7 +22,7 @@ class UserProfile(models.Model): ('has_control_access', 'Can view admin page'), ) - user = models.OneToOneField(to=User, on_delete=models.CASCADE, help_text='Пользователь') + user = models.OneToOneField(to=get_user_model(), on_delete=models.CASCADE, help_text='Пользователь') role = models.CharField(default='None', max_length=100, help_text='Глобальное имя роли пользователя') custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя') image = models.URLField(null=True, blank=True, help_text='Аватарка') @@ -44,7 +42,7 @@ class UserProfile(models.Model): return 'UNDEFINED' -@receiver(post_save, sender=User) +@receiver(post_save, sender=get_user_model()) def create_user_profile(instance, created, **kwargs) -> None: """ Функция создания профиля пользователя (Userprofile) при регистрации пользователя. @@ -58,7 +56,7 @@ def create_user_profile(instance, created, **kwargs) -> None: UserProfile.objects.create(user=instance) -@receiver(post_save, sender=User) +@receiver(post_save, sender=get_user_model()) def save_user_profile(instance, **kwargs) -> None: """ Функция записи БД профиля пользователя. @@ -74,12 +72,12 @@ class RoleChangeLogs(models.Model): """ Модель для логирования изменений ролей пользователя. """ - user = models.ForeignKey(to=User, on_delete=models.CASCADE, + user = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, help_text='Пользователь, которому присвоили другую роль') old_role = models.IntegerField(default=0, help_text='Старая роль') new_role = models.IntegerField(default=0, help_text='Присвоенная роль') change_time = models.DateTimeField(default=timezone.now, help_text='Дата и время изменения роли') - changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by', + changed_by = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='changed_by', help_text='Кем была изменена роль') @@ -106,7 +104,7 @@ class UnassignedTicket(models.Model): """ Модель не распределенного тикета. """ - assignee = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='tickets', + assignee = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='tickets', help_text='Пользователь, с которого снят тикет') ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного') status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED, diff --git a/main/serializers.py b/main/serializers.py index e72dc7a..70c4352 100644 --- a/main/serializers.py +++ b/main/serializers.py @@ -1,7 +1,7 @@ """ Сериализаторы. """ -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from rest_framework import serializers from main.models import UserProfile from access_controller.settings import ZENDESK_ROLES @@ -17,7 +17,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): :type email: :class:`list` """ class Meta: - model = User + model = get_user_model() fields = ['email'] diff --git a/main/views.py b/main/views.py index 15f393e..92fe965 100644 --- a/main/views.py +++ b/main/views.py @@ -230,7 +230,7 @@ def work_hand_over(request: WSGIRequest) -> HttpResponseRedirect: :param request: данные текущего пользователя (login_required) :return: перезагрузка текущей страницы после выполнения смены роли """ - make_light_agent(request.user.userprofile, request.user) + make_light_agent(request.user.userprofile) return set_session_params_for_work_page(request) @@ -243,7 +243,7 @@ def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect: :param request: данные текущего пользователя (login_required) :return: перезагрузка текущей страницы после выполнения смены роли """ - make_engineer(request.user.userprofile, request.user) + make_engineer(request.user.userprofile) return set_session_params_for_work_page(request) @@ -317,7 +317,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageM :return: Обновленный список пользователей """ for user in users: - make_engineer(user, self.request.user) + make_engineer(user) log(user, self.request.user.userprofile) def make_light_agents(self, users: list) -> None: @@ -328,7 +328,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageM :return: Обновленный список пользователей """ for user in users: - make_light_agent(user, self.request.user) + make_light_agent(user) log(user, self.request.user.userprofile)