From 3b54a520cb6a730c60988ec8c7de654494257e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=B5=D0=BD=D0=BA?= =?UTF-8?q?=D0=BE=20=D0=9E=D0=BB=D1=8C=D0=B3=D0=B0?= Date: Wed, 28 Apr 2021 14:15:40 +0300 Subject: [PATCH] Use pylint for views --- .env.example | 25 ----------- README.md | 1 - data.json | 12 +++--- docs/source/spelling_wordlist.txt | 1 + main/views.py | 72 +++++++++++++++++++++---------- 5 files changed, 57 insertions(+), 54 deletions(-) delete mode 100644 .env.example diff --git a/.env.example b/.env.example deleted file mode 100644 index 58e7b51..0000000 --- a/.env.example +++ /dev/null @@ -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" - diff --git a/README.md b/README.md index 51a76ef..cca37dd 100644 --- a/README.md +++ b/README.md @@ -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 используем: diff --git a/data.json b/data.json index a4310a4..97678f3 100644 --- a/data.json +++ b/data.json @@ -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" } diff --git a/docs/source/spelling_wordlist.txt b/docs/source/spelling_wordlist.txt index 1582561..4ccad53 100644 --- a/docs/source/spelling_wordlist.txt +++ b/docs/source/spelling_wordlist.txt @@ -104,4 +104,5 @@ db юзерами Read Zenpy +залогинен diff --git a/main/views.py b/main/views.py index dc0c65a..7c58221 100644 --- a/main/views.py +++ b/main/views.py @@ -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()