U
    `c\                     @   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                    sr   z^z*| j jd   | f||W W 4S  tk
rZ   d| _| j jd  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)funcr   r   r   wrapper   s    z3catch_exception.<locals>.decorator.<locals>.wrapperr   )r,   r-   r   )r,   r   	decorator   s    	z"catch_exception.<locals>.decoratorr   )r   r/   r   r.   r   catch_exception   s    r0   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dYd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dZd$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d[dCdDZ)edEdFdG Z*edHdIdJ Z+edKdLdM Z,edNdOdP Z-edQdRdS Z.edTdUdV Z/dWdX 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__r2   modelsZCmfActivitygetdefault_activityepicsblocked_tasksdepended_taskssubtasksboardsselected_projectsr'   )r   r2   r*   r+   	__class__r   r   r7   /   s    zJiraAPIImport.__init__)r3   c                 C   s
   | j  S r   )r2   Z
get_fieldsr   r   r   r   jira_fields<   s    zJiraAPIImport.jira_fields)model
field_namer3   c                 C   s&   |sd S | j |gd}|r"|d S d S )N)Zfields_namer   )Zimport_shop_fields)rD   rE   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assigneerL   rM   projectZcustomfield_10015Zduedateupdatedcreatedz.namez.watchCountz.votes)rL   ZwatchesZvoteszfields. Nmodel_field	json_path)rC   itemsr9   append)r   Zissue_settingsZdefault_local_attrs_mappingZadditional_json_pathZcustom_field_keyZcustom_fieldrX   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   displayNamerV   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 )NrO   rT   rV   rI   authorrH   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^   r`   rT   rb   bodyr   .   rU   r   )splitlenrC   r9   )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 )Nrg   r   r\   r   rU   r^   r]   inwardIssueoutwardIssue,)ri   
isinstancedictr9   listrZ   r   join)	r)   rX   to_strrE   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_funcrD   r3   c                    sz   | D ]p}| }|D ]H} ||d |d< ||d |d< |d |d< |j|d< q |j|d |  S d S )NrX   Zfile_valrW   titleicon)r   fields)rv   rG   rl   rz   rZ   verbose_name)rw   rx   rD   r)   Zobj_settingssettingru   r   r   r   _get_settings   s    z:JiraAPIImport.tmplt_import_settings.<locals>._get_settingsrh   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+0300rd   u!   Электронная почта)r\   r^   re   )rT   rb   rf   selectedObjects)r   value)r   r   r   r   r   	TypeModelr2   
get_issuesr[   r8   CmfTask	get_usersra   	CmfPersonrc   
CmfCommentrZ   )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)ry   rz   titlesrows   r   r{   rW   rX   rE   r   r   captionr   )Z_normalize_settingsr!   Zjson_settingsr2   r   	enumerater8   r   r|   rv   _normalize_jira_valuerZ   )r   settingsru   r   Znumr}   r   r   r   r   preview   s    zJiraAPIImport.preview)r   r3   c                 C   sT   i }|D ]F}|d sq| j ||d dd}| |d d |}|||d d < q|S )uC    Преобразование настроек для модели rW   rX   F)rt   rE   )rv   r   )r   r)   r   Znormalized_objr}   r   r   r   r   _normalize_obj   s    zJiraAPIImport._normalize_obju:   Обработка исполнителей проекта)settings_usersr3   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_emailr.   )r]   leftright)
r2   Zget_project_membersr8   
CmfProjectr9   r   r
   process_any_table_fieldsr!   Z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   rN   tree_parent	list_typeZplan_start_dateZplan_end_dater   Z
filter_obj)r   r9   rZ   r8   Z	CmfFolderr
   r   r!   ZCmfListr   save)
r   rN   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)r2   Zget_watchersr8   r   r9   CmfErrorrK   rI   rJ   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filenamer.   )r!   rN   r   )Z	overwrite)r2   Zget_attachmentsr   r   Zget_attachment_contentr8   ZCmfAttachmentr9   r!   Zupload_filer   rZ   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)rH   r   refindallZ	parent_idreplacer   )comment_objZ
is_changedrH   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%)r8   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*   )setr2   r   r!   	is_cancelrM   r   r   r   r8   r   r|   r
   r   r   loadr]   r_   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   )r2   connZget_all_statusesr!   r   rM   r   r
   get_status_typeZdefault_workflowr8   	CmfStatusr9   r   r"   r#   )r   jira_statusesrM   r   r   Z
