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 взять у руководителя (если вы не админ).
## Для проверки pylint используем:
pylint --load-plugins pylint_django --disable=E5110,C0415 ../access_controller
pylint ../access_controller
## Для приведения файлов к стандарту PEP8 используем:

View File

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

View File

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

View File

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