Use pylint for views

This commit is contained in:
Степаненко Ольга 2021-04-28 14:15:40 +03:00
parent d8b15d087b
commit 3b54a520cb
5 changed files with 57 additions and 54 deletions

View File

@ -1,25 +0,0 @@
ACTRL_DEBUG=1
ACTRL_SECRET_KEY="v1i_fb\$_jf2#1v_lcsbu&eon4u-os0^px=s^iycegdycqy&5)6"
ACTRL_HOST="actrl.example.com"
ACTRL_EMAIL_HOST="smtp.mail.ru"
ACTRL_EMAIL_PORT=2525
ACTRL_EMAIL_TLS=1
ACTRL_EMAIL_HOST_USER="djgr.02@mail.ru"
ACTRL_EMAIL_HOST_PASSWORD="djangogroup02"
ACTRL_FROM_EMAIL="djgr.02@mail.ru"
ACTRL_SERVER_EMAIL="djgr.02@mail.ru"
ENG_CROLE_ID=360005209000
LA_CROLE_ID=360005208980
EMPL_GROUP="Поддержка"
BUF_GROUP="Сменная группа"
ST_EMAIL="d.krikov@ngenix.net"
LICENSE_NO=3
SHIFTH=12
ACTRL_ZENDESK_SUBDOMAIN="ngenix1612197338"
ACTRL_API_EMAIL="stepanenko_olga@mail.ru"
ACTRL_API_TOKEN="X1x4QeNa4xRdul2rTIKhac98AsXMwd5bOGAyZOtU"

View File

@ -148,7 +148,6 @@ docker run -d -p 8000:8000 \
Пример полной конфигурации можно найти в [.env.example](.env.example). Почту и токен админа ZenDesk взять у руководителя (если вы не админ). Пример полной конфигурации можно найти в [.env.example](.env.example). Почту и токен админа ZenDesk взять у руководителя (если вы не админ).
## Для проверки pylint используем: ## Для проверки pylint используем:
pylint --load-plugins pylint_django --disable=E5110,C0415 ../access_controller
pylint ../access_controller pylint ../access_controller
## Для приведения файлов к стандарту PEP8 используем: ## Для приведения файлов к стандарту PEP8 используем:

View File