cmf_statusr   r   r   _process_statuses  s(    


 


zJiraAPIImport._process_statusesc                 C   sj  t  }d}d}| j|d D ]B}|d dkr2qd|d  d|d  }d|d  d	|d  }tjjd
d|gd}d}	|d dkrd}	|stjj|	d}
tj||
| jd}||_|  |s|d dkr|}|s|d dkr|}|||d < | jj	|d dD ],}|d |d d d kr| 
|| qtjjdd|gd
ddggdD ]}|jdd qNqd|d  }d|d  }tjj|d}|stjjdd}
tj||
| jd}||_||_||_|  tjj|dD ]}|  q| D ]p\}}| j r d| j_| j   qftjjd
dd| d gd}||d!|| jd"}tjf |}|  q|S )#u)  
        У простого проекта воркфлоу привязан к issue type 1 к 1
        Поэтому надо получит все типы привязанные к проекту, на каждый тип создать WF и замапить через схему
        Nr   hierarchyLevelrh   zSIMPLE::::u(   Simple-схема для проекта r   u    и типа r   =r   task.agile:defaultr   zdefault.system:defaultr4   )r   templater!   )Z
project_idZusagesZ
issueTypesr   r   Tforcer   softdev:default	scheme_wfr   LIKE%::::%r   )
logic_typetarget_workflowcmf_model_namer   r!   )rq   r2   Zget_issue_for_projectr8   r   r9   r!   r   r   get_statuses_create_statusr   rr   deleteCmfSchemeWfdefault_task_workflowZ!default_subtask_workflow_workflowCmfSchemeWfRulerY   r   rM   CmfLogicType)r   Zjira_project_infoZ	issue_mapZdefault_task_wfZdefault_subtask_wf
issue_typeZworkflow_ext_idworkflow_namer   r5   r   jira_statusrM   Zscheme_ext_idZscheme_nameschemerulelogic_type_ext_idr   	rule_dictr   r   r   #_create_schemewf_for_simple_project  sl    "
 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|| jd}||_||_|d |_	|d |_
|  |S )Nr   r   Zin_progressr   Ztodoopendoneclosedu/   ERROR! Неизвестный statusCategory = u   , взяли in_progressr   r   r   r   r   )r   r!   r   rQ   )r   lowerprintr8   r   r9   r!   r   r   r   rH   r   )r   Zjira_status_datar   Zstatus_ext_idZeva_status_categoryrM   r   r   r   r     s0    

zJiraAPIImport._create_statusu#   Обработка проектовc                 C   s  | j d d d }|d s"tddd |d D | _| jD ]}| j rdd	| j_| j   d S | jj	|d
 }|d }|r| 
|}||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\}}|sr|dg |	dg D ]}|d dkr| jjj|d d|d dd}tjj|d d}|j| nV|d dkr$tj| jtj|d |d dd
d|d gd\}}|j| ntd q~|  |j| |  | 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 q^qq<d S )&Nr   r   r   	isCheckedu5   Не выбрали ни одного проекта!c                 S   s$   g | ]}|d  r|d r|d  qS )r)   r   r   )r   valr   r   r   r     s       z3JiraAPIImport._process_projects.<locals>.<listcomp>Zchildrenr   r   Z
simplifiedr   ZworkflowSchemer   r   r   r   Ztask_code_prefixzrole:r   : )r   r   
rg_membersZactorstypezatlassian-user-role-actorZ	actorUserr   )ZusernameZ
account_idzatlassian-group-role-actorr\   u&   Неизвестный тип роли)r   r%   rR   Tu:   Не удалось импортировать доску )$r   r&   r@   r!   r   rM   r   r2   r   Zget_projectr   Zget_project_schemer8   r   r9   r   r
   r   r   Zget_project_rolesvaluesZjira_requestZjsonZCmfPersonGroupZload_fieldsr   r   r  rZ   Z	executorsZget_all_agile_boardsZget_agile_board_configurationr?   r'   r$   r(   )r   rootrR   Zproject_infoZproject_simplifiedr   Zproject_obj_Zrole_uriZ	role_infor   groupis_newZactorZ	user_infor   Z	sub_groupboarder   r   r   _process_projects  s    



 


zJiraAPIImport._process_projectsu   Обработка досокc                 C   sr  | j D ]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 }| || qrtj|dd}d|_|  t  |d dkr| j|d D ]\}| ||}	t  | j|d D ]2}tjj|d d}
|
r4|
j|	 |
  q4qqdS )u   
        У нас пока нет таких сущностей, так что просто в каждом проекте дублируем доску в виде листа задач
        Zclassicr  r   rR   r   r   zboard:r   )r   r   Nr{   rM   r   r   r   Zdelme)rN   r   TZscrum)r?   r8   r   r9   r   r   r2   Zget_issues_for_boardr!   r   rM   r   r
   r   _process_issuer   Zcmf_deletedZget_sprintsZget_sprint_issueslistsrZ   )r   r	  r   rN   Z	board_objr   sprintstr   Z
