U
    Vc                     @   s   d dl Z d dlmZmZmZmZmZmZmZ d dl	m	Z	 d dl
mZ d dlmZ d dlmZ d dlT d dlZeeej eej eej f Ze jG dd	 d	Zd
d ZG dd deZdS )    N)DictOptionalListCallableUnionTypeIterator)cached_property)CmfPluginImportMixin)JiraApi)JiraBaseImport)*c                   @   s:   e Zd ZU dZeed< eed< eed< dd Zdd Zd	S )
EpicDatauD    Данные используемые при создании epic namekeyproject_keyc                 C   s
   t | jS N)hashr   self r   ./modules/jira/api_import.py__hash__   s    zEpicData.__hash__c                 C   s   | j |j kS r   )r   )r   otherr   r   r   __eq__   s    zEpicData.__eq__N)__name__
__module____qualname____doc__str__annotations__r   r   r   r   r   r   r      s   
r   c                    s    fdd}|S )Nc                    s    fdd}|S )Nc              
      s   zrz*| j jd   | f||W W HS  tk
rn } z$d| _| j jd d|  W 5 d }~X Y nX W 5 | j j  X d S )Nz================== Tu   Ошибка : )
cmf_importdpcommitloggerinfo	Exception
has_errors	exception)objargskwargse)funcr   r   r   wrapper   s    0z3catch_exception.<locals>.decorator.<locals>.wrapperr   )r.   r/   r   )r.   r   	decorator   s    	z"catch_exception.<locals>.decoratorr   )r   r1   r   r0   r   catch_exception   s    r2   c                       s  e Zd ZdZedd fddZeeee	f dddZ
eeeeee	  d	d
dZeeeef  dddZedd Zedd Zdd ZedXddZee dddZee	 dddZee	 e	dddZedeeef ddd d!ZdYd$d%Zed&d'd( Zed)d*d+ Zed,d- Zejdd.d/Z ed0d1d2 Z!ed3d4d5 Z"ej#dd6d7Z$d8d9 Z%ed:d;d< Z&ed=d>d? Z'd@dA Z(edBdZdCdDZ)edEdFdG Z*edHdIdJ Z+dKdL Z,edMdNdO Z-edPdQdR Z.edSdTdU Z/dVdW Z0  Z1S )[JiraAPIImportu;   Класс загрузки объектов через APIN)jirareturnc                    sR   t  j|| || _tjjdd| _i | _i | _i | _	i | _
g | _g | _d| _d S )NZsoftdevcodeF)super__init__r4   modelsZCmfActivitygetdefault_activityepicsblocked_tasksdepended_taskssubtasksboardsselected_projectsr(   )r   r4   r+   r,   	__class__r   r   r9   /   s    zJiraAPIImport.__init__)r5   c                 C   s
   | j  S r   )r4   Z
get_fieldsr   r   r   r   jira_fields<   s    zJiraAPIImport.jira_fields)model
field_namer5   c                 C   s&   |sd S | j |gd}|r"|d S d S )N)Zfields_namer   )Zimport_shop_fields)rF   rG   resr   r   r   _get_field_name@   s    zJiraAPIImport._get_field_namec                 C   st   g }ddddddddd	d
ddd}dddd}| j  D ]6\}}d| ||d }|||d|d q8|S )uO    Сопоставление настроек для модели models.CmfTaskr   text
cmf_author	cmf_ownerresponsibleprioritystatusparentZ
alarm_dateZdeadlineZcmf_modified_atcmf_created_at)summarydescriptionZreporterZcreatorZassigneerN   rO   projectZcustomfield_10015Zduedateupdatedcreatedz.namez.watchCountz.votes)rN   ZwatchesZvoteszfields. Nmodel_field	json_path)rE   itemsr;   append)r   Zissue_settingsZdefault_local_attrs_mappingZadditional_json_pathZcustom_field_keyZcustom_fieldrZ   r   r   r   _get_issue_import_settingsG   s2    

