access-controller/main/requester.py
2021-05-20 16:19:42 +03:00

72 lines
2.8 KiB
Python

"""
Обработка тикетов, составление списков тикетов для пользователя и группы пользователей.
"""
from typing import Optional
import requests
from zenpy import TicketApi
from zenpy.lib.api_objects import Ticket
from main.zendesk_admin import zenpy
class TicketListRequester:
"""
Класс обработки тикетов.
:param email: Email пользователя
:type display: :class:`str`
:param token_or_password: Токен или пароль
:type display: :class:`str`
:param prefix: Формат строка url страницы Zendesk
:type display: :class:`str`
"""
def __init__(self):
self.email = zenpy.credentials['email']
if zenpy.credentials.get('token'):
self.token_or_password = zenpy.credentials.get('token')
self.email += '/token'
else:
self.token_or_password = zenpy.credentials.get('password')
self.prefix = f'https://{zenpy.credentials.get("subdomain")}.zendesk.com/api/v2/'
def get_tickets_list_for_user(self, zendesk_user: zenpy) -> Optional[list]:
"""
Функция получения списка тикетов пользователя Zendesk.
:param zendesk_user: Пользователь Zendesk
:return: Список тикетов, назначенных на данного пользователя в Zendesk
"""
url = self.prefix + f'users/{zendesk_user.id}/tickets/assigned'
return self._get_tickets(url)
def get_tickets_list_for_group(self, group: zenpy) -> Optional[list]:
"""
Функция получения списка тикетов группы пользователей Zendesk.
:param group: Название группы
:return: Список тикетов
"""
url = self.prefix + '/tickets'
all_tickets = self._get_tickets(url)
tickets = list()
for ticket in all_tickets:
if (ticket.status != 'solved') and (ticket.group_id == group.id) and (ticket.assignee_id is None):
tickets.append(ticket)
return tickets
def _get_tickets(self, url: str) -> Optional[list]:
"""
Функция получения полного списка тикетов по url.
:param url: Url Zendesk c указанием тикетов, назначенных на пользователя
:return: Список тикетов
"""
response = requests.get(url, auth=(self.email, self.token_or_password))
tickets = []
if response.status_code != 200:
return None
for ticket in response.json()['tickets']:
tickets.append(Ticket(api=TicketApi, **ticket))
return tickets