sprint_objZtaskr   r   r   _process_boardsU  s@    

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_diff~  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 d  gd&|d<  j|d'< d(|d)< |d |d#< |d! r,t|d! |d!< |d d* }|D ]}d+|kr|d+ d } j|d g }|| | j|d < n@d,|kr<|d, d } j|d g }|| | j|d < q<|r||d-< ||d.< |pg }|d d.}|r|d d d d	kr j|d sz|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 sd0}|d d d1 rd2}|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d3d#d4|gd#d$d%| d5ggd&|d6< tj jt j|d#d7|d gd8\}}|jrXtd9|jjD ]B\}}td:|d; }d<|jj d=| d>}|jj|||_q|D ]}|j | q\||_!|"  t#   $|| |d d?g }t% j||  &|}|rt jj|jjd-d@gdA}|j'D ]}  (|  qt#  dS )Bu   
        Общая логика обработки которая потом разделяется на задачи и эпики
        r{   r   rR   r   r   u$   Не проекта с ключем r   r   ZEpicrP   rM   r   zepic:)r   r   r5   stater   epicNc                    s&   g | ]}  | jtjj d  qS )r{   )r   r   r8   r   r|   )r   cr   r   r   r     s     z0JiraAPIImport._process_issue.<locals>.<listcomp>c                 S   s   i | ]}|d  |qS )ry   r   )r   fieldr   r   r   
<dictcomp>  s      z0JiraAPIImport._process_issue.<locals>.<dictcomp>Z	changelogZ	historiesrb   rT   rh   )rO   rI   Z	log_levelrY   r  rW   rU   Z
fromStringZtoStringrH   z<br>r   r   r   r   r   TZapprovedZ
issuelinksrm   rn   commentsrN   Zsubtaskr   r   r   ORr   r   r   r   r   r   r   r   r   r   r   labelszcomments.text)r   r{   ))r8   r   r9   r   r
   r   r   r;   r2   Zget_commentsr   r   r|   r   r   r  rZ   r   r:   markdownr<   r=   r>   r   r   r!   rH   r   r   r   r   r   r  Zimport_raw_jsonr   r   r   Zprocess_tagsr   r  r   )!r   r   r  r   rR   r  r  Zjira_map_fieldshistoryrI   Zcommentitemr   r  ZdiffZnormalized_issueZissue_linksZ
issue_linkZlinked_issue_keyZtasksZissue_parentr  r   r   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   )r2   r   r!   r   rM   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   rN   )r   r{   affected_tasksr=   N)r>   r8   r   r9   rN   r   r!   r"   r#   r<   r  rZ   r=   )r   Zparent_ext_idZparent_taskZchild_ext_idZ
child_taskr   r   r   _process_relations  s*    




z JiraAPIImport._process_relationsu   Обработка аудитаc                 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   rR   r   r   r   r   :  s     z0JiraAPIImport._process_audit.<locals>.<listcomp>Z
objectItemZtypeNameZISSUEN)r2   Zget_audit_recordsr@   r   )r   recordr   r   r   _process_audit5  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   r5   Z	UserStoryztask.userstory:defaultz
Task Agiler   Bugztask.bug:default)r   r#  ZStoryu   ИсторияZTasku   Задачаr$  u   Багr   Nr   rh   r   r5   r   r   )r   r{   r   r   r   r   r   r   r   rQ   r   )r   r   rH   r   r   r   )r2   Zget_issue_typesr!   r   rM   r   r9   r8   r   r   rq   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    qtjjdd gdddggdD ]}|jdd q|d D ]}| j rBd| j_| j    dS  j d|d  }tjj	| d}	|	szt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|	_|	  qq*dS )u   Импортируем workflowr   r   Nr   r   ZentityIdr   r   r4   )r   r   rQ   Zstatusesr   r   r   r   Tr   Ztransitions)r   r   c                    s   g | ]} j  d | qS )r   )r   )r   str   r   r   r     s     z3JiraAPIImport._process_workflow.<locals>.<listcomp>fromINuN   DEV: Fatal Вероятно, сломали создание статусов!to)r2   r   Zget_workflowsr!   r   rM   r   r8   r   r9   rH   r   r   r   rr   r   r   ZCmfTransZstatus_fromrj   AssertionErrorZ	status_to)r   r   r   Zjira_workflowZworkflow_idZtemplate_workflowrM   Zjira_transitionZtransition_ext_idZ
transitionZstatus_from_ext_id_listZstatus_to_ext_idr   r'  r   _process_workflowq  sJ    


"


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   rQ   r   r5   r   )r   rH   r   r   r   r   r   ZissueTypeMappingsr   r   )r   r   r   r   )r2   Zget_workflow_schemer!   r   rM   r   r8   r   r9   r+  r   r
   r   r   r   rr   r   rY   r   )r   Zworkflow_schemer   Zscheme_dictZworkflow_scheme_objr  r   r   r   r   r   r   r   r   r   _process_workflow_scheme  sJ    


 

z&JiraAPIImport._process_workflow_schemec                 C   s2  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 )Nrh   
         (   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   r7   r	   r   r   rq   rC   staticmethodr   r   r   rG   r[   ra   rc   rl   rv   r   r   r   r0   r   r   r   r   r   r8   r   r   r   r   r   r   r   r  r  r  r  r  r   r"  r%  r,  r-  r7  __classcell__r   r   rA   r   r1   ,   sp   

	,%  




*
A!
S
( 
	


2
5
"r1   )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  r8   r   r   r   r   Z	dataclassr   r0   r1   r   r   r   r   <module>   s   $ 