z(JiraAPIImport._get_issue_import_settingsc                  C   s    dddddddddg} | S )Nr   displayNamerX   emailemailAddressdoes_not_workactiver   )Zuser_settingsr   r   r   _get_user_import_settingsf   s
    z'JiraAPIImport._get_user_import_settingsc                  C   s    dddddddddg} | S )NrQ   rV   rX   rK   authorrJ   ZrenderedBodyr   )Zcomment_settingsr   r   r   _get_comment_import_settingso   s
    z*JiraAPIImport._get_comment_import_settingsc                 C   sX   dddddddd}||kr$|| S | d	}t|d
kr>dS | j|d
 i ddS )N   ИмяZEmailu   Активныйu   Созданоu
   Автор
   Текстu   Ключ)r^   r`   rb   rV   rd   bodyr   .   rW   r   )splitlenrE   r;   )r   Zjsonpathmappingr   r   r    _get_setting_title_from_jsonpathy   s    	
z.JiraAPIImport._get_setting_title_from_jsonpathTc           	      C   s^  |sd S | dD ](}t| ts& d S | |} | s d S q|rvt| trvdddg}|D ]}|| krX| |   S qXdS |st| tri }d| kr| d |d< d| kr| d |d< d| kr| d |d< |S |rZt| trZg }| D ]l}d|kr||d d  qd	|kr"||d	 d  qd|kr<||d  q|r|t| qd
|S | S )Nri   r   r^   r   rW   r`   r_   inwardIssueoutwardIssue,)rk   
isinstancedictr;   listr\   r   join)	r*   rZ   to_strrG   Z
str_fieldsZ	str_fieldZnew_objresultZrelated_objr   r   r   _get_file_val   sH    






