""" Обработка тикетов, составление списков тикетов для пользователя и группы пользователей. """ 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