Fix some type hints, small ZendeskAdmin refactor
This commit is contained in:
parent
95d0db24b6
commit
8d14f2e8b4
@ -1,5 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
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
|
||||||
@ -92,7 +93,7 @@ def get_tickets_list(email):
|
|||||||
return zenpy.admin.search(assignee=email, type='ticket')
|
return zenpy.admin.search(assignee=email, type='ticket')
|
||||||
|
|
||||||
|
|
||||||
def update_profile(user_profile: UserProfile) -> UserProfile:
|
def update_profile(user_profile: UserProfile):
|
||||||
"""
|
"""
|
||||||
Функция обновляет профиль пользователя в соответствии с текущим в Zendesk.
|
Функция обновляет профиль пользователя в соответствии с текущим в Zendesk.
|
||||||
|
|
||||||
@ -318,7 +319,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[dict]:
|
||||||
"""
|
"""
|
||||||
Функция возвращает данные - список объектов RoleChangeLogs.
|
Функция возвращает данные - список объектов RoleChangeLogs.
|
||||||
"""
|
"""
|
||||||
|
@ -24,7 +24,7 @@ from access_controller.settings import DEFAULT_FROM_EMAIL, ZENDESK_ROLES, ZENDES
|
|||||||
from main.extra_func import check_user_exist, update_profile, get_user_organization, \
|
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, \
|
make_engineer, make_light_agent, get_users_list, update_users_in_model, count_users, \
|
||||||
StatisticData, log
|
StatisticData, log
|
||||||
from main.zendesk_admin import ZendeskAdmin
|
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
|
||||||
from .models import UserProfile
|
from .models import UserProfile
|
||||||
@ -167,7 +167,7 @@ def auth_user(request: WSGIRequest) -> ZenpyUser:
|
|||||||
:param request: email, subdomain и token пользователя
|
:param request: email, subdomain и token пользователя
|
||||||
:return: объект пользователя Zendesk
|
:return: объект пользователя Zendesk
|
||||||
"""
|
"""
|
||||||
admin = ZendeskAdmin().admin
|
admin = zenpy.admin
|
||||||
zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0]
|
zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0]
|
||||||
return zenpy_user, admin
|
return zenpy_user, admin
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from typing import Optional
|
from typing import Optional, Dict
|
||||||
|
|
||||||
from zenpy import Zenpy
|
from zenpy import Zenpy
|
||||||
from zenpy.lib.api_objects import User as ZenpyUser
|
from zenpy.lib.api_objects import User as ZenpyUser, Group as ZenpyGroup
|
||||||
from zenpy.lib.exception import APIException
|
from zenpy.lib.exception import APIException
|
||||||
|
|
||||||
from access_controller.settings import ACTRL_ZENDESK_SUBDOMAIN, ACTRL_API_EMAIL, ACTRL_API_TOKEN, ACTRL_API_PASSWORD, \
|
from access_controller.settings import ACTRL_ZENDESK_SUBDOMAIN, ACTRL_API_EMAIL, ACTRL_API_TOKEN, ACTRL_API_PASSWORD, \
|
||||||
@ -13,24 +13,12 @@ class ZendeskAdmin:
|
|||||||
Класс **ZendeskAdmin** существует, чтобы в каждой функции отдельно не проверять аккаунт администратора.
|
Класс **ZendeskAdmin** существует, чтобы в каждой функции отдельно не проверять аккаунт администратора.
|
||||||
|
|
||||||
:param credentials: Полномочия (первым указывается учетная запись организации в Zendesk)
|
:param credentials: Полномочия (первым указывается учетная запись организации в Zendesk)
|
||||||
:type credentials: :class:`dict`
|
:type credentials: :class:`Dict[str, str]`
|
||||||
:param email: Email администратора, указанный в env
|
|
||||||
:type email: :class:`str`
|
|
||||||
:param token: Токен администратора (формируется в Zendesk, указывается в env)
|
|
||||||
:type token: :class:`str`
|
|
||||||
:param password: Пароль администратора, указанный в env
|
|
||||||
:type password: :class:`str`
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
credentials: dict = {
|
def __init__(self, credentials: Dict[str, str]):
|
||||||
'subdomain': ACTRL_ZENDESK_SUBDOMAIN
|
self.credentials = credentials
|
||||||
}
|
self.admin = self.create_admin()
|
||||||
email: str = ACTRL_API_EMAIL
|
|
||||||
token: str = ACTRL_API_TOKEN
|
|
||||||
password: str = ACTRL_API_PASSWORD
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.create_admin()
|
|
||||||
self.buffer_group_id: int = self.get_group(ZENDESK_GROUPS['buffer']).id
|
self.buffer_group_id: int = self.get_group(ZENDESK_GROUPS['buffer']).id
|
||||||
self.solved_tickets_user_id: int = self.get_user(SOLVED_TICKETS_EMAIL).id
|
self.solved_tickets_user_id: int = self.get_user(SOLVED_TICKETS_EMAIL).id
|
||||||
|
|
||||||
@ -89,7 +77,7 @@ class ZendeskAdmin:
|
|||||||
"""
|
"""
|
||||||
return self.admin.users.search(email).values[0]
|
return self.admin.users.search(email).values[0]
|
||||||
|
|
||||||
def get_group(self, name: str) -> Optional[str]:
|
def get_group(self, name: str) -> Optional[ZenpyGroup]:
|
||||||
"""
|
"""
|
||||||
Функция возвращает группу по названию
|
Функция возвращает группу по названию
|
||||||
|
|
||||||
@ -111,31 +99,32 @@ class ZendeskAdmin:
|
|||||||
user = self.admin.users.search(email).values[0]
|
user = self.admin.users.search(email).values[0]
|
||||||
return user.organization.name if user.organization else None
|
return user.organization.name if user.organization else None
|
||||||
|
|
||||||
def create_admin(self) -> None:
|
def create_admin(self) -> Zenpy:
|
||||||
"""
|
"""
|
||||||
Функция создает администратора, проверяя наличие вводимых данных в env.
|
Функция создает администратора, проверяя наличие вводимых данных в env.
|
||||||
|
|
||||||
:param credentials: В список полномочий администратора вносятся email, token, password из env
|
|
||||||
:type credentials: :class:`dict`
|
|
||||||
:raise: :class:`ValueError`: исключение, вызываемое если email не введен в env
|
:raise: :class:`ValueError`: исключение, вызываемое если email не введен в env
|
||||||
:raise: :class:`APIException`: исключение, вызываемое если пользователя с таким email не существует в Zendesk
|
:raise: :class:`APIException`: исключение, вызываемое если пользователя с таким email не существует в Zendesk
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if self.email is None:
|
if self.credentials.get('email') is None:
|
||||||
raise ValueError('access_controller email not in env')
|
raise ValueError('access_controller email not in env')
|
||||||
self.credentials['email'] = self.email
|
|
||||||
|
|
||||||
if self.token:
|
if self.credentials.get('token') is None and self.credentials.get('password') is None:
|
||||||
self.credentials['token'] = self.token
|
|
||||||
elif self.password:
|
|
||||||
self.credentials['password'] = self.password
|
|
||||||
else:
|
|
||||||
raise ValueError('access_controller token or password not in env')
|
raise ValueError('access_controller token or password not in env')
|
||||||
self.admin = Zenpy(**self.credentials)
|
|
||||||
|
admin = Zenpy(**self.credentials)
|
||||||
try:
|
try:
|
||||||
self.admin.search(self.email, type='user')
|
admin.search(self.credentials['email'], type='user')
|
||||||
except APIException:
|
except APIException:
|
||||||
raise ValueError('invalid access_controller`s login data')
|
raise ValueError('invalid access_controller`s login data')
|
||||||
|
|
||||||
|
return admin
|
||||||
|
|
||||||
zenpy = ZendeskAdmin()
|
|
||||||
|
zenpy = ZendeskAdmin({
|
||||||
|
'subdomain': ACTRL_ZENDESK_SUBDOMAIN,
|
||||||
|
'email': ACTRL_API_EMAIL,
|
||||||
|
'token': ACTRL_API_TOKEN,
|
||||||
|
'password': ACTRL_API_PASSWORD,
|
||||||
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user