zJiraAPIImport._get_file_valc                    s   g  t ttt f tg tt f ttd fdd}|jjddjt	j
}|sX S dd jdD }||dd jt	j d	d
ddddg}||jt	j  dg d  S )u-    Инициализация настроек )objssettings_funcrF   r5   c                    sz   | D ]p}| }|D ]H} ||d |d< ||d |d< |d |d< |j|d< q |j|d |  S d S )NrZ   Zfile_valrY   titleicon)r   fields)rx   rI   rn   r|   r\   verbose_name)ry   rz   rF   r*   Zobj_settingssettingrw   r   r   r   _get_settings   s    z:JiraAPIImport.tmplt_import_settings.<locals>._get_settingsrj   limitc                 S   s   g | ]}|qS r   r   ).0r*   r   r   r   
<listcomp>   s     z7JiraAPIImport.tmplt_import_settings.<locals>.<listcomp>Nz2022-05-22T15:22:22.593+0300rf   u!   Электронная почта)r^   r`   rg   )rV   rd   rh   selectedObjects)r   value)r   r   r   r   r   	TypeModelr4   
get_issuesr]   r:   CmfTask	get_usersrc   	CmfPersonre   
CmfCommentr\   )r   r   issueZusersZcomment_exampler   r   r   tmplt_import_settings   s.       z#JiraAPIImport.tmplt_import_settingsc                 C   s   |  | jjd }ddg g gdg}| jjddD ]}t|tjj d D ]f\}}|d s\qJ| 	||d	 }| 
|d d
 |}|d d |d d  |d d d | qJq2|S )NZimport_settingsu   Задачиzcalendar-today)r{   r|   titlesrows   r   r}   rY   rZ   rG   r   r   captionr   )Z_normalize_settingsr"   Zjson_settingsr4   r   	enumerater:   r   r~   rx   _normalize_jira_valuer\   )r   settingsrw   r   Znumr   r   r   r   r   preview   s    zJiraAPIImport.preview)r   r5   c                 C   sT   i }|D ]F}|d sq| j ||d dd}| |d d |}|||d d < q|S )uC    Преобразование настроек для модели rY   rZ   F)rv   rG   )rx   r   )r   r*   r   Znormalized_objr   r   r   r   r   _normalize_obj   s    zJiraAPIImport._normalize_obju:   Обработка исполнителей проекта)settings_usersr5   c                 C   s   i }i }| j |D ]j}|d |d  }}||krDtjj|d||< ||kr^tjj|d||< t| jtj	|| || d qd S )Nproject_nameZproject_member_emailr0   )r_   leftright)
r4   Zget_project_membersr:   
CmfProjectr;   r   r
   process_any_table_fieldsr"   CmfProjectExecutors)r   r   Zproject_name_idsZmember_email_idsZproject_memberr   Zexecutor_emailr   r   r   _process_project_executors   s    z(JiraAPIImport._process_project_executorssprintkanbanc           
      C   s   dd|j gg}|dr*|dddg n|dd|g tjj|d}|d|d  }tj| jtj|d	 ||||d
|d|ddd|gd\}}	|	r|d	 |_	|
  |S )NZtree_parent_id==ZcompleteDateZsys_typearchivefilterext_ididr   Z	startDateZendDate)r   rP   tree_parent	list_typeZplan_start_dateZplan_end_dater   Z
filter_obj)r   r;   r\   r:   Z	CmfFolderr
   r   r"   ZCmfListr   save)
r   rP   r   Zparent_sys_typer   _filterr   r   Zlist_objnewr   r   r   _process_list  s*    


zJiraAPIImport._process_listu8   Обработка наблюдателей задачиc                 C   s   | j |d D ]|}d|kr(d|d in
d|d i}tjjf |}|sTtd| ||jks||jks||jkrtqt	
| jtj||d qt  dS )	u;   Добавляем наблюдателей в задачуr   r`   r_   r   r^   uW   _process_watchers: Не найден наблюдатель задачи person_filter=r   N)r4   Zget_watchersr:   r   r;   CmfErrorrM   rK   rL   r
   r   r"   ZCmfTaskSpectatorscommit_with_event)r   	issue_objr   ZwatcherZperson_filterZpersonr   r   r   _process_watchers  s     zJiraAPIImport._process_watchersu#   Обработка вложенийc                 C   s   g }| j |jjD ]d}d}| j |d }tjj|d d}|sXtj| j||d d}|j	|dd |
  || qt  |S )NTcontentfilenamer0   )r"   rP   r   )Z	overwrite)r4   Zget_attachmentsr   r   Zget_attachment_contentr:   ZCmfAttachmentr;   r"   Zupload_filer   r\   r   )r   r   ZattachmentsZattachment_infoZhas_attachmentsr   Z
attachmentr   r   r   _process_attachments.  s    z"JiraAPIImport._process_attachmentsc                 C   s   d}| j j}td|D ]>\}}td|d }d| jj d| d}|||}d}qtd	|D ].\}}d| jj d| d}|||}d}qd|r|| _ |   d
S )ze<img src="/files/obj/CmfTask/CmfTask:91702982-aa8c-11ec-9310-00163e520578/20220323-104738_image.jpg">F(<img.*?(src="/[^"]*").*?/>)".*?/[^_]+_([^/]*)"r   <img src="/files/obj/CmfTask//">Tz(\!(.+?)\|.+?\!)N)rJ   r   refindallZ	parent_idreplacer   )comment_objZ
is_changedrJ   jira_image_templatejira_image_src_tagjira_image_namelocal_image_templater   r   r   _process_comment_images?  s    z%JiraAPIImport._process_comment_imagesc                 C   s@   |d d d dkr(t jjdd| jdS t jjdd| jdS d S )	Nr}   	issuetyper   Sub-taskr   ztask.sub-agile%)activityztask.agile:softdev%)r:   CmfWorkflowZcalc_workflowr<   )r   r   r   r   r   _calc_workflowV  s    zJiraAPIImport._calc_workflowu-   Обработка пользователейc                 C   s   t  }| j D ]}| j r6d| j_| j   d S | || jt	j
j d }t| jt	j
|\}}|j s|d |_|  |jr|js|jds|r||jj q|rtt	j
j|gd d S )Nimport-cancelingr}   	accountIdz.evateam.ru)r+   )setr4   r   r"   	is_cancelrO   r   r   r   r:   r   r~   r
   r   r   loadr_   ra   endswithaddr   Zcmf_deferred_taskZregister_persons)r   Znew_user_emailsuserZ	user_normZuser_objZ
