@@ -5,7 +5,7 @@ import logging
from datetime import timedelta , datetime , date
from typing import Optional , Union
from django . contrib . auth import get_user_model
from django . contrib . auth . models import User
from django . core . exceptions import ObjectDoesNotExist
from django . core . handlers . wsgi import WSGIRequest
from django . http import HttpResponseRedirect , HttpResponsePermanentRedirect
@@ -27,7 +27,6 @@ def update_role(user_profile: UserProfile, role: int, who_changes: get_user_mode
:param user_profile: Профиль пользователя
:param role: Новая роль
:param who_changes: Пользователь, меняющий роль
:return: Пользователь с обновленной ролью
"""
zendesk = zenpy
@@ -44,7 +43,8 @@ def make_engineer(user_profile: UserProfile, who_changes: get_user_model()) -> N
Функция устанавливает пользователю роль инженера.
:param user_profile: Профиль пользователя
:return: Вызов функции **update_role** с параметрами: профиль пользователя, роль " engineer "
:return: Вызов функции **update_role** с параметрами:
профиль пользователя, роль " engineer "
"""
update_role ( user_profile , ROLES [ ' engineer ' ] , who_changes )
@@ -72,7 +72,6 @@ def make_light_agent(user_profile: UserProfile, who_changes: get_user_model()) -
if tickets . count :
zenpy . admin . tickets . update ( tickets . values )
attempts , success = 5 , False
while not success and attempts != 0 :
try :
@@ -86,7 +85,8 @@ def make_light_agent(user_profile: UserProfile, who_changes: get_user_model()) -
def get_users_list ( ) - > list :
"""
Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации SYSTEM.
Функция **get_users_list** возвращает список
пользователей Zendesk, относящихся к организации SYSTEM.
"""
zendesk = zenpy
@@ -186,9 +186,9 @@ def count_users(users: list) -> tuple:
return engineers , light_agents
def update_users_in_model ( ) :
def update_users_in_model ( ) - > list :
"""
Обновляет пользователей в модели UserProfile по списку пользователей в организации
Обновляет пользователей в модели UserProfile по списку пользователей в организации.
"""
users = get_users_list ( )
for user in users :
@@ -436,7 +436,7 @@ class StatisticData:
if self . data [ log_index ] . new_role == ROLES [ ' engineer ' ] :
self . engineer_logic ( log_index )
def engineer_logic ( self , log_index ) :
def engineer_logic ( self , log_index : int ) - > None :
"""
Функция обрабатывает основную часть работы инженера.
@@ -446,11 +446,14 @@ class StatisticData:
if current_log . change_time . date ( ) != next_log . change_time . date ( ) :
self . statistic [ current_log . change_time . date ( ) ] + = (
timedelta ( days = 1 ) - get_timedelta ( current_log ) ) . total_seconds ( )
self . statistic [ next_log . change_time . date ( ) ] + = get_timedelta ( next_log ) . total_seconds ( )
self . fill_daterange ( current_log . chan ge_time. date ( ) + timedelta ( days = 1 ) , next_log . change_time . date ( ) )
self . statistic [ next_log . change_time . date (
) ] + = get _timedelta ( next_log ) . total_seconds ( )
self . fill_daterange ( current_log . change_time . date (
) + timedelta ( days = 1 ) , next_log . change_time . date ( ) )
else :
elapsed_time = next_log . change_time - current_log . change_time
self . statistic [ current_log . change_time . date ( ) ] + = elapsed_time . total_seconds ( )
self . statistic [ current_log . change_time . date (
) ] + = elapsed_time . total_seconds ( )
def post_engineer_logic ( self , last_log : RoleChangeLogs ) - > None :
"""
@@ -458,16 +461,19 @@ class StatisticData:
:param last_log: Последний лог
"""
self . fill_daterange ( last_log . change_time . date ( ) + timedelta ( days = 1 ) , self . end_date + timedelta ( days = 1 ) )
self . fill_daterange ( last_log . change_time . date (
) + timedelta ( days = 1 ) , self . end_date + timedelta ( days = 1 ) )
if last_log . change_time . date ( ) == timezone . now ( ) . date ( ) :
self . statistic [ last_log . change_time . date ( ) ] + = (
get_timedelta ( None , timezone . now ( ) . time ( ) ) - get_timedelta ( last_log )
get_timedelta ( None , timezone . now ( ) . time ( ) ) -
get_timedelta ( last_log )
) . total_seconds ( )
else :
self . statistic [ last_log . change_time . date ( ) ] + = (
timedelta ( days = 1 ) - get_timedelta ( last_log ) ) . total_seconds ( )
if self . end_date == timezone . now ( ) . date ( ) :
self . statistic [ self . end_date ] = get_timedelta ( None , timezone . now ( ) . time ( ) ) . total_seconds ( )
self . statistic [ self . end_date ] = get_timedelta (
None , timezone . now ( ) . time ( ) ) . total_seconds ( )
def prev_engineer_logic ( self , first_log : RoleChangeLogs ) - > None :
"""
@@ -477,9 +483,10 @@ class StatisticData:
"""
self . fill_daterange ( max ( get_user_model ( ) . objects . get ( email = self . email ) . date_joined . date ( ) , self . start_date ) ,
first_log . change_time . date ( ) )
self . statistic [ first_log . change_time . date ( ) ] + = get_timedelta ( first_log ) . total_seconds ( )
self . statistic [ first_log . change_time . date (
) ] + = get_timedelta ( first_log ) . total_seconds ( )
def fill_daterange ( self , first : date , last : date , val : int = 24 * 3600 ) - > dict :
def fill_daterange ( self , first : date , last : date , val : int = 24 * 3600 ) - > None :
"""
Функция заполняет диапазон дат значением val (по умолчанию val = кол-во секунд в 1 дне).
@@ -495,7 +502,8 @@ class StatisticData:
Функция осуществляет обновление всех дней.
"""
self . statistic . clear ( )
self . fill_daterange ( self . start_date , self . end_date + timedelta ( days = 1 ) , 0 )
self . fill_daterange (
self . start_date , self . end_date + timedelta ( days = 1 ) , 0 )
class DatabaseHandler ( logging . Handler ) :