Add Union and Optional types
This commit is contained in:
parent
d3471331b1
commit
bf2c1cc1be
@ -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.
|
||||||
|
|
||||||
@ -204,7 +208,7 @@ def make_light_agent(user_profile: UserProfile, who_changes: User) -> UserProfil
|
|||||||
|
|
||||||
def get_users_list() -> list:
|
def get_users_list() -> list:
|
||||||
"""
|
"""
|
||||||
Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации SYSTEM.
|
Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации SYSTEM.
|
||||||
"""
|
"""
|
||||||
zendesk = ZendeskAdmin()
|
zendesk = ZendeskAdmin()
|
||||||
|
|
||||||
@ -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 = {
|
||||||
@ -293,7 +302,7 @@ def update_user_in_model(profile: UserProfile, zendesk_user: User) -> UserProfil
|
|||||||
|
|
||||||
def count_users(users) -> tuple:
|
def count_users(users) -> tuple:
|
||||||
"""
|
"""
|
||||||
Функция подсчета количества сотрудников с ролями engineer и light_agent
|
Функция подсчета количества сотрудников с ролями engineer и light_agent
|
||||||
"""
|
"""
|
||||||
engineers, light_agents = 0, 0
|
engineers, light_agents = 0, 0
|
||||||
for user in users:
|
for user in users:
|
||||||
@ -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:
|
||||||
"""
|
"""
|
||||||
Функция обрабатывает случай, когда нам известно что инженер начал работу до диапазона
|
Функция обрабатывает случай, когда нам известно что инженер начал работу до диапазона
|
||||||
"""
|
"""
|
||||||
|
@ -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".
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user