Small views.py refactor

This commit is contained in:
Iurii Tatishchev 2021-04-20 15:39:55 -07:00
parent 7f837d9944
commit f65eb54652
Signed by: CaZzzer
GPG Key ID: 926BE949E29DCD03

View File

@ -1,4 +1,5 @@
from smtplib import SMTPException from smtplib import SMTPException
from typing import Dict, Any
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
@ -11,14 +12,13 @@ from django.contrib.contenttypes.models import ContentType
from django.contrib.messages.views import SuccessMessageMixin 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, get_list_or_404 from django.shortcuts import render, redirect
from django.urls import reverse_lazy, reverse from django.urls import reverse_lazy, reverse
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
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response from rest_framework.response import Response
from zenpy.lib.api_objects import User as ZenpyUser
from access_controller.settings import DEFAULT_FROM_EMAIL, ZENDESK_ROLES, ZENDESK_MAX_AGENTS from access_controller.settings import DEFAULT_FROM_EMAIL, ZENDESK_ROLES, ZENDESK_MAX_AGENTS
from main.extra_func import check_user_exist, update_profile, get_user_organization, \ from main.extra_func import check_user_exist, update_profile, get_user_organization, \
@ -31,9 +31,7 @@ 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, stats_lit: bool = False): registration_lit: bool = False, login_lit: bool = False, stats_lit: bool = False) -> Dict[str, Any]:
print(profile_lit, control_lit, work_lit, registration_lit, login_lit)
context = { context = {
'profile_lit': profile_lit, 'profile_lit': profile_lit,
@ -160,18 +158,6 @@ def profile_page(request: WSGIRequest) -> HttpResponse:
return render(request, 'pages/profile.html', context) return render(request, 'pages/profile.html', context)
def auth_user(request: WSGIRequest) -> ZenpyUser:
"""
Функция возвращает профиль пользователя на Zendesk.
:param request: email, subdomain и token пользователя
:return: объект пользователя Zendesk
"""
admin = zenpy.admin
zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0]
return zenpy_user, admin
@login_required() @login_required()
def work_page(request: WSGIRequest, id: int) -> HttpResponse: def work_page(request: WSGIRequest, id: int) -> HttpResponse:
""" """
@ -186,7 +172,6 @@ def work_page(request: WSGIRequest, id: int) -> HttpResponse:
engineers = [] engineers = []
light_agents = [] light_agents = []
for user in users: for user in users:
if user.custom_role_id == ZENDESK_ROLES['engineer']: if user.custom_role_id == ZENDESK_ROLES['engineer']:
engineers.append(user) engineers.append(user)
elif user.custom_role_id == ZENDESK_ROLES['light_agent']: elif user.custom_role_id == ZENDESK_ROLES['light_agent']:
@ -207,39 +192,38 @@ 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:
""" """
Функция позволяет текущему пользователю (login_required) сдать права, а именно сменить в Zendesk роль с "engineer" на "light agent" Функция позволяет текущему пользователю сдать права, а именно сменить в Zendesk роль с "engineer" на "light_agent"
и установить роль "agent" в БД. Действия выполняются, если исходная роль пользователя "engineer".
:param request: данные текущего пользователя (login_required) :param request: данные текущего пользователя (login_required)
:return: перезагрузка текущей страницы после выполнения смены роли :return: перезагрузка текущей страницы после выполнения смены роли
""" """
make_light_agent(request.user.userprofile,request.user) make_light_agent(request.user.userprofile, request.user)
return HttpResponseRedirect(reverse('work', args=(request.user.id,))) return HttpResponseRedirect(reverse('work', args=(request.user.id,)))
@login_required() @login_required()
def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect: def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect:
""" """
Функция меняет роль пользователя в Zendesk на "engineer" и присваивает роль "agent" в БД (в случае, если исходная роль пользователя была "light_agent"). Функция позволяет текущему пользователю получить права, а именно сменить в Zendesk роль с "light_agent" на "engineer"
:param request: данные текущего пользователя (login_required) :param request: данные текущего пользователя (login_required)
:return: перезагрузка текущей страницы после выполнения смены роли :return: перезагрузка текущей страницы после выполнения смены роли
""" """
zenpy_user, admin = auth_user(request)
make_engineer(request.user.userprofile,request.user) make_engineer(request.user.userprofile, request.user)
return HttpResponseRedirect(reverse('work', args=(request.user.id,))) return HttpResponseRedirect(reverse('work', args=(request.user.id,)))
@login_required() @login_required()
def work_get_tickets(request): def work_get_tickets(request):
zenpy_user, admin = auth_user(request)
count_tickets = int(request.GET["count_tickets"]) count_tickets = int(request.GET["count_tickets"])
tickets = [ticket for ticket in admin.search(type="ticket") if ticket.group.name == 'Сменная группа' and ticket.assignee is None] tickets = [ticket for ticket in zenpy.admin.search(type="ticket") if
ticket.group.name == 'Сменная группа' and ticket.assignee is None]
for i in range(len(tickets)): for i in range(len(tickets)):
if i == count_tickets: if i == count_tickets:
return HttpResponseRedirect(reverse('work', args=(request.user.id,))) return HttpResponseRedirect(reverse('work', args=(request.user.id,)))
tickets[i].assignee = zenpy_user tickets[i].assignee = zenpy.get_user(request.user.email)
admin.tickets.update(tickets[i]) zenpy.admin.tickets.update(tickets[i])
return HttpResponseRedirect(reverse('work', args=(request.user.id,))) return HttpResponseRedirect(reverse('work', args=(request.user.id,)))
@ -378,16 +362,16 @@ 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, form.cleaned_data['email']) data = StatisticData(start_date, end_date, 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()
if Data.errors: if data.errors:
context['errors'] = Data.errors context['errors'] = data.errors
if Data.warnings: if data.warnings:
context['warnings'] = Data.warnings context['warnings'] = data.warnings
context['log_stats'] = stats if not context['errors'] else None context['log_stats'] = stats if not context['errors'] else None
if request.method == 'GET': elif request.method == 'GET':
form = StatisticForm() form = StatisticForm()
context['form'] = form context['form'] = form
return render(request, 'pages/statistic.html', context) return render(request, 'pages/statistic.html', context)