@ -1,7 +1,7 @@
[ [
{ {
"model": "auth.user", "model": "auth.user",
"pk": 1, "pk": 3,
"fields": { "fields": {
"password": "pbkdf2_sha256$216000$gHBBCr1jBELf$ZkEDW3IEd8Wij7u8vkv+0Eze32CS01bcaYWhcD9OIC4=", "password": "pbkdf2_sha256$216000$gHBBCr1jBELf$ZkEDW3IEd8Wij7u8vkv+0Eze32CS01bcaYWhcD9OIC4=",
"last_login": null, "last_login": null,
@ -19,16 +19,16 @@
}, },
{ {
"model": "main.userprofile", "model": "main.userprofile",
"pk": 1, "pk": 3,
"fields": { "fields": {
"name": "ZendeskAdmin", "name": "ZendeskAdmin",
"user": 1, "user": 3,
"role": "admin" "role": "admin"
} }
}, },
{ {
"model": "auth.user", "model": "auth.user",
"pk": 2, "pk": 4,
"fields": { "fields": {
"password": "pbkdf2_sha256$216000$5qLJgrm2Quq9$KDBNNymVZXkUx0HKBPFst2m83kLe0egPBnkW7KnkORU=", "password": "pbkdf2_sha256$216000$5qLJgrm2Quq9$KDBNNymVZXkUx0HKBPFst2m83kLe0egPBnkW7KnkORU=",
"last_login": null, "last_login": null,
@ -46,10 +46,10 @@
}, },
{ {
"model": "main.userprofile", "model": "main.userprofile",
"pk": 2, "pk": 4,
"fields": { "fields": {
"name": "UserForAccessTest", "name": "UserForAccessTest",
"user": 2, "user": 4,
"role": "agent", "role": "agent",
"custom_role_id": "360005209000" "custom_role_id": "360005209000"
} }

View File

@ -104,4 +104,5 @@ db
юзерами юзерами
Read Read
Zenpy Zenpy
залогинен

View File

@ -1,9 +1,5 @@
"""
Основной функционал приложения.
"""
from smtplib import SMTPException from smtplib import SMTPException
from typing import Dict, Any from typing import Dict, Any, Optional
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -17,7 +13,7 @@ from django.contrib.messages.views import SuccessMessageMixin
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.urls import reverse_lazy, reverse from django.urls import reverse_lazy
from django.views.generic import FormView from django.views.generic import FormView
from django_registration.views import RegistrationView from django_registration.views import RegistrationView
# Django REST # Django REST
@ -34,8 +30,18 @@ from .models import UserProfile
def setup_context(profile_lit: bool = False, control_lit: bool = False, work_lit: bool = False, def setup_context(profile_lit: bool = False, control_lit: bool = False, work_lit: bool = False,
registration_lit: bool = False, login_lit: bool = False, registration_lit: bool = False, login_lit: bool = False, stats_lit: bool = False) -> Dict[str, Any]:
stats_lit: bool = False) -> Dict[str, Any]: """
Функция добавления в контекст статуса пользователя.
:param profile_lit: True, при создании профиля пользователя, иначе False
:param control_lit: False
:param work_lit: True, при установке пользователю рабочей роли, иначе False
:param registration_lit: True, при регистрации пользователя, иначе False
:param login_lit: True, если пользователь залогинен, иначе False
:param stats_lit: True, при получении пользователем прав администратора (просмотр статистики), иначе False
:return: Контекст (context)
"""
context = { context = {
'profile_lit': profile_lit, 'profile_lit': profile_lit,
@ -72,7 +78,7 @@ class CustomRegistrationView(RegistrationView):
} }
redirect_url = 'done' redirect_url = 'done'
def register(self, form: CustomRegistrationForm) -> None: def register(self, form: CustomRegistrationForm) -> Optional[User]:
""" """
Функция регистрации пользователя. Функция регистрации пользователя.
1. Ввод email пользователя, указанный на Zendesk 1. Ввод email пользователя, указанный на Zendesk
@ -81,7 +87,7 @@ class CustomRegistrationView(RegistrationView):
3. Создается пользователь class User, а также его профиль. 3. Создается пользователь class User, а также его профиль.
:param form: Email пользователя на Zendesk :param form: Email пользователя на Zendesk
:return: user :return: User
""" """
self.redirect_url = 'done' self.redirect_url = 'done'
if check_user_exist(form.data['email']) and get_user_organization(form.data['email']) == 'SYSTEM': if check_user_exist(form.data['email']) and get_user_organization(form.data['email']) == 'SYSTEM':
@ -109,10 +115,12 @@ class CustomRegistrationView(RegistrationView):
return user return user
except SMTPException: except SMTPException:
self.redirect_url = 'email_sending_error' self.redirect_url = 'email_sending_error'
return None
else: else:
raise ValueError('Непредвиденная ошибка') raise ValueError('Непредвиденная ошибка')
else: else:
self.redirect_url = 'invalid_zendesk_email' self.redirect_url = 'invalid_zendesk_email'
return None
@staticmethod @staticmethod
def set_permission(user: User) -> None: def set_permission(user: User) -> None:
@ -176,8 +184,7 @@ def work_page(request: WSGIRequest, id: int) -> HttpResponse:
:param request: объект пользователя :param request: объект пользователя
:param id: id пользователя, используется для динамической адресации :param id: id пользователя, используется для динамической адресации
:return: адресация на страницу "Управления правами" :return: адресация на страницу "Управления правами" (либо на страницу "Авторизации", если id и user.id не совпадают
(либо на страницу "Авторизации", если id и user.id не совпадают)
""" """
users = get_users_list() users = get_users_list()
if request.user.id == id: if request.user.id == id:
@ -213,7 +220,7 @@ def work_page(request: WSGIRequest, id: int) -> HttpResponse:
@login_required() @login_required()
def work_hand_over(request: WSGIRequest) -> HttpResponseRedirect: def work_hand_over(request: WSGIRequest) -> HttpResponseRedirect:
""" """
Функция позволяет текущему пользователю сдать права, а именно сменить в Zendesk роль с "engineer" на "light_agent". Функция позволяет текущему пользователю сдать права, а именно сменить в Zendesk роль с "engineer" на "light_agent"
:param request: данные текущего пользователя (login_required) :param request: данные текущего пользователя (login_required)
:return: перезагрузка текущей страницы после выполнения смены роли :return: перезагрузка текущей страницы после выполнения смены роли
@ -225,13 +232,12 @@ def work_hand_over(request: WSGIRequest) -> HttpResponseRedirect:
@login_required() @login_required()
def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect: def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect:
""" """
Функция позволяет текущему пользователю получить права, а именно сменить в Zendesk роль с "light_agent" на Функция позволяет текущему пользователю получить права, а именно сменить в Zendesk роль с "light_agent"
"engineer". на "engineer".
:param request: данные текущего пользователя (login_required) :param request: данные текущего пользователя (login_required)
:return: перезагрузка текущей страницы после выполнения смены роли :return: перезагрузка текущей страницы после выполнения смены роли
""" """
make_engineer(request.user.userprofile, request.user) make_engineer(request.user.userprofile, request.user)
return set_session_params_for_work_page(request) return set_session_params_for_work_page(request)
@ -331,12 +337,24 @@ class CustomLoginView(LoginView):
class UsersViewSet(viewsets.ReadOnlyModelViewSet): class UsersViewSet(viewsets.ReadOnlyModelViewSet):
""" """
Класс для получения пользователей с помощью api Класс для получения пользователей с помощью api.
:param queryset: Список пользователей с ролью 'agent'
:type queryset: :class:`str`
:param serializer_class: Класс сериализатор для модели профиля пользователя
:type serializer_class :class:`ProfileSerializer`
""" """
queryset = UserProfile.objects.filter(role='agent') queryset = UserProfile.objects.filter(role='agent')
serializer_class = ProfileSerializer serializer_class = ProfileSerializer
def list(self, request, *args, **kwargs): def list(self, request: WSGIRequest, *args, **kwargs) -> Response:
"""
Функция возвращает список пользователей, список пользователей Zendesk, количество engineers и light-agents.
:param request: Запрос
:param args: Аргументы
:param kwargs: Параметры
:return: Список пользователей
"""
users = update_users_in_model() users = update_users_in_model()
count = count_users(users.values) count = count_users(users.values)
profiles = UserProfile.objects.filter(role='agent') profiles = UserProfile.objects.filter(role='agent')
@ -351,7 +369,13 @@ class UsersViewSet(viewsets.ReadOnlyModelViewSet):
return Response(res) return Response(res)
@staticmethod @staticmethod
def choose_users(zendesk, model) -> list: def choose_users(zendesk: list, model: list) -> list:
"""
Функция формирует список пользователей, которые не зарегистрированы у нас.
:param zendesk: Список пользователей Zendesk
:param model: Список пользователей (модель Userprofile)
:return: Список
"""
users = [] users = []
for zendesk_user in zendesk: for zendesk_user in zendesk:
if zendesk_user.name not in [user.name for user in model]: if zendesk_user.name not in [user.name for user in model]:
@ -359,7 +383,12 @@ class UsersViewSet(viewsets.ReadOnlyModelViewSet):
return users return users
@staticmethod @staticmethod
def get_zendesk_users(users: list) -> ZendeskUserSerializer: def get_zendesk_users(users: list) -> list:
"""
Получение списка пользователей Zendesk, не являющихся админами.
:param users: Список пользователей
:return: Список пользователей, не являющимися администраторами.
"""
zendesk_users = ZendeskUserSerializer( zendesk_users = ZendeskUserSerializer(
data=[user for user in users if user.role != 'admin'], data=[user for user in users if user.role != 'admin'],
many=True many=True
@ -393,8 +422,7 @@ def statistic_page(request: WSGIRequest) -> HttpResponse:
if form.is_valid(): if form.is_valid():
start_date, end_date = form.cleaned_data['range_start'], form.cleaned_data['range_end'] start_date, end_date = form.cleaned_data['range_start'], form.cleaned_data['range_end']
interval, show = form.cleaned_data['interval'], form.cleaned_data['display_format'] interval, show = form.cleaned_data['interval'], form.cleaned_data['display_format']
data = StatisticData(start_date, end_date, data = StatisticData(start_date, end_date, form.cleaned_data['email'])
form.cleaned_data['email'])
data.set_display(show) data.set_display(show)
data.set_interval(interval) data.set_interval(interval)
stats = data.get_statistic() stats = data.get_statistic()