Add Union and Optional types

This commit is contained in:
Степаненко Ольга 2021-04-15 17:22:45 +03:00
parent d3471331b1
commit bf2c1cc1be
2 changed files with 35 additions and 25 deletions

View File

@ -1,5 +1,6 @@
import os import os
from datetime import timedelta, datetime, date from datetime import timedelta, datetime, date
from typing import Optional
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
@ -47,7 +48,10 @@ class ZendeskAdmin:
def get_user_name(self, email: str) -> str: 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] user = self.admin.users.search(email).values[0]
return user.name return user.name
@ -72,7 +76,7 @@ class ZendeskAdmin:
user = self.admin.users.search(email).values[0] user = self.admin.users.search(email).values[0]
return user.id return user.id
def get_user_image(self, email: str) -> str: def get_user_image(self, email: str) -> Optional[str]:
""" """
Функция возвращает url-ссылку на аватар пользователя по его email. Функция возвращает url-ссылку на аватар пользователя по его email.
@ -91,9 +95,9 @@ class ZendeskAdmin:
""" """
return self.admin.users.search(email).values[0] 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: Имя пользователя :param name: Имя пользователя
:return: Группы пользователя (в случае отсутствия None) :return: Группы пользователя (в случае отсутствия None)
@ -103,7 +107,7 @@ class ZendeskAdmin:
return group return group
return None return None
def get_user_org(self, email: str) -> str: def get_user_org(self, email: str) -> Optional[str]:
""" """
Функция возвращает организацию, к которой относится пользователь по его email. Функция возвращает организацию, к которой относится пользователь по его email.
@ -214,9 +218,12 @@ def get_users_list() -> list:
return users 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') 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`: исключение, вызываемое если пользователь не аутентифицирован :raise: :class:`APIException`: исключение, вызываемое если пользователь не аутентифицирован
""" """
creds = { creds = {
@ -304,9 +313,9 @@ def count_users(users) -> 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:
@ -318,7 +327,7 @@ def update_users_in_model():
return users return users
def daterange(start_date, end_date) -> list: def daterange(start_date: date, end_date: date) -> list:
""" """
Функция возвращает список дней с start_date по end_date, исключая правую границу. Функция возвращает список дней с start_date по end_date, исключая правую границу.
@ -332,7 +341,7 @@ def daterange(start_date, end_date) -> list:
return dates return dates
def get_timedelta(log, time=None) -> timedelta: def get_timedelta(log: RoleChangeLogs, time: datetime =None) -> timedelta:
""" """
Функция возвращает объект класса timedelta, который хранит промежуток времени от начала суток до момента, Функция возвращает объект класса timedelta, который хранит промежуток времени от начала суток до момента,
который находится в log (объект класса RoleChangeLogs) или в time(datetime.time), если введён. который находится в log (объект класса RoleChangeLogs) или в time(datetime.time), если введён.
@ -399,7 +408,7 @@ class StatisticData:
else: else:
self.statistic = stat self.statistic = stat
def get_statistic(self) -> dict: def get_statistic(self) -> Optional[dict]:
""" """
Функция возвращает статистику работы пользователя. Функция возвращает статистику работы пользователя.
@ -447,7 +456,7 @@ class StatisticData:
self.display = display_format self.display = display_format
return True return True
def get_data(self) -> list: def get_data(self) -> Optional[list]:
""" """
Функция возвращает данные - список объектов RoleChangeLogs. Функция возвращает данные - список объектов RoleChangeLogs.
""" """
@ -515,7 +524,7 @@ class StatisticData:
return False return False
return True return True
def _init_data(self): def _init_data(self) -> Optional[list]:
""" """
Функция возвращает логи в диапазоне дат start_date - end_date для пользователя с указанным email. Функция возвращает логи в диапазоне дат start_date - end_date для пользователя с указанным email.
@ -532,7 +541,7 @@ class StatisticData:
except User.DoesNotExist: except User.DoesNotExist:
self.errors += ['Пользователь не найден'] 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']: 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) -> dict:
""" """
Функция обрабатывает основную часть работы инженера Функция обрабатывает основную часть работы инженера
""" """
@ -568,7 +577,7 @@ class StatisticData:
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): def post_engineer_logic(self, last_log: RoleChangeLogs):
""" """
Функция обрабатывает случай, когда нам известно что инженер работал и после диапазона Функция обрабатывает случай, когда нам известно что инженер работал и после диапазона
""" """
@ -583,7 +592,7 @@ class StatisticData:
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): def prev_engineer_logic(self, first_log: RoleChangeLogs) ->dict:
""" """
Функция обрабатывает случай, когда нам известно что инженер начал работу до диапазона Функция обрабатывает случай, когда нам известно что инженер начал работу до диапазона
""" """

View File

@ -1,6 +1,7 @@
import logging import logging
import os import os
from datetime import datetime from datetime import datetime
from typing import Union, Tuple
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.forms import PasswordResetForm
@ -54,7 +55,7 @@ class CustomRegistrationView(RegistrationView):
success_url: str = reverse_lazy('django_registration_complete') success_url: str = reverse_lazy('django_registration_complete')
is_allowed: bool = True is_allowed: bool = True
def register(self, form: CustomRegistrationForm) -> User: def register(self, form: CustomRegistrationForm) -> Union[User, bool]:
""" """
Функция регистрации пользователя. Функция регистрации пользователя.
1. Ввод email пользователя, указанный на Zendesk 1. Ввод email пользователя, указанный на Zendesk
@ -94,7 +95,7 @@ class CustomRegistrationView(RegistrationView):
self.is_allowed = False self.is_allowed = False
@staticmethod @staticmethod
def set_permission(user: User) -> None: def set_permission(user: User) -> User:
""" """
Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin. Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin.
@ -140,7 +141,7 @@ def profile_page(request: WSGIRequest) -> HttpResponse:
return render(request, 'pages/profile.html', context) return render(request, 'pages/profile.html', context)
def auth_user(request: WSGIRequest) -> ZenpyUser: def auth_user(request: WSGIRequest) -> Tuple:
""" """
Функция возвращает профиль пользователя на Zendesk. Функция возвращает профиль пользователя на Zendesk.
@ -270,7 +271,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin,SuccessMessageMi
self.make_light_agents(users) self.make_light_agents(users)
return super().form_valid(form) return super().form_valid(form)
def make_engineers(self, users): def make_engineers(self, users: list) -> list:
""" """
Функция проходит по списку пользователей, проставляя статус "engineer". Функция проходит по списку пользователей, проставляя статус "engineer".
@ -280,7 +281,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin,SuccessMessageMi
for user in users: for user in users:
make_engineer(user, self.request.user) make_engineer(user, self.request.user)
def make_light_agents(self, users): def make_light_agents(self, users: list) -> list:
""" """
Функция проходит по списку пользователей, проставляя статус "light agent". Функция проходит по списку пользователей, проставляя статус "light agent".