diff --git a/main/extra_func.py b/main/extra_func.py index 70b57d3..ea37003 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -1,5 +1,6 @@ import os from datetime import timedelta, datetime, date +from typing import Optional from django.contrib.auth.models import User from django.core.exceptions import ObjectDoesNotExist @@ -47,7 +48,10 @@ class ZendeskAdmin: def get_user_name(self, email: str) -> str: """ - Функция **get_user_name** возвращает имя пользователя по его email + Функция **get_user_name** возвращает имя пользователя по его email. + + :param email: Email пользователя + :return: Имя пользователя """ user = self.admin.users.search(email).values[0] return user.name @@ -72,7 +76,7 @@ class ZendeskAdmin: user = self.admin.users.search(email).values[0] return user.id - def get_user_image(self, email: str) -> str: + def get_user_image(self, email: str) -> Optional[str]: """ Функция возвращает url-ссылку на аватар пользователя по его email. @@ -91,9 +95,9 @@ class ZendeskAdmin: """ return self.admin.users.search(email).values[0] - def get_group(self, name: str) -> str: + def get_group(self, name: str) -> Optional[str]: """ - Функция возвращает группы, к которым принадлежит пользователь. + Функция возвращает группу, к которой принадлежит пользователь. :param name: Имя пользователя :return: Группы пользователя (в случае отсутствия None) @@ -103,7 +107,7 @@ class ZendeskAdmin: return group return None - def get_user_org(self, email: str) -> str: + def get_user_org(self, email: str) -> Optional[str]: """ Функция возвращает организацию, к которой относится пользователь по его email. @@ -204,7 +208,7 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> UserProfil def get_users_list() -> list: """ - Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации SYSTEM. + Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации SYSTEM. """ zendesk = ZendeskAdmin() @@ -214,9 +218,12 @@ def get_users_list() -> list: return users -def get_tickets_list(email): +def get_tickets_list(email: str) -> list: """ - Функция возвращает список тикетов пользователя Zendesk + Функция возвращает список тикетов пользователя Zendesk. + + :param email: Email пользователя + :return: Список тикетов пользователя """ return ZendeskAdmin().admin.search(assignee=email, type='ticket') @@ -260,6 +267,8 @@ def check_user_auth(email: str, password: str) -> bool: """ Функция проверяет, верны ли входные данные. + :param email: Email пользователя + :param password: Пароль пользователя :raise: :class:`APIException`: исключение, вызываемое если пользователь не аутентифицирован """ creds = { @@ -293,7 +302,7 @@ def update_user_in_model(profile: UserProfile, zendesk_user: User) -> UserProfil def count_users(users) -> tuple: """ - Функция подсчета количества сотрудников с ролями engineer и light_agent + Функция подсчета количества сотрудников с ролями engineer и light_agent """ engineers, light_agents = 0, 0 for user in users: @@ -304,9 +313,9 @@ def count_users(users) -> 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: @@ -318,7 +327,7 @@ def update_users_in_model(): return users -def daterange(start_date, end_date) -> list: +def daterange(start_date: date, end_date: date) -> list: """ Функция возвращает список дней с start_date по end_date, исключая правую границу. @@ -332,7 +341,7 @@ def daterange(start_date, end_date) -> list: return dates -def get_timedelta(log, time=None) -> timedelta: +def get_timedelta(log: RoleChangeLogs, time: datetime =None) -> timedelta: """ Функция возвращает объект класса timedelta, который хранит промежуток времени от начала суток до момента, который находится в log (объект класса RoleChangeLogs) или в time(datetime.time), если введён. @@ -399,7 +408,7 @@ class StatisticData: else: self.statistic = stat - def get_statistic(self) -> dict: + def get_statistic(self) -> Optional[dict]: """ Функция возвращает статистику работы пользователя. @@ -447,7 +456,7 @@ class StatisticData: self.display = display_format return True - def get_data(self) -> list: + def get_data(self) -> Optional[list]: """ Функция возвращает данные - список объектов RoleChangeLogs. """ @@ -515,7 +524,7 @@ class StatisticData: return False return True - def _init_data(self): + def _init_data(self) -> Optional[list]: """ Функция возвращает логи в диапазоне дат start_date - end_date для пользователя с указанным email. @@ -532,7 +541,7 @@ class StatisticData: except User.DoesNotExist: self.errors += ['Пользователь не найден'] - def _init_statistic(self) -> dict: + def _init_statistic(self) -> Optional[dict]: """ Функция заполняет словарь, в котором ключ - дата, значение - кол-во проработанных в этот день секунд. @@ -554,7 +563,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) -> dict: """ Функция обрабатывает основную часть работы инженера """ @@ -568,7 +577,7 @@ class StatisticData: elapsed_time = next_log.change_time - current_log.change_time self.statistic[current_log.change_time.date()] += elapsed_time.total_seconds() - def post_engineer_logic(self, last_log): + def post_engineer_logic(self, last_log: RoleChangeLogs): """ Функция обрабатывает случай, когда нам известно что инженер работал и после диапазона """ @@ -583,7 +592,7 @@ class StatisticData: if self.end_date == timezone.now().date(): self.statistic[self.end_date] = get_timedelta(None, timezone.now().time()).total_seconds() - def prev_engineer_logic(self, first_log): + def prev_engineer_logic(self, first_log: RoleChangeLogs) ->dict: """ Функция обрабатывает случай, когда нам известно что инженер начал работу до диапазона """ diff --git a/main/views.py b/main/views.py index cacca82..29c2796 100644 --- a/main/views.py +++ b/main/views.py @@ -1,6 +1,7 @@ import logging import os from datetime import datetime +from typing import Union, Tuple from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import PasswordResetForm @@ -54,7 +55,7 @@ class CustomRegistrationView(RegistrationView): success_url: str = reverse_lazy('django_registration_complete') is_allowed: bool = True - def register(self, form: CustomRegistrationForm) -> User: + def register(self, form: CustomRegistrationForm) -> Union[User, bool]: """ Функция регистрации пользователя. 1. Ввод email пользователя, указанный на Zendesk @@ -94,7 +95,7 @@ class CustomRegistrationView(RegistrationView): self.is_allowed = False @staticmethod - def set_permission(user: User) -> None: + def set_permission(user: User) -> User: """ Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin. @@ -140,7 +141,7 @@ def profile_page(request: WSGIRequest) -> HttpResponse: return render(request, 'pages/profile.html', context) -def auth_user(request: WSGIRequest) -> ZenpyUser: +def auth_user(request: WSGIRequest) -> Tuple: """ Функция возвращает профиль пользователя на Zendesk. @@ -270,7 +271,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin,SuccessMessageMi self.make_light_agents(users) return super().form_valid(form) - def make_engineers(self, users): + def make_engineers(self, users: list) -> list: """ Функция проходит по списку пользователей, проставляя статус "engineer". @@ -280,7 +281,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin,SuccessMessageMi for user in users: make_engineer(user, self.request.user) - def make_light_agents(self, users): + def make_light_agents(self, users: list) -> list: """ Функция проходит по списку пользователей, проставляя статус "light agent".