import os
from logging import getLogger
from clickup_to_jira.ticket import Ticket
logger = getLogger(__name__)
[docs]class ClickUpToJIRAConverter:
"""
Class responsible for converting ClickUp Tickets to JIRA Tickets.
"""
def __init__(self, click_up_handler, jira_handler):
"""
Initialize the converter.
:param ClickUpHandler click_up_handler: The ClickUp handler
:param JIRAHandler jira_handler: The JIRA handler
"""
self.click_up = click_up_handler
self.jira = jira_handler
[docs] def convert(self, tickets):
"""
Convert ClickUp tickets to JIRA tickets.
:param list(Ticket) tickets: The tickets to be converted
:return: The converted tickets
:rtype: list(Ticket)
"""
converted_tickets = list()
for ticket in tickets:
converted_tickets.append(self.convert_ticket(ticket))
return converted_tickets
[docs] def convert_ticket(self, ticket):
"""
Covert ClickUp ticket to DataClass Ticket.
:param ClickUp.Ticket ticket: The incoming Ticker
:return: The dataclass Ticket
:rtype: Ticket
"""
logger.info(f"converting ticket {ticket.name}")
# Prepare entities for ticket
ticket_type = ",".join([tag.name for tag in ticket.tags])
ticket_description = self._get_converted_description(
ticket.description
)
ticket_status = ticket.status.status
subtasks = self._get_converted_subtasks(ticket.linked_tasks)
# Handle assignees
if ticket.assignees:
ticket_assignee = ticket.assignees[0]
else:
ticket_assignee = None
# Return the new Ticket
return Ticket(
id=ticket.id,
type=ticket_type,
project=os.getenv("JIRA_PROJECT"),
title=ticket.name,
description=ticket_description,
subtasks=subtasks,
status=ticket_status,
assignee=ticket_assignee,
creator=ticket.creator,
comments=ticket.comments,
parent=ticket.parent,
url=ticket.url,
)
@staticmethod
def _get_converted_description(description):
"""
Get the converted description.
:param str description: The incoming description
:return: The edited description
:rtype: str
"""
# todo Transform ClickUp Markdown to JIRA Markdown
return description
def _get_converted_subtasks(self, subtasks):
"""
Get Converted subtasks.
:param list(ClickUp.Ticket) subtasks: The ClickUp sub tickets
:return: The edited sub tickets
:rtype: list(Ticket)
"""
return [self.convert_ticket(subtask) for subtask in subtasks]