Fix some type hints, small ZendeskAdmin refactor

This commit is contained in:
Iurii Tatishchev 2021-04-20 15:13:55 -07:00
parent 95d0db24b6
commit 8d14f2e8b4
Signed by: CaZzzer
GPG Key ID: 926BE949E29DCD03
3 changed files with 26 additions and 36 deletions

View File

@ -1,5 +1,6 @@
import logging
from datetime import timedelta, datetime, date
from typing import Optional
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
@ -92,7 +93,7 @@ def get_tickets_list(email):
return zenpy.admin.search(assignee=email, type='ticket')
def update_profile(user_profile: UserProfile) -> UserProfile:
def update_profile(user_profile: UserProfile):
"""
Функция обновляет профиль пользователя в соответствии с текущим в Zendesk.
@ -318,7 +319,7 @@ class StatisticData:
self.display = display_format
return True
def get_data(self) -> list:
def get_data(self) -> Optional[dict]:
"""
Функция возвращает данные - список объектов RoleChangeLogs.
"""

View File

@ -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, \
make_engineer, make_light_agent, get_users_list, update_users_in_model, count_users, \
StatisticData, log
from main.zendesk_admin import ZendeskAdmin
from main.zendesk_admin import zenpy
from main.forms import AdminPageUsers, CustomRegistrationForm, CustomAuthenticationForm, StatisticForm
from main.serializers import ProfileSerializer, ZendeskUserSerializer
from .models import UserProfile
@ -167,7 +167,7 @@ def auth_user(request: WSGIRequest) -> ZenpyUser:
:param request: email, subdomain и token пользователя
:return: объект пользователя Zendesk
"""
admin = ZendeskAdmin().admin
admin = zenpy.admin
zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0]
return zenpy_user, admin

View File

@ -1,7 +1,7 @@
from typing import Optional
from typing import Optional, Dict
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 access_controller.settings import ACTRL_ZENDESK_SUBDOMAIN, ACTRL_API_EMAIL, ACTRL_API_TOKEN, ACTRL_API_PASSWORD, \
@ -13,24 +13,12 @@ class ZendeskAdmin:
Класс **ZendeskAdmin** существует, чтобы в каждой функции отдельно не проверять аккаунт администратора.
:param credentials: Полномочия (первым указывается учетная запись организации в Zendesk)
:type credentials: :class:`dict`
:param email: Email администратора, указанный в env
:type email: :class:`str`
:param token: Токен администратора (формируется в Zendesk, указывается в env)
:type token: :class:`str`
:param password: Пароль администратора, указанный в env
:type password: :class:`str`
:type credentials: :class:`Dict[str, str]`
"""
credentials: dict = {
'subdomain': ACTRL_ZENDESK_SUBDOMAIN
}
email: str = ACTRL_API_EMAIL
token: str = ACTRL_API_TOKEN
password: str = ACTRL_API_PASSWORD
def __init__(self):
self.create_admin()
def __init__(self, credentials: Dict[str, str]):
self.credentials = credentials
self.admin = self.create_admin()
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
@ -89,7 +77,7 @@ class ZendeskAdmin:
"""
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]
return user.organization.name if user.organization else None
def create_admin(self) -> None:
def create_admin(self) -> Zenpy:
"""
Функция создает администратора, проверяя наличие вводимых данных в env.
:param credentials: В список полномочий администратора вносятся email, token, password из env
:type credentials: :class:`dict`
:raise: :class:`ValueError`: исключение, вызываемое если email не введен в env
: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')
self.credentials['email'] = self.email
if self.token:
self.credentials['token'] = self.token
elif self.password:
self.credentials['password'] = self.password
else:
if self.credentials.get('token') is None and self.credentials.get('password') is None:
raise ValueError('access_controller token or password not in env')
self.admin = Zenpy(**self.credentials)
admin = Zenpy(**self.credentials)
try:
self.admin.search(self.email, type='user')
admin.search(self.credentials['email'], type='user')
except APIException:
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,
})