From f65eb546524d9fe04b25c4cf2e2952a5b6f789d5 Mon Sep 17 00:00:00 2001 From: Iurii Tatishchev Date: Tue, 20 Apr 2021 15:39:55 -0700 Subject: [PATCH] Small views.py refactor --- main/views.py | 58 +++++++++++++++++++-------------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/main/views.py b/main/views.py index 818de06..2dc6636 100644 --- a/main/views.py +++ b/main/views.py @@ -1,4 +1,5 @@ from smtplib import SMTPException +from typing import Dict, Any from django.contrib import messages 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.core.handlers.wsgi import WSGIRequest 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.views.generic import FormView from django_registration.views import RegistrationView # Django REST from rest_framework import viewsets 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 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, - registration_lit: bool = False, login_lit: bool = False, stats_lit: bool = False): - - print(profile_lit, control_lit, work_lit, registration_lit, login_lit) + registration_lit: bool = False, login_lit: bool = False, stats_lit: bool = False) -> Dict[str, Any]: context = { 'profile_lit': profile_lit, @@ -160,18 +158,6 @@ def profile_page(request: WSGIRequest) -> HttpResponse: 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() def work_page(request: WSGIRequest, id: int) -> HttpResponse: """ @@ -186,7 +172,6 @@ def work_page(request: WSGIRequest, id: int) -> HttpResponse: engineers = [] light_agents = [] for user in users: - if user.custom_role_id == ZENDESK_ROLES['engineer']: engineers.append(user) elif user.custom_role_id == ZENDESK_ROLES['light_agent']: @@ -207,39 +192,38 @@ def work_page(request: WSGIRequest, id: int) -> HttpResponse: @login_required() def work_hand_over(request: WSGIRequest) -> HttpResponseRedirect: """ - Функция позволяет текущему пользователю (login_required) сдать права, а именно сменить в Zendesk роль с "engineer" на "light agent" - и установить роль "agent" в БД. Действия выполняются, если исходная роль пользователя "engineer". + Функция позволяет текущему пользователю сдать права, а именно сменить в Zendesk роль с "engineer" на "light_agent" :param request: данные текущего пользователя (login_required) :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,))) @login_required() def work_become_engineer(request: WSGIRequest) -> HttpResponseRedirect: """ - Функция меняет роль пользователя в Zendesk на "engineer" и присваивает роль "agent" в БД (в случае, если исходная роль пользователя была "light_agent"). + Функция позволяет текущему пользователю получить права, а именно сменить в Zendesk роль с "light_agent" на "engineer" :param request: данные текущего пользователя (login_required) :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,))) + @login_required() def work_get_tickets(request): - zenpy_user, admin = auth_user(request) 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)): if i == count_tickets: return HttpResponseRedirect(reverse('work', args=(request.user.id,))) - tickets[i].assignee = zenpy_user - admin.tickets.update(tickets[i]) + tickets[i].assignee = zenpy.get_user(request.user.email) + zenpy.admin.tickets.update(tickets[i]) return HttpResponseRedirect(reverse('work', args=(request.user.id,))) @@ -378,16 +362,16 @@ 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.set_display(show) - Data.set_interval(interval) - stats = Data.get_statistic() - if Data.errors: - context['errors'] = Data.errors - if Data.warnings: - context['warnings'] = Data.warnings + data = StatisticData(start_date, end_date, form.cleaned_data['email']) + data.set_display(show) + data.set_interval(interval) + stats = data.get_statistic() + if data.errors: + context['errors'] = data.errors + if data.warnings: + context['warnings'] = data.warnings context['log_stats'] = stats if not context['errors'] else None - if request.method == 'GET': + elif request.method == 'GET': form = StatisticForm() context['form'] = form return render(request, 'pages/statistic.html', context)