is_createdr   r   r   _process_users\  s&    



zJiraAPIImport._process_usersu#   Обработка статусовc                 C   s   | j j }|D ]}| j r6d| j_| j   dS t|d d }dd|d d gdd| j	gg}t
jj|d	}|st
j||d d | j	|d d
 | jd}|d |_|  q| jj  dS )uc   
        Грузим статусы из Jira и сопостовляем с нашими
        r   NstatusCategoryr   r   ZILIKEworkflowr   r   Z	colorName)status_typer   r   Zcolorr"   r   )r4   connZget_all_statusesr"   r   rO   r   r
   get_status_typeZdefault_workflowr:   	CmfStatusr;   r   r#   r$   )r   jira_statusesrO   r   r   Z
cmf_statusr   r   r   _process_statuses  s(    


 


zJiraAPIImport._process_statusesc           
      C   s   d|d  }d|d  }t jjdd|gd}|sPt jjdd	}t j||d
}||_|  d|d  }d|d  }t jj|d}|st jjdd	}t j||d
}||_||_|  | jj|d dD ]}	| 	|	| q|S )NzSIMPLE::r   u(   Simple-схема для проекта r   r   =r   task.agile:defaultr6   r   templater   softdev:default)Z
project_id)
r:   r   r;   r   r   CmfSchemeWfdefault_task_workflowr4   get_statuses_create_status)
r   Zjira_project_infoZworkflow_ext_idworkflow_namer   r   Zscheme_ext_idZscheme_nameschemejira_statusr   r   r   #_create_schemewf_for_simple_project  s(    z1JiraAPIImport._create_schemewf_for_simple_projectc                 C   s   |j  d|d  }d}|d  dkr.d}n@|d  dkrDd}n*|d  dkrZd}ntd	|d  d
 tjjdd|gdd|ggd}|stjjdd|gddd gdd|ggd}|stj|d}||_||_|d |_|d |_	|
  |S )N::r   Zin_progressr   Ztodoopendoneclosedu/   ERROR! Неизвестный statusCategory = u   , взяли in_progressr   r   r   r   r   r   r   rS   )r   lowerprintr:   r   r;   r   r   r   rJ   r   )r   Zjira_status_datar   Zstatus_ext_idZeva_status_categoryrO   r   r   r   r     s0    

zJiraAPIImport._create_statusu#   Обработка проектовc                 C   s  dd | j d d D | _| jD ]}| j rHd| j_| j   d S | jj|d }|d }|rz| 	|}||d< n4| j
|d gd	 d
 }tjjt|d d|d< tj| jtj|dd|d gd\}}| jj|d  D ]}| j| }d|d  }	tj| jtj|d  d|d  |	ddd|	gd\}
}|dg D ]}|d dkr| jjj|d d|d dd}tjj|d d}t| jtj|
|d nb|d dkrtj| jtj|d |d ddd|d gd\}}t| jtj|
|d ntdqPt| jtj||
d | jj|d dD ]z}z.| jj|d |d< ||d < | j| W nD tk
r } z$d!| _ | jj!"d"| d|  W 5 d }~X Y nX qDqq d S )#Nc                 S   s$   g | ]}|d  r|d r|d  qS )r*   Z	isCheckedr   )r   valr   r   r   r     s       z3JiraAPIImport._process_projects.<locals>.<listcomp>r   r   r   r   Z
simplified	scheme_wfr   ZworkflowSchemer   r   r   r   Ztask_code_prefixzrole:r   r!   )r   r   Zactorstypezatlassian-user-role-actorZ	actorUserr   )ZusernameZ
account_idr   zatlassian-group-role-actorr^   u&   Неизвестный тип роли)r   r&   rT   Tu:   Не удалось импортировать доску )#r   rB   r"   r   rO   r   r4   r   Zget_projectr   Zget_project_schemer:   r   r;   r   r
   r   r   Zget_project_rolesvaluesZjira_requestZjsonZCmfPersonGroupr   r   ZCmfPersonGroupRg_membersr'   r   Zget_all_agile_boardsZget_agile_board_configurationrA   r\   r(   r%   r)   )r   rT   Zproject_infoZproject_simplifiedr   Zproject_obj_Zrole_uriZ	role_infor   groupis_newZactorZ	user_infor   Z	sub_groupboardr-   r   r   r   _process_projects  s    



 


