Use pylint for views
This commit is contained in:
parent
d8b15d087b
commit
3b54a520cb
25
.env.example
25
.env.example
@ -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"
|
|
||||||
|
|
@ -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 используем:
|
||||||
|
12
data.json
12
data.json
@ -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"
|
||||||
}
|
}
|
||||||
|
@ -104,4 +104,5 @@ db
|
|||||||
юзерами
|
юзерами
|
||||||
Read
|
Read
|
||||||
Zenpy
|
Zenpy
|
||||||
|
залогинен
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user