Merge remote-tracking branch 'origin/feature/pylint' into feature/pylint

# Conflicts:
#	README.md
#	access_controller/settings.py
#	main/extra_func.py
#	main/models.py
#	main/views.py
This commit is contained in:
Степаненко Ольга 2021-05-06 18:10:57 +03:00
commit 0dc840bba7
4 changed files with 30 additions and 23 deletions

View File

@ -181,3 +181,5 @@ ACTRL_ZENDESK_SUBDOMAIN = os.getenv('ACTRL_ZENDESK_SUBDOMAIN') or os.getenv('ZD_
ACTRL_API_EMAIL = os.getenv('ACTRL_API_EMAIL') or os.getenv('ACCESS_CONTROLLER_API_EMAIL')
ACTRL_API_TOKEN = os.getenv('ACTRL_API_TOKEN') or os.getenv('ACCESS_CONTROLLER_API_TOKEN')
ACTRL_API_PASSWORD = os.getenv('ACTRL_API_PASSWORD') or os.getenv('ACCESS_CONTROLLER_API_PASSWORD')

View File

@ -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.change_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):

View File

@ -1,10 +1,8 @@
"""
Модели, использующиеся в приложении.
"""
from django.db import models
from django.contrib.auth import get_user_model
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils import timezone
@ -17,7 +15,6 @@ class UserProfile(models.Model):
Модель профиля пользователя.
Профиль создается и изменяется при создании и изменении модель User.
"""
class Meta:
@ -40,6 +37,7 @@ class UserProfile(models.Model):
:return: Роль пользователя в Zendesk
"""
id = self.custom_role_id
for role, r_id in ZENDESK_ROLES.items():
if r_id == self.custom_role_id:
return role
@ -107,7 +105,6 @@ class UnassignedTicketStatus(models.IntegerChoices):
class UnassignedTicket(models.Model):
"""
Модель не распределенного тикета.
"""
assignee = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='tickets',
help_text='Пользователь, с которого снят тикет')

View File

@ -28,7 +28,7 @@ from rest_framework.response import Response
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, make_engineer, make_light_agent, \
get_users_list, update_users_in_model, count_users, StatisticData, set_session_params_for_work_page
get_users_list, update_users_in_model, count_users, StatisticData, log, set_session_params_for_work_page
from main.zendesk_admin import zenpy
from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
from main.serializers import ProfileSerializer, ZendeskUserSerializer