zJiraAPIImport._process_projectsu   Обработка досокc           
      C   sN  | j D ]@}d}|d dkr$|d }tjj|d d d}d|d  |d< | j|||d	}t  | j|d D ]\}| j	 rd
| j_
| j    dS |g}t|d d d d dkrg }| || qr|d dkr| j|d D ]Z}| ||}t  | j|d D ]2}tjj|d d}	|	r|	j| |	  qqqdS )u   
        У нас пока нет таких сущностей, так что просто в каждом проекте дублируем доску в виде листа задач
        Zclassicr   r   rT   r   r   zboard:r   )r   r   Nr}   rO   r   r   r   Zscrum)rA   r:   r   r;   r   r   r4   Zget_issues_for_boardr"   r   rO   r   r
   r   _process_issueZget_sprintsZget_sprint_issuesr   listsr\   )
r   r   r   rP   Z	board_objr   sprintsr   Z
sprint_objZtaskr   r   r   _process_boards2  s8    

zJiraAPIImport._process_boardsc                 C   s$   |sd}|sd}| d| d| S )Nu   Не указаноr!   u    ➔ r   )r   r   	old_valueZ	new_valuer   r   r   _simple_html_diffV  s
    zJiraAPIImport._simple_html_diffu   Обработка задачиc           !         s  |d d }t jj|d d d d}|sDtd|d d d  |d d	kr|d d
 |d |d t|d d d d d|d  d} ||d j|d < dS  j	|d } fdd|D }dd  j
t jj d D }|d d D ]} |d  j
t jj d }	|d |	dd}
|d D ]p}|d }||d }|r^|d r^d} ||d |d  }d!|
kr||
d!< n|
d!  d"| |
d!< q0||
 q | j
t jj d }t jj|d d d d|d<  j|d#< d$|d%< |d |d&< |d! r t|d! |d!< |d d' }|D ]}d(|krv|d( d } j|d g }|| | j|d < n@d)|kr0|d) d } j|d g }|| | j|d < q0|r||d*< ||d+< |pg }|d d+}|r|d d d d	kr j|d sn|d d
 |d |d t|d d d d d|d  d} ||d j|d < | j|d   |d,r j|d g }||d  | j|d < |d dr j|d d d std-}|d d d. r d/}|d d d
 |d d d |d d d |d|d d d  d} ||d  j|d <  j|d d d < | j|d d d   |d d d }t jjd0d&d1|gd&d2d3| d4ggd5|d6< tj jt j|d&d7|d gd8\}}|jrLtd9|jjD ]B\}}td:|d; }d<|jj d=| d>}|jj|||_q|D ]}|j | qP||_!|"  t#   $|| |d d?g }t% j||  &|}|rt jj|jjd*d@gdA}|j'D ]}  (|  qt#  dS )Bu   
        Общая логика обработки которая потом разделяется на задачи и эпики
        r}   r   rT   r   r   u$   Не проекта с ключем r   r   ZEpicrR   rO   r   zepic:)r   r   r7   stater   epicNc                    s&   g | ]}  | jtjj d  qS )r}   )r   r   r:   r   r~   )r   cr   r   r   r   u  s     z0JiraAPIImport._process_issue.<locals>.<listcomp>c                 S   s   i | ]}|d  |qS )r{   r   )r   fieldr   r   r   
