Pylint improvements
This commit is contained in:
parent
cc83f292de
commit
eea8e0aab8
@ -151,7 +151,7 @@ docker run -d -p 8000:8000 \
|
|||||||
Пример полной конфигурации можно найти в [.env.example](.env.example). Почту и токен админа ZenDesk взять у руководителя (если вы не админ).
|
Пример полной конфигурации можно найти в [.env.example](.env.example). Почту и токен админа ZenDesk взять у руководителя (если вы не админ).
|
||||||
|
|
||||||
## Для проверки pylint используем:
|
## Для проверки pylint используем:
|
||||||
pylint ../access_controller
|
pylint
|
||||||
|
|
||||||
## Для приведения файлов к стандарту PEP8 используем:
|
## Для приведения файлов к стандарту PEP8 используем:
|
||||||
autopep8 --in-place <filename>
|
autopep8 --in-place <filename>
|
||||||
|
@ -13,18 +13,16 @@ import os
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
import django as django
|
|
||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
# Quick-start development settings - unsuitable for production
|
||||||
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
||||||
|
|
||||||
# SECURITY WARNING: keep the secret key used in production secret!
|
# 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!
|
# 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 = [
|
ALLOWED_HOSTS = [
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
@ -59,13 +57,13 @@ MIDDLEWARE = [
|
|||||||
ROOT_URLCONF = 'access_controller.urls'
|
ROOT_URLCONF = 'access_controller.urls'
|
||||||
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST','smtp.gmail.com')
|
EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST', 'smtp.gmail.com')
|
||||||
EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT',587))
|
EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT', '587'))
|
||||||
EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS',1)))
|
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_USER = os.getenv('ACTRL_EMAIL_HOST_USER', 'group02django@gmail.com')
|
||||||
EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD','djangogroup02')
|
EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD', 'djangogroup02')
|
||||||
DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL',EMAIL_HOST_USER)
|
DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL', EMAIL_HOST_USER)
|
||||||
SERVER_EMAIL = os.getenv('ACTRL_SERVER_EMAIL',EMAIL_HOST_USER)
|
SERVER_EMAIL = os.getenv('ACTRL_SERVER_EMAIL', EMAIL_HOST_USER)
|
||||||
|
|
||||||
TEMPLATES = [
|
TEMPLATES = [
|
||||||
{
|
{
|
||||||
@ -142,8 +140,6 @@ ACCOUNT_ACTIVATION_DAYS = 7
|
|||||||
LOGIN_REDIRECT_URL = '/'
|
LOGIN_REDIRECT_URL = '/'
|
||||||
LOGOUT_REDIRECT_URL = '/'
|
LOGOUT_REDIRECT_URL = '/'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Название_приложения.Название_файла.Название_класса_обработчика
|
# Название_приложения.Название_файла.Название_класса_обработчика
|
||||||
AUTHENTICATION_BACKENDS = [
|
AUTHENTICATION_BACKENDS = [
|
||||||
'access_controller.auth.EmailAuthBackend',
|
'access_controller.auth.EmailAuthBackend',
|
||||||
@ -154,8 +150,8 @@ AUTHENTICATION_BACKENDS = [
|
|||||||
|
|
||||||
|
|
||||||
ZENDESK_ROLES = {
|
ZENDESK_ROLES = {
|
||||||
'engineer': int(os.getenv('ENG_CROLE_ID',0)),
|
'engineer': int(os.getenv('ENG_CROLE_ID', '0')),
|
||||||
'light_agent': int(os.getenv('LA_CROLE_ID',0)),
|
'light_agent': int(os.getenv('LA_CROLE_ID', '0')),
|
||||||
}
|
}
|
||||||
|
|
||||||
ZENDESK_GROUPS = {
|
ZENDESK_GROUPS = {
|
||||||
@ -165,7 +161,7 @@ ZENDESK_GROUPS = {
|
|||||||
|
|
||||||
SOLVED_TICKETS_EMAIL = os.getenv('ST_EMAIL')
|
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 = {
|
REST_FRAMEWORK = {
|
||||||
# Use Django's standard `django.contrib.auth` permissions,
|
# 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_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_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_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')
|
ACTRL_API_PASSWORD = os.getenv('ACTRL_API_PASSWORD') or os.getenv('ACCESS_CONTROLLER_API_PASSWORD')
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ def update_role(user_profile: UserProfile, role: int) -> None:
|
|||||||
zendesk.admin.users.update(user)
|
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'])
|
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_display(stat)
|
||||||
stat = self._use_interval(stat)
|
stat = self._use_interval(stat)
|
||||||
return stat
|
return stat
|
||||||
else:
|
return None
|
||||||
return None
|
|
||||||
|
|
||||||
def is_valid_statistic(self) -> bool:
|
def is_valid_statistic(self) -> bool:
|
||||||
"""
|
"""
|
||||||
@ -336,8 +335,7 @@ class StatisticData:
|
|||||||
"""
|
"""
|
||||||
if self.is_valid_data():
|
if self.is_valid_data():
|
||||||
return self.data
|
return self.data
|
||||||
else:
|
return None
|
||||||
return None
|
|
||||||
|
|
||||||
def is_valid_data(self) -> bool:
|
def is_valid_data(self) -> bool:
|
||||||
"""
|
"""
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
Модели, использующиеся в приложении.
|
Модели, использующиеся в приложении.
|
||||||
"""
|
"""
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
@ -24,7 +22,7 @@ class UserProfile(models.Model):
|
|||||||
('has_control_access', 'Can view admin page'),
|
('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='Глобальное имя роли пользователя')
|
role = models.CharField(default='None', max_length=100, help_text='Глобальное имя роли пользователя')
|
||||||
custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя')
|
custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя')
|
||||||
image = models.URLField(null=True, blank=True, help_text='Аватарка')
|
image = models.URLField(null=True, blank=True, help_text='Аватарка')
|
||||||
@ -44,7 +42,7 @@ class UserProfile(models.Model):
|
|||||||
return 'UNDEFINED'
|
return 'UNDEFINED'
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=get_user_model())
|
||||||
def create_user_profile(instance, created, **kwargs) -> None:
|
def create_user_profile(instance, created, **kwargs) -> None:
|
||||||
"""
|
"""
|
||||||
Функция создания профиля пользователя (Userprofile) при регистрации пользователя.
|
Функция создания профиля пользователя (Userprofile) при регистрации пользователя.
|
||||||
@ -58,7 +56,7 @@ def create_user_profile(instance, created, **kwargs) -> None:
|
|||||||
UserProfile.objects.create(user=instance)
|
UserProfile.objects.create(user=instance)
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=get_user_model())
|
||||||
def save_user_profile(instance, **kwargs) -> None:
|
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='Пользователь, которому присвоили другую роль')
|
help_text='Пользователь, которому присвоили другую роль')
|
||||||
old_role = models.IntegerField(default=0, help_text='Старая роль')
|
old_role = models.IntegerField(default=0, help_text='Старая роль')
|
||||||
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
|
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
|
||||||
change_time = models.DateTimeField(default=timezone.now, 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='Кем была изменена роль')
|
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='Пользователь, с которого снят тикет')
|
help_text='Пользователь, с которого снят тикет')
|
||||||
ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного')
|
ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного')
|
||||||
status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED,
|
status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED,
|
||||||
|
@ -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 rest_framework import serializers
|
||||||
from main.models import UserProfile
|
from main.models import UserProfile
|
||||||
from access_controller.settings import ZENDESK_ROLES
|
from access_controller.settings import ZENDESK_ROLES
|
||||||
@ -17,7 +17,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
:type email: :class:`list`
|
:type email: :class:`list`
|
||||||
"""
|
"""
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = get_user_model()
|
||||||
fields = ['email']
|
fields = ['email']
|
||||||
|
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ def work_hand_over(request: WSGIRequest) -> HttpResponseRedirect:
|
|||||||
:param request: данные текущего пользователя (login_required)
|
:param request: данные текущего пользователя (login_required)
|
||||||
:return: перезагрузка текущей страницы после выполнения смены роли
|
:return: перезагрузка текущей страницы после выполнения смены роли
|
||||||
"""
|
"""
|
||||||
make_light_agent(request.user.userprofile, request.user)
|
make_light_agent(request.user.userprofile)
|
||||||
return set_session_params_for_work_page(request)
|
return set_session_params_for_work_page(request)
|
||||||
|
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect:
|
|||||||
:param request: данные текущего пользователя (login_required)
|
:param request: данные текущего пользователя (login_required)
|
||||||
:return: перезагрузка текущей страницы после выполнения смены роли
|
:return: перезагрузка текущей страницы после выполнения смены роли
|
||||||
"""
|
"""
|
||||||
make_engineer(request.user.userprofile, request.user)
|
make_engineer(request.user.userprofile)
|
||||||
return set_session_params_for_work_page(request)
|
return set_session_params_for_work_page(request)
|
||||||
|
|
||||||
|
|
||||||
@ -317,7 +317,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageM
|
|||||||
:return: Обновленный список пользователей
|
:return: Обновленный список пользователей
|
||||||
"""
|
"""
|
||||||
for user in users:
|
for user in users:
|
||||||
make_engineer(user, self.request.user)
|
make_engineer(user)
|
||||||
log(user, self.request.user.userprofile)
|
log(user, self.request.user.userprofile)
|
||||||
|
|
||||||
def make_light_agents(self, users: list) -> None:
|
def make_light_agents(self, users: list) -> None:
|
||||||
@ -328,7 +328,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageM
|
|||||||
:return: Обновленный список пользователей
|
:return: Обновленный список пользователей
|
||||||
"""
|
"""
|
||||||
for user in users:
|
for user in users:
|
||||||
make_light_agent(user, self.request.user)
|
make_light_agent(user)
|
||||||
log(user, self.request.user.userprofile)
|
log(user, self.request.user.userprofile)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user