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_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_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') 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 datetime import timedelta, datetime, date
from typing import Optional, Union 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.exceptions import ObjectDoesNotExist
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect 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 user_profile: Профиль пользователя
:param role: Новая роль :param role: Новая роль
:param who_changes: Пользователь, меняющий роль
:return: Пользователь с обновленной ролью :return: Пользователь с обновленной ролью
""" """
zendesk = zenpy zendesk = zenpy
@ -44,7 +43,8 @@ def make_engineer(user_profile: UserProfile, who_changes: get_user_model()) -> N
Функция устанавливает пользователю роль инженера. Функция устанавливает пользователю роль инженера.
:param user_profile: Профиль пользователя :param user_profile: Профиль пользователя
:return: Вызов функции **update_role** с параметрами: профиль пользователя, роль "engineer" :return: Вызов функции **update_role** с параметрами:
профиль пользователя, роль "engineer"
""" """
update_role(user_profile, ROLES['engineer'], who_changes) 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: if tickets.count:
zenpy.admin.tickets.update(tickets.values) zenpy.admin.tickets.update(tickets.values)
attempts, success = 5, False attempts, success = 5, False
while not success and attempts != 0: while not success and attempts != 0:
try: try:
@ -86,7 +85,8 @@ def make_light_agent(user_profile: UserProfile, who_changes: get_user_model()) -
def get_users_list() -> list: def get_users_list() -> list:
""" """
Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации SYSTEM. Функция **get_users_list** возвращает список
пользователей Zendesk, относящихся к организации SYSTEM.
""" """
zendesk = zenpy zendesk = zenpy
@ -186,9 +186,9 @@ def count_users(users: list) -> tuple:
return engineers, light_agents return engineers, light_agents
def update_users_in_model(): def update_users_in_model() -> list:
""" """
Обновляет пользователей в модели UserProfile по списку пользователей в организации Обновляет пользователей в модели UserProfile по списку пользователей в организации.
""" """
users = get_users_list() users = get_users_list()
for user in users: for user in users:
@ -436,7 +436,7 @@ class StatisticData:
if self.data[log_index].new_role == ROLES['engineer']: if self.data[log_index].new_role == ROLES['engineer']:
self.engineer_logic(log_index) 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(): if current_log.change_time.date() != next_log.change_time.date():
self.statistic[current_log.change_time.date()] += ( self.statistic[current_log.change_time.date()] += (
timedelta(days=1) - get_timedelta(current_log)).total_seconds() timedelta(days=1) - get_timedelta(current_log)).total_seconds()
self.statistic[next_log.change_time.date()] += get_timedelta(next_log).total_seconds() self.statistic[next_log.change_time.date(
self.fill_daterange(current_log.change_time.date() + timedelta(days=1), 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: else:
elapsed_time = next_log.change_time - current_log.change_time 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: def post_engineer_logic(self, last_log: RoleChangeLogs) -> None:
""" """
@ -458,16 +461,19 @@ class StatisticData:
:param last_log: Последний лог :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(): if last_log.change_time.date() == timezone.now().date():
self.statistic[last_log.change_time.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() ).total_seconds()
else: else:
self.statistic[last_log.change_time.date()] += ( self.statistic[last_log.change_time.date()] += (
timedelta(days=1) - get_timedelta(last_log)).total_seconds() timedelta(days=1) - get_timedelta(last_log)).total_seconds()
if self.end_date == timezone.now().date(): 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: 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), self.fill_daterange(max(get_user_model().objects.get(email=self.email).date_joined.date(), self.start_date),
first_log.change_time.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 дне). Функция заполняет диапазон дат значением val (по умолчанию val = кол-во секунд в 1 дне).
@ -495,7 +502,8 @@ class StatisticData:
Функция осуществляет обновление всех дней. Функция осуществляет обновление всех дней.
""" """
self.statistic.clear() 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): 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.contrib.auth import get_user_model
from django.db import models
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.utils import timezone from django.utils import timezone
@ -17,7 +15,6 @@ class UserProfile(models.Model):
Модель профиля пользователя. Модель профиля пользователя.
Профиль создается и изменяется при создании и изменении модель User. Профиль создается и изменяется при создании и изменении модель User.
""" """
class Meta: class Meta:
@ -40,6 +37,7 @@ class UserProfile(models.Model):
:return: Роль пользователя в Zendesk :return: Роль пользователя в Zendesk
""" """
id = self.custom_role_id
for role, r_id in ZENDESK_ROLES.items(): for role, r_id in ZENDESK_ROLES.items():
if r_id == self.custom_role_id: if r_id == self.custom_role_id:
return role return role
@ -107,7 +105,6 @@ class UnassignedTicketStatus(models.IntegerChoices):
class UnassignedTicket(models.Model): class UnassignedTicket(models.Model):
""" """
Модель не распределенного тикета. Модель не распределенного тикета.
""" """
assignee = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='tickets', assignee = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='tickets',
help_text='Пользователь, с которого снят тикет') 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 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, \ 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.zendesk_admin import zenpy
from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
from main.serializers import ProfileSerializer, ZendeskUserSerializer from main.serializers import ProfileSerializer, ZendeskUserSerializer