<dictcomp>v  s      z0JiraAPIImport._process_issue.<locals>.<dictcomp>Z	changelogZ	historiesrd   rV   rj   )rQ   rK   Z	log_levelr[   r  rY   rW   Z
fromStringZtoStringrJ   z<br>r   TZapprovedr   Z
issuelinksro   rp   commentsrP   Zsubtaskr   r   r   ORr   LIKE%::::%r   
logic_typer   r   r   r   r   r   r   r   labelszcomments.text)r   r}   ))r:   r   r;   r   r
   r   r   r=   r4   Zget_commentsr   r   r~   r   r   r   r\   r   r<   markdownr>   r?   r@   CmfLogicTyper   r"   rJ   r   r   r   r   r   r   Zimport_raw_jsonr   r   r   Zprocess_tagsr   r  r   )!r   r   r   
issue_typerT   r  r  Zjira_map_fieldshistoryrK   Zcommentitemr   r  ZdiffZnormalized_issueZissue_linksZ
issue_linkZlinked_issue_keyZtasksZissue_parentr   logic_type_ext_idr   r   r   r   r   r   r   ZtagsZhas_attachmentr   r   r   r   r   ]  s    










$


zJiraAPIImport._process_issueu&   Обработка всех задачc                 C   sD   | j  }|D ]0}| j r4d| j_| j   d S | | qd S )Nr   )r4   r   r"   r   rO   r   r   )r   Zissuesr   r   r   r   _process_issues  s    


zJiraAPIImport._process_issuesu3   Обработка связей всех задачc                 C   s  | j D ]B}tjj|d}| j | D ]$}tjj|dgd}||_|  q"q| jj  | j	D ]H}tjj|dgd}| j	| D ]}tjj|d}|j
| q||  q\| jj  | jD ]H}tjj|dgd}| j| D ]}tjj|d}|j| q|  q| jj  dS )uD   
        Постобработка связей задач
        r   rP   )r   r}   affected_tasksr?   N)r@   r:   r   r;   rP   r   r"   r#   r$   r>   r  r\   r?   )r   Zparent_ext_idZparent_taskZchild_ext_idZ
child_taskr   r   r   _process_relations  s*    




z JiraAPIImport._process_relationsc                 C   s:   | j dd | jD D ]}|d d dkrt| qdS )u)   
        Грузим аудит
        c                 S   s   g | ]}|d  qS r   r   )r   rT   r   r   r   r     s     z0JiraAPIImport._process_audit.<locals>.<listcomp>Z
objectItemZtypeNameZISSUEN)r4   Zget_audit_recordsrB   r   )r   recordr   r   r   _process_audit  s    zJiraAPIImport._process_auditu2   Обработка логических типовc              
   C   s  dddddddddddddddddddd	ddd	dd
}| j  D ],}| j rxd| j_| j   dS |d dkrqP||d }|rtjjdd|d gdgd}|j	rd|d  |j	 |_	nd|d  d|_	|  qPtjjddd|d  dgd}|rqPd}|d dkr,d}tjjdd|gd}t
|d |d |d d|d}tj| jtj|dd|d gd qPdS )u$   Маппим issueType в logic_type   Подзадачаztask.sub:default)r   r7   Z	UserStoryztask.userstory:defaultz
Task Agiler   Bugztask.bug:default)r   r  ZStoryu   ИсторияZTasku   Задачаr  u   Багr   NZhierarchyLevelrj   r   r7   r   r   )r   r}   r   r   r  r  r	  r   rS   r   )r   r   rJ   cmf_model_namer   r   )r4   Zget_issue_typesr"   r   rO   r   r;   r:   r  r   rs   r
   r   )r   Z	name2coder  Zlogic_type_dictr
  Ztemplate_coder   r   r   r   _process_issue_type  sX    	

 z!JiraAPIImport._process_issue_typeu2   Обработка бизнес-процессовc                    s  i }| j  D ]}|||d < q| j  D ]}| j rRd| j_| j   dS |d d  d|d d  }tjj	|d  stjj	dd	}tj||d
 |d  _
|d d  _   |d D ]}| ||d    q|d D ]}| j rd| j_| j    dS  j d|d  }tjj	| d}|sJtj| d}|d |_|d |_
 fdd|d D }	tjjdd|	gd|_t|jt|	kstd j d|d  }
tjj	|
d|_|  qq*dS )u   Импортируем workflowr   r   Nr   r   ZentityIdr   r   r6   r   rS   ZstatusesZtransitions)r   r   c                    s   g | ]} j  d | qS )r   )r   )r   str   r   r   r   s  s     z3JiraAPIImport._process_workflow.<locals>.<listcomp>fromr   INr   uN   DEV: Fatal Вероятно, сломали создание статусов!to)r4   r   Zget_workflowsr"   r   rO   r   r:   r   r;   rJ   r   r   r   ZCmfTransr   rt   Zstatus_fromrl   AssertionErrorZ	status_to)r   r   r   Zjira_workflowZworkflow_idZtemplate_workflowZjira_transitionZtransition_ext_idZ
transitionZstatus_from_ext_id_listZstatus_to_ext_idr   r   r   _process_workflowH  sF    





zJiraAPIImport._process_workflowu    Обработка схем БПc              
   C   sf  | j  D ]T}| j r2d| j_| j   d S tjjdd|d  dgd}|sft	d|d  |d |d	 t
|d
 ddi|d}t| jtj|dd|d g\}}|stjj|dD ]}|  q|d  D ]\}}| j rd| j_| j    d S tjjddd| dgd}	tjjdd| dgd}
|	|
d|d}tjf |}|  qq
d S )Nr   r   r  ZdefaultWorkflowr	  r   u+   Не импортировался workflow r   rS   r   r7   r   )r   rJ   r   r   r   r   )r   ZissueTypeMappingsr  r   )r
  Ztarget_workflowr  r   )r4   Zget_workflow_schemer"   r   rO   r   r:   r   r;   r   r   r
   r   r   ZCmfSchemeWfRulert   deleter[   r  )r   Zworkflow_schemer   Zscheme_dictZworkflow_scheme_objr   Zruler  r   r
  r   Z	rule_dictr   r   r   _process_workflow_schemez  sJ    


 

z&JiraAPIImport._process_workflow_schemec                 C   s0  d| j _| j   t  d| j _| j   t  |   d| j _| j   t  |   d| j _| j   t  |   d| j _| j   t  |   d| j _| j   t  |   d| j _| j   t  | 	  d| j _| j   t  | 
  d	| j _| j   t  |   d
| j _| j   | jS )Nrj   
         (   2   <   F   P   d   )r"   Zprogressr   r   r   r  r!  r#  r   r   r  r  r(   r   r   r   r   process_import  sL    









zJiraAPIImport.process_import)T)r   r   )N)2r   r   r   r   r   r9   r	   r   r   rs   rE   staticmethodr   r   r   rI   r]   rc   re   rn   rx   r   r   r   r2   r   r   r   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r#  r-  __classcell__r   r   rC   r   r3   ,   sn   

	,%  




*
!
T
# 
	

2
1
"r3   )Zdataclassestypingr   r   r   r   r   r   r   r	   Z%common.models.cmf_plugin_import_mixinr
   Zmodules.jira.apir   Zmodules.jira.base_importr   Zcmf.includer  r:   r   r   r   r   Z	dataclassr   r2   r3   r   r   r   r   <module>   s   $ 