
    ]ik                       d dl mZ d dlT d dlmZmZ d dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlZ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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)m*Z* d dl+m,Z, eee-j.                 ee-j/                 ee-j0                 f         Z1ej2         G d d                      Z3d Z4 G d de*          Z5dS )    )cmf_context)*)cmf_hashlibcmfutilN)Path)DictOptionalListCallableUnionTypeIterator)BeautifulSoup)permutations)dedentindent)	normalize)	BaseModel)CmfPluginImportMixin)JiraApi)JiraBaseImport)JQLNormalizerc                   >    e Zd ZU dZeed<   eed<   eed<   d Zd ZdS )EpicDatauD    Данные используемые при создании epic namekeyproject_keyc                 *    t          | j                  S N)hashr   selfs    ./modules/jira/api_import.py__hash__zEpicData.__hash__&   s    DH~~    c                 "    | j         |j         k    S r   )r   )r"   others     r#   __eq__zEpicData.__eq__)   s    x59$$r%   N)__name__
__module____qualname____doc__str__annotations__r$   r(    r%   r#   r   r      sX         NN
III	HHH  % % % % %r%   r   c                       fd}|S )Nc                       fd}|S )Nc                 F   	 | j                             d            | j                                         rdS  | g|R i |}t                       |S # t          $ r? t                       | xj        dz  c_        | j                             d            Y dS w xY w)Nz================== r      u   Ошибка )
cmf_importlog	is_cancel
cmf_commit	Exceptioncmf_rollback
has_errors	log_error)objargskwargsresfuncr   s       r#   wrapperz3catch_exception.<locals>.decorator.<locals>.wrapper/   s    ""#?#?#?@@@>++-- 1d3000000
   !#(()?)?)?@@@qq	s   6A A AB B r/   )r@   rA   r   s   ` r#   	decoratorz"catch_exception.<locals>.decorator.   s)    	 	 	 	 	 	 r%   r/   )r   rB   s   ` r#   catch_exceptionrC   -   s$        " r%   c            
       
    e Zd ZU dZeed<   eeef         ed<   de	ddf fdZ
edeeef         fd            Zd	 Zd
 Zd Zd Zedededeee                  fd            Zd Zdeeeef                  fdZed             Zed             Zd Zedd            Zdee         fdZdee         fdZdee         defdZ	 	 ddZ e d          d             Z! e d           d!             Z" e d"          d#edefd$            Z#d% Z$ e d&          d#ed'e%fd(            Z&dd)Z' e d*          d+             Z( e d,          d-             Z) e d.          d/             Z*de+j,        fd0Z-d1 Z.dd2Z/dd3Z0d4 Z1d5 Z2d6 Z3d7 Z4 e d8          d9             Z5 e d:          d;             Z6 e d<          d=             Z7 e d>          dd?e8fd@            Z9dA Z:dB Z; e dC          dD             Z< e dE          dF             Z=dGedHefdIZ>dJ Z?	 	 ddMZ@dN ZAdO ZB e dP          dQ             ZCdR ZD e dS          dT             ZE e dU          dV             ZF e dW          dX             ZGdY ZHdd[ZId\eJfd]ZKd\eJfd^ZL e d_          d`efda            ZMdb ZNdc ZO e dd          d`efde            ZPdf ZQ e dg          dh             ZRdi ZSdj ZTdk ZUdl ZV e dm          dn             ZW e do          dp             ZXdq ZYdr ZZ e ds          ddt            Z[ e du          dv             Z\ e dw          dd?e8fdx            Z] e dy          dHefdz            Z^ e d{          d|             Z_ e d}          d~             Z` e d          d             Za e d          d             Zb e d          d             Zc e d          d             Zdd ZeddZfdefdZg e d          defd            ZhdefdZid Zjd Zkd Zld Zmd Znd Zod Zpd Zqd Zrd Zsd ZtddZud Zvd Zwd Zxd Zyd`efdZzd`efdZ{d`efdZ|d`efdZ}d`efdZ~d Zd Zd Zd Zd Z e d          dedeJd`efd            Zd Zd ZdedefdZd ZdHefdZddZd Zeddedededefd            Zd Zd Zd Zd Zd Zd ZdÄ ZdefdńZdƄ ZdǄ ZdȄ Z e dɦ          dʄ             Zd˄ Z e d̦          d̈́             Zd΄ Z xZS )JiraAPIImportu;   Класс загрузки объектов через APIr:   _JiraAPIImport__jira_fieldsjirareturnNc                     t                      j        |i | || _        d| _        | j        j        rd| _        t
          j                            d          | _        d | _	        | 
                                | _        i | _        i | _        i | _        g | _        g | _        d| _        t$                              d          }| j        j        j        |_        |                    | j        j        j                   |                                  |                                  d | _        d| _        dd	d
d| _        d S )Nr   	accountIdsoftdevcoder   zatlassian.rest_clientF
logic_typepriorityresponsible)	issuetyperO   assignee)super__init__rG   user_keycloudmodelsCmfActivitygetdefault_activitycloud_id_get_jira_global_settingsjira_global_settingsepicsissue_relationssubtasksboardsselected_projectsr:   logging	getLoggerr4   loggerhandlerssetLevellevel_prepare_multiprocessing_set_fallback_personrF   update_fields_board_card_colors_mapping)r"   rG   r=   r>   re   	__class__s        r#   rT   zJiraAPIImport.__init__G   s4   $)&)))!	9? 	('DM & 2 6 6I 6 F F$($B$B$D$D!
!!#""#:;;/09.4555%%'''!!###!" &"%+
 +
'''r%   c                 "   | j         r| j         S | j                                                            d          }|                                rN| j        sGt          |          5 }t                              |          | _         d d d            n# 1 swxY w Y   nm| j	        
                                | _         t          |d          5 }t                              | j         |           d d d            n# 1 swxY w Y   d| _        | j         S )Nfields.jsonw+F)rF   r4   get_download_pathjoinpathexistsrk   openjsonloadrG   
get_fieldsdump)r"   	file_pathfs      r#   jira_fieldszJiraAPIImport.jira_fieldsh   sh    	&%%O5577@@OO	 	'd&8 	'i 2A%)YYq\\"2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 "&!5!5!7!7Di&& 1!		$,a0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1!&D!!s$   % BBB!C88C<?C<c                    dd l }|| _        | j                                                            d          }| j                                                            dt
                                                     }t          |d          5 }t          	                    | j        |           d d d            n# 1 swxY w Y    |j
        ||           d S )Nr   ro   zfields.json.rp   )shutilrF   r4   rq   rr   osgetpidrt   ru   rx   move)r"   fieldsr}   ry   file_path_tmprz   s         r#   update_jira_fieldsz JiraAPIImport.update_jira_fieldsx   s    #O5577@@OO	99;;DDEaTVT]T]T_T_EaEabb-&& 	-!IId(!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-M9-----s   !B;;B?B?c                     | j         j        j                            d          }t	          |          | _        | j        r't          j                            |          | _        dS t          j
        | _        dS )u   
        Устанавливает резервного пользователя,
        если пользователь не будет найден в методе _get_person()
        default_user_ididN)r4   json_settingsvaluerY   bool_is_default_userrW   	CmfPerson_fallback_persongsystem_user)r"   r   s     r#   rj   z"JiraAPIImport._set_fallback_person   sm    
 /7=AABSTT $_ 5 5  	2$*$4$8$8O$8$L$LD!!!$%MD!!!r%   c                 ^    | j                                         D ]}|d         |k    r|c S d S )Nr   )r{   values)r"   r   fields      r#   _get_field_by_namez JiraAPIImport._get_field_by_name   sG    %,,.. 	 	EV}$$ %	 	r%   c                 x    t          t          fd| j                                                  d           }|S )Nc                 ^    |                      di                                d          k    S )NschemacustomrY   )rz   
field_types    r#   <lambda>z2JiraAPIImport._get_field_by_type.<locals>.<lambda>   s(    !%%"--11(;;zI r%   )nextfilterr{   r   )r"   r   r   s    ` r#   _get_field_by_typez JiraAPIImport._get_field_by_type   sI    IIII ''))  
 
 r%   model
field_namec                 P    |sd S |                      |g          }|r|d         nd S )N)fields_namer   )import_shop_fields)r   r   r?   s      r#   _get_field_namezJiraAPIImport._get_field_name   s:     	4&&J<&@@&s1vv$&r%   c                     dd l }dd l}|| _         || _        t          j        | _        t          j        | _        | j                                        | _	        d S )Nr   )
	threadingqueueconfigIMPORT_THREADSthreading_max_forksIMPORT_DOWNLOAD_THREADSdownload_threading_max_forksr4   get_max_processesmax_processes)r"   r   r   s      r#   ri   z&JiraAPIImport._prepare_multiprocessing   sZ    "
#)#8 ,2,J)!_>>@@r%   c                    g }ddddddddd	d
ddd}dddd}| j                                         D ]M\  }}d| |                    |d           }|                    |                    |d          ||d           N|S )uO    Сопоставление настроек для модели models.CmfTaskr   text	cmf_ownerrP   rO   status
alarm_datedeadlinecmf_modified_atcmf_created_atstatus_closed_at
resolution)summarydescriptionreporterrR   rO   r   customfield_10015duedateupdatedcreatedresolutiondater   z.namez.watchCountz.votes)rO   watchesvoteszfields. N)model_field	json_path	ext_field)r{   itemsrY   append)r"   issue_settingsdefault_local_attrs_mappingadditional_json_pathcustom_field_keycustom_fieldr   s          r#   _get_issue_import_settingsz(JiraAPIImport._get_issue_import_settings   s    !#%"!-!('0&'
 '
#$  $ 
  

 /3.>.D.D.F.F 	 	*ld"2d4H4L4LM]_a4b4bddI!!:>>?OQUVV&)# #    
 r%   c                  "    dddddddddg} | S )Nr   displayNamer   r   emailemailAddressdoes_not_workactiver/   )user_settingss    r#   _get_user_import_settingsz'JiraAPIImport._get_user_import_settings   s4     #??#.AA+(CC

 r%   c                  "    dddddddddg} | S )Nr   r   r   
cmf_authorauthorr   renderedBodyr/   )comment_settingss    r#   _get_comment_import_settingsz*JiraAPIImport._get_comment_import_settings   s5     -9EE(x@@"@@	
  r%   c                     dddddddd}||v r||         S |                     d	          }t          |          d
k    rdS | j                            |d
         i                               dd          S )N   ИмяEmailu   Активныйu   Создано
   Автор
   Текстu   Ключ)r   r   r   r   r   bodyr   .r3   r   r   )splitlenr{   rY   )r"   jsonpathmappings      r#    _get_setting_title_from_jsonpathz.JiraAPIImport._get_setting_title_from_jsonpath   s    ##('" 
 
 w8$$>>#&&x==A2##HQK4488DDDr%   Tc                    |sd S |                     d          D ]4}t          | t                    s d S |                     |          } | s d S 5|r.t          | t                    rg d}|D ]}|| v r
| |         c S dS |rt          | t                    rg }| D ]}d|v r"|                    |d         d                    (d|v r"|                    |d         d                    Nd|v r|                    |d                    n|r"|                    t          |                     d                    |          S | S )Nr   )r   r   r   r   inwardIssuer   outwardIssue,)r   
isinstancedictrY   listr   r-   join)r<   r   to_strr   
str_fields	str_fieldresultrelated_objs           r#   _get_file_valzJiraAPIImport._get_file_val   s   
  	F#//#.. 	 	Jc4(( ''*%%C   	jd++ 	777J' * *	##y>))) $2 	$jd++ 	$F" 4 4 K//MM+m"<U"CDDDD#{22MM+n"=e"DEEEEk))MM+e"45555  4MM#k"2"233388F###
r%   c                 6   	 g 	dt           t          t          t                   f         dt          g t          t                   f         dt
          dt          f	 fd} j                            dg            j                                        	                    d          }d}d}|
                                rQ                                 D ]$}                     |d	                   D ]} |r n%                     d
          D ]} |s/d  j                            d          D             }|r|d         }|s:d  j                             j        j        d          D             }|r|d         }|st%          d          d _         || j        t*          j                   |st%          d           || j        t*          j                   ddddddg} || j        t*          j                   	                    dg d           	S )u-    Инициализация настроек objssettings_funcr   rH   c                 <   | D ]} |            }|D ]h}                     ||d                   |d<                       ||d                   |d<                       |d                   |d<   |j        |d<   i                    |j        |d           |c S d S )Nr   file_valr   titleicon)r   r   )r   r   r   r   r   verbose_name)r   r   r   r<   obj_settingssettingr   r"   s         r#   _get_settingsz:JiraAPIImport.tmplt_import_settings.<locals>._get_settings  s      ,}+ 1 1G*.*<*<S'+BV*W*WGJ'-1-A-A%Q^I_-`-`GM*'+'L'LWU`Ma'b'bGG$&+jGFOOu'9\RRSSS


 r%   zplugin.plugin.*projectsNr   usersc                     g | ]}|S r/   r/   .0r<   s     r#   
<listcomp>z7JiraAPIImport.tmplt_import_settings.<locals>.<listcomp>4  s    BBBSSBBBr%   r3   limitr   c                     g | ]}|S r/   r/   r  s     r#   r  z7JiraAPIImport.tmplt_import_settings.<locals>.<listcomp>8  s    bbbSSbbbr%   )username	limit_enduS   Не найдено ни одной задачи, импорт невозможенTua   Не найдено ни одного пользователя, импорт невозможенz2022-05-22T15:22:22.593+0300r   u!   Электронная почта)r   r   r   )r   r   r   selectedObjects)r   r   )r   r
   r   r   r   	TypeModelr4   load_fieldsrq   rr   rs   _get_projectsget_project_tasks_simple_getrG   
get_issues	get_usersr  r8   rk   r   rW   CmfTaskr   r   r   
CmfCommentr   )
r"   r  dump_dirtaskuserprojecttasksr  comment_exampler   s
   `        @r#   tmplt_import_settingsz#JiraAPIImport.tmplt_import_settings  s   :<
	dHTN&: ; 
	)1"d4j.)A
	JS
	X\
	 
	 
	 
	 
	 
	 
	 	##%6$7888?4466??
KK?? 	--//   2274=AA  D E((11   	 BBDI$8$8q$8$A$ABBBE  Qx 	 bbDI$7$7AS_`$7$a$abbbE  Qx 	sqrrr "dD;V^LLL 	A  A  A  AdD:F<LMMM'E6>4W'Y 'Y$02 2 3
 	ot'H&J[\\\ 	02>>???r%   c                 4   |                      | j        j        d                   }ddg g gdg}| j                            d          D ]}t          |t          j        j                 d                   D ]\  }}|d         s| 	                    ||d	                   }| 
                    |d         d
         |          }|d         d                             |d         d                    |d         d         d                             |           |S )Nimport_settingsu   Задачиzcalendar-today)r   r   titlesrows   r  r   r   r   r   r   r   captionr!  )_normalize_settingsr4   r   rG   r  	enumeraterW   r  r   r   _normalize_jira_valuer   )r"   settingsr   issuenumr   r   s          r#   previewzJiraAPIImport.previewT  s)   ++DO,IJ[,\]]*4DPR]_\`aabY)))22 	3 	3E )(6>3N*OPX*Y Z Z 3 3W}- **5'+2FGG227=3I,3WY^__q	(#**7=+A)+LMMMq	&!!$++E22223 r%   r'  c                     i }|D ]p}|d         s|                      ||d         d          }|                     |d         d         ||                    d                    }|||d         d         <   q|S )uC    Преобразование настроек для модели r   r   F)r   r   r   )r   r&  rY   )r"   r<   r'  normalized_objr   r   s         r#   _normalize_objzJiraAPIImport._normalize_objc  s     	I 	IG=) &&sGK,@&OOE..w}/El/SUZ\c\g\ghs\t\tuuECHN7=1,?@@r%   sprintkanbanc                 4   dd|j         gg}|                    d          r|                    g d           n|                    dd|g           t          j                            |          }| j        j        j        j         d|d          }t          j	        | j        t          j
        |d	         ||||                    d
          |                    d          |ddd|g          \  }}	|	r#|d	         |_        |                    d           |S )Ntree_parent_id==completeDate)sys_typer2  archiver4  r   ::r   r   	startDateendDate)r   parenttree_parent	list_typeplan_start_dateplan_end_dateext_idr?  
filter_objTsave_import)r   rY   r   rW   	CmfFolderr4   pluginsource_hashr   process_any_table_fieldsCmfListr   save)
r"   r:  r.  parent_sys_typer<  _filterr;  r?  list_objnews
             r#   _process_listzJiraAPIImport._process_listo  sD   $dFI67::n%% 	@NN8889999NNJo>???&**'*::O*1=OOOO,EdoW]WeOUV\~QWVaT]Z`ZdZdepZqZqX^XbXbclXmXmQWGI GI W_`dflUm	o 	o 	o#  	,"6NHMMMdM+++r%   u8   Обработка наблюдателей задачиc                    d|d          d|d         d          d}g }|                      |          D ]}	 | j        j        r|d         n|d         }|                     ||d	          }|                    |           M# t
          $ r-}| j                            d
| d| d|           Y d}~d}~ww xY w||_        dS )u;   Добавляем наблюдателей в задачуu$   Наблюдатели задачи r   : "r   r   "rJ   T)r<   raise_on_erroruC   Не удалось найти наблюдателя задачи . zERR-0135r<   N)	_get_issue_watchersrG   rV   _get_personr   r8   r4   r;   
spectators)	r"   	issue_objr(  r<   rW  watcheruser_idpersonexcs	            r#   _process_watcherszJiraAPIImport._process_watchers  s!    fU5\eeuXW`Gaeee
//66 
	 
	G	26)/U'+..wu~))'s4)PP!!&))))   ))jZajjehjj! *          *	s   A	B  
B7
#B22B7u#   Обработка вложенийc                 $    d}d|d          d|d         d          dd |d         d	         D              fd
}                      |          D ]8}| ||d         |d                   z  } j                            d	d           9|S )Nr   u   Вложения задачи r   : 'r   r   'c                 :    i | ]}t          |d                    |S r   r-   )r  att_datas     r#   
<dictcomp>z6JiraAPIImport._process_attachments.<locals>.<dictcomp>  s6     
 
 
 
 
 
r%   
attachmentc                 V   d}	 	                     |           }|r|d         nd}|r|d         n| }t          j                             |g d          }|s9t                              |j        d          }|                    d	           |j        r|rb|                     d
          r9                    |d
         j                 
          |_        |j        |_	        |d         |_
        ||_        t          |d          5 }|                    |                                dd           d|_        |                    d	           |r|d         }|j        |k    sJ d d d            n# 1 swxY w Y   t!                       n# t"          $ rB t!                       j                            d| d| d|j         d| d	d           d}Y nCt&          $ r7 t)                       j                            d| d| dd           d}Y nw xY w|S # |c cY S xY w)Nr   r   r   filename)import_originalurlurl_preview_imgurl_previewr   r:  r   Tr   r:  r4   rh  rB  r   rT  r   rbF)smart_backup
mark_dirtysizeu   Размер файла '' (u@   ) не соответствует размеру из меты: z	 bytes / z bytesERR-0034r3   u;   Не удалось обработать вложение ')zERR-0035)rY   rW   CmfAttachmentr4   rI  rh  rV  rU   r   r   r   import_raw_jsonrt   upload_filereadst_sizer7   AssertionErrorr;   r8   r9   )	file_namery   errorattachment_metaattachment_idattachment_namere  rz   attachment_sizeattachments	issue_msgrX  r"   s            r#   _process_attachmentz?JiraAPIImport._process_attachments.<locals>._process_attachment  sM    E>"-//)"<"<9H P 5 5bAP"_/*"="=V_#155($   6 	 	
 " 6!'!5!5,(#'?(,	 "6 " "J OOO555- I& E*..x88 I484D4D / 9$- H$- 5E 5 5J1 4>3HJ04CI4N
15D
2i.. 
I!"..FFHH)-', /   
 6:
2"D999* I.=f.EO#-#5#H#H#H#H
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I !   ))j j jM j j5?5Gj jRaj j j!	 *       ))vRavvfsvvv! *   
  us\   DF AE7+F 7E;;F >E;?F H! A	HH! =HH! HH! !H(r{  ry   	processed)_get_issue_attachmentsr4   inc_stat)r"   rX  
jira_issueerrorsr  attachment_datar  r  s   ``    @@r#   _process_attachmentsz"JiraAPIImport._process_attachments  s    mZ5Fmm:V^K_`iKjmmm	
 
&x0>
 
 

C	 C	 C	 C	 C	 C	 C	 C	J  $:::FF 	@ 	@O)),,  F O$$\;????r%   uB   Обработка упоминаний пользователей	text_soupc                 >   ddl m}m} |j        dv rd}nd}|                    ddi          D ]}	 |j                            d	          r!|                     |j        d	                   }n|j                            d
          r!|                     |j        d
                   }n ||j        d                   } ||j                  }	|	                    d          rT| 	                    |	d         d         
                                          }
|                     |
| j                           }nt          d          t          |                    t          |j                  t          |j                  t          |j                  t          |j                            d          }|                    |j                   # t          $ r>}| xj        dz  c_        | j                            d| d| d|           Y d}~d}~ww xY wdS )u]   
        Упоминания пользователей
        confluence-userlink
        r   )urlparseparse_qsr  a  
                <a
                    class="external"
                    href="{person_href}"
                    rel="noopener"
                    target="_blank"
                    data-macros="mentions"
                    data-mention-type="person"
                    data-object-id="{person_id}"
                    data-title="{person_login}"
                    cmf_converted="true"
                >
                    @{person_name}
                </a>
            u	  
                <span class="macros-panel mentions-macros" contenteditable="false" data-id>
                    <span class="extension-container" data-layout="default" data-id>
                        <span class="extension-title" data-id>
                            @Упоминания <span class="excerpt-title" data-id>| {person_login}</span>
                        </span>
                        <span class="macros-actions" data-id>
                            <span class="macros-delete" data-id>
                                <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                    <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                </svg>
                            </span>
                        </span>
                    </span>
                    <span class="ak-renderer-wrapper" data-id>
                        <a class="external" data-macros="mentions" data-mention-type="person" data-object-id="{person_id}" data-title="{person_login}" rel="noopener" data-id cmf_converted="true">
                            <span class="lds-ring" data-id>
                                <span data-id></span>
                                <span data-id></span>
                                <span data-id></span>
                                <span data-id></span>
                            </span>
                        </a>
                    </span>
                </span>
            class
user-hoverattrsdata-account-iddata-usernamehrefr   u[   Не найдены атрибуты для определения пользователя)	person_idperson_loginperson_hrefperson_namehtml.parserr3   uR   Ошибка конвертации упоминания пользователя : zERR-0036rT  N)urllib.parser  r  
class_namefind_allr  rY   rV  query_get_user_info_from_dumplowerrU   r8   r   formatr-   r   loginr  r   replace_with
currentTagr:   r4   r;   )r"   r  r<   r  r  TMPLtagr[  
parsed_urlr  	user_infonew_tages                r#   _process_mentionszJiraAPIImport._process_mentions  sn    	43333333>l++DD D: %%Wl,C%DD 	 	C9==!233 G!--ci8I.JKKFFY]]?33 	G!--ci.HIIFF!)#)F*;!<!<J$HZ%566Eyy(( G$($A$A%-PQBRBXBXBZBZ$[$[	!%!1!1)DM2J!K!K'  )F  G  G  G'KK"%fi..%(%6%6$'$4$4$'$4$4	     "    !34444   1$))silsspqss *        3	 	s   FG
H3HHc                 D   t           j        j        }|                    | j        j         d|           }|t          j        |          S |                     d          D ]-}|                    | j	                  |k    r|c S |                    dd          
                                |
                                k    r|c S |                    dd          
                                |
                                k    r|c S |                    dd          
                                |
                                k    r|c S |                    dd          
                                |
                                k    r|c S /t          d|           )	N:user:r  r   r   r  r   r   uQ   Не нашли информацию по пользователю в дампе )APPREDIS_DBredisrY   r4   r   pickleloadsr  rU   r  r8   )r"   rZ  redis_dbr  s       r#   r  z&JiraAPIImport._get_user_info_from_dumpI  s   <%LLDO$6!G!Gg!G!GHH	 <	***))'22 
	! 
	!I}}T]++w66    }}VR((..00GMMOOCC    }}Z,,2244GG    }}^R006688GMMOOKK    }}]B//55777==??JJ     Kulsuuvvvr%   u#   Конвертация ссылокr:  c                    |j         dv r|j        }|                    d           D ]}|j                            d          r#| j        j                            d|            @|                    d          rC|j        d         	                    d          r#| j        j                            d|            | j        j                            d|            |                    d          r|j        d         }n|j        d	         }t          j                            |                              d
          d                             d          d         }t          j        dt          j                            |                              d          d                   }|rA|d         |d         d         }t!          t#          fd|          d           }	|	r|	d         }t$          j                            |dg|          }
|
r|                    d	          r|j        d	         |j        d<   |
j        |j        d	<   d|j        d<   t-          j        |j        d	                   }|rH|d         r@|d         	                    d          r%d|_        d|j        d<   d|j        d<   d|j        d<   |                    d          r.|j        d         |j        d<   |
j        |j        d<   d|j        d<   | j        j                            d|
j                    d|j                            dd           v r|j        d                             d
          d                             d          d         }|                     |          }|rU|j        d         |j        d<   |j        |j        d<   d|j        d<   | j        j                            d|j                    d S )!Nr  c                 V    |                      d          p|                      d          S Nr  srchas_attrr  s    r#   r   z.JiraAPIImport._process_links.<locals>.<lambda>a  s$    #,,v2F2F2]#,,W\J]J] r%   cmf_convertedu   Уже обработали r  #u   Это якорь u&   Обрабатываем ссылку r  /?r   (/attachment(?:/content)?/(\d+)(?:/)?(.*)r3   r   re  c                 6    |                      d          k    S Nr   r   item	attach_ids    r#   r   z.JiraAPIImport._process_links.<locals>.<lambda>t  s    $((4..I2M r%   rg  ri  )r   r   r:  src_origTvideocontrolsz100%widthheight	href_origu   Заменили на z/people/r   )r  r:  r  r  rY   r4   re   infor  
startswithurllibparseunquoter   researchr   r   rW   ru  sgetri  	mimetypes
guess_typer   rV  r  )r"   r  r:  r  r  ri  r{  	url_matchr  attach
attach_obj	mime_type
account_idr[  r  s                 @r#   _process_linkszJiraAPIImport._process_links\  s   ..]F%%&]&]^^ 1	X 1	XCy}}_-- &++,P3,P,PQQQ||F## 	&(9(D(DS(I(I &++,F,F,FGGGO"''(VQT(V(VWWW||F## 'i'i&,,S1177<<R@FFsKKANI	"Mv|OcOcdgOhOhOnOnorOsOstuOvwwI 3%aL	(2<@f%M%M%M%M{[[]abb 3 &z 2I-22	5'Z`2aaJ <<&& 	5,/Ie,<CIj)'1~CIe$15CIo. ) 4SYu5E F FI  5Yq\ 5il6M6Mg6V6V 5#*0:	*--3	'*.4	(+<<'' 6-0Yv->CIk*(2CIf%15CIo.&++,UZ^,U,UVVVSY]]626666 Yv.44S99"=CCCHHK
))*55 X-0Yv->CIk*(.CIf%15CIo.O*//0V0V0VWWWc1	X 1	Xr%   c           
         |rd| dnd}|s|r"| j         j                            d|            | j        j        r4|d         dk    r(| j         j                            d|d                     |                     || j        t          j	        j
                 d                   }| j        j        s|d	         t          j        d
|d                   }d |D             }t          |          dk    rifd|D             }fd|D             }	|r|d         |d<   n|	r|	d         |d<   n|d         |d<   |                    |d                    |d         |d<   d| j         j        j        j         d|| j                  d}
|d	                             dd          }d}|D ]$}t          |          |k    rt          |          }%t%          t          j	        j        j        t          j	        j        j        t          j	        j        j                  }||k    rt          |          dk    r|d         |d<   d|d<   d|d<   nt          |          dk    r|d         |d<   |d         |d<   d|d<   not          |          dk    r!|d         |d<   |d         |d<   |d         |d<   n:| xj        dz  c_        | j                             d|d	          d| ddd           dd g}t          j	                            d!d"d#|
 d#g|$          }|r|j        j                            d| j         j        j        j         d          dk    r|r| j         j                            d%| d&|j                    t          j        d| j         j        j        j         d'd|j        j                  |_        |                    d()           d }n9| xj        dz  c_        | j                             d*| d+|j         d,d-d./           |sd0d!d1d2| j         j        j        j         d3gg d4g}t          j	                            d5d6|d         g|g|$          }|s|t          j	                            dd6|d         g|g|$          }t          |          dk    rK| j                             d7|d          d8t          |           d| d9d           | xj        dz  c_        g }|sE| j         j                            d:|d          d|            d	d6|d	         g|g}t          j	                            ||$          }|sd0g}tA          |t          |                    D ]}t          |          dk    rdd6|d         g}!t          |          dk    r*|!                    dd6|d         gdd6|d         gg           ^t          |          dk    r3|!                    dd6|d         gdd6|d         gdd6|d         gg           ||g}t          j	                            ||$          }t          |          dk    rR| xj        dz  c_        | j                             d;|d	          d<|d          d=t          |           d| d9d           |r	|d         }n:| j         "                    d>|d	          d<|d          d?| tF          j$                   d@}|s|rd(}d}|d         }t          j	                            d5d6|%                                g|$          r| j         "                    dA| dBtF          j&                   |d                             dC          \  }}| dD| dC| }|dz  }t          j	                            d5d6|%                                g|$          t          	                    |
|| j         d(E          }nd |fS |rqt          j        d
tO          |j(                            }dF |D             }t          |          dk    r|d         |d5<   |j)        r|D ]}tU          ||||                    |j        r|
|j        vr|j         |
 |_        n|
|_        t          j+        ,                                }t          j+        -                                }|j.        !                    |           |j.        !                    |           d(|_/        |dG         dH         D ]1}| j        j        rd|dI          d}
nd|d	          d}
d| j         j        j        j         |
 }
t          j+                            d!d"d#|
 d#gdg$          }|s+t          j+                            d	dJ|d	         gdg$          }|s*t          +                    |
| j         d(|d	         |K          }|j)        r|d	         |_0        |j        s|
|_        n|
|j        vr|j         |
 |_        |                    d()           |j.        !                    |           3|j1        r|                    d()           ||fS )LN(rt  r   u0   Импортируем пользователя accountType	atlassianu   Неизвестный тип r   r   z[,;\s]+r   c                 ^    g | ]*}|                                 |                                 +S r/   stripr  r   s     r#   r  z1JiraAPIImport._process_person.<locals>.<listcomp>  -    III5;;==IekkmmIIIr%   r3   c                 N    g | ]!}|                     d           d         v |"S @r   r   r  r   
user_logins     r#   r  z1JiraAPIImport._process_person.<locals>.<listcomp>  s6    "b"b"bU
ekkZ]N^N^_`Na@a@a5@a@a@ar%   c                 N    g | ]!}|                     d           d         v |"S r  r  r  s     r#   r  z1JiraAPIImport._process_person.<locals>.<listcomp>  s6    !a!a!aEu{{3?O?OPQ?RV`?`?`%?`?`?`r%   r   email_2r7      	last_name
first_namesecond_name   u?   Часть полного имени пользователя "u   " длиннее u_    символов. Фамилия, Имя и Отчество не были заполнены.zERR-0110r   obj_typer   rg_member_ofr?  LIKE%r   r   u    ext_id пользователя N    содержит несколько ID из одного источника: z::.+?::TrB  uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0004r  
error_coder  ORzNOT LIKE%::::%r?  r2  Nr  ILIKEu+   Пользователей с почтой z > zERR-0037uH   Не удалось найти пользователя с почтой u+   Пользователей с именем  (z) > uM   Не нашли пользователя среди существующих ) FuQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифруr  +)r?  r  r4   rh  c                 ^    g | ]*}|                                 |                                 +S r/   r  r  s     r#   r  z1JiraAPIImport._process_person.<locals>.<listcomp>Z  r  r%   groupsr   groupIdr2  )r?  r4   rh  r   rv  )2r4   re   r  rG   rV   warningr-  r'  rW   r   r   r  r   r   removerE  rF  rU   minr  
max_lengthr  r  r:   r;   rY   r?  r   countsubrI  r   r   r   r5   rc   INFOr  WARNINGr-   r  rh  setattrCmfPersonGroup
jira_group
user_groupr  
user_localr   
is_changed) r"   r  createupdater<   obj_msg	user_dictemailsemails_by_loginemails_by_namer?  	full_namecurrent_length_namer   max_length_namer   r[  not_source_hash_filterpersonsrK  
name_combo
is_creatednr  prefix_emaildomainr   r  r  
group_infogroupr  s                                   @r#   _process_personzJiraAPIImport._process_person  s@    #+*c**** 	cV 	cO"''(a[_(a(abbb9? 	ctM2kAAO"**+aDQ^L_+a+abbb''dmF<L<Y.Z[c.dee	y 	1 fJXj)G*<==FIIIIIF6{{Q"b"b"b"bf"b"b"b!a!a!a!aV!a!a!a" 3)8);Ig&&# 3)7):Ig&&)/Ig&i0111'-ay	)$ [do,3?ZZ4CVZZZf%++C33	   	0 	0D4yy...&)$ii#'2&1(3
 

 /119~~"")21	+&*,	,'+-	-((Y1$$)21	+&*3A,	,'+-	-((Y1$$)21	+&*3A,	,'+4Q<	-(
 OOq OOO%%`R[\bRc ` `  wF ` ` `$	 &    ^$!%%fm&mmm4 & 
 
  	fm)//0bT_5K5R5^0b0b0bccfggg  &..cv c cSYS`c c   !#L$/07CLLLM'! !
 ---1$))Ggm G G {A  {HG G G  *# *     K	 :'[T_-C-J-V'['['[\&&&&"
 %))gy'9:*  *  F  9 *// '9W+=>. " 0   w<<!##O--  /L\efm\n  /L  /Lsvw~ss  /L  /L  CJ  /L  /L.8; . P P POOq(OO G WO*22 Bclmtcu  B  Bx  B  B    )F*;<.G %.33763RRG" W#'&*6y#i..*Q*Q # #J"9~~22+6A*O!$Y1!4!4 '%17JqM$J%0':a=$I0" !# !# !# !# "%Y1!4!4 '%0':a=$I%17JqM$J%2GZ]$K0" !# !# !# $2# #)"2"7"7wv"7"V"Vw<<!##OOq(OOO-- LiPVFW  L  L[del[m  L  Lsvw~ss  L  L  CJ  L  L"!, .   
  $QZFFO'' ]hqrxhy  ]  ]  ~G  HO  ~P  ]  ]  T[  ]  ]   
 	( (!
(&**77EKKMM2R[a*bb O''  )c  }B  )c  )c  )c  el  et  u  u  u+4W+=+C+CC+H+H(L&+::a::&::EFA	 &**77EKKMM2R[a*bb 
  ))27DO<@ * B B Z'' /	. Xj#fl*;*;<<FIIIIIF6{{Q%.w%7	'" % 9$ 9 9CFC38888 } '..'-}$>f$>$>FM &.99;;J.99;;J&&z222&&z222 $F"8nW5 2 2
9? 7;*Y"7;;;FF6
6 2666FQdo4;GQQQ-11(FMPVMMM9Zdgch1ii o"155fdJW]L^=_ilhm5nnE i"11?C`d9CF9K]g 2 i iE ( 4!+F!3EJ| =#)ELL5<//&+l#<F#<#<EL

t
,,,#**51111  .---z!!r%   u   Обработка группc                 4   |                      d          D ]}	 | j                                        r d S d| j        j        j        j         d|d          d}t
          j                            ddd| dgdg          }|s+t
          j                            dd	|d         gdg          }|s*t
                              |d         || j        d
|          }|j        r|d         |_	        |j
        s||_
        n||j
        vr|j
         | |_
        |                    d
           t                       | j        xj        dz  c_        <#  t                       | xj        dz  c_        | j                            d| dd           Y xY wd S )Nr  r7  r   r?  r  r  r   r  r  T)r   r?  r4   rh  rv  rB  r3   u4   Не удалось загрузить группу ERR-0038r  r  )r  r4   r6   rE  rF  rW   r  rY   rh  r   r?  rI  r7   imported_object_countr9   r:   r;   )r"   
group_datar?  r(  s       r#   _process_groupszJiraAPIImport._process_groups  s   **844  	Q  	QJQ?,,.. FFado4;Gaa:V\K]aaa-11(FMPVMMM9Zdgch1ii r"155fgzZ`Oa=blokp5qqE "11'/%#'?(,(2 2  E ( 4!+F!3EJ| =#)ELL5<//&+l#<F#<#<EL

t
,,,55:555Q1$))*mak*m*m*4?O * Q Q Q Q Q? 	Q  	Qs   EDEA Fu-   Обработка пользователейc                 j   | j         j        j                            dd          s(| j                             dt
          j                   d S t                      }|                     d          D ]}	 | j         	                                r d S | 
                    |          \  }}t                       | j         xj        dz  c_        |j        rB|j        s;|j                            d          s!|r|                    |j        j                   #  t#                       | xj        dz  c_        | j                             d| d	d
           Y xY w|rU| j         j        j                            dd          r2t)          t*          j        j        t1          |          g           d S d S d S )N
load_usersTuA   Не грузим пользователей из-за опцийrh   r  r3   z.evateam.ruu@   Не удалось загрузить пользователя r+  r   r  send_invites)r=   )r4   r   r   rY   r5   rc   r  setr  r6   r)  r7   r,  r   r   endswithaddr9   r:   r;   schedule_deferred_jobrW   r   register_personsr   )r"   new_user_emailsr  r[  r#  s        r#   _process_userszJiraAPIImport._process_users  s   ,266|TJJ 	O ckrkz{{{F%%$$W-- 	L 	LDL?,,.. FF%)%9%9$%?%?"
55:55 < <(< <V\EZEZ[hEiEi <&<#''(:;;;L1$))*smq*s*s*4{ * L L L L L  	ct<BFF~W[\\ 	c!&"2"C4P_K`K`Jabbbbbb	c 	c 	c 	cs   4DBDA Eu#   Обработка статусовc                    |                      d          D ]N}| j                                        r dS | j        j        r	|d         }n|d         d         }| j        j        j        j         d|d          }|                    d          p|d         }t          j	                            |          }|s)dd	|gg d
g}t          j	                            |          }|s!t          	                    || j                  }||_
        t          j        |          |_        ||_        |                    d           t!                       | j        xj        dz  c_        PdS )uc   
        Грузим статусы из Jira и сопостовляем с нашими
        statusesNstatusCategoryr   r7  r   untranslatedNamer?  r2  r   r6  )r   r4   TrB  r3   )r  r4   r6   rG   rV   rE  rF  rY   rW   CmfStatusCoder?  r   get_status_typestatus_typer   rI  r7   r,  )r"   r   rA  r?  status_namecmf_status_coderK  s          r#   _process_statuseszJiraAPIImport._process_statuses  s    &&z22 	7 	7F((** y ?$%56$%56v>.5ASSVD\SSF **%788JF6NK$266f6EEO" K"D+68N8N8NO"("6":":'":"J"J" "("6"6$# #7 # # &,O"*>*N{*[*[O'#.O   T 222LLLO11Q6111/	7 	7r%   c           	      2
    i }d }d }|d         }d |                      |          D             }t          j                            d          }|                     |          }|D ](}	| j        j        j        j         d|	d          }
t          j                            dd|
g          }|s#t                              ||
| j        d	
          }|j        rP|d          d|	d          |_	        |	                    dd          |_
        |	|_        |                    d	           |	d         d         d         }|D ]\}|                    |          }|s|d         dk    r|}|s|d         dk    r|}d| j        j        j        j         d| d| d}|||<   ]|	d         D ]}|                     ||           t          j                            dd|gg dgdg          D ]I}t          j                            dd|j        gdd|gg dg          s3|                    d	           J| j        j        j        j         d|j          |	d         D ]4}  d|d          }|d                                          }t          j                            ||!          }|s"t                              ||| j        "          }|d         |_	        |d         |_
         fd#|d$         D             }t          j                            dd%|g          |_          d|d&          }t          j                            |'          }|d(k    r|rd	|_        |                    d	)           ||_        |                    d	           6*|d*         }| j        j        j        j         d+|d          }t          j                            |'          }|sBt          j                            d,          }t                              ||| j        -          }|d         |_	        ||_        ||_        |                    d	           t          j                            |.          D ]}|                    d	/           |                                D ]{\  }}| j                                        r n\t          j                            dd0d1| d1g          }|||| j        d2d3}t          j        d4i |}|                    d	           ||S )5Nr   c                      i | ]}|d          |S r   r/   r  
issue_types     r#   rd  zEJiraAPIImport._create_schemewf_for_simple_project.<locals>.<dictcomp>  s/     
 
 
 tZ
 
 
r%   default.system:defaultrL   r7  r?  =r6  Ttemplater?  r4   rh  r   r  r   r   r   rB  associatedWithr   
issueTypeshierarchyLevelr  :r;  workflowr2  r   rA  r  r?  !=Nforcetransitionstype)rQ  r?  )rQ  r?  r4   c                 T    g | ]$}|                     d            d|d           %S )fromStatusReferencer7  r   )r  sworkflow_hash_ids     r#   r  zEJiraAPIImport._create_schemewf_for_simple_project.<locals>.<listcomp>?  sP     + + +uu233+'EE1-B+CEE+ + +r%   linksINtoStatusReferencer>  global	only_dataworkflow_scheme
::SIMPLE::softdev:default)rL  r?  r4   )	scheme_wfTEXKOM_db_deleter  r  r  )re  rN   target_workflowr4   cmf_model_namer/   )_get_issue_types_for_projectrW   CmfWorkflowrY   !_get_simplified_project_workflowsr4   rE  rF  rh  r   r   rv  rI  _create_status	CmfStatusr   rA  deleter   r  CmfTransstatus_fromallow_empty_transition	status_toCmfSchemeWfdefault_task_workflowdefault_subtask_workflowCmfSchemeWfRuler   r6   CmfLogicType)!r"   jira_project_info	issue_mapdefault_workflow_for_taskdefault_workflow_for_subtask
project_idissue_typeswf_templateworkflows_dataworkflow_dataworkflow_ext_idrQ  issue_type_idsissue_type_idrH  issue_type_ext_idr   workflow_transitiontransition_ext_idtransition_type
transitionstatus_from_ext_id_liststatus_to_ext_idrs  workflow_scheme_datascheme_wf_ext_idre  template_wfrulelogic_type_ext_idrN   	rule_dictr[  s!                                   @r#   #_create_schemewf_for_simple_projectz1JiraAPIImport._create_schemewf_for_simple_project  sc   	$(!'+$&t,

 
"??
KK
 
 

 (,,2J,KK??
KK+ Y	2 Y	2M!%!7!>!Jccm\`NaccO)--h_5U-VVH !--(*#$(	 .   ' 0#4U#; V V}V?T V V - 1 1- D D+8($/// ++;<Q?MN!/ 8 8(__];;
 29"#349908- 5<"#34::3;0$t)?)F)R$t$tV`$t$tcp$t$t$t!/7	+,, (
3 6 6##FH5555 !*//x0*** & 0   * * '++&f.@A#T84... ,    D))))"&/"8"?"K\\x{\\'4]'C 2 2#'7$V$V;Nt;T$V$V!"5f"="C"C"E"E#_00%, 1  
 " !'!)0#'? "1 " "J
 #6f"=
"5m"D
+ + + +09+ + +'
 *0)9)>)>$d,CD *? * *
& '7#d#d:MNa:b#d#d ",008H0II	"h..9.7;I4NNTN222'0
$D1111=2B  11BC"o4;GooSghlSmoo&**2B*CC	 	 ,006G0HHK**$'? +  I
 .f5	*C	'-I	*4((( *//)/DD 	/ 	/DKKK....+4??+<+< 	( 	('x((** ,00 &*B.?*B*B*BC 1  J '(#+"o"+ I )66I66DII$I''''r%   c                    | j         j        j        j         d|j         d|d          }| j         j        j        j         d|d          }t          j                            |          }t          j        |d                   }|                    d          p|d         }|s"t                              ||| j                   }||_	        |
                    d	           t          j                            d
d|g          }|s+t          j                            dd|gdd|gg dg          }|s1t          j                            dd|d         gdd|gg dg          }|s"t                              || j         |          }||_        |d         |_        |d         |_        d|_        ||_        ddddd}	|	                    |d          |_        |
                    d	           |S )Nr7  r   r>  r<  r=  r   )r?  r   r4   TrB  r?  r2  r6  rQ  status_coder   )rQ  r4   r  r   F#a0a0a0z#3f82d8z#e36b51z#23a055)OPENIN_PROGRESS	IN_REVIEWCLOSED)r4   rE  rF  r   rW   r?  rY   r   r@  rA  rI  rn  r?  r   r   rr  r  color)
r"   jira_status_datarQ  status_ext_idr?  r  rA  rB  r   status_type_colors
             r#   rm  zJiraAPIImport._create_statusu  sL   
  ?18DooooWghlWmoo
 O*1=YYAQRVAWYY*..f.==*:;KL\;]^^&**+=>>ZBRSYBZ 	 .. ? /  K
 #.T***!%%hm-L%MM 	%))T8,k2&&&2)  F  	%))/78T8,&&&2)  F
  	n%%xDOal%mmF%&v.&}5(-%($"	
 
 ),,[)DD%%%r%   c                     d2 fd	}d2 fd	}d3d}d }d }d|dd	|dd
|dd|dd|dd}	d|j          d}
g }t          |          D ]K\  }}|d         }|	                    |          }|r	 t           |d         d4i |          }|j         d| }t
          j                            |ddg          }|s(t
                              dd|d|| j        d|	  	        }|j        r* j        j	        
                    d| d|
 d| d           n|j        s* j        j	        
                    d| d|
 d| d           ned|j        _        |                                 t                        j        j	                            d| d|
 d|j         d |d!          d	           |                    t'          |j                              j        j	                            d"|d!          d#|             j        j	                            d"|d!          d$|            # t(          $ r:} j                            d| d|
 d%|d!          d&| d'd()           Y d}~ d}~ww xY w j        j	                            d"| d*           Mt
          j                            d+d,|gd-d.|gg d/gd0          }|D ]}|                    d1           t                       dS )5uv   
        Обработка условий перехода
        Конвертация в bzPython код
        Nc                     dj         j        j        j         d|  d}t          j                            dddd| dgdd| gg          }|st          d|  d	          d
|j         d|j         d}|S )Nr7  r  r?  r  r  r   r6  u   Группа '   ' не найденаu8               # Пользователь в Группе 'zU'
            try:
                return g.current_user.in_person_group(group_code='@')
            except:
                return False
            )	r4   rE  rF  rW   r  rY   r8   r   rM   )r(  r>   group_ext_idperson_group	eval_coder"   s        r#   user_in_group_conditionzMJiraAPIImport._process_transition_conditions.<locals>.user_in_group_condition  s    V 6 = IVVUVVVL!044w(;L(;(;(;<We, 5  L   O M M M MNNN9E9J  DPCT  I r%   c                     j         j        j        j         d|  }t          j                            |          }|st          d|  d          d|j         d|j         d}|S )Nr7  r>  u
   Роль 'r  uG               # Пользователь в проектной роли 'zb'
            try:
                return g.current_user.in_project_role(self.project, role_code='r  )	r4   rE  rF  rW   CmfProjectRolerY   r8   r   rM   )jira_projectrole_idr>   role_ext_idroler  r"   s        r#   in_project_role_conditionzOJiraAPIImport._process_transition_conditions.<locals>.in_project_role_condition  s    !_3:F__J]__K(,,K,@@D Y W-@ W W WXXXHL	  QUPY  I r%   c                 h    ddl m}  |            }i } r(t          t           fd|d                   i           }n)r't          t          fd|d                   i           }|                    d          }|                    d          }|st          d p d	          d
| d| d}|S )u   
            Условие прав
            Args:
                permission_key (str): ключ права
                permission (str): название или ключ права
            r   get_datac                 6    |                      d          k    S )N	jira_coder   )permpermission_keys    r#   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>  s    TXXk%:%:n%L r%   project_perm_permissionc                     |                      dd                                                                          k    p|                      d          k    S )N	jira_namer   r  )rY   r  )r  
permissions    r#   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>  sP     HH["55;;==AQAQASASS C#xx44
B r%   r   rM   u   Право 'u   ' не найденоu.               # Только с правами 'zR'
            try:
                return self.project.check_project_role_access('zJ', obj=self)
            except:
                return False
            )cmf.system_datar  r   r   rY   r8   )	r  r  r>   r  system_datapermission_datapermission_namepermission_coder  s	   ``       r#   permission_conditionzJJiraAPIImport._process_transition_conditions.<locals>.permission_condition  s4    100000"(**K O "&LLLL#$=>  # #  "&    $$=>  	# 	# .11&99O-11&99O" d b~/K b b bccc/>  AP  I r%   c                  
    d}|S )Nut               # Только Исполнитель
            return self.responsible == g.current_user
            r/   r>   r  s     r#   allow_only_assigneezIJiraAPIImport._process_transition_conditions.<locals>.allow_only_assignee      I r%   c                  
    d}|S )Nur               # Только Постановщик
            return self.cmf_owner == g.current_user
            r/   r  s     r#   allow_only_reporterzIJiraAPIImport._process_transition_conditions.<locals>.allow_only_reporter  r  r%   u(   Пользователь в Группе)r  r  u3   Пользователь в Роли Проектаu   Условие Правu2   Условие Только Исполнителяu(   Условие Только Автора)z:com.atlassian.jira.workflow.condition.UserInGroupConditionz<com.atlassian.jira.workflow.condition.InProjectRoleConditionz9com.atlassian.jira.workflow.condition.PermissionConditionz7com.atlassian.jira.workflow.condition.AllowOnlyAssigneez7com.atlassian.jira.workflow.condition.AllowOnlyReporter   переход 'r`  r  r  r7  Tcmf_deletedr?  include_deletedr   r  z6 eval)	ri  rN   r  eval_unsaferQ  r  r4   rh  r?     Бизнес-процесс , u7   . Пользователь удалил условие K   . Изменения из импорта не будут примененыu9   . Пользователь изменил условие Fu$   . Добавлено условие r_  r  u   Условие '' Jira: ' bzPython: u5   . Не удалось создать условие ''. zERR-0127CmfTransFilterr  #   ' не поддерживаетсяr  rJ  rM   NOT INr4   rS  Nr   r  rf  r   NNr/   )r   r%  rY   r   r?  rW   r  r4   r  re   r  rh  r  r  rI  r7   r  rM   r   r-   r8   r;   debugr   ro  )r"   
conditionsr  rQ  r  r  r  r  r  condition_maptransition_namefilter_codesr)  condition_datacondition_name	conditionr  filter_ext_idtrans_filterr\  trans_filterss   `                    r#   _process_transition_conditionsz,JiraAPIImport._process_transition_conditions  s6   
	 	 	 	 	 	*	 	 	 	 	 	-	 -	 -	 -	^	 	 		 	 	 H4K K
 S6M M
 71J J
 R0H H
 H0H H#
 
. @Z_???#,Z#8#8 E	 E	C+L9N%)).99I B= &'=y'='O'O'O'O P PI'1'8$A$AC$A$AM#)#8#<#<,(,)  $= $ $L ( '-'<'<+4'/&/(,%-'1'+,0#0 (= 
( 
( $/ .66i8 i i i iT`i i i   
 *9 .66i8 i i i iVbi i i    ?D0;$))+++".33q8 q q q qAMARq qW`alWmq q q   !''L,=(>(>???O*//[9[+A[[>[[   O*//Z9[+AZZyZZ    !   O--ox o o? o oNWXcNdo oilo o"!1	 .         &,,Z~ZZZ   
 -22sJ/<0***
 ! 3 
 
 * 	7 	7L6666s   2F8H,,
I06/I++I0c                     dE fd	}d }dF fd	}d|dd|dd|dd	}|d
k    rd}t           j        j                                        }	|j         d}
t           j                            |
ddg          }|sAt                               d|j         dd|j         d|j         dddd j        d|
	  	        }|j	        r. j        j
                            d| d| d|	 d| d	           dS |j        s. j        j
                            d| d| d|	 d| d	           dS t                      }g }nJt          |t           j                  r0d|j         d}t           j        j                                        }	g }t#          |d           D ]\  }}|d!         }|                    |          }|ra	  |d"         dGi |\  }}t%          |          }|d
k    r,|                    |           |                    |           nqt          |t           j                  rV|j         d#| }t           j                            |ddg          }|s't                               dd$d|| j        d|%          }|j	        r- j        j
                            d| d| d|	 d| d	           n|j        s- j        j
                            d| d| d|	 d| d	           nod&|j        _        ||_        |                                 t3                        j        j
                            d| d| d'|	 d|j         d(|d)          d           |                    t7          |j                              j        j
                            d*|d)          d+|             j        j
                            d*|d)          d,|            B# t8          $ r8} j                            d| d| d-|d)          d.| d/           Y d}~d}~ww xY w j        j
                            d0| d1           |d
k    rC|s^|j        sU|                     d2           t3                        j        j
                            d| d| d3|	 d4|j         d5	           dS t7          |j                  !                    dd6          }d7|j         d8}d9d"                    |           d:| d;}|d<z   tG          d<"                    |          d=          z   d<z   tG          |d=          z   |_        d&|j        _        |                                  j        j
                            d| d| d>|	 d4|j         d	           nat          |t           j                  rGt           j        $                    d?d@|gdAdB|gg dCgdD          }|D ]}|                     d2           t3                       dS )Hu  
        Обработка пост-функций (действий) перехода
        Конвертация в bzPython код

        Действия для начального перехода создаются при помощи
        триггера автоматизации crud (CmfAutomationCrudTrigger),
        так как на текущий момент в бизнес-процессах нет возможности
        настраивать начальный переход.
        Nc                 .   ddddddddddd	dd
ddd}|                     |           }|st          d|  d          |d         }|d         } d| }d}| dk    rq|r|dk    r	|dz  }d}n                    |          }                    |dd          \  }	}
|	st          d| d|           |d|	j         z  }d|	j         d}n| dk    r+|s|dz  }d}n                    |          \  }}|d| z  }n| d	k    ry|r|dk    r|dz  }d}noj        j        j        j	         d| }t          j                             |          }|st          d| d          |d|j         z  }d|j         d}nd| d}d | d!|  d"| d#}||fS )$uZ   
            Пост-функция "Обновить Поле Задачи"
               ИсполнительrP   )r   r   u   Описаниеr      ПриоритетrO      Решениеr   u   Темаr   )rR   r   rO   r   r   
   Поле 'r  r   u   # Поле Nz-1u    будет очищеноFr  r     Пользователь '   ' не найден: u    в r`  u    в Обычныйr   r7  r>  u   Резолюция 'r  z            z
            self.z = z
            )rY   r8   r  r)  r   rM   _get_cached_priorityr4   rE  rF  rW   CmfResolution)r   field_valuer>   	field_map
field_datafield_titlecode_commentr   	user_datar[  _priority_nameresolution_ext_idr   r  r"   s                  r#   update_issue_fieldzLJiraAPIImport._process_transition_post_functions.<locals>.update_issue_field  s   
 '?VV);VLL&:JOO(8,OO%/@@ I #z22J ^ \Z \ \ \]]]$W-K#F+J666LE]**" 	/kT&9&9 $@@L EE $ = =k J JI $ 4 4YuUZ 4 [ [IFA! t'(r[(r(rgp(r(rsss $86;$8$88L....EEz))" ; $88LEE+/+D+D[+Q+Q(E= $:=$:$::LL|++" 	3kT&9&9 $@@L EE+/?+A+H+T(e(eXc(e(e%!'!5!9!9AR!9!S!SJ% c'(a{(a(a(abbb $<:?$<$<<L2
222EE*K***  !&  I k))r%   c                      d}d}||fS )Nr  uh               # Назначить автора
            self.responsible = self.cmf_owner
            r/   )r>   r  r  s      r#   assign_to_reporterzLJiraAPIImport._process_transition_post_functions.<locals>.assign_to_reporter  s    2KI k))r%   c                                          |           }                    |dd          \  }}|st          d|  d|           d}d|j         d|j         d}||fS )	NFr  r  r  u   НаблюдателиuR               # Добавить в наблюдатели пользователя z1
            person = models.CmfPerson.get(code='z:')
            self.spectators.append(person)
            )r  r)  r8   r   rM   )r  r>   r  r[  r  r  r  r"   s          r#   add_to_watcherszIJiraAPIImport._process_transition_post_functions.<locals>.add_to_watchers  s    55h??I,,YuU,SSIFA i gX g g\e g ghhh2KSYS^ 17  I
 k))r%   u&   Обновить Поле Задачи)r   r  u   Назначить автораuC   Добавить в наблюдатели пользователя)zCcom.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunctionzCcom.atlassian.jira.workflow.function.issue.AssignToReporterFunctionzGcom.aeroflot.jira.agreement.workflow.function.AddToWatchersPostFunctioninitialu!   начальный переходz	::initialTr  r  uA   Начальный переход бизнес-процесса 'r`  uX   Действия начального перехода в бизнес-процессе r  r  r  
after_save)	r   r   ri  crud_action	eval_typer  r4   rh  r?  r  r  u(   . Пользователь удалил r  r  u*   . Пользователь изменил r  r3   )startr  r  r7  eval)ri  rN   r  rQ  r  r4   rh  r?  Fu   . Добавлено r_  r   u   Действие 'r  r  u7   . Не удалось создать действие 'r  zERR-0126u   Пост-функция 'r  rf  u   . Удален  'uY   ', так как начальный переход не содержит действийz\'zif self.workflow.code == 'z':u3   cmf_alert(f'В задаче "{self.code}" поля uC    заполнены автоматически триггером "z"')
z    u   . Добавлен r  rJ  rM   r  r  r  r  r   r/   )%rW   CmfAutomationCrudTriggerr   r  r?  rY   r   rM   r4   r  re   r  rh  r3  r   rp  CmfTransActionr%  r   r5  r   r  r  r  rI  r7   r  r-   r8   r;   r  is_newro  replacer   r   r   )r"   post_functionsr  rQ  r  r  r  post_function_mapr  action_verbose_nametrigger_ext_idtriggerfield_titlesaction_eval_codesaction_codesr)  post_function_datapost_function_nameactionr  r  action_ext_idtrans_actionr\  trigger_nametrigger_condition_codetrigger_alert_codetrans_actionss   `                           r#   "_process_transition_post_functionsz0JiraAPIImport._process_transition_post_functions  sw	   :	* :	* :	* :	* :	* :	*x	* 	* 	*	* 	* 	* 	* 	* 	*" A/T T
 :/T T
 ^,X X
 
 ""AO"("A"N"T"T"V"V (:::N599% $! :  G   99m]e]jmmmZ9AZ ZJR-Z Z $- (* $#$() :   " &..a8 a a a a=Pa aSZa a a  
 , &..a8 a a a a?Ra aU\a a a  
 55L "
FO44 	CCCCO"("7"D"J"J"L"LL'0q'I'I'I J	 J	#C#!3L!A&**+=>>F GB-@VK-@-V-VCU-V-V*I{ &y 1 1I!Y..$((555)00;;;;#J@@ .D+5+<(E(E(E(E'-'<'@'@#0,0 -$ (A ( (  , 
+1+@+@/8+1,0)1+5+/?04'4 ,A 	, 	,L (3  O2::!mx !m !m? !m !mI\!m !m_k!m !m !m   
 ".!=  O2::!mx !m !m? !m !mK^!m !mam!m !m !m    CHL4?5>L2(--///&LLL O277!Kx !K !K? !K !K6I!K !K#/#4!K !K9?!K !K !K  
 %++C0A,B,BCCCO*//YVF^YYEWYY   O*//TVF^TTTT    !   O--ix i i? i iPVW]P^i icfi i"        &,,g0Bggg    ""$ 	~ NNDN999LLLO*22rx r r? r r(;r r?F|r r r  
 w|,,44S%@@L%S(-%S%S%S"i$))T`JaJa i iVbi i i 
 '#455w??@  +W55	6  .3G*LLNNNO"''Kx K K? K K$7K K;B<K K K    
FO44 	;"166!3
3X|4...
 !% 7  M !. ; ;##T#::::s   9HO
P-PPc           
      z   | j         j        j        j         d|j         }| d|d          }t          j                            ||ddg          }|s#t                              ||| j         d          }|j        s2| j         j        	                    d|j
         d	|j
         d
           n	|d         |_
        |d         |_        fd|d         D             |_        |d                  |_        |                    d          r|d         t          t          fd|                     d                    d          }	 |                     |          |_        d|_        n9#  | j                             d d|j
         d|j
         ddd|           Y nxY w|                    d           |S )uS   
        Обработка перехода бизнес-процесса
        r7  r   rQ  r?  )r?  rQ  r   TrQ  r?  r4   rh     Переход '$   ' в бизнес-процессе ';   ' был изменен и не будет обновленr   r   c                      g | ]
}|         S r/   r/   )r  rq  stepss     r#   r  z5JiraAPIImport._process_transition.<locals>.<listcomp>  s.     & & & k"& & &r%   fromtofieldscreenc                 j    t          |                     d                    t                    k    S r  r-   rY   screen	screen_ids    r#   r   z3JiraAPIImport._process_transition.<locals>.<lambda>  s&    s6::d+;+;'<'<I'N r%   screensN7   Не удалось установить экран ID     для перехода '!   ' бизнес-процесса 'r`  ERR-0122	CmfUiFormr  r<   rB  )r4   rE  rF  r   rW   rp  rY   rh  re   r  r   r   rq  rs  r   r   r  _process_transition_screencmf_ui_formtrans_form_showr;   rI  )	r"   transition_datar  rQ  r[  r  r  screen_datar%  s	     `     @r#   _process_transitionz!JiraAPIImport._process_transition  sq    #o4;GXX8;XX/JJ?43HJJ_(($ ) 
 

  	!(? $	 )  J ) !	.O"**M:? M MX`Xe M M M   
 .f5JO-m<JO& & & &#26#:& & &J" $))>#?J ""=11 +M:	"NNNN((33   
-1-L-L[-Y-YJ*15J..O--wR[ w w4>Ow wfnfsw w w"!,$ .      OOO---s   
!E, ,4F"c           
        89: d ::fd8:fd989fd}i }d }d }d }i }t          |d                                       d          }t          j                            d          }	|d	         d
         }
|
D ]}t          j        |d                   }| j        j        j        j	         d| }t          j                            dd|gdg          }|s/t                              ||	| j                  }|d         |_
        |                    dd          |_        |                    d           |                    d          r|}|}|}n/|d         }|D ]$}d| j        j        j        j	         d| d}|||<   %|d         }|                     |d                   D ]H}|d         |vr|d         D ]2}|d         d         |d<   |                     ||          ||d         <   3It          j                            dd|gg dgd g          D ]I}t          j                            d d|j        gdd|gg d!g"          s3|                    d#           J	 t'          j        d$|j
         d%d&          }|                    |          }|                                st-          d'|j
         d(          t/          |d)          5 }|                                }d d d            n# 1 swxY w Y   t3          |d*          }|st5          d+          t7                      }i }i }t9          |                    d,          d-          D ]}\  }}|d         } |                    dd.i/                              d0          }!||!         }|d1z  |_         |                    d2|  d3          |                    d4|  d3          |                    d5|  d3          |                    d6          d7}"|"!                                D ]Y\  }#}$|$D ]Q}%|#d8k    r|%}&n|%"                    d9          }& || |&|#          ||&d         <   |#d:k    rd;|_         D|#d<k    rd|_#        RZ|                    d=          D ]3}&|$                    |&d         g           }'|'%                    |            4|                    d>           ||| <   |!                                D ]J\  }(}'|                    |(          })|)s)| j        &                    d?|j
         d@|( dA|B           E|'|)dC<   K|s0t5          dDtO          |           dEtO          |           dF          | j        (                    dGtO          |           dHtR          j*                   |+                                D ]d}*|*dI         d:k    rd:}+n5| ,                    |*||          }+| -                    |*dJ         |+|K           | .                    |*dL         |+|K           e# t4          $ r3},| j        &                    dM|j
         dN|, dO|B           Y d },~,d },~,ww xY w|d	         d         }-| j        j        j        j	         d|d	         d          }.t          j/                            dd|-gg dPddQ| j        j        j        j	         dRgg"          }/|/s t          j/                            |.S          }/|d	         dT         }0|/sBt          j/                            dU          }1t          /                    |1| j        dV          }/|/j0        r|-|/_
        |0                    dd          |/_        ||/_1        ||/_2        ||/_3        g }2|d	         d         }|D ]}d| j        j        j        j	         d|d          d}t          j4                            ddQdW| dWg"          }3|2%                    |3           |dX         r|3|/_5        |dY         r|3|/_6        |2|/_7        |.|/_8        |0|/_9        |/                    d           n(| j        j:        ;                    dZ|/j
         d[           g }4|!                                D ]\  }5}t          j4                            ddQdW|5 dWg"          }3t          j<                            d\d|3gd]d|/gg"          }6|6rZ|6j0        sS| j        j:        ;                    d^|/j
         d_|6j=         d`|3j
         da           |4%                    |6j=                   |6st          j<                            d\d|3gd]d|/gg dbg dPgdc          }6|6rT| j        j:        ;                    d^|/j
         d_|6j=         d`|3j
         dd           |4%                    |6j=                   8t          <                    de|3|/| j        f          }6||6_>        |6                    d           |4%                    |6j=                   t          j<                            dgdh|4gd]d|/gg dPgdc          }7|7D ]}6|6                    di           t                       |/S )jNc                     t          j        dd|           } t          j        dd|           } t          j        dd|           } |                                 S )ul   
            Преобразует строку в snake_case из любого формата
            z[\.\-\s]r  z([a-z0-9])([A-Z])z\1_\2z([A-Z])([A-Z][a-z]))r  r  r  )arg_names    r#   to_snake_casez7JiraAPIImport._process_wf_scheme.<locals>.to_snake_case  sO     vk399Hv2HhGGHv4hIIH>>###r%   c                     g }|                      d          D ]Y}i }|                    d          D ]*} |d                   }|                                ||<   +|                    |           Z|S )Nz$restrict-to > conditions > conditionargr   selectr  get_textr   )r  r  r  r  r8  r5  r6  s         r#   _get_action_conditionsz@JiraAPIImport._process_wf_scheme.<locals>._get_action_conditions  s    J#]]6  2 2	 "$$--e44 > >C,}S[99H/2||~~N8,,!!.1111r%   c                     g }|                      d          D ]Y}i }|                    d          D ]*} |d                   }|                                ||<   +|                    |           Z|S )Nz:results > unconditional-result > post-functions > functionr8  r   r9  )r  r  functionfunction_datar8  r5  r6  s         r#   _get_action_post_functionszDJiraAPIImport._process_wf_scheme.<locals>._get_action_post_functions  s    N"MML  5 5 !##,,U33 = =C,}S[99H.1llnnM(++%%m4444!!r%   c                 z   |dk    r%| g}|                     d          d         d         }ng }| }|                    ddi          }|                    ddi          }|d	         ||d         |r|                    d
          nd|||r|                    d
          nd |           	|          d	}|S )u  
            Формирует данные перехода для дальнейшей обработки

            Args:
                step_id (str): ID статуса
                action (Tag): объект Tag (bs4.element.Tag) из xml
                action_type (str): тип перехода

            Returns:
                dict: данные перехода
            ordinaryzresults > unconditional-resultr   stepr   zjira.descriptionr  zjira.fieldscreen.idr   Tr  r   N)	r   rW  r   r   r  r  r   r  r  )r:  findr;  )
step_idr  action_type
from_stepsto_stepr   r%  r0  r<  r@  s
           r#   _get_transitionz9JiraAPIImport._process_wf_scheme.<locals>._get_transition  s     j((%Y
 --(HII!LVT
! ++V5G,H+IIK63H*IJJITl#vCNV{33$3???TV"AJTy111===PT44V<<"<"<V"D"D
 
O #"r%   project_dir	workflowsrI  rL   jira_workflow_schememappingsr   rc  r?  rJ  r  r?  rL  r4   r   r   TrB  defaultrN  r7  r   r}  r;  r<  r   rQ  r2  r   rA  rR  r6  rT  	workflow_.xmlreplace_spacesu,   XML файл бизнес-процесса 'u   ' не найденrxmlur   Не удалось получить список переходов между статусами в виде XMLzsteps > stepr3   zjira.status.idr  r    z4initial-actions > action unconditional-result[step="z"]z3global-actions > action unconditional-result[step="z3common-actions > action unconditional-result[step="zactions > action)r  r_  commonrB  rB  r  r  r   r_  zactions > common-actionr`  u7   В XML разметке бизнес-процесса 'u%   ' не найден common-action ID zERR-0121rT  r  u   Из XML получено u    статусов и u'    переходов между нимиu   Настраиваем u1    переходов между статусамиrW  r  )r  rQ  r  u   Не удалось импортировать переходы между статусами для бизнес-процесса «u   »: ERR-0067r  r  r  r>  r  rd  )rL  r4   rh  r  defaultIssueTypesubTask*   Схема бизнес-процесса '[   ' была изменена после импорта и не будет обновленаrN   re  -   В схеме бизнес-процесса '   ' правило )    для логического типа 'j   ' было изменено или добавлено вручную и не будет обновленоr  rJ  Tr  V   ' было удалено вручную и не будет восстановленоr  ri  rN   re  r4   rM   r  rf  )@r   rr   rW   rk  rY   r   short_str_encr4   rE  rF  r   r   rI  _get_statuses_for_projectrm  rn  r   rA  ro  r   safe_filenamers   FileNotFoundErrorrt   rx  r   r8   r   r%  r:  rD  r;  ordernor   find_parentrr  
setdefaultr   r;   r   r5   rc   r  r   r2  r  r  rt  rh  ru  rv  default_epic_workflowrx  default_task_logic_typedefault_subtask_logic_typestrict_task_logic_typer?  rv  re   r  rw  rM   rh  r7   );r"   project_inforI  rz  default_wf_for_taskdefault_wf_for_subtaskdefault_wf_for_epicall_statusesworkflows_dirr  r  r  workflow_name_hashr  rQ  r  r  r  r~  rH  jira_statusr   workflow_filenameworkflow_filerz   workflow_xmlrV  
jira_stepsjira_transitionscommon_transitionsorderrC  rE  jira_status_idaction_typesrF  step_actionsstep_actionr  rG  	action_idr0  jira_transitionr  r  wf_scheme_namewf_scheme_ext_id	wf_schemewf_scheme_inforL  ro  rN   current_rulesr  r  rules_for_deletionr<  r@  r6  s;                                                           @@@r#   _process_wf_schemez JiraAPIImport._process_wf_scheme  s}   	$ 	$ 	$	 	 	 	 		" 	" 	" 	" 	" 	#  	#  	#  	#  	#  	#D 	"!%" \-899BB;OO(,,2J,KK%&<=jI+ Y	D Y	DM!,!:=;P!Q!Q!%!7!>!JjjVhjjO)-- #7 z .  H  6!--_{gkgv-ww -f 5)--mR@@HMMMdM+++  ++ 	<&.#&.#)1&&!.|!<%3 < <M(kT_-C-J-V(k(kZg(k(k(k%3;I/00 (5K"<<UYHZ<[[ a a
d#;66#-j#9 a aK4?@P4QRW4XK 016:6I6I+W_6`6`LT!233a
 !*//T88TVlVlVl7m8E 0 H H * * '++]D&J\4]5?x4PRhRhRh4j+ k k D))))mD$+$93333#'% % %! !. 6 67H I I$++-- +,}[c[h,},},}~~~--- ,#$6688L, , , , , , , , , , , , , , , $L%88 Z#  %Y  Z  Z  Z!VV
#% %'"#,SZZ-G-G#K#K 11 11KE4"4jG%)YYf>N5OY%P%P%Y%Y`d%Y%e%eN).9F%*T\FN
 $'::^SZ^^^$ $ #&**]RY]]]# # #&**]RY]]]# # %)KK0B$C$C$ $L  6B5G5G5I5I E E1\+7 E EK*j88)4)4)@)@)J)J=L_ ' & +> >,VD\:  +i7712!,!8!8@D =#E( #'++.G"H"H 3 3%7%B%B6$<QS%T%T
"))'2222KK$K///*0Jw'' .@-E-E-G-G 
9 
9)Iz&6&:&:9&E&EO* !11NV^Vc N NBKN N& (	 2    !.8OF++! g#  %fZ  %f  %fgjk{g|g|  %f  %f  %f  g  g  g##  %GcBR>S>S  %G  %G  %G  IP  IU  V  V  V'7'>'>'@'@  O&v.);;%.

%)%=%=+&$& &
 ;;+L9'1%- <    ;;'(89#-!) <    !*  D D D))  +I  s{  s@  +I  +I  FG  +I  +I*4( * D D D D D D D DD
 &&<=fE"o4;Gww<XnKoptKuww
 &**n-***6do&<&C&O#T#T#TU + 
 
	  	H*..6F.GGI%&<=fE 	)--3D-EEH**!? $ +  I $ 	+IN+//rBBIN.AI+1GI..AI+%'"&'=>|LK) 	F 	F
$j)?)F)R$j$jV`aeVf$j$j$j!#044$f.F2C.F.F.FG 5  
 '--j99901 C8BI5i( F;EI8/EI,/I(6I%NNtN,,,,O"**9Y^ 9 9 9   +4??+<+< ,	, ,	,'x,006KcO`KcKcKc8d0eeJ)--!3
3 #y1 .  D  D0 &..@IN @ @&*i@ @ZdZi@ @ @  
 $$TY/// -11%sJ7$c95222222	 %) 2    O*22p	 p p*.)p p^h^mp p p  
 "((333--#,)'#	 .   $,D II$I'''  ++++ $388=1c9-***
 ! 9 
 
 ' 	/ 	/DKKK....s>   $A0XK5)X5K9	9X<K9	=LX
Y!(YYc                    | j         j        rj|d         }|r|                     |          }n_| j        j        j        j         d|d         d          }t          j                            |dg          }n| 	                    |          }|S )N
simplifiedr7  rL  r   default_release_workflowr?  r   )
rG   rV   r  r4   rE  rF  rW   rt  rY   r  )r"   rp  project_simplifiedre  r  s        r#   _get_workflow_schemez"JiraAPIImport._get_workflow_scheme>  s    9? 	>!-l!;! 
 !DD\RR		 '+o&<&C&O##S_`vSwx|S}## ".22+67 3  		
 //==Ir%   c                 $   d}t          d          5  	 | j                                        rn5|                                }|dk    rn||                     ||          z  }Od d d            n# 1 swxY w Y   |                    |           d S )Nr   Finit_views_and_dsTDONE)r   r4   r6   rY   _process_issueput)r"   issue_queueissue_queue_errorsr  r  r(  s         r#   _process_issue_threadz#JiraAPIImport._process_issue_threadS  s    5111 	> 	>>?,,.. #))F??$--eW===>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	v&&&&&s   AA00A47A4u   Обработка теговc           	      V   ddl m} t                      }|                     |d                   \  }}|                     |d         |          D ]Z}| j                                        r d S |d                             d          r!|                    |d         d                   }[|D ]}|	                    dd          	                    d	d
          } ||dd          }	 dddd| dgdd|gddd| dgg}	t          j                            |	          }
|
s1t                              |          }
|
                    d           t                       # t          $ r;}t                       | j                            d| d| dd           Y d }~d }~ww xY wd S )Nr   translitr   r  r   labelsr  r  r  r   ruTlanguage_codereversedr  aliasr  rQ  "%r   r6  r   rB  u*   Не удалось создать тег r  zERR-0134CmfTagr  )transliterater  r3  _count_project_tasksr  r4   r6   rY   unionr  rW   r  rI  r7   r8   r9   r;   )r"   rp  r  tagstotal_tasksr  r(  tag_name
name_aliasrK  tag_objr  s               r#   _process_tagszJiraAPIImport._process_tags_  s   ******uu22<3EFFQ++L,>k+RR 	= 	=E((** X""8,, =zz%/(";<< 	 	H''S1199#rBBH!($NNNJ#W.>(.>.>.>?"GX6#W.@*.@.@.@AC !-++7+;; 3$mmm::GLLTL222   ))PPPQPP)% *        	 	s   (A8E!!
F&+1F!!F&u)   Обработка приоритетовc           	         | j         j        j        j         d|d          }t          j                            dd| dg          }i }d }|                     d          D ]H}|d         |d	         vr|                    d
          }|d         D ]}|d         }|d         }	|||	<    |D ]}
t          j                            d|
ddg          }|s%t                              ddd|
| j         d          }|j	        s$| j         j
                            d| d           x||_        d|pdi|_        |j        r|                    d           d S )Nr7  r   r?  r  r  r6  priority_schemesr   projectKeysdefaultOptionId
prioritiesr   rO   choicesrO  rl  r  T)r#  r   orig_captionr:  r4   rh  u"   Конфигурация поля ue    была изменена. Изменения из импорта не будут примененыr   _NONE_rB  )r4   rE  rF  rW   CmfCustFieldConfr   r  rY   CmfCustFieldConfFieldrh  re   r  r  rO  r  rI  )r"   rp  cust_field_conf_ext_idcust_field_confsr  
default_idpriority_schemerO   r  priority_idcust_field_confcust_field_conf_fields               r#   _process_prioritiesz!JiraAPIImport._process_priorities  s   $(O$:$A$M!e!eQ]^bQc!e!e!277'VlSoSoSo?p7qq
  $//0BCC 	 	OE"/-*HHH(,,->??J+L9 5 5 ( 0&tn'4$$  0 	= 	=O$*$@$D$D& %E % %! ) (.(D(D0#!5*#$( )E ) )% )8 &..a9N a a a   ,3!)-4j6LH,M!)$/ =%**t*<<<7	= 	=r%   u5   Обработка решений(резолюций)c           
      j   |                      d          D ]}| j                                        r d S |d         }|                    d          p|d         }| j        j        j        j         d| }t          j                            |          }|s#t                              || j        |d          }|j        r2||_	        |d	         |_
        ||_        |                    d
           n)| j        j                            d| d| d| d           | j        xj        dz  c_        d S )Nresolutionsr   r=  r   r7  r>  T)r?  r4   rv  rh  r   rB  u   Резолюция 
 (Jira ID r_  ug   ') была изменена. Изменения из импорта не будут примененыr3   )r  r4   r6   rY   rE  rF  rW   r  rh  r   r   rv  rI  re   r  r,  )r"   r   resolution_idresolution_namer  resolution_objs         r#   _process_resolutionsz"JiraAPIImport._process_resolutions  s   **=99 	7 	7J((** &t,M(nn-?@@VJvDVO#'?#9#@#L _ _P] _ _#155=N5OON! !'!5!5,#$.$(	 "6 " " - 
&5#&0&?#1;.###5555&..a. a a -a a2Aa a a   O11Q61119	7 	7r%   u   Импорт фильтров
is_processc                 d    |s! j         j                            d           d S  fd}t          j                    }d}                     d          D ]} j                                         r d S |d         }|d         } j         j        j        j         d| }t          j
                            |g d	          }	|	s"t          
                     j         |d
          }	|	j        r:	 ||	_        |                    d          |	_        |                    di                                j                  r-                     |d          j                 |	          |	_        d}
d}t%                      }t%                      }|d         D ]y} |||	          }|s|dk    rd}
d} j        j        r|                    |           >|d         r|                    |           \|d         r|                    |           z|                    dg           D ]%} |||	          }|r|                    |           &t-          |          |	_        t-          |          |	_        t3          d ||z  D                       }|rd}
d}|
|	_        ||	_        ||	_        |	                    d
           t=                       n# t>          $ rN}tA                        xj!        dz  c_!         j         "                    d| d| d| dd            Y d }~n1d }~ww xY w j         j                            d!|	 d"| d#| d$           |dz  }t          j                    |z
  }||z  } j         j        #                    d%|d&d'| d(|d)d*tI          |d+z             d,	           d S )-Nu.   Импорт фильтров отключенc                    d}	 | d         }|dk    ro| d         d         }dj         j        j        j         d| d}t          j                            dddd	| d	gdd|gg
          }|st          d| d          n|dk    r| d         d         }| d         d         }| d         d         }j         j        j        j         d| }	t          j                            ddd|	 dg
          }|s&j         j        	                    d| d| d           n|dk    r|                     di                               j
                  r| d         j
                 }
| d                             d          }| d                             d          }	                     |
          }n$# t          $ r}t          | d          d}~ww xY w                    |dd          \  }}|st          d|p| d|
 d          n|dk    rd}nO# t          $ rB}xj        dz  c_        j                             d |j         d!| d"|#           Y d}~nd}~ww xY w|S )$u  
            Получает объект (группу, проект, пользователь), которому
            необходимо предоставить доступ к фильтру

            Args:
                share_permission (dict): данные объекта прав
                task_filter (obj): объект фильтра

            Returns:
                _type_: _description_
            NrW  r(  r   r7  r  r?  r  r  r6  u"   Не найдена группа 'r`  r  r   r   r  r  r  u~   Не удалось добавить разрешение на доступ к фильтру. Не найден проект r_  u=   '. Возможно он еще не импортированr  r   H   . Возможно пользователь был удален в Jira.Fr  u,   Не найден пользователь 'rr  rt  loggedinr3   u_   Не удалось добавить разрешение на доступ к фильтру 'r  zERR-0129r  r<   )r4   rE  rF  rW   r  rY   r8   
CmfProjectre   r  rU   r  r)  r:   r;   r   )share_permissiontask_filtershareeshare_permission_type
group_namer  r}  r   project_nameproject_ext_idrU   	user_nameuser_display_namer  r\  r  r"   s                   r#   _get_shareez3JiraAPIImport._process_filters.<locals>._get_sharee  s    F?(8(@%(G33!1'!:6!BJ#c(>(E(Q#c#cU_#c#c#cL#266 %w0CL0C0C0CD#Wj9  7  F " 'NNNN   +i77!1)!<T!BJ"29"=e"DK#3I#>v#FL(,(>(E(Q%a%aU_%a%aN#.22 (&2K2K2K2KL 3  F " .66Z>IZ ZNZZ Z Z   *V33(,,VR88<<T]KK 4  07FH 0 8 < <V D DI(8(@(D(D](S(S%$($A$A($K$K		$   '"lll   !% 4 4!$$ !5 ! !IFA
 " 'O ) >->O OCKO O O  
 +j88'F   1$))E*5*:E E?BE E)#	 *         Ms=   FH F1 0H 1
G;GGAH 
I 8II r   filtersr   r   r7  r   rh  rv  r  Tr4   r?  rh  r   ownerrT  privatesharePermissionsr  readonlyrX  editvieweditPermissionsc              3   J   K   | ]}t          |t          j                  V  d S r   )r   rW   r  r  s     r#   	<genexpr>z1JiraAPIImport._process_filters.<locals>.<genexpr>n	  sC       & & #3(9::& & & & & &r%   fullrB  r3   u0   Ошибка обработки фильтра 'z' (ID: z). zERR-0130CmfBqlFilterr     Фильтр r  r_  uc   ') был изменен. Изменения из импорта не будут примененыu4   Импорт фильтров выполнен за .3fu
    сек.: r  .2fu   /с | ~<   u   /мин))%r4   re   r  time	monotonicr  r6   rE  rF  rW   r  rY   rh  r   r   rU   rV  r   r3  rG   rV   r5  r   rW  	executorsanyperm_policy
view_scoperv  rI  r7   r8   r9   r:   r;   r  int)r"   r  r  t1filter_countfilter_data	filter_idfilter_namer  r  r  r  rW  r  r  r  edit_permissionhas_projectr\  t2
proc_speeds   `                    r#   _process_filterszJiraAPIImport._process_filters  s    	O"**+[\\\FO	 O	 O	 O	 O	b ^++I66 ^	 ^	K((** #D)I%f-K#5<HWWIWWM -11$   2  K  $11#($( 2  
 * HB'2K$'2}'E'EK$"w3377FF 040@0@'0? + 1A 1 1- #,K!*J!$J #I
 -88J,K 7 7(!,-={!K!K% %$!Z//*4K)1J$9? 7&NN62222/7 7 )f 5 5 5 5!1&!9 7 *v 6 6 6 ,7??;Lb+Q+Q 2 2!,_k!J!J! 2%MM&111-1*-=-=K*,0OOK)"% & &#-	#9& & & # #K # .&,%-
.9K+-7K*2=K/$$$666LLLL     NNNOOq(OOO--r;rr_hrrmprr#-!/ .         &..aK a a9 a a a a a   ALL^"!B&
##U2U U UU U)TU U69*r/6J6JU U U	
 	
 	
 	
 	
s   .GK
L$ALL$c                    |d         }|d         }| j                             d| d| dd           | j         j        j        j         d| }t          j                            |d	d
g          }|s*t          j                            dd|gg dgd	d
g          }|sCt                              ||| j         d          }| j                             d| dd           |j         rk|j        r8||_        |                    d          |_	        |
                    d           nP| j                             d| dt          j        d           n$|j        s||_        |
                    d           |S )u   
        Обрабатывает проектную роль

        Args:
            role_data (dict): сырые данные проектной роли

        Returns:
            CmfProjectRole: проектная роль
        r   r   u0   Обработка проектной роли 'rr  rt  T	anonymousr7  r?  r4   r  r  )r?  rJ  Nr  r   r?  r4   rh  u7   Создана новая проектная роль 'r`  r   rB  u   Проектная роль u_    была изменена. Новые данные из импорта не примененыrh   r  )r4   r5   rE  rF  rW   r  rY   rh  r   r   rI  rc   r  r?  )r"   	role_data	role_namerole_idr  project_roles         r#   _process_project_rolez#JiraAPIImport._process_project_role	  s
    f%	D/WyWWWWWW 	 	
 	
 	
 /6BOOgOO,00l+ 1 
 
  	!044Wi0))) !,/ 5  L  
	!00"? $	 1  L OV)VVV     
 " 	0+ 
$-!$-MM-$@$@!!!d!3333##[< [ [ [!/"	 $     $ 	0"-L$///r%   c                    t           j                            ||dg          }|r^|s\|j        r%|                    d           t                       n.| j                            d| d| dt          j	        d           d	S |sd	S | j                            d
| d|            g }|D ]F}|d         }|d         }| j                            d| d| d|            |dk    r| j
        j        r|d         d         n|d         }		 |                     |	d          }
|                    |
           # t          $ rC}| j                            d| d|	 d| d| d|           | xj        dz  c_        Y d	}~d	}~ww xY w|dk    r0| j
        j        r|d         d         }|d         d         }n
|d         x}}d| j        j        j        j         d| d}t           j                            d d!d"| d"gd g#          }|s%t           j                            dd$|gd g#          }|rU|j        s||_        n||j        vr|j         | |_        |                    d%           |                    |           | j                            d&| d| d| d'd|           | xj        dz  c_        | j                            d(| d)| d*|           | xj        dz  c_        H|sd	S |s#t                               ||| j        d+          }||_        |                    d%           t                       | j                            d,| d| d-t/          |j                   d.           d	S )/u   
        Добавляет участников в к роли в проекте

        Args:
            actors (list): список участников
            project_role (CmfProjectRole): проектная роль
            project_obj (CmfProject): проект
        members)r  r:  r   Trf  u+   Состав участников роли u    в проекте u[    был изменен. Новые данные из импорта не примененыr  Nu6   Добавление участников к роли u    проекта r   rW  u)   Добавление участника 'z	' (type: u   ) к роли atlassian-user-role-actorr  rJ   r   rR  u?   Не удалось добавить пользователя 'rr  rS  zERR-0039rT  r3   zatlassian-group-role-actor
actorGroupr  r7  r?  r  r  r  r  rB  u3   Не удалось добавить группу 'u"   . Группа не найденаu<   Неподдерживаемый тип участника '': zERR-0040)r  r:  r4   rh  u   К роли u*    добавлено участников: r  )rW   CmfProjectRoleAssignrY   rh  ro  r7   r4   r5   rc   r  rG   rV   rV  r   r8   r;   r:   rE  rF  r  r?  rI  r  r   )r"   actorsr  project_objrole_assignr  actoractor_display_name
actor_typerZ  r  r\  group_idr  r  r(  s                   r#   _process_project_role_assignz*JiraAPIImport._process_project_role_assign	  sJ    155%; 6 
 

  	v 	* 
""D"999##[, [ [)4[ [ [ "/" $    F  	Fp\ppcnpp	
 	
 	
  <	% <	%E!&}!5vJOC<N C C$C C4@C C  
 888=AY__%,[99RWX^R_
)++GD+IIDNN4((((  ) ) )O--`.` `3:` `JV` `Z]` `"'	 .    OOq(OOOOOOO) ;;;9? :$\29=H!&|!4V!<JJ,1&M9Hz]DO$:$A$M]]QY]]]-11$f.A,.A.A.AB$: 2    "155 &< (z 6  E  ) < G'3%U\99*/,'F'F'FJJ4J000NN5))))O--<.< <3;< <KW< < < #' .    OOq(OOO))iS]iibgii# *   
 1$  	F 	 55)"? $	 6  K &T***S< S S S S8;K<O8P8PS S 	 	
 	
 	
 	
 	
s   ,D88
F9F  Fu0   Обработка проектных ролейc                     |                      |          }|D ]D}|                     |          }|                    dg           }|                     |||           Ed S )Nr  )_get_project_rolesr  rY   r  )r"   r}  r  rolesr  r  r  s          r#   _process_project_rolesz$JiraAPIImport._process_project_rolesD
  ss    ''
33 	Q 	QI55i@@L]]8R00F--flKPPPP		Q 	Qr%      Ссылки проектаc           
      .   | j                                                             d|d          }|                                sdS t	          |d          5 }t
                              |          }ddd           n# 1 swxY w Y   g }|D ]0}|d         }|d         }	d| d|	 d	}
|                    |
           1|r| j         j        j        j	         d
| d}t          j                            |          }|s^t          j                            |j        d          }|d         }|j        }t                              d|||| j         d|dz             }d                    |ddd                   |_        |                    d           dS dS )u  
        Ссылки проекта

        Создает документ "Ссылки проекта" в структуре проекта.
        В документе перечисляются ссылки из раздела "Ссылки проекта"(Project Shortcuts) в Jira

        Args:
            project_id (str): ID проекта
            project_obj (CmfProject): объект проекта
        r  zshortcuts.jsonNrU  ri  r   z<p><a href="z5" class="plugin_link" target="_blank" rel="noopener">z</a></p>r7  z::shourtcutsr>  r   )r1  rh   r  r  Ti'  )r   r:  r;  r?  r4   rh  ri  r   rB  )r4   rq   rr   rs   rt   ru   rv   r   rE  rF  rW   CmfDocumentrY   CmfMenuTreeget_treer   ri  r   r   rI  )r"   r}  r  shourtcuts_filerz   shourtcuts_data
shourtcutsshourtcut_datashourtcut_urlshourtcut_nameshourtcut_textshourtcuts_ext_idshourtcuts_doc	menu_treelast_menu_itemlast_ordernos                   r#   _process_project_shourtcutsz)JiraAPIImport._process_project_shourtcutsM
  s!    /;;==FF
$4
 
 %%'' 	F/3'' 	+1"iillO	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 
- 	. 	.N*51M+F3N IM  I  Ip~  I  I  INn---- 	2#'?#9#@#L h hPZ h h h#/33;L3MMN! ".77{~]^7__	!*2-5!'!3!36& +,#$((50 "4 " " #%''*TTrT*:";";ND11111#	2 	2s   A<<B B project_structrp  c                 
   t           j                            dd|d         gddg          }|r|j        j        |d         k    s|j        rW|d         |j        vrH|d          d|d          d|d<   | j        j                            d|j	         d	|d                     n(|j        s!|d         |_        |
                                 t           j                            dd
d|d          dg|                                          }|s/t                               | j        |d         |d         d          }|j        }|j        r|D ] }|dk    r	t          ||||                    !|                    d          rd|_        |
                                 d|_        d|_        d|_        d|_        d|_        d|_        d|_        d|_        d|_        |
                    d           n#| j        j                            d| d           |r9t           j                            |          D ]}|                    d           |                     |d         |           i }|                     |          |d<   |                     |          |d<   |                     |          |d<   |                      |          |d<   | !                    |           | "                                 | #                    |          |d<   |j        rA|$                                D ]\  }}	t          |||	           |
                    d           | %                                 | &                    |           | %                                 | '                    ||           | (                    ||           | )                    |d         |           t           j*                            |dd          }
|
s4t           *                    d|dd           }
|

                    d           tW                       | ,                    |           | j        -                                rd S tW                       | .                    ||           | %                                 | /                    ||           t           j*        0                    d!d"|gg d#g$          }|r+d|_1        |
                    d%           tW                       | j        j2        3                    |           | j        j2        4                    |           | j        xj5        d&z  c_5        | %                                 |S )'Nr   r2  rN   r?  r  r  rt  u   Проект с именем u8    уже существует! Переименуем в r  r  T)r4   r?  r   rh  	isPrivater  FrB  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыr:  rf  r   ui_form_schemeproject_perm_schemesecurity_level_schemecust_field_conf_schemere  rp  epic)r;  r4  include_systemEpics)r   r;  r4  systemr;  rJ  )has_children_archivedrJ  Tr6  r`  r3   )6rW   r  rY   rN   r   r?  r4   re   r  r   rI  keysr  rh  r  r  task_allow_multiple_sprintssl_only_owner_approvesl_deny_no_approvesl_task_only_owner_close
show_lists	show_blog
show_pfeed	show_disk	show_chatr  r   ro  r  _process_screen_scheme_process_permissions_process_security_levels_process_field_conf_schemer  _cache_prioritiesr  r   _calc_progressr  _process_versions_process_componentsr+  rD  r7   _process_tasksr6   _process_boards_process_sprintsr  r9  rE  _hack_replace_creation_date_hack_create_fake_taskr,  )r"   r,  rp  r  r  r   r  schemesschemer   epics_folderfolder_has_children_archiveds               r#   _process_projectzJiraAPIImport._process_project|
  sT   '++FD.QWBX3Y4@(3K , M M 		#%(N<,HHH ' I,:8,DKL^,^,^,:6,B)a)anU]F^)a)a)av&&.. 0e{O_ 0e 0eLZ[aLb0e 0e f f f f ' #%3H%="  """ '++HfFe.YaJbFeFeFe3f3A3F3F3H3H , J J 	_ ++t~^fOg1?1GY] , _ _K#&  	% ? ?(??S.*=>>>>,, 4*3' 7;K3 16K--2K*38K0 &+K"$)K!%*K"$)K!$)K!....O"**][ ] ] ]  
  	3++;+?? 3 3T2222 	##L$6DDD$($?$?$M$M !)-)B)B<)P)P%&+/+H+H+V+V'(,0,K,KL,Y,Y() 	  ...     $88FF& 	/!( 4 4VU3333...555|[999  {;;;((d);[III '++# , 
 

  	0!++'	 ,  L $///L)))?$$&& 	F 	\;777lK888 (.'7'='=[1444 (> (
 (
$ ( 	04K-t,,,LLL 	::;GGG 	55kBBB--2--r%   c                 X   dd l }|                    dddd| j        j        j         d| j        j         d| d| d	| d
gddt          dd          t          dd                    }| j                            d|j         d| d| d           | j                                         |S )Nr   z/usr/bin/python3z	manage.pyshellz&plugin = models.CmfPluginJira.get(id='z(');retcode = plugin.process_issue_fork('z', 'z', r  z);Tz"/var/log/eva-import-subprocess.loga+z&/var/log/eva-import-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderr[PID u(   ] Запуск процесса (offset=z, limit=rt  )	
subprocessPopenr4   rE  r   rt   r5   pid
log_detail)r"   r}  offsetr	  r^  procs         r#   _execute_taskzJiraAPIImport._execute_task  s    "K9O9R  * 0: ?E IN   "<dCC@$GG   
 
 	nDHnnV\nnfknnnooo""$$$r%      rW  c                    ||k    rd|fgS t          j        ||z            }t          dt          j        ||z                      }t	          |t          ||                    }t          ||          }||z  }	||z  }
g }d}t          |          D ];}|	}||
k     r|dz  }t	          ||          }|                    ||f           ||z  }<|S )u  
        Рассчитывает распределение задач между процессами

        Args:
            total_tasks (int): количество задач
            max_processes (int): максимальное количество одновременных процессов
            threads_per_process (int, optional): количество потоков в процессе. Defaults to 25.
            max_tasks_per_process (int, optional): максимальное количество задач
                                                   обрабатываемых в процессе. Defaults to 1000.

        Returns:
            list[tuple]: список кортежей (offset, limit)
        r   r3   )mathceilmaxfloorr
  ranger   )r"   r  r   threads_per_processmax_tasks_per_processmin_processes_by_limitprocesses_by_threadsmin_processes_to_useprocesses_to_use
base_tasks	remainderdistributionrb  ir	  s                  r#   _calc_task_distributionz%JiraAPIImport._calc_task_distribution*  s   * ---$%% "&;9N+N!O!O  #1dj?R1R&S&STT  #=#6LNb2c2cdd35KLL !$44
"22	'(( 	 	AE9}}
455E000eOFFr%   c                 h   d}d}| j                                                             dt          |          d          }|                                rt          |                                          D ]}|                                s|j        	                    d          r2|                    d                                          r5dD ]-}|                    |          }|
                    d           .|d	z  }|                    d
                                          r|d	z  }||fS )u  
        Получает количество успешно и неуспешно обработанных задач.
        Неуспешно - были ошибки при обрабоке саймой задачи или
        связанных объектов(комментарии, чек-листы, журнал работ и т.д.).

        Для успешно обработанных задач удаляет файл-флаги.
        r   r  r  .dirtyz.meta.success).processingrz  T)
missing_okr3   r{  )r4   rq   rr   r-   rs   r   iterdiris_dirr   r4  unlink)r"   r}  success_countfailed_count	tasks_dirtask_dirfile_flag_name	flag_files           r#   _get_processed_countz"JiraAPIImport._get_processed_count`  sH    O5577@@J
 
	  	& OO3355 & &(( =))*=>> $$Z007799 '*E : :$,$5$5n$E$E	!((D(9999!Q&M $$]33::<< & A%Ll**r%   c           
      L   |d         }d|d          d| d|d          d}t           j        }|r| j        j                            d           |                     |          \  }}|r|r&|s$| j                            | d	| d
d           d S |r|n|}| j                                        }| j        j                            | d| d| d| d           | 	                    ||| j
        t           j                  }	i }
t          j                    }|	s|
r{t          |
          |k     r|	r|	                    d          }|\  }}	 |                     |||          }||
|<   nA# t"          $ r4}| j                            d|j         d| d| d           Y d }~nd }~ww xY wt          j        d           t          |
          |k     r|	g }|
                                D ]\  }}|                                }|l|                    |           |dk    r'| j                            d|j         d| d           ]| j                            d|j         d| d| d           |D ]}|
|= |
s|	rt          j        d           |	x|
{t          j                    }||z
  }t1          |d          \  }}t1          |d          \  }}|                     |          \  }}| j        j                            | dt5          |          ddt5          |          dd|d            | j        j                            d!| d"| d|            | j        j                            d#||z  d$d%           | j        j                            d&|            d S )'Nr   u   Проект 'r   rr  r  r   rt  u   Будет выполнена обработка только новых или обновленных задач. Для обработки всех задач измените значение параметра 'IMPORT_ONLY_NEW_OR_UPDATED'uU   . Нет новых/обновленных задач для обработки из u    задачTr  u   . Обработка u    из u(    задач с ограничением u,    одновременных процессаr   r]  r  uG   ] Процесс завершился с ошибкой. Ошибка: rs  )r  g      ?u4   ] Процесс завершился успешноuR   ] Процесс завершился с ошибкой. Код возврата: r"    r  u8   . Обработка задач завершена за 02drP  z06.3fuE   Обработано задач (успешно/неуспешно): r  u%   Скорость обработки: r  u    задач/секu)   Всего задач в проекте: )r   IMPORT_ONLY_NEW_OR_UPDATEDr4   re   r  r  r5   r   r  rv  r   IMPORT_OBJ_CNTr  perf_counterr   poprd  r8   r;   r`  sleepr   pollr   divmodr  r  )r"   rp  r}  project_msgonly_new_or_updatedr  unprocessed_tasks
task_countr   pending_task_chunksactive_processesr  
task_chunkrb  r	  processr\  processes_to_removereturn_codeenddiffhoursrs  minutessecondssuccess_tasksfailed_taskss                              r#   rL  zJiraAPIImport._process_tasks  s   !$'
d|F';dd
ddl[`Naddd$? 	O"**R  
 *.)B)B:)N)N&&	#	,=	 O  N  N  vA  N  N  N      F*=N&&;
99;;## g g g g; g g+8g g g	
 	
 	
 #::$!	
 
 !##! *	%5 *	&''-77<O7044Q77
 !+"00VUKKG0:$W--    O--/ / /j / /),/ /#- .         
3 &''-77<O7" #%'7'='='?'?  #%llnn*'..w777"a''++rGKrr*rrr    11FGK F F* F F8CF F'1 2    / . .$W--   #6 
1U " *	%5 *	X !!U{!$--y!)R00&*&?&?
&K&K#|## C C5zzBC C #GBC C3:BC C	
 	
 	
 	## ETa  E  Edp  E  E  yC  E  E	
 	
 	
 	##$wZZ^M^$w$w$w$wxxx##$]P[$]$]^^^^^s   E( (
F&2*F!!F&u#   Обработка проектовc           
      &   t           j                            d          j        j        }|                                 D ]}	 |d         d | j        D             vr| j                                        r d S |                    di           }|r!| 	                    || j
                           }nddd}|d	         d
k    r!t           j                            d          }ns|d	         dk    r!t           j                            d          }nF|d	         dk    r!t           j                            d          }nt          d|d	          d          d| j        j        j        j         d|d          d|d<   |d         |j        j        |d         ||d         ||d         |d}|                     ||           # t          $ rB t!                       | xj        dz  c_        | j                            d| dd           Y w xY wd S )NrK   rL   r   c                     g | ]
}|d          S r   r/   r  s     r#   r  z3JiraAPIImport._process_projects.<locals>.<listcomp>  s    -Z-Z-ZCc$i-Z-Z-Zr%   leadzdefault_import_jira@evateam.comdefault_import_jira)r   r   projectTypeKeybusinesszproject.base:defaultsoftwarezproject.agile:defaultservice_deskzproject.servicedesk:defaultu$   ERROR! Проекты с типом u3    временно не поддерживаютсяr7  r?  r   r   r   )r   rN   r   activitytask_code_prefixr   r?  rv  r3   u<   Не удалось импортировать проект zERR-0041r  r  )rW   rX   rY   r   r   r  rb   r4   r6   rV  rU   rx  r8   rE  rF  rU  r9   r:   r;   )r"   r  rp  project_leadr   rN   r,  s          r#   _process_projectszJiraAPIImport._process_projects  s   %))y)99<B ..00 *	M *	ML)M%-Z-Z4CY-Z-Z-ZZZ?,,.. FF+//;; @ $ 0 0dm1L M MII*K)>!@ !@I 01Z??!'!4!8!8>T!8!U!UJJ!"23zAA!'!4!8!8>U!8!V!VJJ!"23~EE!'!4!8!8>[!8!\!\JJ# S|L\?]  S  S  ST T T)qdo.D.K.W)q)q[ghl[m)q)q)qX&(0",-"5(7 ((4U(;!**84'3	" 	" %%nlCCCC M M M1$))*wiu*w*w*4| * M M M M MMM*	M *	Ms    GG9EGAHHc                 F   |d         }|d         }|d         }d}d}d}	d}
|dk    r_d| j         j        j        j         d| d}t          j                            ddd	| d	g
          }|st          d| d| d          |}n5|dk    r |dk    rdS |                     |d          }n|dk    r	|}	| d| }
| j         j        j        j         d| }t          j                            |g d          }|s#t                              ||| j         d          }|j	        r@|d         |_
        ||_        ||_        |	|_        |
|_        |                    d           n.| j                             d| d| dt"          j        d           t'                       dS )uG  
        Присваивает цвет карточке

        Args:
            card_color_data (dict): сырые данные настройки цвета карточки
            card_color_scheme (str): стратегия присвоения цвета
            board_obj (CmfKanbanBoard): доска
        r   displayValuer   NrN   r7  r?  r  r  r6  u'   Не найден тип задачи 'rr  rt  rP   
unassignedTr
  rO   r  )r  rN   rP   rO   r   r  r:  r?  r4   rh  r  rB  u&   Цвет карточки задач 'u\   ) был изменен. Новые данные из импорта не примененыr  )r4   rE  rF  rW   rx  rY   r8   rV  CmfKanbanBoardCardColorRulerh  r  rN   rP   rO   r   rI  r5   rc   r  r7   )r"   card_color_datacard_color_scheme	board_objr   display_valuecard_color_idlogic_type_ruleresponsible_rulepriority_rule	name_ruler  rN   card_color_rule_ext_idcard_color_rules                  r#   _process_board_card_color_rulez,JiraAPIImport._process_board_card_color_rule  s_     ('7'-	,, [T_%;%B%N [ [RW [ [ [,00 &*B.?*B*B*BC 1  J  f d- d d\a d d deee(OO-//$$#//d/KK*,,!M 33M33I$(O$:$A$M!`!`Q^!`!` <@@)   A 	
 	
  	$@@ -? $	 A  O * 	$3G$<O!)8O&*:O''4O$#,O   T 2222OW W W? W W Wo	      	r%   u;   Обработка цветов карточек доскиc           	         |                     d          pi }|                                D ]\  }}| j                             |          }|s"|d         }|D ]j}|d         }		 |                     |||           ## t          $ r;}
t                       | j                            d|	 d|
 dd           Y d }
~
cd }
~
ww xY wd S )	N
strategies
cardColorsr  uI   Не удалось присвоить цвет карточки для 'r  zERR-0137r  r  )rY   r   rl   r  r8   r9   r4   r;   )r"   card_color_configr  card_colors_strategiesstrategy_typecard_colors_datar  card_colorsr  r  r\  s              r#    _process_board_card_color_schemez.JiraAPIImport._process_board_card_color_scheme]  s8   !2!6!6|!D!D!J/E/K/K/M/M 	 	+M+ $ ? C CM R R$ *<8K#.   / ?77')!   
 !    NNNO--{dq{{vy{{"!> .        	 	s   #A;;
C 1B;;C u   Обработка досокc                    ddd}dddddd	d
}ddddd}t           j                            d|dg          }|s$t                               d||d| j                  }|j        sd|_        |                                 |d         }|                     |          D 	]}	 | j                                        r dS |d         }	|d         }
| j        j        	                    d|	 d|
            |d         d         }|d         }d}|d         d         }|r|d         }|d         }| j        j
        j
        j         d| }t           j                            |g d           }|s"t                               | j        |d!          }|j        rM||_        d"|_        d#|_        |j                            |           ||_        |                    d$           n)| j        j                            d%| d&| d| d'           g }|d(         }|d)         ddd*         D ]}|d         }|d         }| j        j
        j
        j         d| d| }t           j                            |g d+           }|s"t                               | j        |d!          }|j        r,||_        d,|_        ||_        |                    d$           n)| j        j                            d-| d&| d| d.           |                    |           g }|d/         d0         ddd*         D ]}|d         }|d         }| j        j
        j
        j         d| d| }t           j                            |g d+           }|s"t                               | j        |d!          }|j        r2|d         |_        d,|_        ||_        |                    d$           n)| j        j                            d1| d&| d| d'           |                    |           | j        j
        j
        j         d|	 |d2<   t           j                            d2d3|d2         gd4d3|ggg d56          }|s(t                               |d2         | j        d7          }|j        r|d         |_        ||_        ||_        |                    |d8                   |_        ||_        ||_        ||_        |                    |d9         d	          |_        |                    |d:         d          |_        | j                            |d;         d<          |_        d|_         |d         |_        |                    d$           tC                       n)| j        j                            d=| d&|	 d|
 d.           | "                    ||           tG          tI          d> |d?         d@                   d          } tG          tI          dA |d?         d@         ddd*                   d          }!|!rdB|!dC<   | rdD| dC<   d}"t           j%        &                    |g dEF          }#|#D ]`}$|$j        j'        pi }%|%                    dG          }&|$j        r|&r2|&|$j(        k    r'| j        j                            dH| dI           dJ}" nag }'dK}&|d?         d@         D ]}(	 |(d         })|(d         }*| j        j
        j
        j         d|) }+t           j%                            d2d3|+gd4d3|ggdLdMgdN          }$|$s9t           %                    ||+| j        dO          }$|$                    d$           |'                    |$j)                   |$j*        r*| j        j                            dP|$ d&|) d|* dQ           |$j        j'        pi }%|$j        r|*|$_        |(dR         |$_+        |(dS         |$_,        g },|(dT         D ]}-| j        j
        j
        j         d|-d          }.t           j-                            |.U          }/|/s*| j        .                    dV|$ d&|) d|* dW|- dX|Y           o|,                    |/           |,|$_/        |(dZ         rd[|$_0        n+|(dT         sd\|$_0        n|(                    dCd]          |$_0        |%1                    |(           n)| j        j                            dP|$ d&|) d|* d.           |"r|&|$_(        |$j(        |%dG<   |%|$_        |$                    d$           tC                       |&dKz  }&m# td          $ r?}0tg                       | j        .                    d^|) d|* d|0 d_|Y           Y d}0~0d}0~0ww xY wt           j%        &                    d`da|'gd4d3|gg dbgdc          }1|1D ]}(|(4                    dd           |1r"| j        j                            de|1            tC                       | j        xj5        dfz  c_5        	x#  tg                       | j        .                    dg| dh|Y           Y 	xY wdS )iu  
        https://bcrm.carbonsoft.ru/desk/favorites/Document/DOC-007367#spec-006348-b
        https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-quickfilter-get

        Только для Jira Server.
        Если с доской связано несколько проектов,
        то в каждом проекте создаются одинаковые доски с единым основным фильтром 
        zboard.scrum:defaultzboard.kanban:default)scrumr/  z	1 queriesz2 userstoryz
3 assigneez4 epicz	5 projectz7 none)r   parentChildrR   r5  r  nonez1 -1wz2 -2wz3 -4wz6 none)z-1wz-2wz-4wNONEu
   Доскиtree_node_is_branchrl  N)r   r:  r;  r4  r4   Tr   r   u!   Обработка доски ID r  r  r   cardColorConfigr   r7  )r   rW  rh  rv  r  r  r  rX  rB  u   Основной фильтр z (ID u;   ) был изменен и не будет обновленswimlanesConfig	swimlanesr  r  embeddedu   Дорожка uA   ) была изменена и не будет обновленаquickFilterConfigquickFiltersu   Быстрый фильтр r?  rJ  r:  )r:  r;  kanban_bql_filterswimlane_bql_filtersquick_bql_filters
limit_dayskanban_board_columnsrv  r  r?  r4   rh  rW  swimlaneStrategyoldDoneIssuesCutoffcardColorStrategyr     Доска c                 $    | d         o| d          S NmappedStatusesisKanPlanColumnr/   columns    r#   r   z/JiraAPIImport._process_boards.<locals>.<lambda>[      v.>'?'aO`HaDa r%   rapidListConfigmappedColumnsc                 $    | d         o| d          S r  r/   r  s    r#   r   z/JiraAPIImport._process_boards.<locals>.<lambda>b  r  r%   z#00875ar  z#42526e)r4   rv  ri  r:  r   ri  u.   Порядок колонок на доске up    был изменен и не будет обновлен. Упорядочите колонки вручнуюFrW  rv  r  )r   r   r  r  u   Колонка uG   ) была удалена и не будет восстановленаr
  ri  r  r>  u   Для колонки u!   ) не найден статус zERR-0124rT  r  r  z#6b778cz#0052ccu5   Не удалось создать колонку ID zERR-0042rM   r  r  r  rf  uC   Удалены колонки, отсутствующие в Jira: r3   u:   Не удалось импортировать доску zERR-0043)6rW   rD  rY   r4   r  rI  _get_project_boardsr6   re   r  rE  rF  r  rh  r   r  r  rW  r   rv  r  CmfKanbanBoardr:  r;  rN   r  r  r  swimlane_typer  rl   r  "kanban_board_quick_filters_visibler7   r  r   r   CmfKanbanBoardColumnr   r   ri  rM   r  min_sizemax_sizer?  r;   mapped_status_codesr  r  r8   r9   ro  r,  )2r"   rp  r  
board_typeswimlane_type_mappinglimit_days_mappingboard_folderr}  boardboard_id
board_nameboard_configr  r  board_filterboard_filter_idboard_filter_namekanban_filter_ext_idr  swimlanes_configswimlaneswimlane_idswimlane_nameswimlane_ext_idswimlane_filterr  quickfilterquickfilter_idquickfilter_namequick_filter_ext_idquick_filterr  first_column_with_statuseslast_column_with_statusesupdate_column_orderboard_columnsboard_columncolumn_datacolumn_ordernocurrent_columnsr  	column_idcolumn_namecolumn_ext_idr  r   r  status_globalr\  columns_for_deletions2                                                     r#   rM  zJiraAPIImport._process_boardsu  s    +,
 

 "($"!
 !
 	
 
 '++)* , 
 

  	!++!"'? ,  L / 	 /3L,!$'
--j99 Q	G Q	GEPG?,,.. FF ;"6]
&++PPPJPP    %V}X6$01B$C! %)!$V}X6 &24&8O(4V(<%.2o.D.K.W+l+l[j+l+l((.(;(?(?3      )@ ) )% - ,2,?,?'+#7,0 -@ - -)
 )8 1B).8>)57?)4)4;;KHHH<H)9)..4.@@@@.66Y=N Y Y#2Y Y6GY Y Y   (*$#/0A#B  0 =ddd C A AH"*4.K$,V$4M)-)?)F)R&q&qVa&q&qeo&q&qO&,&9&=&=.      '> ' 'O + *0*=*='+#2,0 +> + +
 '6 	/<,5?2:B7',,,>>>>.66_o _ _K _ _S` _ _ _   )//@@@@ %'!#/0C#D^#TUYUYWYUY#Z ; ;K%0%6N'26':$-1_-C-J-V*x*xZh*x*xlv*x*x'#)#6#:#:2      $; $ $L ( '-':':'+#6,0 (; ( (
 $3 
,7,?)2</7B4$))d);;;;.66Y< Y Y#1Y Y5EY Y Y  
 &,,\::::%)_%;%B%N"\"\RZ"\"\h"155!3h8!34	 	 	 6  	  !  & 5 5$X#'?(, !6 ! !I
 , %*6]IN'2I$,8I)+5>>%-+H+HI(2CI/2CI/5II2.C.G.G();< / /I+ ,>+A+A$%:; , ,I( 372Q2U2U)*=>3 3I/ DHI@05fI-NNtN444LLLLO*22[i [ [h [ [* [ [ [   556GSSS .2aa$%67H  . .* -1aa$%67H2N  - -) - C9B-g6- D:C.w7
 '+# & ; @ @$   !A ! ! %2  L".">"D"JK%0__Y%?%?N(3
)
.<@T.T.T.66TY T T T  
 /4+"$!%*+<=oN Z ZFY$*4L	&,Vn+/?+A+H+T(c(cXa(c(c'-'B'F'F!)3 >!)3	 :$
 !2 -$ -1 (G 
( 
(  , @+1+F+F'0'4+/?04	 ,G , ,L )--$-???'..|/@AAA'3 % O2::!i, !i !iY !i !iR] !i !i !i   %&2&B&H&NB'7 %0;L-4:5ML14:5ML124/*01A*B J J37?3I3P3\0n0n`fgk`l0n0n060D0H0HP]0H0^0^'4 !-$(O$=$=)S )S )ST] )S )Sal )S )SJP)S )S(2,5	 %> %& %& %& %- 3 : := I I I I?RL<  &&78 T5> 2 2%+,<%= T5> 2 2 6<ZZ5S5S 2'..v6666 O2::!c, !c !cY !c !cR] !c !c !c  
 / J3AL0 6B5IK	27B4$))d);;;"&$.$   $11uT]uualuupsuu& ) 2         (.'B'G'G?;!3	2222
 %) (H ( ($ 3 9 9FMM4M8888' O*22t^rtt   55:555G))*ngl*n*n*4+ * G G G G Ga
Q	G Q	GsL   "h>XhCd:-h.F
d:8h:
f4e>8h>fBh0i	u#   Обработка спринтовc                    t           j                            dd|gg dgddg          }t           j                            d          }t	                      }|                     |d	                   D ]}| j                                        r d S |d
         }| j        j        j        j	         d|d	          }t           j
                            dd|gdd|ggg dd          }	|	s#t           
                    ||| j        d          }	|	j        }
|	j        rK||	_        ||	_        |d         |	_        | j        j        s/|                    dd          r|	xj        d|j         dz  c_        |                    d          |	_        |                    d          |	_        ||	_        |	j        r|	                    d           |dk    r |	j                            d          |	_        nK|dk    r |	j                            d          |	_        n%|dk    r|	j                            d           |	_        |dk    rdnd|	_        |	j        r|	                    d           t9                       d!}| j        j                            d"|	j         d#t?          |d$                               |d$                                          D ]_\  }}|d%         }|d&         }| j        j        j        j	         d| }t           j!                            |g d'd(          }|rj|	j"        #                    |           |j$        d k    rD|dk    r!|j%        D ]}||	k    r	|j        s nd|_        nd|_        |                    d)           |d	         |d	         k    rO| j        &                    d*|d          d+| d,| d-|d          d,|d%          d.tN          j(        /           |d0z  }"| xj)        d0z  c_)        | j        *                    d*|d          d+| d,| d1d2|	3           a|r*| j        *                    d*|d          d4| d5d6|	3           |	                    d           |dk    r|
s t           j+        ,                    |	7          s|	j                            d          |	_        |	                    d           | j        j                            d8|	j         d9           |	-                                 d|	_        |	                    d           t9                       |.                    t_          |	j0                             | j        xj1        d0z  c_1        | j        2                    d:d;           tg          t           j
        4                    dd|gg d<gd=gd                    |_5        |j5        rd|_6        n8tg          t           j
        4                    dd|gd=gd                    |_6        |                    d           t           j
        7                    tq          |          >           d S )?Nr;  r2  )r4  r2  r.  r  r9  r  zlist.agile_sprint:defaultrL   r   stater7  r?  rJ  r:  )r?  r   rN   rh  r  rQ  r=  r>  r;  r   cmf_archivedT)r   r   include_archived)rN   r?  r4   rh  r   multiprojectFr  rt  r8  r9  rB  futurer  r   r  closedr  r   u0   Добавляем задачи в спринт r  issuesr   r  )zlists.cmf_archivedr?  cache_status_typeagile_story_pointszop_gantt_task.sched_durationzop_gantt_task.sched_workzop_gantt_task.actual_workr  )r?  r   r  r`  u   В спринт 'u5   ' не удалось добавить задачу 'rr  u   ) проекта 'u\   ). Возможно проект или задача еще не импортированы.r1  r3   u$   ). Задача не найдена.zERR-0044r  uX   ' не удалось добавить задачи из других проектов: u]   . Возможно проекты или задачи еще не импортированы.zERR-0133)	task_listu   Запуск спринта "rQ  r.  r  r  rJ  T--)list_ids)9rW   rD  rY   rx  r3  _get_all_sprintsr4   r6   rE  rF  rH  r  rh  rN   r;  r   rG   rV   r  r=  r>  rv  r  rI  rQ  get_default_statusr   r  r7   re   r  r   r   r  r  r   r  listsr5   rc   r  r:   r;   CmfListHistoryOTRr  do_startr5  r-   r   r,  r  r   r  r9  r  recalculate_count_cacher   )r"   rp  r  sprint_foldersprint_logic_type
sprint_idsr.  sprint_stater?  
sprint_objsprint_is_newexternal_tasks_countissue_id
issue_data	issue_keyissue_projectissue_ext_idr  r  s                      r#   rN  zJiraAPIImport._process_sprints  s   (,,k2,,,
 &' - 	
 	
 #/339T3UUUU
++L,>?? J	< J	<F((** !'?L.5ASSVD\SSF++sF+sK0   "&% ,  J(  #^^0!#$(	 ,  
 '-M) 6(9
%)6
&"(.
 y L6::ne+L+L LOO'KK,H'K'K'KKOO-3ZZ-D-D
*+1::i+@+@
(-3
*( 6OOO5558++(2(;(N(Nv(V(VJ%%!X--(2(;(N(N}(](]J%%!X--(2(;(N(Nx(X(XJ%2>(2J2J$$PU
'( 6OOO555LLL#$ O"''  )F[e[j  )F  )Fnqrx  zB  sC  oD  oD  )F  )F  G  G  G(.x(8(>(>(@(@ / /$*&u-	 *9 5"&/"8"?"KYYxYY~))'	 	 	 &* *    &--d333-99'833-1Z 9 9	#,
#:#:9CY#:$)E48 105D-		D	111!$'=+>>>O''uF6N u uNWu u\du u+8+@u uERSXEYu u u &o (    )A-((OOq(OOO--=F6N = =NW= =\d= = = $.& .     $ ))sv s sH\s s s  *" *    OOO--- ((" )*0*B*H*HS]*H*^*^ ) %/$7$J$J6$R$R
!D111&++,^JO,^,^,^___##%%%-1
*D111LLLNN3z}--...O11Q611O$$X{;;;; /3N"C7/// v!%    	/
 	/
+ . 		04M--04##)3> 6%) $  1 1M- 	t,,, 	..Z8H8H.IIIIIr%   c                 &    |sd}|sd}| d| d| S )Nu   Не указаноr  u    ➔ r/   )r"   r#  	old_value	new_values       r#   _simple_html_diffzJiraAPIImport._simple_html_diff  s8     	.-I 	.-I88Y88Y888r%   Fc                 f   |dk    rdS 	 |                      |          }|                     |dd|          \  }}|st          d|           na# t          $ rT}|r | j        }| j        rd| nd}| j                            | d| d	d
           | xj        dz  c_        Y d}~nd}~ww xY w|S )u  
        Возвращает пользователя по какому-либо идентификатору (id, имя, логин, email и др.).

        Args:
            user_id (str): Идентификатор пользователя для поиска.
            obj (optional): Объект в контексте которого был поиск пользователя. Defaults to None.
            raise_on_error (bool, optional): Вызвать исключение при ошибке поиска
                или вернуть резервного пользователя ('Система' или пользователь по умолчанию).
                Defaults to False.

        Raises:
            Exception: Исключение при ошибке поиска пользователя.

        Returns:
            CmfPerson: Объект пользователя.
        unknownNFrT  ue   Пользователь с указанными данными не найден в системе: u   по умолчанию u   'Система'u;   . Будет установлен пользователь zERR-0045r   r  r3   )r  r)  r8   r   r   r4   r;   r:   )	r"   rZ  r<   rR  r  r[  r  r\  
person_msgs	            r#   rV  zJiraAPIImport._get_person  s1   $ i4	%0099D,,T5%S,IIIFA P  !O  IM  !O  !O  P  P  PP 	% 	% 	% 
%.DHDYq@@@@_q
))ccWacc( *   
 1$	% s   AA 
B.A
B))B.	dump_pathc                    |                     d          }|                                rjt          |d          5 }|D ]>}t                              |          }|d         |d         k    r|c cd d d            S ?	 d d d            n# 1 swxY w Y   t          |d          5 }|                    t                              |          dz              d d d            n# 1 swxY w Y   |S )Ngroups.jsonrU  r   rX  r   )rr   rs   rt   ru   r  writedumps)r"   r(  r<  groups_pathrz   rowr<   s          r#   _dump_groupszJiraAPIImport._dump_groups  s   ((77 	#k3'' #1 # #C**S//CV}F33"

	# # # # # # # # 4## # # # # # # # # # # # # # # +t$$ 	-GGDJJu%%t+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s)   4B	;B		BB$1C!!C%(C%c                    	 |                      |          S # t          $ rC 	 |                    d          }|                                rkt	          |d          5 }|D ]?}t
                              |          }||| j                 k    r|c cd d d            cY S @	 d d d            n# 1 swxY w Y   | j        	                    |          }|r\t	          |d          5 }|
                    t
                              |          dz              d d d            n# 1 swxY w Y   |cY S Y d S #  | j                            d| t          j                   Y Y d S xY ww xY w)N
users.jsonrU  rX  r   uM   Неудалось сдампить пользователя по ключу r1  )r  r8   rr   rs   rt   ru   r  rU   rG   get_user_infor?  r@  r4   r5   rc   r  )r"   rZ  r<  
users_pathrz   rB  r<   r  s           r#   _get_user_infozJiraAPIImport._get_user_info  sX   	V00999 	V 	V 	VV&//==
$$&& +j#.. +!#$ + +C"&**S//C&#dm*<<<'*

	+ + + + + + + + + +  =++ + + + + + + + + + + + + + + !I33G<<	 %j$// =1

9 5 5t ;<<<= = = = = = = = = = = = = = =$$$$% % %V##$}t{$}$}  FM  FU#  V  V  V  V  V  V  V!	Vs    E%9D23B,D2E%B, D2,B0	0D23B0	4/D2#1D D2 D$	$D2'D$	(D2,E%2+E!E%!E%u,   Обработка журнала работr(  c                 ,   | j         j                            d           d|d          d|d         d          d}|                     |          D ]}t	                      }d|d	<   | j         |d
<   |                    di                               | j                  r6|                     |d         | j                 |          |d<   |d         |d<   |                    di                               | j                  r+|                     |d         | j                 |          |d<   ||d<   |d         |d<   |d         dz  |d<   |                    dd          |d<   | j         j        j        j	         d|d          |d<   ||d<   d|d<   t          j                            |d                    }|sXt          j        d$i |}|j        j        t          j        |j        j        !          z   |_        |                    d"#           d S )%Nu*   Загружаем журнал работu%   Журнал работ задачи r   rP  r   r   rQ  r  r   r4   r   rT  r   r   updateAuthorcmf_modified_byr:  started
start_datetimeSpentSecondsr  
time_spentcommentr   r   r7  r   r?  rv  r   remaining_estimater>  )r  TrB  r/   )r4   re   r  _get_issue_worklogsr   rY   rU   rV  rE  rF  rW   CmfTimeTrackerHistoryrM  r   datetime	timedeltarO  end_daterI  )r"   r  r(  r<   worklogtimetracker_historyhistorys          r#   _process_issue_worklogz$JiraAPIImport._process_issue_worklog  sV   ##$PQQQfeElffhXaHbfff//66 	/ 	/G"&&&,4)04-{{8R((,,T];; U484D4DWXEVW[WdEekn4D4o4o#L13F|3T#K0{{>2..224=AA {9=9I9I'R`JabfboJpvy9I9z9z#$56,0)07	0B-078J0Kb0P-*1++i*D*D'/3/E/L/X,k,k\cdh\i,k,k)5< 1289 45266>QRZ>[6\\G / 6MM9LMM#*#5#;h>P$+$6$<?> ?> ?> $> ...+	/ 	/r%   c                    |                     d          D ]}|                    d          }|                    |j                   |                                 |                    |           |                    dg           }d |D             }|s
|dgz   |d<   |d                             dd          d         }|d	| gz   |d<   d
S )uF   
        Конвертирует "Фрагмент кода"
        prerM   r  c                 <    g | ]}|                     d           |S )zcode-)r  )r  class_s     r#   r  z/JiraAPIImport._convert_code.<locals>.<listcomp>+  s+    WWWVF<M<Mg<V<VW&WWWr%   zlanguage-noner   -r3   z	language-N)r  r  extendcontentsclearr   rY   r   )r"   r  r  code_tag	class_tag
code_classrM   s          r#   _convert_codezJiraAPIImport._convert_code  s     %%e,, 	@ 	@C ((00HOOCL)))IIKKKJJx   ,,IWWyWWWJ @(O+<<G!!}**32215(,>,>,>+??G	@ 	@r%   c                    |s|S t          |d          }|                     ||           |                     |||           |                     |           d                    d |j        j        D                       }|S )Nlxmlr   c                 ,    g | ]}t          |          S r/   rb  )r  cs     r#   r  z/JiraAPIImport._convert_text.<locals>.<listcomp><  s    @@@1A@@@r%   )r   r  r  rf  r   r   children)r"   r   r<   datar  s        r#   _convert_textzJiraAPIImport._convert_text2  s     	K!$//	y#...IsD1119%%%ww@@	(?@@@AAr%   u8   Обработка комментариев задачиc                    d|d          d|d         d          d}d}d}|                      |          D ]}|dz  }| j        j        j        j         d	|d
          }t          j                            |          }|r(|j        s!| j                            d| d|           s|s$t                              ||| j        d          }n|	                    dg           |                    di                               | j
                  r9|                     |d         | j
                 |          |_        |j        |_        |                    di                               | j
                  r-|                     |d         | j
                 |          |_        |d         |_        |d         |_        ||_        |                     |d         ||          |_        ||_        |                    d          r|dz  }|d         d         dk    rNt          j                            |d         d                   }	|j                            |	           d|_        n8| j                            d|d          d|           | xj        dz  c_        m|                    d          rTt5          t7          d |d                   i           }
|
                    di                               d d!          |_        |j        r|                    d"           | j                            d#d$           | j                            d%| d&|            d S )'Nu$   Комментарий задачи r   rP  r   r   rQ  r   r3   r7  r   r>  uN   Комментарий уже есть, и правился в системе zERR-0046rT  Tr  z**r   rJ  r   r   r   
visibilityrW  r  r   r  uL   Ошибка обработки приватного комментария zERR-0047
propertiesc                 4    |                      d          dk    S )Nr   zsd.public.commentr   )ps    r#   r   z7JiraAPIImport._process_issue_comments.<locals>.<lambda>l  s    !%%,,2E"E r%   internalFrB  rP  r  u   Обработано u:    комментариев, из них приватных ) _get_issue_commentsr4   rE  rF  rW   r  rY   rh  r;   r  rU   rV  r   r   rK  r   r   r:  rm  r   rv  r  rW  r   r  r:   r   r   r  rI  r  r5   )r"   r  r(  r<   cntprivate_cntrP  r?  cmf_commentr  sd_public_comments              r#   _process_issue_commentsz%JiraAPIImport._process_issue_comments?  s   eU5\eeuXW`Gaeee//66 1	= 1	=G1HC.5ATTWT]TTF +//v/>>K ;#> ))  +I  |G  +I  +I*4$ * @ @ @ 0$//tFW[Wfx|/}}''///{{8R((,,T];; ?)-)9)9'(:KDM:Z`c)9)d)d&(3(>%{{>2..224=AA p.2.>.>w~?VW[Wd?ekn.>.o.o+*1)*<K')0);K& "&K#11'.2I;X]^^K*1K'{{<(( 
q <(0F::!044',:OPW:X4YYD*11$777*.K''O--  /U  ~E  FR  ~S  /U  /U.8d . D D DOOq(OO {{<(( `$(EE-  % %! '8&;&;GR&H&H&L&LZY^&_&_#% 3  T 222O$$Y<<<<  AC  A  As~  A  A  	B  	B  	B  	B  	Br%   c                    t           j                            dd|gg dgddg          }|rD|j        r|j        r6|j        rdnd}| j        j                            d	| d
| d| d           d S |s8t                               || j        d          }|                    d           t           j	        
                    dd|gdg dg dggd          }|r(| j        j                            d	| d
| d           d S t           j	                            |          D ]}|                    d           |d         }ddddd}d}	d}
t          j        dt          j                  }|                    |          D ]}|                                \  }}}}}|                                }|r[d                    d |                    d           D                                                       }|                    dd!          }n|}|t-          |          |||d"}|	d#z  }	|d$k    r|
d#z  }
t           	                    |||||                    |d          | j        d|%          }|                    d           t          j        d&t          j                  }|                    |          }|r}|                                \  }}|                                |_        |rDd!                    d' |                    d           D                                                       }||_        |	|_        |
|_        ||_        |                    d           d S )(Nr:  rJ  r  Tr  )r   r  r   u   Удаленu   Изменен   Задача u   . Чек-лист rS  uf    пользователем. Изменения из импорта не будут применены)r:  r4   rh  rB  r  )rh  rJ  Frb  r  u   . Пункты изменены пользователем. Изменения из импорта не будут примененыr/  rf  r   r  r  r  CANCEL)r_  ~r  xr   z{(?P<status>[x~+-])(?P<mandatory>!)?\s*(?:\[(?P<custom_status>[^\]]+)\]\s*)?(?P<name>[^\n]*)(?P<description>(?:\n>[^\n]*)+)?r   c              3   B   K   | ]}||                                 V  d S r   r  r  lines     r#   r  z3JiraAPIImport._process_checklist.<locals>.<genexpr>  sD       ( ((JJLL( ( ( ( ( (r%   z
>r  )r   	mandatorycustom_statusr   r   r3   r  )
cache_taskr:  r   r   r   r4   rh  rv  z6#\s*(?P<header>[^\n]*)(?P<description>(?:\n>[^\n]*)+)?c              3   B   K   | ]}||                                 V  d S r   r  r  s     r#   r  z3JiraAPIImport._process_checklist.<locals>.<genexpr>  sD       ' ''JJLL' ' ' ' ' 'r%   )rW   CmfChecklistrY   rh  r  r4   re   r  rI  CmfChecklistItemr  r   ro  r  compileMfinditerr  r  r   r   r  r   r  r   r   checklist_items_countchecklist_items_done_countrv  )r"   checklist_datarX  	checklist
action_msgmodified_itemr  	items_strstatus_mappingitems_countitems_done_countitems_patternmatchr   r  r  r   r   r   	item_dataheader_patternheaders                         r#   _process_checklistz JiraAPIImport._process_checklistx  ss   '++3	**** !!? , 
 
	  	-i7 	-9;P 	-+4+@VFVJO"**]	 ] ]Y ] ]* ] ] ]   F 	-++ ? $ ,  I
 NNtN,,,/443	*333... ! 5 

 

  	O"**]	 ] ]Y ] ] ]   F+00	0BB 	/ 	/DKKK...."7+	 	
 
 
0 D
 
 #++I66 #	( #	(EBG,,..?FI}dK::<<D #"ii ( ( + 1 1% 8 8( ( (   %''	 
 #**455" !!)__!.* I 1K}} A% **$ %))&&99? $ ) + 	 	D II$I''''0D
 

 %%i00 		)"',,..FK#\\^^IN !hh ' ' + 1 1% 8 8' ' '   %''	 
 )IN*5	'/?	,$2	!4(((((r%   u0   Обработка плагинов задачиc                     |                      |          D ],}|d         dk    r|d         r|                     ||           -d S )Nr   z&com.railsware.SmartChecklist.checklistr   )_get_issue_propertiesr  )r"   r(  rX  issue_propertys       r#   _process_propertiesz!JiraAPIImport._process_properties  sa    "88?? 	C 	CNe$(PPPUcdkUlP''	BBB	C 	Cr%   c                    ddddddd}|                                 D ]\  }}g }|d                             |d         g           D ]}| j        j        j        j         d	|d
          }t
          j                            |          }	|	r|                    |	           [| j                            d| d| dd           | xj	        dz  c_	        t          ||d         |           d S )Nfix_versionsfixVersions)attrr   affected_versionsversions)FixAffectedr   r   
::version:r   r>  u   Не найдена 'u   ' версия zERR-0050rH  r  r3   r  )r   rY   r4   rE  rF  rW   rH  r   r;   r:   r  )
r"   r(  rX  version_typesversion_typeversionr  version_datar?  version_objs
             r#   _process_issue_versionsz%JiraAPIImport._process_issue_versions  sJ    '& 
 ,# 	
 	
 &3%8%8%:%: 	: 	:!L'H %h 3 3GG4Db I I ) ) O29EeeQ]^bQcee$n000?? )OOK0000O--[[[\[["!* .   
 OOq(OOOIwv9999	: 	:r%   c                 j   g }|d                              dg           }|D ]}| j        j        j        j         d|d          }t          j                             |          }|s0| j                            d| dd	           | xj        d
z  c_        |                    |           ||_	        d S )Nr   
componentsr7  r   r>  u%   Не найден компонент zERR-0051CmfComponentr  r3   )
rY   r4   rE  rF  rW   r  r;   r:   r   r  )r"   r(  rX  issue_componentsr  	componentr?  comp_objs           r#   _process_issue_componentsz'JiraAPIImport._process_issue_components  s    8_((r::
# 
	. 
	.I.5AVVYt_VVF*..f.==H %))GIGG+ *   
 1$##H----/	r%   c           	      F   ddl m} g }|d                             dg           }|D ]}|                    dd                              dd          } ||d	d
          }	 dddd| dgdd|gddd| dgg}t          j                            |          }	|	s/t                              |          }	|	                                 |                    |	           # t          $ r-}
| j	        
                    d| d|
 d|           Y d }
~
d }
~
ww xY w||_        d S )Nr   r  r   r  r  r  r  r   r  Tr  r  r  r  rQ  r  r   r6  r  u+   Не удалось создать тег 'r  zERR-0125r  )r  r  rY   r  rW   r  rI  r   r8   r4   r;   r  )r"   r(  rX  r  r  r  labelr  filter_r  r\  s              r#   _process_issue_tagsz!JiraAPIImport._process_issue_tags'  s   ******x$$Xr22 	 	EMM#s++33C<<EHU$FFFEg}5}}}5We,g}5}}}5	 m''w'77  --U-33CHHJJJC       ))Q%QQCQQ)! *         	s   "A=C  
D*#DDc           
      l   ddl m} g d}d||r|j        j        pd |t	          |j                  t	          |j                  d}d }	d }
|d         }|d         }|dv r4|r|                     ||	          }	|r|                     ||	          }
n|d
k    ry|r:t          j        	                    | j
        j        j        j         d| |          }	|r:t          j        	                    | j
        j        j        j         d| |          }
n|dk    r|}	|}
n|dk    r| j
        j        j        j         d|j        j         }|r-t          j        	                    dd| d| g|dgz             }	|r-t          j        	                    dd| d| g|dgz             }
nd S t          j        j        	                    |          }t!          ||j                  rs|	r|	j        j        pd |d<   |
r|
j        j        pd |d<   |	r|	j        j        pd |d<   |
r|
j        j        pd |d<   |	r|	j        j        pd |d<   |
r|
j        j        pd |d<   n
|	|d<   |
|d<   t          j                            |d         |d         |d         |d         |d         |d         |d         dg          }|s|nd S ) Nr   r   )r!  rM   r   r  )ri  r   cmf_author_idr   obj_idobj_coder  r  )r   rP   rT  r   r7  r  rO   r   r?  rJ  rA  r  
from_valueto_valuefrom_value_codeto_value_codefrom_value_nameto_value_namer   ri  r  r   r  r!  )r   ri  r  r   r  from_value_idto_value_idr   )cmfr   r   r   r-   rM   rV  rW   r  rY   r4   rE  rF  rQ  rn  r  
issubclassCmfRelationBaser   CmfOrmColumnHistoryr  )r"   r   history_itemr   
created_atrX  r   fields_history_datar  r  item_from_id
item_to_idr  	field_clscolumn_historys                   r#   _get_history_fieldz JiraAPIImport._get_history_fieldC  s   ((( ($#7	?4(),''IN++
 
 
#F+!$'
555 K!--l	-JJ
 G++JI+FF<'' #155"o4;GYY<YY" 6  
  !/33"o4;GWW:WW" 4   :%%%J!HH8##!%!7!>!JeeiN`NceeO #-11$co+O+O+O+OP"m_4 2  
  !+//$co+M+M+M+MN"m_4 0  
 FN)--j99	i!788 		0)3)K
8K)StL&'/'EHK4E'ML$.8.RZ_=R.ZVZL*+,4,L9L,TPTL).8.RZ_=R.ZVZL*+,4,L9L,TPTL)))3L&'/L$  388#L1'(89&7'(89)&|4$Z06 9 	
 	
 $2;||t;r%   u.   Обработка истории задачиc           	         dddddd}d|d          d	|d
         d          d}g }|d         d         D ]}| j         j        j        j         d|d          }d }|                    d          r)|                     |d         | j                 |          }n"| j         j                            d|            |d         |d|d}	|d         D ]}
|                    |
d         |
d                   }| j                            |          }|rf|d         r^|d         d         }|d         d         rB| 	                    |d         d         |
||d         |          }|r|
                    |           |                     ||
d         |
d                   }d|	vr||	d<   |	d          d | |	d<   t          j                            |g d!"          }|s"t                              | j         d#|$          }|	D ]}t          |||	|                    |j        r|                    d#%           |r"t          j                            |&           d S d S )'Nr   r  r  r  u   Статус)r   rR   rO   r   r   u   История задачи r   rP  r   r   rQ  	changelog	historiesz	::historyr   r   rT  u   Аудит без автора r   r3   )r   r   	log_levelr:  r   r   r   r#  r  r   
fromStringtoStringr   z<br>)r   r   r  r:  r   r  T)r4   rh  r?  rB  )r   )r4   rE  rF  rY   rV  rU   re   r  jira_map_fieldsr  r   r8  rW   r  r  r  rI  r  bulk_insert)r"   r(  rX  field_title_mapr<   history_fieldsrY  r?  r   rP  r  r#  r   history_fieldr  history_commentr   s                    r#   _process_historyzJiraAPIImport._process_history  s    %0,*$
 
 ^U5\]]uXy?Y]]][)+6 ,	7 ,	7G.5A[[GTXM[[FJ{{8$$ \!--gh.?.NTW-XX

&../ZQX/Z/Z[[[)0);:deqz{{G( 0 0)--d7mT']KK,0099 AU=1 A#M29=G]+,<= 	A(,(?(?!-0> &#I.%) ) ) A*11-@@@--gtL7I4PZK[\\((&*GFOO)0 '0 '0)-'0 '0GFOO$/33   4 	 	O # u"("3"3t`dms"3"t"t < <gcl;;;;) 7$$$666 	J&22.2IIIII	J 	Jr%   u]   Обработка связей с документами Wiki и веб-страницамиc                    g }|                     dg           D ]U}| j        j        j        j         d|d          }|d         }|d         }|st          j                             |          }|s#t                              ||| j        d          }|j        r7|d	         |_        |d
         |_        ||_	        |
                    d           |d         dk    r|                     d          dk    rvt          j        d|d
                   }	|	rY|	                    d          }
t          j                             ddd|
 g          }|s;|                    |           d|d<   W||_        d S )Nremotelinksr7  r   objectapplicationr>  Tr  r   ri  rB  rW  zcom.atlassian.confluencerelationshipz	Wiki Pagez$/pages/viewpage.action\?pageId=(\d+)r3   r?  r  r  r6  r  )rY   r4   rE  rF  rW   CmfLinkrh  r   ri  rv  rI  r  r  r(  r  r   local_links)r"   r(  rX  r  
remotelinkremotelink_ext_idremotelink_objremotelink_applinkr  page_iddocs               r#   _process_remotelinksz"JiraAPIImport._process_remotelinks  s   ))M266  	3  	3J#'?#9#@#L b bPZ[_P` b b'1N'6N! 3~))1B)CC !>>(0#'?(,	 *  D ' 0 .w 7DI-e4DH+5D(II$I///v&*DDDNN>22kAA 	"I>Z_K`aa 3#kk!nnG ,006?QX??8[0\\C ! &&s+++.2J{+ +	r%   c                 D   i }|d         }|                     d          r0|d                              d          pd}|dz  |d<   |d         |d<   |                     d          }|r9|                     |d	                   r|                     |d	                   |d
<   |                     d          }|r9|                     |d	                   r|                     |d	                   |d<   |sd S 	 t          j                             |d |D                       }|D ]}	t	          ||	||	                    |j        r|                    d           d S d S # t          $ r8 | j        	                    d| d| ddd           | xj
        dz  c_
        Y d S w xY w)Nr   timetrackingoriginalEstimateSecondsr   r  
sched_worktimetracker_sched_workz1com.atlassian.jpo:jpo-custom-field-baseline-startr   sched_start_datez/com.atlassian.jpo:jpo-custom-field-baseline-endsched_finish_datec                     g | ]}|S r/   r/   r  rz   s     r#   r  z0JiraAPIImport._process_gantt.<locals>.<listcomp>  s    HZHZHZqHZHZHZr%   )r  r   TrB  u8   Не удалось импортировать Гант u    для задачи 'r`  zERR-0112CmfGanttTaskr  r3   )rY   r   rW   r  r  r  rI  r8   r4   r;   r:   )
r"   r(  rX  ganttissue_fieldsestimate_secbaseline_start_fieldbaseline_end_field
gantt_taskr   s
             r#   _process_ganttzJiraAPIImport._process_gantt  s,   X N++ 	B'7;;<UVV[Z[L"."3E,.3L.AE*+  $66? 
  
   	UL$4$45I$5O$P$P 	U(4(8(89Md9S(T(TE$% "44=
 
  	T,"2"23Ed3K"L"L 	T)5)9)9:LT:R)S)SE%& 	F	!,00iHZHZTYHZHZHZ0[[J 9 9
E5<8888$ 2D111112 2 	! 	! 	!O%%t5tthqttt' &   
 OOq OOOOO	!s   5A$E >FFc                    | j         j        j        j         d|d          }t          j                            |dg          }|s$t                              |d|| j         d          }| j                            | j        j        d|d	                    }d
| d| d|_	        |j
        r|                    d           d S d S )Nz
::comment:r   r   r  r  T)r:  r  r?  r4   rh  z/browse/r   u<   Задача импортирована из Jira: <a href="z" target="_blank">z</a>rB  )r4   rE  rF  rW   r  rY   rG   
url_joinerri  r   r  rI  )r"   rX  r(  comment_ext_idrP  r  s         r#   _add_comment_link_to_issuez(JiraAPIImport._add_comment_link_to_issue#  s    O29E^^QVW[Q\^^#''!8 ( 
 
  	'' %? $ (  G y##DIM3LeEl3L3LMM;; ;04; ; ; 	  	+LLTL*****	+ 	+r%   u   Обработка задачиc           	          d}|d         }d| d|d         d          d}|                      || j        t          j        j                 d                   }||d<   | j        |d	<   d
|d<   | j        j        j        j         d|d          |d<   ||d<   |d         	                    d          r| j        j        j        j         d|d         	                    d          d          }t          j
        	                    |          |d<   |d         sI| j                            d|d         	                    d           dd           | xj        dz  c_        |                     d          }	|	r$|d         	                    |	d                   |d<   |d         	                    d          r|                     |d         	                    d          	                    | j                  |          |d<   |d         s| xj        dz  c_        | j                            d|d         	                    d           dd           | j                            d|d         	                    d          	                    | j                   t"          j        d
d
           |d         	                    d           r|                     |d         	                    d           	                    | j                  |          |d!<   |d!         s| xj        dz  c_        | j                            d"|d         	                    d            dd           | j                            d"|d         	                    d           	                    | j                   t"          j        d
d
           |d         	                    d#          r|                     |d         	                    d#          	                    | j                  |          |d$<   |d$         s| xj        dz  c_        | j                            d%|d         	                    d#           dd           | j                            d%|d         	                    d#          	                    | j                   t"          j        d
d
           nd&|d$<   |d         d'         d          |d         d(         	                    d)          }
|
r|d         d(         d          d*  }n }d| j        j        j        j         d| d}t          j        	                    dd+d,| d,g-          |d.<   |j        j        	                    d/          }| j        j        r|
r|j        j        	                    d          }|                     |          }t3          t5           fd0|          d&          }| j        j        j        j         d|d          }t          j        	                    dd1|g-          }n|d2         }|d3         }|	                     |          }| j        j        j        j         d| }t          j        	                    dd+| d4g-          }nt3          t5           fd5|d6                   d&          }|r	|d7         }n|d8         d2         }t9          j        |          }| j        j        j        j         d9| }t          j        	                    dd1|g-          }||d:<   | j        j        j        j         d|j         d|d         d;         d          }t          j        	                    dd1|gd<g=          |d;<   |d;         j         |d><   |d         	                    d?          r| j        j        j        j         d|d         d?         d          }t          j!        	                    |          |d?<   |d?         sI| j                            d@|d         	                    d?           dAd           | xj        dz  c_        |"                    dBd&          }|r|dC         dD         }| j        j#        $                    dE| dF|            tK          j&        | j        t          j        |ddG|d         gH          \  }}|| '                    ||          z  }|j(        r|)                    g dI           | *                    |||          |_+        |pg }|D ]}|j,        -                    |           | .                    ||           | /                    ||           | 0                    ||           | 1                    ||           |j2        dJk    rOt          j3        	                    |dKd
dLgM          }||_4        |j5        sd
|_5        |6                    d
N           |d         dO         |_7        | 8                    ||           ||_        |j9        r|6                    d
N           tu                       | ;                    ||           | <                    ||           | =                    ||           n#| j        j#        >                    d| dP           | ?                    ||           |d         dQ         dR         r| @                    ||           | jA        	                    dS          r| B                    ||           tu                       | j        C                    dTdU           t          |dV                   E                    dW          }t          |dX          5 }|G                    dY           d&d&d&           n# 1 swxY w Y   |S )Zu   
        Общая логика обработки которая потом разделяется на задачи и эпики
        r   r   r{  r_  r   r   r`  r:  r  Tapprovedr7  r   r?  rM   securityr>  perm_security_levelu:   Не найден уровень безопасности zERR-0048r  r  r3   Story Pointsr  r   rT  r   uB   Не найден автор(постановщик) задачи zERR-0049)r  exc_infocreatorr   u>   Не найден создатель(автор) задачи rR   rP   u6   Не найден исполнитель задачи NrQ   r  r  rP  r  r  r6  rN   rL  c                 0    | d         d         d         v S )NrM  r   rN  r/   wfissuetype_ids    r#   r   z.JiraAPIImport._process_issue.<locals>.<lambda>  s    <26F3G3J<3X#X r%   rJ  defaultWorkflowissueTypeMappingsr  c                     | d         v S )NrN  r/   r  s    r#   r   z.JiraAPIImport._process_issue.<locals>.<lambda>  s    |r,/?? r%   rM  r   r  rc  rQ  r   rA  r  r  r   u'   Не найдена резолюция zERR-0116r   renderedFieldsr   u4   Создание/обновление задачи 'r  r2  r@  )
r   r  r  r  r  logic_prefixr;  r   rW  rv  z	task.epicr5  r  r;  r4  r6  r   rB  r   u[    была изменена пользователем и не будет обновленаrP  totaltimeTrackingEnabledr  r  
issue_pathrz  wr   )Hr-  r'  rW   r  r   rZ   r4   rE  rF  rY   CmfSecurityLevelr;   r:   r   rV  rU   r5   rc   ERRORrx  rv  r   rG   rV   rl  r   r   rk  r   re  r   rn  rA  r  r  re   r  r   rG  r  rh  r  rm  r   r%  r   r  r  r  r  r  rD  r;  r  rI  r   r]  r  r7   r  r  r  r  r  ry  r]   rZ  r  r   rr   rt   r?  )!r"   r(  r  sprintsr  r2  r<   normalized_issuer?  story_p_fieldsimplified_projectissuetype_ext_idr  r  r}  r  r  r  rQ  default_workflowissue_type_mappingsworkflow_namerv  r  r  
issue_textrX  r  r.  rS  r  rz   r  s!                                   @r#   r  zJiraAPIImport._process_issue9  s   
 %L	IiIIE(OI,FIII  ..udmFND_6`ai6jkk%,"'+'<$'+$(,(>(E(Q%b%bUZ[_U`%b%b"#, ?z** 	%.5AllU8_EXEXYcEdEdeiEjllF6<6M6Q6QY_6Q6`6`23#$9: %))  +Iglmugvgzgz  |F  hG  hG  +I  +I*4y * J J J1$//?? 	^5:8_5H5HW[I\5]5]12 ?z** 	M,0,<,<U8_=P=PQ[=\=\=`=`aean=o=oux,<,y,y[)#K0 M1$))  +Qotu}o~  pC  pC  DN  pO  pO  +Q  +Q*4y * J J J##  %^inowixi|i|  ~H  jI  jI  jM  jM  NR  N[  j\  j\  %^  %^  `g  `m  y}  HL#  M  M  M ?y)) 	H-1-=-=eHo>Q>QR[>\>\>`>`aean>o>oux-=-y-y\*#L1 H1$))  +Lkpqykzk~k~  @I  lJ  lJ  +L  +L*4y * J J J##  %Yejksetexex  zC  fD  fD  fH  fH  IM  IV  fW  fW  %Y  %Y  [b  [h  tx  CG#  H  H  H ?z** 	3.2.>.>uX?R?RS]?^?^?b?bcgcp?q?qwz.>.{.{]+#M2 A1$))  +Echiqcrcvcv  xB  dC  dC  +E  +E*4y * J J J##  %R]bck]l]p]pq{]|]|  ^A  ^A  BF  BO  ^P  ^P  %R  %R  T[  Ta  mq  |@#  A  A  A.2]+X{3D9"8_Y7;;LII 	,"'/)"<T"BSS\SS+b!7!>!JbbN^bbb)/)<)@)@f&>*;&>&>&>? *A *
 *
&  '6<@@AWXX9? !	W! f$4:>>tDD
!%!G!G
!S!S $XXXX&  ! ! &*_%;%B%N"g"gR_`dRe"g"g!-11(C9Y1ZZ#78I#J &:;N&O# 3 7 7FV W W%)_%;%B%N"a"aR_"a"a!-11(FLcLcLc9d1ee ????(4   M  P -f 5 4V <=N O!,!:=!I!I!%!7!>!JjjVhjjO)--h_5U-VVH'/$?18DxxxxW\]eWfgoWpquWvxx%+%5%9%9c=1!? &: &
 &
" 1A0J0V,-?|,, 		%#'?#9#@#L u uPUV^P_`lPmnrPs u u-3-A-E-EM^-E-_-_\*#L1 %))aeHo>Q>QR^>_>_aa& *   
 1$%))&$77
 	@/0?J##${[d${${iy${${|||+DOV^ $(8(BC
 
 
	1 	$++Iu===$ F	!! # # #    "//
IuMMIN mG! / /&&v.... ((	::: **5)<<< $$UI666 %%eY777 %44%/33 '##'12	  4     )5	%#7 87;L4 %%$%777 */x9I)JI& ""9e444(-I%# 14000LLL y111 !!%333 ++Iu====O"** G	  G  G  G  
 	  	222 ?9%g. 	;((E::: $(()>?? 	:''	5999  555 |,--66zBB	)S!! 	QGGBKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   n<<o o u&   Обработка всех задачc                     | j                                         }|D ]3}| j                                        r d S |                     |           4d S r   )rG   r  r4   r6   r  )r"   r  r(  s      r#   _process_issueszJiraAPIImport._process_issues%  sb    %%'' 	' 	'E((** &&&&	' 	'r%   u3   Обработка связей всех задачc                    |s!| j         j                            d           dS t          t	          d | j                                                  d          }t          j                    }| 	                                D ]6}| 
                    |d                   \  }}|                     |d         |          D ]}| j                                         r  dS |d                             d          }|r!|d                             |d                   nd}	| j         j        j        j         d|d          }
|r\| j         j        j        j         d|d          }| j                            |g           }|                    |
           || j        |<   n<|	r:| j                            |	g           }|                    |
           || j        |	<   |d                             d	g           }|D ]}| j         j        j        j         d|d          }d
|v rI|
|d         d|d<   | j         j        j        j         d|d
         d          |d
         d<   || j        |<   pd|v rH|
|d         d|d
<   | j         j        j        j         d|d         d          |d         d<   || j        |<   8t          j                    |z
  }| j         j                            d|dd           | j                             dt+          | j                              t          j                    }t,          j                            d          }t,          j                            d          }| j        D ]T}| j                                         r dS t,          j                            ddd|gdd|ggddg          }|s$| j         j                            d| d           q| j        |         D ]}t,          j                            |ddg          }|s$| j         j                            d| d           L	 |j        |j        k    rt,          j                            g ddd d!|gd"d!|ggd d!|gd"d!|gggg#          }|D ]E}||_        |                    d$%           | j         j                            d&| d'| d(           F||_        |                    d$%           n| j         j                            d)| d*| d+           |j         d,| }t,          j                            |-          }|s:t,                              ||||| j         .          }|                    d$%           # t@          $ r?}| j         !                    d/| d0| d1d2d34           | xj"        d5z  c_"        Y d}~d}~ww xY wVtG                       t          j                    |z
  }| j         j                            d6|dd           d7d8dd9d:}| j         j                            d;t+          | j        $                                                      t          j                    }| j        %                                D ]\  }}| j                                         r dS 	 | j         j        j        j         d|d<         d          }
|                    |d<         d=                   }|r!t,          j                            |          } n t,          j                            |
-          } | s/t,          j                            d=d|d<         d=         g#          } | sjt,                              |
| j         |d<         d=         >          } |d<         d?         | _&        |d<         d@         | _'        |                     d$%           t,          j                            |d         d         dg          }!|!s@| j         j                            dA|d         d          dB|d         d          dC           t,          j                            |d
         d         dg          }"|"s@| j         j                            dD|d
         d          dB|d
         d          dC           +| j         j        j        j         d|d          }#t,          j                            |#dEg          }|s"t,                              | |#| j         F          }|j        j(        d7k    r|!j        |"k    s|"j        |!k    rjt,          j                            d          |_        |!j        |"k    r|"}|!}n|"j        |!k    r|!}|"}| j         j                            d&| d'| d(           |!|_)        |"|_*        |                    d$%           H#  | xj"        d5z  c_"        | j         !                    dG|d<          dH|d         d          dB|d         d          dI|d
         d          dB|d
         d          dJdKd34           Y xY wtG                       t          j                    |z
  }$| j         j                            dL|$dd           t          j                    |z
  }%| j         j                            dM|%dd           dS )NuD   
        Постобработка связей задач
        uF   Отключена обработка связей всех задачNc                 \    |                      di                                d          dk    S )Nr   r   z'com.pyxis.greenhopper.jira:gh-epic-linkr   )rz   s    r#   r   z2JiraAPIImport._process_relations.<locals>.<lambda>:  s(    !%%"--11(;;?hh r%   r   r  r   r:  r7  
issuelinksr   r   )r?  r   r   r?  uD   Анализ связей всех задач выполнен за r      сек.u   Подзадачи: zsystem.additional_parentrL   zsystem.linkr  r2  rM   r  r  uP   Не удалось связать задачи, возможно задача 'u#   ' не попала в импортparent_taskr  )relation_type.coderJ  system.finish:finishin_linkrJ  out_linkr6  TrB  u,   Тип связи родительской 'u$   ' и дочерней задачи 'ud   ' изменен с 'Блокируется/Блокирует (ОО)' на 'Относится к'.u   У задачи 'u3   ' эпик(родительская задача) 'uo   ' из другого проекта. Создана связь 'Дополнительный родитель'z:additional_parent:r>  )r-  r.  relation_typer?  r4   u<   Не удалось создать связь задачи 'u&   ' с дочерней задачей 'r`  zERR-0114r  r  r3   uG   Создание связей подзадач выполнено за r,  zsystem.duplicatezsystem.clone)Blocks	DuplicateRelatesClonersu   Связи: rW  r   )r?  r4   r   inwardoutwardu=   Не удалось найти входящую задачу r  u   ). Возможно задача не попала в импорт или находится в проекте, который еще не импортирован.u?   Не удалось найти исходящую задачу r+  )r/  r?  r4   u.   Не удалось создать связь z. in_link: z), out_link: rt  zERR-0052uA   Создание связей задач выполнено за uL   Обработка связей всех задач выполнена за )+r4   re   r  r   r   r{   r   r  r  r  r  r  r6   rY   rE  rF  r`   r   r_   r  r5   r   rW   CmfRelationTyper  r  CmfRelationOptionr   r/  rI  r*  r?  r8   r;   r:   r7   r:  r   in_type_nameout_type_namerM   r-  r.  )&r"   r  epic_link_fieldtotal_t1r  r  r  r(  issue_parentissue_epic_keyr?  parent_ext_id	sub_tasksissue_links
issue_linklink_ext_idanalysis_t2subtasks_t1additional_parent_relationlink_relationr*  child_ext_id
child_task	relationsrelation_optionrelation_ext_idr\  subtasks_t2	map_namesrelations_t1issue_relationrelation_coder/  r-  r.  
rel_ext_idrelations_t2total_t2s&                                         r#   _process_relationsz JiraAPIImport._process_relations-  s   
  	O"**+stttF hh ''))  
 
 >##))++  	G  	GG!66wt}EENK//[/QQ G G?,,.. FFF$X228<<O^!hx!4!4_T5J!K!K!Kdh O29EVVtVV 	>'+'='D'P$h$hT`aeTf$h$hM $ 1 1- D DI$$V,,,3<DM-00# > $ 1 1." E EI$$V,,,4=DM.1 $Ho11,CC"- 	G 	GJ%)_%;%B%N"d"dR\]aRb"d"dK$
22@FuUZ|5\5\
>2AEAWA^Aj  ?P  ?Pnx  zG  oH  IM  oN  ?P  ?P
=1(;<F,[99':55?EeTYl4[4[
=1BF/BXB_Bk  @R  @Roy  {I  pJ  KO  pP  @R  @R
>28<<F,[9	G+G> n&&1##lS^llll	
 	
 	
 	G3t}3E3EGGHHHn&&%+%;%?%?E_%?%`%`".222FF!] W	) W	)M((**  .,,t]3T=1
 !), -  K  &..i6Ci i i    $m < D) D)#^//')95 0  
 " O*22l:Fl l l   8) #*j.@@@$*$<$A$A S S S$(&/k%BZQTV`Da$b&/j%AJPSU`Ca$b!"$ %B 	% 	%	 09  O<IO9+00T0BBB O2::!F{ !F !FEO!F !F !F    2=
."D9999.66i
 i iP[i i i  
 .9-?*b*bT`*b*b*0*B*F*Fo*F*^*^. C.4.F.F(2)4.H'6+/? /G / /O ,00T0BBB  ) ) )O--MWb M M?IM M M"!*	 .    OOq(OOOOOOO){D)L 	n&&4##oVaoooo	
 	
 	
  6"4 - . 	
 	##$U3t7K7P7P7R7R3S3S$U$UVVV~''/3/C/I/I/K/K Y	 Y	+O^((** V O29EggX^I_`dIegg )nV.DV.L M M  N$*$:$>$>M$>$R$RMM$*$:$>$>f$>$M$MM$ v$*$:$>$>vtUcdjUklrUsFt$>$u$uM$ 9$*$:$:&UYUd@Nv@VW]@^ %; %` %`M1?1G1QM.2@2H2SM/!&&4&888 .,,).9(C)? -    O*22}).9%@} }DRSaDbckDl} } }  
 !>--)-8B)? .     O*22})-8?} }CQR_C`aiCj} } }  
  $ 6 = Icc^\`Macc
"(":">">%01 #? # # ' &,&>&>&3)#'? '? ' 'O $16:PPP ,88H<PT[<[<[ 5;4J4N4NTa4N4b4bO1*h66&.%,

!-88&-%-
O*22~{ ~ ~=G~ ~ ~   +2'+3($$$66661$))t^TZE[ t t .~ >u Et tIWXfIghpIqt t!/!>u!Et tIWXeIfgoIpt t t & *      	~'',6##jP\jjjj	
 	
 	
 >##h.##q[cqqqq	
 	
 	
 	
 	
s5   D;V
W4WW6FgA.g>DgA5iu)   Обработка компонентовc                    t           j                            |ddddg          }|sJ d|             |                     |d                   D ]}	 | j                                        r dS | j        j        j        j         d	|d          }t           j                            |g d
          }|s"t                               || j        d          }||_	        |d         |_
        ||_        |                    d          rd|_        nd|_        |                    d          r7|                     |d         | j                 d|d                    |_        nd|_        |d         dk    r|j        |_        nE|d         dk    r|j        |_        n,|d         dk    r|j        |_        n|d         dk    rd|_        |j        r|j        r|                    d           |                    dd          rs|j        s |                                 d|j        _        |j        j        r@|                    dd          |j        _        |j        j                            d           t5                       | j        xj        dz  c_        J#  t9                       | xj        dz  c_        | j                            d| dd           Y xY wt?          t           j                             d d!|gg d"gd#                    |_!        |j!        rd|_"        n5t?          t           j                             d d!|g$                    |_"        |j        r|                    d           dS dS )%uG  https://docs.atlassian.com/software/jira/docs/api/REST/1000.824.0/#api/2/project-getProjectComponents
        Пока грузим как списки, после доработки будут отдельные обекты

        Args:
            project_info (dict): проект из джиры как есть
        r  Tr  r9  r  uV   Данный тип проекта не поддерживает компоненты r   Nr7  )descr_documentdefault_ownerdefault_responsiblerh  r;  r:  r  r  r  r   archivedFr  u   Компонент rT  assigneeTypePROJECT_DEFAULTPROJECT_LEADCOMPONENT_LEAD
UNASSIGNEDrB  r   r   r3   u3   Ошибка загрузки компонента ERR-0053r  r  r;  rJ  r   r   r  r6  )#rW   rD  rY   _get_project_componentsr4   r6   rE  rF  r  r:  r   r;  r  rV  rU   rW  rP   rX  r   rh  r  rI  rV  create_descr_document
text_draftr   r7   r,  r9   r:   r;   r   r  r9  r  )r"   rp  r  component_folderr  r?  components_lists          r#   rK  z!JiraAPIImport._process_components8  sL    "+//#!%'	 0 
 
    	I  	I  "I  {G  "I  "I  	I  	I55l46HII >	O >	OI=O?,,.. FF O29EZZSWZZ"("5"9"9!   #: # # ' {&,&9&9TXTcuy&9&z&zO)4&'0'8$.>+==,, 937O0038O0==(( 9484D4D!&)$-8E)F2CEE 5E 5 5O11
 59O1^,0AAA:E:QO77~..@@:E:OO77~.2BBB:I:WO77~.,>>:>O7"2 ;7Q ;#((T(:::==33 T*9 N'==???IM6F&5E TDMMMR_acDdDd6A'6<AAdASSS55:555O1$))*k`i*k*k*4~ * O O O O O
 26%%"C)9:/// "& &  2
 2
. 1 	370037#))-FV1W)XX4 40 & 	4!!d!33333	4 	4s   J0H(JA Ku   Обработка версийc                 r   t           j                            d|ddg          }|                     |d                   D ]W}	 | j                                        r d S | j        j        j        j         d|d          }t           j                            |g d	          }|s"t                               || j        d
          }|j	        r;t           j
                            d          |_        ||_        ||_        |d         |_        |                    dd          |_        |                    d          |_        |                    d          |_        |j        j        |_        ||_        |j        r|                    d
           |d         rd
|_        nd|_        |j        r;|d         s|d         r|                    d           n|                    d           |j        r|                    d
           n#| j        j                            d| d           t9                       | j        xj        dz  c_        #  t=                       | xj        dz  c_        | j                             d| dd           Y VxY wtC          t           j        "                    d d!|gg d"gd
#                    |_#        |j#        rd
|_$        n5tC          t           j        "                    d d!|g$                    |_$        |j        r|                    d
           d S d S )%Nreleaser  r9  )r4  r;  r   r   rP  r  )r?  r   r:  rN   r   r=  r>  rQ  r;  r   r  r  Tr  zlist.release:defaultrL   r   r   r   r8  releaseDaterB  rY  Freleasedr  r  u   Релиз |    был изменен пользователем. Изменения из импорта не будут примененыr3   u+   Ошибка загрузки версии r_  rH  r  r;  rJ  r   r`  r6  )%rW   rD  rY   _get_project_versionsr4   r6   rE  rF  rH  rh  rx  rN   r:  r;  r   r   r=  r>  re  r  rQ  rv  r  rI  r  set_default_statusre   r  r7   r,  r9   r:   r;   r   r  r9  r  )r"   rp  r  release_folderr  r?  version_lists          r#   rJ  zJiraAPIImport._process_versions  s   )--#%' . 
 
 11\$=O1PP =	J =	JG<J?,,.. FF O29E``QXY]Q^``%~11!    2      $ s#)>>DOmq>#r#rL/ .4.A.E.EKa.E.b.bL+*5L'/=L,(/L%(/M2(F(FL%3:;;{3K3KL018]1K1KL.,7,A,ZL)3:L0#. <$))d);;;z* :4811491#, D":. D'*2E D(;;HEEEE(;;FCCC#. <$))d);;;O*22el e e e  
 55:555J1$))*aX_*a*a*4y * J J J J J
 04N  "C8/// "& !  0
 0
, / 	15N..15$$]C,P$QQ2 2N. $ 	2D11111	2 	2s   I!G1IA Ju*   Обработка JQL в фильтрахc           
      *   t                      }t          | j        j        j        j                  }t          j                    }t          j        	                    g dg dgg d          }|D ]g}d|j
         d|j         d}|j        s|j        j                            d          }|s|j        j                            d	          }|s|j        j                            d
          }t          j                            | j        j        j        j        j                  }|j        j                            d          pi }	|	                    d          pd}
|r
|j        |
vr|s	 | j                            d           | j                            d|            |                    ||          \  }}||_        t.                              |d          |_        |                    d           t7                       | j                            d|            | j                            d|            | j                            d|            |j        D ]!}| j        j                            |           "# t>          $ r?}tA                       | j        !                    d| d| d| dd           Y d}~ad}~ww xY wt          j                    |z
  }| j        j        "                    d|dd            dS )!uP   
        Пост обработка JQL в фильтрах задач
        r  )rh  r2  T)rv  ubqlbqlr   r  rQ  " (rt  jqlr  jqlQueryapplinkrpcUrlr   2--------------------------------------------------u   ФИЛЬТР: Fensure_asciiTrB  zJQL:	zUBQL:	zBQL:	r  u0   : ошибка преобразования JQL rS  zERR-0066r  r  NuC   Обработка JQL в фильтрах выполнена за r  r)  )#r   r-   r4   rE  rF  r  process_timerW   r  r   r   rM   rv  r   rY   r  r  r  ext_urlnetlocr5   get_modifiedrp  ru   r@  rq  rI  r7   r  re   r  r8   r9   r;   r  )r"   rs  rF  r  task_filtersr  
filter_msgr  r  ru  rpc_urlrp  rq  	error_msgr\  r  s                   r#   _process_jql_in_filtersz%JiraAPIImport._process_jql_in_filters  sj   
 oo$/07CDD  *//***/// >== 0 
 
 ( (	 (	KE[-EE+2BEEEJ. /599%@@E G#39==gFF #39==jII#\224?3I3P3X3^__
%5;??	JJPb!++h//52 Z.g== ##H---##$AZ$A$ABBB,,UK@@	c#' "&**Su*"E"E  T 222##$4U$4$4555##$4d$4$4555##NSNN333!$ > >IO*229====>   ))nJnn`ennilnn+ *           2%##$zjl$z$z$z$z{{{{{s   /DJ
K4KKu   Обработка аудитаc                     dS )u)   
        Грузим аудит
        Nr/   r!   s    r#   _process_auditzJiraAPIImport._process_audit;  s	     	r%   u2   Обработка логических типовc                 $
   dddddddddddddddd}|                      d          D ]}| j        j                            d|            | j                                        r d	S |d
         }| j        j        j        j         d| }ddd| dg}|                    d          r@|d         d         d
          d| }| j        j        j        j         d| }d|ddd| dgg}t          j	                            |ddg          }d| j        j        j        j         d}|rt          t          j        ||j        j                            dk    ro| j        j                            d| d|j                    t          j        |dt#          |j                            |_        |                    d           d	}|                    d|d                                                   }	|d                                         }
|sI| j        j                            d |	 d!           t          j	                            dd"|	gddg          }|r\|j        sd| d|_        nd| dt#          |j                  vr|                    d          rHd| j        j        j        j         d|d
          d}|j        j                            |d          |_        d| |j         }t          t          j        ||                    dk    rJ| j                            d#|	 d$| j        j        j        j         d!d%|d&'           | xj        dz  c_        n||_        |
|	k    r#|
|j        vr|j                            |
           |                    d           t3                       | j        j                            d(|	 d)           |                    |	                                          }|s(|                    |
                                d          }| j        j        r|d*         d+k    rd}n|d*         dk    rd}n
|d,         rd}t          j	                            d-d.|gd/g          }t          	                    |	|d0         d1|t#          |j                  d| d| j        2          }|	|
k    r|
g|_        |                                 t3                       | j        xj        dz  c_        d	S )3u$   Маппим issueType в logic_typeztask.sub:defaultztask.userstory:defaulttask.agile:defaultztask.bug:defaultztask.epic:default)zsub-tasksubtasku   подзадачаz
user story	userstorystoryu   историяr  u   задачаbugu   багu   ошибкаdefectu   эпикr5  r~  u-   Обрабатываем тип задачи Nr   r7  r?  r  r  r  scoper  rP  r  r  r  r  z::\d+)::r3   u   ext_id типа задачи r  r   Tr`  r=  r   u2   Поиск типа задачи по имени 'r`  r  uW   Ошибка объединения одноименных типов с именем 'u*   ': одинаковый источник 'zERR-0118rx  )r<   r  u   Тип задачи 'u2   ' не найден. Создание новогоrO  r  r  rM   r2  ui_colorr   r  )r   r   ri  rL  r  r?  r4   )r  r4   re   r  r6   rE  rF  rY   rW   rx  r   r  findallr?  r   r  r  r-   rI  r  r  r;   r:   r  r   r7   r  rG   rV   r  r,  )r"   	name2coderH  r  r  r  issue_type_scope_idrN   ext_id_patternissue_type_nameissue_type_aliaslogic_type_ext_id_oldlogic_type_ext_id_mergedtemplate_coderL  s                  r#   _process_issue_typez!JiraAPIImport._process_issue_typeC  sH   
 +)"421-6(0%(.(+'
 
	$ **=99 |	7 |	7JO"''(dXb(d(deee((**  't,M#'?#9#@#L _ _P] _ _)E/@)E)E)EFG~~g&& 	 *4G)<Y)G)M&_&_P]&_&_#'+'='D'P$i$iTg$i$i!v'C->'C'C'CD  ,00 '* 1  J
 V$/"8"?"KUUUN"
>:3D3JKKLLqPP &..gJ g gS]Sdg g   %'F>2s:CT?U?U$V$V
!$///!
(nn-?FASTTZZ\\O)&17799 &++[[[[   $044"G_=$g. 5  

   !( E(B->(B(B(BJ%%/+///s:;L7M7MMM!~~g.. 0vT_5K5R5^0v0vblmqbr0v0v0v-,6,=,C,K,K1 - -
)
 0[4E/ZzGX/Z/Z,2:n6NOOPPSTTT11s  wF s sFJoF\FcFos s s& *%3 2    1,,D
) %77(
0@@@$++,<===$///O"''kkkk   &MM/*?*?*A*ABBM  ^ ).>.D.D.F.FH\ ] ]y 7./255$6MM 01Q66$7Mi( 7$6M*..m4"| /  H  ,,$.!*!X.//1-111? -  J "222$4#5
 OOLLLO11Q6111y|	7 |	7r%   u2   Обработка бизнес-процессовc                 	    i }                      d          D ]}|||d         <                         d          D ]} j                                        r dS  j        j                            |d         d                      j        j        j        j         d|d         d          d|d         d          }t          j        	                    |          sBt          j        	                    d	
          }t                              || j                  |d         _
        |d         d         _                            d           |d         D ]$}                     ||d                             %t          j                            ddgg dgdg          D ]I}t          j        	                    dd|j        gddgg dg          s3|                    d           J|d         D ]} j                                        r  dS  j        j        j        j         dj         d|d          }t          j        	                    |          }	|	s#t                              | j        d          }	|	j        s1 j        j                            d|	j         dj         d           |d         |	_        |d         |	_
         fd|d         D             }
t          j                            dd |
g          |	_        t/          |	j                  t/          |
          k    s
J d!             j        j        j        j         dj         d|d"          }t          j        	                    |          }|d#                                         }|d$k    r|rd|_        |                    d%           ||	_        |	                    d&          r|d&         d         t7          t9          fd'                      d(                    d          }	                      |          |	_        d|	_        n9#   j                             d) d*|	j         d+j         d,d-d./           Y nxY w|	                    d           tC                        j        xj"        d0z  c_"        dS )1u   Импортируем workflowr;  r   rK  Nr   r7  entityIdr>  r  rL   rN  r   TrB  rQ  r2  r   rA  r  rR  r6  rT  rV  )r?  rQ  r  r  r  r  c                 V    g | ]%}j         j        j        j         d j         d | &S )r7  )r4   rE  rF  r   )r  str"   rQ  s     r#   r  z3JiraAPIImport._process_workflow.<locals>.<listcomp>  sR      +R  +R  +Rsudo.D.K.W+n+n[c[f+n+njl+n+n  +R  +R  +Rr%   r  r?  r]  uN   DEV: Fatal Вероятно, сломали создание статусов!r  rW  r_  r`  r$  c                 j    t          |                     d                    t                    k    S r  r"  r#  s    r#   r   z1JiraAPIImport._process_workflow.<locals>.<lambda>   s&    3vzz$/?/?+@+@C	NN+R r%   r&  r'  r(  r)  r`  r*  r+  r,  r3   )#r  r4   r6   re   r  rE  rF  rW   rk  rY   r   r   rI  rm  rn  r   rA  ro  r   rp  rh  r  rq  r   r  rr  rs  r   r   r-  r.  r/  r;   r7   r,  )r"   jira_statusesrw  jira_workflowworkflow_idtemplate_workflowr   r  r  r  r  r  rs  r  r1  r%  rQ  s   `              @@r#   _process_workflowzJiraAPIImport._process_workflow  s      ++J77 	; 	;K/:M+d+,,!--k:: N	7 N	7M((** O"''=+>v+F(HIII!_3:F  K  K-X\J]^dJe  K  Kivw{i|  ~H  jI  K  KK)--[-AAH z$*$6$:$:@T$:$U$U!!--[K\imix-yy)-8HM)$/7HMMMdM+++  -Z8 P P##M+d2C$DhOOOO *//T88TVlVlVl7m8E 0 H H * * '++]D&J\4]5?x4PRhRhRh4j+ k k D))))#0#? 32 32?,,.. FFF'+'='D'P$z$zT\T_$z$zcrswcx$z$z!#_008IT\0]]
! !'!)0#'?(,	 "1 " "J "1 O*22U:? U U`h`m U U U   "1&"9
"1-"@
 +R  +R  +R  +R  +R  zI  JP  zQ  +R  +R  +R')/)9)>)>xQUWnFo)>)p)p
&:122c:Q6R6RRRR  UeRRR&*o&<&C&O#y#yS[S^#y#ybqrvbw#y#y ",008H0II	"1&"9"?"?"A"A"h..9.7;I4NNTN222'0
$"&&x00  / 9$ ?I"&RRRR ,,Y77  # #K
151P1PQ\1]1]
.59
2211{V_ { {8B{ {jrjw{ { {&%0 ( 2      D1111LLLO11Q6111]N	7 N	7s   5!Q4Ru    Обработка схем БПc                 (   |                      d          D ]}| j                                        r d S | j        j        j        j         d|d          }t
          j                            dd| dg          }|sJ d|d                      | j        j        j        j         d|d	          }t
          j                            |
          }|sCt
          j                            d          }t
                              ||| j        d          }|j	        rT|d         |_
        |                    dd          |_        ||_        ||_        ||_        |                    d           n(| j        j                            d|j
         d           g }|d                                         D ]\  }}	| j        j        j        j         d| }
t
          j                            ddd|
 dg          }t
          j                            dd|gdd|gg          }|rZ|j	        sS| j        j                            d|j
         d|j         d|j
         d           |                    |j                   |st
          j                            dd|gdd|gg dg dgd           }|rT| j        j                            d|j
         d|j         d|j
         d!           |                    |j                   St
                              d"||| j        #          }| j        j        j        j         d|	 }t
          j                            dd| dg          }||_        |                    d           |                    |j                   t
          j                            d$d%|gdd|gg dgd           }|D ]}|                    d&           t5                       | j        xj        d'z  c_        d S )(Nrb  r7  r  r?  r  r  r6  u+   Не импортировался workflow r   r>  rd  rL   TrK  r   r   r   rB  r\  r]  r  r  rN   rJ  re  r^  r_  r`  ra  rb  r  r  rc  r  rd  rM   r  rf  r3   )r  r4   r6   rE  rF  rW   rk  rY   rt  rh  r   r   ru  rv  rv  rI  re   r  r   rx  rw  rM   r   rh  r   ro  r7   r,  )r"   rb  default_task_workflow_ext_idru  r  r  rL  r  logic_type_idr"  r  rN   r  r  rQ  r  s                   r#   _process_workflow_schemez&JiraAPIImport._process_workflow_scheme4  s'   #//0ABB _	7 _	7O((** .2o.D.K.W++[jk|[}++($*$6$:$:8VXtUyUyUyBz$:${${!(||*|XghyXz*|*|||("&/"8"?"Kff_cOdff*..6F.GGI !-117H1II"..%+#$(	 /  	 ( !0!8	!0!4!4]B!G!G	2G	/5J	2,;	)40000&..= = = =   M0?@S0T0Z0Z0\0\ /0 /0,}'+'='D'P$c$cTa$c$c!#044XvOkUfOkOkOk<l4mm
-11%sJ7$c95 2     4 O*22D	 D D*.)D D^h^mD D D  
 "((333 !155)3
;(#y9666666	  )- 6  D  !.66tIN t t.2it tblbqt t t  
 &,,TY777 !11'0#-"+#'?	 2  D &*_%;%B%N"a"aR_"a"a!-11(FLcLcLc9d1ee'/$		d	+++$$TY//// "(!7!<!<X}5 #y1...
 !% "= " " + 3 3T2222LLLO11Q6111_	7 _	7r%   c                     t           j        j        }|                     d          D ]S}|                    | j                  }|                    | j        j         d| t          j
        |                     Td S )Nr  r  )r  r  r  r  rY   rU   r3  r4   r   r  r@  )r"   r  r  r   s       r#   _cache_all_userszJiraAPIImport._cache_all_users  s~    <%))'22 	V 	VI--..CLLDO.;;c;;V\)=T=TUUUU	V 	Vr%   c                    t                      | _        g dg dg}|r<t          j                            dd|gg          }|                    dd|g           t          j                            |dg          }|D ]O}|j        j        	                                D ].\  }}| j        
                    t          |          |f           /Pt	          | j                  | _        d	S )
u  
        Кеширует приоритеты системы

        Args:
            field_config_scheme (CmfCustFieldConfScheme, optional):
                Схема кнфигурации полей установленная проекту.
                Если не указана, то кешируются все импортированные приоритеты системы.
                Defaults to None.
        )r   rJ  rO   r  cache_schemesr]  r6  r:  r  r  N)r3  priorities_cacherW   r  r   r   r  r  r   r   r5  r-   )r"   field_config_schemer  r  field_configsfield_configkvs           r#   rH  zJiraAPIImport._cache_priorities  s    !$ &%%&&&
  	?%6;;'0C/DE  <     NNHd,<=>>>499; : 
 
 * 	7 	7L$,288:: 7 71%))3q661+66667 !%T%: ; ;r%   r   c                     t          fd| j        D             d          }||S t          fd| j        D             d          }||S t          d d          )u  
        Получает приоритет из кеша

        Args:
            value (str): Имя или id приоритета.

        Returns:
            tuple (str, str): Кортеж, содержащий id и имя приоритета
        c              3   4   K   | ]}|d          k    |V  dS )r3   Nr/   r  rO   r   s     r#   r  z5JiraAPIImport._get_cached_priority.<locals>.<genexpr>  1      TT(x{e?S?SX?S?S?S?STTr%   Nc              3   4   K   | ]}|d          k    |V  dS )r   Nr/   r  s     r#   r  z5JiraAPIImport._get_cached_priority.<locals>.<genexpr>  r  r%   u   Приоритет 'uP   ' не найден. Возможно он еще не импортирован.)r   r  r8   )r"   r   priority_tuples    ` r#   r  z"JiraAPIImport._get_cached_priority  s     TTTTd&;TTT
 
 %!! TTTTd&;TTT
 
 %!!  Gu  G  G  G  H  H  	Hr%   u   Простой дампr   c                    t          j                    }| j                                                            | d          }| j                                                            | d          }|                                rt                              |           t          |d          5 } |            D ]G}| j        xj	        dz  c_	        |
                    t                              |          dz              H	 d d d            n# 1 swxY w Y   t          j        ||           | j                            d           t          j                    |z
  }| j        j                            d|j         d	|d
d           d S )N.jsonz.json.dirtyrX  r3   r   Tr`  u
   Дамп 'u   ' выполнен за r  r)  )r  r  r4   rq   rr   rs   r~   r	  rt   json_object_countr?  ru   r@  r}   r   rI  re   r  r)   )	r"   api_funcr   r  ry   r   rz   rB  r  s	            r#   _simple_dumpzJiraAPIImport._simple_dump  s   ^O5577@@DPP	99;;DDEYEYEYZZ 	!IIi   -&& 	0!xzz 0 011Q611

3$.////0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	M9---t,,,^"##$l1B$l$l\^$l$l$l$lmmmmms   0ADDDc              #   $  K   | j                                                             | d          }|                                rJt	          |d          5 }|D ]}t
                              |          V  	 d d d            n# 1 swxY w Y   d S )Nr  r+)r4   rq   rr   rs   rt   ru   r  )r"   r   ry   rz   rB  s        r#   r  zJiraAPIImport._simple_get  s      O5577@@DPP	 	*i&& *! * *C**S//))))** * * * * * * * * * * * * * * ts   "BB	B	c              #     K   | j                                                             d          }|                                r|                                D ]}|j                            d          r|                    d          }|                                s$| j         j                            d| d           jt          |d          5 }t                              |          V  d d d            n# 1 swxY w Y   d S d S )Nr  rx  	info.jsonuN   Отсутствует файл info.json в каталоге проекта 'r`  rU  )r4   rq   rr   rs   r}  r   r4  re   r  rt   ru   rv   )r"   projects_dirrJ  	info_filerz   s        r#   r  zJiraAPIImport._get_projects  sX     88::CCJOO   	'+3355 ' '#,,-@AA '00==	 '')) O*22witwww   )S)) 'Q))A,,&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	'' 's   C::C>	C>	c                 T    |                                  D ]}||d         k    r|c S d S r  )get_projects)r"   r}  rp  s      r#   get_projectzJiraAPIImport.get_project  sH     --// 	$ 	$L\$///#### 0	$ 	$r%   c                     | j                                                             d|d          }t          |d          5 }t                              |          cd d d            S # 1 swxY w Y   d S )Nr  workflows.jsonr  )r4   rq   rr   rt   ru   rv   )r"   r}  workflows_filerz   s       r#   rl  z/JiraAPIImport._get_simplified_project_workflows	  s    ::<<EE
$4
 
 .$'' 	 199Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   A&&A*-A*c              #      K   | j                                                             d|          }t          | dd          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  /issue_types.jsonr  r4   rq   rr   rt   ru   r  r"   r}  rJ  rz   rB  s        r#   rj  z*JiraAPIImport._get_issue_types_for_project  s      o7799BB:zZZ[333T:: 	&a & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&   "A33A7:A7c              #      K   | j                                                             d|          }t          | dd          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  /statuses.jsonr  r  r  s        r#   rf  z'JiraAPIImport._get_statuses_for_project        o7799BB:zZZ[000$77 	&1 & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r  c              #      K   | j                                                             d|          }t          | dd          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  /roles.jsonr  r  r  s        r#   r  z JiraAPIImport._get_project_roles  s      o7799BB:zZZ[---t44 	& & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r  c              #   4  K   | j                                                             d|d          }t                              |          D ]L}t          | d| dd          5 }t                              |          V  d d d            n# 1 swxY w Y   Md S )Nr  ra   r  
/info.jsonr  r4   rq   rr   r~   listdirrt   ru   rv   )r"   r}  	board_dirr  rz   s        r#   r  z!JiraAPIImport._get_project_boards"  s      O5577@@ZYabb	

9-- 	# 	#H99X9994@@ #Aiill"""# # # # # # # # # # # # # # #	# 	#   #BB	B	c              #   4  K   | j                                                             d|d          }t                              |          D ]L}t          | d| dd          5 }t                              |          V  d d d            n# 1 swxY w Y   Md S )Nr  r  r  r  r  r  )r"   r}  sprints_dir	sprint_idrz   s        r#   r#  zJiraAPIImport._get_all_sprints(  s      o7799BB:z[deeK00 	# 	#I<<y<<<dCC #qiill"""# # # # # # # # # # # # # # #	# 	#r  c              #      K   | j                                                             d|          }t          | dd          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  /versions.jsonr  r  r  s        r#   rk  z#JiraAPIImport._get_project_versions.  r  r  c              #      K   | j                                                             d|          }t          | dd          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  /components.jsonr  r  r  s        r#   ra  z%JiraAPIImport._get_project_components4  s      o7799BB:zZZ[222D99 	&Q & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r  c                    d}d}| j                                                             d|d          }|                                rt	          |                                          D ]c}|                                s|j                            d          r2|                    d                                          r|dz  }|dz  }d||fS )Nr   r  r  rx  r{  r3   )	r4   rq   rr   rs   r   r}  r~  r   r4  )r"   r}  r  unprocessedr  r  s         r#   r  z"JiraAPIImport._count_project_tasks:  s    O5577@@ZY`aa	 	 OO3355  (( =))*=>> $$]33::<< %1$K
k!!r%   r   c              #     K   | j                                                             d|d          }|                                s'| j         j                            d| d|            d S d}t          |                                          D ]}|                                s|j	        }|
                    d          r4|r(|                    d                                          s^||k     r|dz  }j|||z   k    r d S t          |                    d	          d
          5 }	t                              |	          V  d d d            n# 1 swxY w Y   |dz  }d S )Nr  r  u   Каталог u    отсутствует. Возможно он был удален или еще не создан. Необходимо повторно запустить импорт проекта r   rx  r{  r3   r  r  )r4   rq   rr   rs   re   r  r   r}  r~  r   r4  rt   ru   rv   )
r"   r}  r  r	  only_processingr  r  r  task_idrz   s
             r#   r  zJiraAPIImport.get_project_tasksK  s     O5577@@ZY`aa	!! 	O"**u) u uhru u   FY//11 	 	H??$$ mG 344  x'8'8'G'G'N'N'P'P u}}
%%h''44d;; #qiill"""# # # # # # # # # # # # # # #QJEE#	 	s   (EE	E	c                    |d         d         }i }|d         D ]}|d         dvr|d                                          D ]l\  }}|                    |d|i          }|                    di           }|                    |d                   st          |d	                   ||d         <   m|                                D ]}i }	|d                                          D ]<\  }}
|	                    |
t                                }|                    |           =i |d<   |	                                 D ]4\  }}t          |          d
k    r||d         d<   $|D ]}||d         |<   5d |                                D             |d<   |S )u   
        Создает структуру схемы экранов проекта из данных плагина "Smart Jira Configuration"
        rQ  issueTypeScreenSchemeglobalActionsr   )BROWSEPROJECTSCREATEISSUES
EDITISSUESr&  issueTypeIdactionsr$  r3   rO  c                     g | ]}|S r/   r/   )r  r  s     r#   r  z<JiraAPIImport._get_project_screen_scheme.<locals>.<listcomp>  s    'H'H'Ha'H'H'Hr%   r~  )r   rk  rY   r  r   r3  r5  r   )r"   smart_configscreen_schemer~  r  r  r   rH  r  issue_type_screensr%  r$  issue_type_screens                r#   _get_project_screen_schemez(JiraAPIImport._get_project_screen_schemeg  s    %Y/0GH "?3 	A 	AFd|#SSS(.y(9(?(?(A(A A A$u(33MMS`Cabb
$//	2>>{{6$<00 A,/h,@,@GF4L)	A &,,.. 	F 	FJ!#%/	%:%@%@%B%B # #!	+66y#%%HH

6""""$&Jy!.@.F.F.H.H F F*!7w<<!##7HJy))4% F FF4EJy)&11F	F (I'H;3E3E3G3G'H'H'Hm$r%   c                    t          |d                                       d          }|                                rt          j        |           |                                 |d         d         }|D ]}|d         }	 | j        j                            d| d           | j	        
                    t          j                            |                    }t          j        d| d	d
          }|                    |          }t!          |d          5 }	|	                    |           d d d            n# 1 swxY w Y   # t$          $ r/}
| j                            d| d|
 ddd           Y d }
~
d }
~
ww xY wd S )NrJ  rK  rL  rM  r   u(   Дамп бизнес-процесса 'u   ' как XMLrQ  rR  TrS  zwb+uB   Не удалось получить бизнес-процесс 'u   ' как XML: rY  rk  rx   r  
error_type)r   rr   rs   r}   rmtreemkdirr4   re   r  rG   get_workflow_as_xmlr  r  quoter   rg  rt   r?  r8   r;   )r"   rp  ru  r  r  r"  rz  rx  ry  rz   r\  s              r#   _get_project_workflows_as_xmlz+JiraAPIImport._get_project_workflows_as_xml  s   \-899BB;OO!! 	)M-(((%&<=jI+ 	 	M)&1M&++,rWd,r,r,rsss#y<<V\=O=OP]=^=^__$+$93333#'% % %! !. 6 67H I I-// *1GGL)))* * * * * * * * * * * * * * *   )){Yf{{vy{{*%	 *        	 	s=   BED<0E<E 	 EE 	E
F$E<<Fc                    d | j                             |          D             }g }|r| j                             |          }nF| j                             d          }|                    dt          |d                   d           d |D             }i }|D ]}t          |d	                   }	t          |d
                   }
| j                             |
          D ]n}|                    |d         |d         i d          }|	dk    r&|D ]"}||v r||d         |d         d|d         |<   #S|	|d         |d         d|d         |	<   o|S )Nc                 8    g | ]}t          |d                    S r   rb  rG  s     r#   r  z>JiraAPIImport._get_field_config_issue_type.<locals>.<listcomp>  s5     
 
 
 
4 !!
 
 
r%   rP  T)
is_defaultrO  r   )r  fieldConfigurationIdc                 P    g | ]#}|d          dk    t          |d                    $S )r  rO  rb  )r  field_configurations     r#   r  z>JiraAPIImport._get_field_config_issue_type.<locals>.<listcomp>  s@     
 
 
#"=1Y>> #M233>>>r%   r  r  )r   contextisHidden
isRequired)issuetypeIdr   r  r  )rG   get_issue_for_project"get_field_configuration_issue_typeget_field_configr   r-   get_field_config_fieldsrk  )r"   field_configuration_scheme_idr}  issue_types_projectfield_configuration_mappingfield_config_defaultissue_types_schemefields_usedr  r  field_configuration_idr   
field_usedrH  s                 r#   _get_field_config_issue_typez*JiraAPIImport._get_field_config_issue_type  s   
 
"i===TT
 
 
 ')#( 		*.)*V*VWt*u*u''#'9#=#=#=#N#N '..#,,/0DT0J,K,K   
 
'B
 
 
 #> 	 	 3M BCCM%()<=S)T%U%U"::;QRR  (33$K#Dk#%  
 !I--&9  
%);;;$ ,6(-j(9*/*== =
9-j99	 (5$)*$5&+L&9< <Jy)-88'2 r%   c                    | j                             |          }|                     ||          }|                                D ]}|d         }|                    d          s!| j                             ||          }|s?| j                             ||          }	 | j                             ||          }nt# t          $ rg}	i }| xj	        dz  c_	        d| d| d|	 }
t          |	d          r|
d|	j        j         z  }
| j                            |
d	d
d           Y d}	~	nd}	~	ww xY w| j                             ||          }|                    d          r>|d                                         D ]!\  }}|                    |           |||d<   "Y|D ]<}|d                             |          }|s |                    |           |||d<   =|S )u   
        Возвращает список используемых полей в проекте
        в виде сруктуры как через плагин "Smart Jira Configuration" в box версии
        r   customfield_r3   u9   Не удалось получить опции поля u    в контексте r  responsez HTTP: Response text -> zERR-0109r  rx   r  NisAnyIssueTyper  options)rG   &get_project_field_configuration_schemer  r   r  !get_field_context_project_mappingget_field_contextget_field_context_optionr8   r:   hasattrr  r   r4   r;   #get_field_context_issuetype_mappingrY   r   r  )r"   r}  r  r  r  field_used_id
context_idr  context_optionr\  
error_textcontext_issuetypesr  context_issue_types                 r#   _get_project_fields_usedz&JiraAPIImport._get_project_fields_used  s   
 )-	(X(XYc(d(d%778UWabb%,,.. *	G *	GJ&t,M ++N;; DD]T^__J i11-LLG!%!C!CMS]!^!^   !#1$ SYf  S  S  @J  S  S  NQ  S  S
3
++ Q"PS\=N"P"PPJ))4%	 *         "&!N!N}^h!i!i{{+,, G9CI9N9T9T9V9V G G5M#5&--g666%18F*95G
 &8 G GM)3I)>)B)B=)Q)Q&- ! &--g666%18F*95G s    B<<
D-AD((D-c              #      K   |d          d}t                               |          D ]}|dk    r	|| d| dV  d S )Nr  z/attachmentsall_attachments.zipr  )r{  ry   )r~   r  )r"   r(  attachments_pathr{  s       r#   r  z$JiraAPIImport._get_issue_attachments  sy      #L1???$455 	[ 	[I111 );K8Y8Yi8Y8YZZZZZZ	[ 	[r%   c              #      K   |d          d}t          |d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  z/comments.jsonr  )rt   ru   r  )r"   r(  comments_file_pathrz   rB  s        r#   rt  z!JiraAPIImport._get_issue_comments   s       %l 3CCC$d++ 	&q & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   "AAAc                     |d          d}t          |d          5 }t                              |          }d d d            n# 1 swxY w Y   |pg S )Nr  z/worklog.jsonr  rt   ru   rv   )r"   r(  r&  rz   r?   s        r#   rR  z!JiraAPIImport._get_issue_worklogs&  s     %l 3BBB$d++ 	q))A,,C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ybs   AA
Ac                     |d          d}t          |d          5 }t                              |          cd d d            S # 1 swxY w Y   d S )Nr  z/properties.jsonr  r(  )r"   r(  properties_file_pathrz   s       r#   r  z#JiraAPIImport._get_issue_properties,  s    "'"5GGG&-- 	 99Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    AA
Ac                     |d          d}t          |d          5 }t                              |          cd d d            S # 1 swxY w Y   d S )Nr  z/watchers.jsonr  r(  )r"   r(  watchers_file_pathrz   s       r#   rU  z!JiraAPIImport._get_issue_watchers1  s     %l 3CCC$d++ 	 q99Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 r+  c                 
   | j                                                             d          }|                                rBt	          |d          5 }t
                              |          cd d d            S # 1 swxY w Y   i S )Nglobal_settings.jsonr  )r4   rq   rr   rs   rt   ru   rv   )r"   global_settings_file_pathrz   s      r#   r\   z'JiraAPIImport._get_jira_global_settings6  s    $(O$E$E$G$G$P$PQg$h$h!$++-- 	$/66 $!yy||$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	s   A88A<?A<c                 0   | j                                         }| j                                                            d          }t          |d          5 }t                              ||           d d d            n# 1 swxY w Y   |d         | _        d S )Nzcloud_id.jsonrp   cloudId)	rG   get_cloud_idr4   rq   rr   rt   ru   rx   r[   )r"   rl  	data_filerz   s       r#   _get_cloud_idzJiraAPIImport._get_cloud_id=  s    y%%''O5577@@QQ	)T"" 	aIIdA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Ys   A>>BBc                    | j         j                            d           | j                                        D ]}|d         s	 | j                            |d                   |d<   |d         D ]Q}	 | j                            |d         |d                   }||d<   |d                             |           K#  Y OxY w#  Y xY w| 	                    | j                   d S )Nu0   Получение контекста полейr   r   r  r  )
r4   re   r  r{   r   rG   _get_field_context_get_field_optionsr`  r   )r"   r   r  r  s       r#   _get_fields_contextz!JiraAPIImport._get_fields_contextD  s	   ##$VWWW%,,.. 	 	E? #'9#?#?d#L#Li $Y/  G"&)">">uT{GTXM"Z"Z-4	*i(//8888 011111s%   -C3AB;:C;B?=CCc                    t           j        j        }|d         }|                     |          \  }}|                     ||          D ]}| j                                        r dS t          |d                                       d          }| j        	                                                    d          }| j        	                                                    d          }	|
                                rBt          j        ||	           t          |d          5 }
t          |d          5 }t          |	d          5 }|
D ]}||vr|                    |           t                              |          }|                    | j                  }|r7|                    | j        j         d	| t+          j        |                     	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                                 t          j        |	|           t          |d                                       d
          }| j        	                                                    d
          }| j        	                                                    d          }|
                                rt          |d                                           t          j        ||           t          |d          5 }
t          |d          5 }t          |d          5 }|
D ]}||vr|                    |           	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                                 t          j        ||           dS )u]   
        Собирает пользователей и группы из задач
        r   r  Nr  rE  zusers.json.newrU  rX  r  r>  zgroups.json.newa)r  r  r  r  r  r4   r6   r   rr   rq   rs   r}   copyrt   r?  ru   r  rY   rU   r3  r   r  r@  r  r   close)r"   rp  r  r}  r  r  r(  issue_users_pathall_users_pathall_users_path_newf1f2f3r  r  r   issue_groups_pathall_groups_pathall_groups_path_news                      r#   _collect_users_and_groupsz'JiraAPIImport._collect_users_and_groups[  s    <%!$'
22:>>Q++Jk+JJ %	B %	BE((** #E,$788AA,OO!_>>@@II,WWN!%!B!B!D!D!M!MN^!_!_&&(( @N,>???*C00 *Bnc22 *b!"4d;; 
*r(* 	* 	*#'r>>$&HHTNNN04

40@0@I*3--*F*FC'* %*(0/3/A,N,N,N,N,2L,C,C)* )* )*	*
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
** * * * * * * * * * * * * * ** * * * * * * * * * * * * * * !''))).??? $U<%8 9 9 B B= Q Q"o??AAJJ=YYO"&/"C"C"E"E"N"NO`"a"a '')) 
B_c**00222O-@AAA+S11 3Ros33 3r!"5t<< 3(* 3 3#'r>>$&HHTNNN33 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 "((***/AAAK%	B %	Bs   "H3G4BG	G4G!!G4$G!%G4(H4G88H;G8<HH	H	N+M?<M(	M?(M,,M?/M,0M?3N?NNNNN	N	c                    | j                                         }| j                                                            d          }t          |d          5 }t                              ||           d d d            d S # 1 swxY w Y   d S )Nr/  rp   )rG   get_configurations_of_jirar4   rq   rr   rt   ru   rx   )r"   global_settings_datar0  rz   s       r#   _dump_jira_global_settingsz(JiraAPIImport._dump_jira_global_settings  s    #yCCEE$(O$E$E$G$G$P$PQg$h$h!+T22 	/aII*A...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   A??BBu/   Обработка ссылок в текстеr   attachments_dirc                 	   d}|s|S t          |d                              d           D ]y}d}|                    d          rd}|j        |         }	 |                    d          r#| j        j                            d|            b|                    d          s*t          j	        
                    | j        j        |          }|                    | j        j                  s#| j        j                            d	|            t          j        |                    d
          d                   \  }}	|s$| j        j                            d|            9t!          j        dt          j	                            |                    }
|
r|
d         |
d                             dd          }|d         k    rU|d         d         }t'          t)          fd|          d           }|r$| j        j                            d|            t          j	                            |                    d          d                             d
          d                   }t*          j                            |          }|                    |          }t*          j                            ||d         | j        j        j        j                  }|s=t*                              | j        ||d         | j        j        j        j                  }||_        ||_        d|_        |                                  tC                       +# tD          $ rC}tG                       | j        j                            d| d|            |dz  }Y d }~sd }~ww xY wt          |d          }|                    ddi          D ]}|j                            d           r(| $                    |j        d          |d!                    E|j                            d"          r(| $                    |j        d"         |d!                    t          j	        %                    |j        d                   }t          j	        &                    |j'                  }| $                    |d#         d         (                                |d!                    |S )$Nr   rh  c                 V    |                      d          p|                      d          S r  r  r  s    r#   r   z+JiraAPIImport._dump_links.<locals>.<lambda>  s(    CLLQWDXDXDo\_\h\hin\o\o r%   r  r  zmailto:u   Это почта: httpuH   Это внешняя ссылка, оставляем как есть: r  u   Это не файл: r  r3   r  r  r   re  c                 6    |                      d          k    S r  r   r  s    r#   r   z+JiraAPIImport._dump_links.<locals>.<lambda>  s    $((4..I:U r%   uE   Этот файл уже обработан во вложениях: r  r  r   )r  
obj_ext_idrF  )r4   r  rQ  rF  Fu0   Не удалось скачать ссылку r  r  r  r  r  r  r  r  r   ))r   r  r  r  r  r4   re   r  r  r  urljoinrG   ri  r  r  r   r  r  r  r   r   rW   r  _get_filenamerr   CmfImportDownloadrY   rE  rF  pathr   
downloadedrI  r7   r8   r9   rH  r  r  r  r  )r"   r   rL  r(  r:   r  r   ri  r  encodingr  attach_filenamer  r  r   r{  ry   download_jobr  doc_soupr  r  r  s                         @r#   _dump_linkszJiraAPIImport._dump_links  s   
 	 v..778o8opp 1	  1	 CC||F## )C.C, >>),, O*223N3N3NOOO~~f-- C ,..ty}cBBC~~dim44 O*22  4D  B  4D  4D  E  E  E&/&:399S>>!;L&M&M#	8  O*223QC3Q3QRRRI&QSYS_SgSghkSlSlmm	 % )!I&/l&8&8a&@&@O OA$666&+Hol&C!%f-U-U-U-UWb&c&cei!j!j! % O2::  <I  DG  <I  <I  J  J  J$|++CIIcNN2,>,D,DS,I,I!,LMM".<<TBB	+44Y??	%7;;GLT{HLH^HeHq  <  s  s $ s#)#;#;tADGLT{HLH^HeHq $< $s $sL %.!$(!*/'!!###      &../lbe/l/lij/l/lmmma





  !}55$$G\+B$CC 	S 	SCy}}.// S##CI.?$@%BUVVVV// S##CIo$>l@STTTT#\2239V3DEE
--j.>??##E&M!$4$:$:$<$<eL>QRRRRs4   7MB MAM%B7MD7M
N$!8NN$c                 b   | j         D ]}| j         |         d         s|                    |          s-||                             di           }|                                D ]}|                    d          s|d         |d         |d         |d         d}|                    d          r'd	 |d                                         D             |d<   | j         |                             dg           }||vr|                    |            |                     | j                    d
S )u   
        В box версии, контексты полей получаем из плагина "Smart Jira Configuration"
        r   r  r   r   isGlobalContextr  )r   r   r]  r  r  c                     g | ]}|S r/   r/   )r  options     r#   r  z5JiraAPIImport._get_field_contexts.<locals>.<listcomp>  s    .`.`.`&v.`.`.`r%   N)r{   rY   r   rk  r   r   )r"   r  r   contextsr  context_datafield_contexts          r#   _get_field_contextsz!JiraAPIImport._get_field_contexts  sY    * 	 	J#J/9 ??:.. ":.229bAAH#??,,  {{4(( !$-#FO'./@'A&-.>&?	    ;;y)) a.`.`GIDVD]D]D_D_.`.`.`L+ $ 0 < G G	SU V V}44!((666 011111r%   c                 D   | j                             |d                   }| j        D ]}| j        |         d         s|d                             |          s3|d         |                             d          }|r|D ]}|                    d          s)| j                            d| t          j                   @| j         j        rW| j        |                             dg           D ]4}|d         |d         k    r |                    d          r|d         |d<   5|| j        |         d         vr&| j        |         d         	                    |           | j        |         d	         d         
                    d
d          d         }|dk    r9|d         |         }|r'|                     || j                 |d                    |dk    r>|d         |         pg }	|	D ])}|                     || j                 |d                    *|dk    r:|d         |         }
|
r(|                     |d         |         |d                    -|dk    r3|d         |         pg }|D ]}
|                     |
|d                    f|dk    rp|d         |         }| j        |                             dg           }|r?|                    |           t          t!          |                    | j        |         d<   |                     | j                   dS )u   На коробке только через мету задачи можно получить варианты выбора полей

        Args:
            issue (dict): задача
        r   r   r   allowedValuesr   u   Выбор без id: r  rk  r   rP  r3   r  
userpickerr  multiuserpickergrouppickermultigrouppickerr  N)rG   get_issue_metar{   rY   r4   r5   rc   r  rV   r   r   rH  rU   rC  r`  r   r3  r   )r"   r(  metar   r  r_  cur_optcustom_field_typesr  r  r(  r  r   s                r#   r8  z JiraAPIImport._get_field_options  s    y''e55* 0	Q 0	QJ#J/9 >%%j11 8nZ044_EEG S% S SF!::d++ !++,MV,M,Mw___ y S'+'7
'C'G'G	SU'V'V M MG&t}t<<#)::j#9#9 !M:@:LGJ$7M
 ")9*)Ei)PPP ,Z8CJJ6RRR!%!1*!=h!G!Q!W!WX[]^!_!_`b!c!\11Xz2 R''T](;U<=PQQQ#'888h
39r! R RD''T](;U<=PQQQQR#}44h
3 X%%eHoj&A5CVWWW#'999x4:# B BE%%eU<-@AAAAB#x//x4*:6::9bII QNN6***>B3w<<>P>PD$Z0; 011111r%   r  r  c                 0   | j                             | j        |d         |          }t          |d                                       d          }t          |d          5 }t                              ||d           d d d            d S # 1 swxY w Y   d S )Nr   rJ  r  rp   Frx  )rG    get_simplified_project_workflowsr[   r   rr   rt   ru   rx   )r"   r  r  rK  r  rz   s         r#   "_dump_simplified_project_workflowsz0JiraAPIImport._dump_simplified_project_workflows+  s    
 I>>MDM
 
	 gm455>>?OPP.$'' 	81IIiI777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s    BBBc           
         t          d          5  d}	 |                                }||                    |           n	 dd                    d |D                        d}| j                            |t          |          d	
          }|d         }	|	D 
]}
	 | j                                        r	 t                        d d d            dS | j        j
                            d|
d          d           |                    t          |
d                             }|                    t          |
d                   dz             }|                                rt          j        ||           |                    d           ||
d<   |                     |
           |                    d          }| j        j        j        j         d|
d          }|
d         d         D ]f}|d         }|d         }|d         }|                    t          |                    }|                    dt          |                    }| d| }t*          j                            || j        j        j        j        g d          }|s7t*                              || j        j        j        j        | j        d          }||_        ||_        ||_        |j        s|                                s"d|_        ||_        |                                 |                    d          r'|                     |d         | j                 |           ht                       | j                             d          rU|                    d          }|                                rtB          "                    |           tG          |d           5 }| j        $                    |
d                   }|D ]}|                    di                               | j                  r'|                     |d         | j                 |           |                    d!i                               | j                  r'|                     |d!         | j                 |           tJ          &                    ||           d d d            n# 1 swxY w Y   | j        j'        rE|
d"         d#         d$k    r3d% | j        (                    |
d                   D             |
d"         d&<   |
d"         d&         D ]>}|                    d          r'|                     |d         | j                 |           ?|
d                             d'          rG|                     |
d                             d'                              | j                  |           |
d                             d(          rH|                     |
d                             d(i                               | j                  |           |
d                             d)i           rH|                     |
d                             d)i                               | j                  |           || )                    |
d*         d+         ||
          z  }|                    d,          }|                                rtB          "                    |           | j        j
                            d-           tG          |d.          5 }| j        *                    |
d                   D ],}|                    di                               | j                  r'|                     |d         | j                 |           |                    d!i                               | j                  r'|                     |d!         | j                 |           |+                    tJ          ,                    |          d/z              | j        xj-        dz  c_-        | j        .                    d0           || )                    |d1         ||
          z  }.	 d d d            n# 1 swxY w Y   | j        /                    |
d                   |
d2<   | j        0                    |
d                   }|                    d3          }tG          |d           5 }tJ          &                    ||           d d d            n# 1 swxY w Y   | j        1                    |
d                   } | D ]#}!|                     |!| j                 |           $|                    d4          }"tG          |"d           5 }tJ          &                    | |           d d d            n# 1 swxY w Y   t          j        ||           |                    d           |                    d5          }#t          |          2                    dd6          |
d<   tG          |#d           5 }tJ          &                    |
|           | j        xj-        dz  c_-        | j        .                    d7           d d d            n# 1 swxY w Y   |                    d8          }$tG          |$d9          5 }|+                    d6           d d d            n# 1 swxY w Y   n@# tf          $ r3}%|dz  }| j        4                    d:|
 d;|% d<d=d>?           Y d }%~%nd }%~%ww xY wt                       
# t                       w xY wnI# tf          $ r<}%| j        4                    d@|dA          dB| d;|% d<d=d>?           |dz  }Y d }%~%nd }%~%ww xY w|                    |           	 d d d            d S # 1 swxY w Y   d S )CNFr  r   Tzid in (r  c                     g | ]}|S r/   r/   )r  r  s     r#   r  z1JiraAPIImport._dump_task_part.<locals>.<listcomp>E  s    .Q.Q.Q7w.Q.Q.Qr%   rt  zchangelog,renderedFields)r	  expandr  r3   u   Задача 'r   r`  r   ry  exist_okr  r  r7  r   re  rg  content)r   r  rU  )rQ  rF  r   )rQ  rF  r4   rh  r   r  zworklog.jsonrp   rJ  r  r  (   c                     g | ]}|S r/   r/   )r  rY  s     r#   r  z1JiraAPIImport._dump_task_part.<locals>.<listcomp>  s+     C" C" C"07GC" C" C"r%   r  r   r
  rR   r  r   zcomments.jsonu#   Дампим комментарииrX  r   rP  r   r  zproperties.jsonzwatchers.jsonr  r   r  r{  r  u0   Не удалось скачать задачу rS  zERR-0111r  rx   r  uB   Не удалось получить задачи проекта 'r   r  )5r   rY   r  r   rG   rs  r   r4   r6   r7   re   r  rr   r-   rs   r}   r   r  r8  rE  rF  rW   rT  r   r  rU  r  rV  rv  rI  rH  rU   r]   r~   r	  rt   issue_get_worklogru   rx   rV   get_changelogr[  get_commentsr?  r@  r  r  get_issue_remotelinksget_issue_propertiesget_watchersr  r8   r;   )&r"   r  rp  task_chunk_queuetasks_that_are_doner  r  rs  r  r  r(  r  task_dir_tmprL  task_ext_idattatt_idr{  download_urlatt_pathatt_path_tmp
att_ext_idrY  worklog_file_namerz   worklogsrW  rY  comments_file_namerP  rp  properties_filewatchersrY  watchers_file	info_pathr  r\  s&                                         r#   _dump_task_partzJiraAPIImport._dump_task_part:  s;   5111 a	0 a	0F^0-1133
%$((444V UDII.Q.Qj.Q.Q.Q$R$RUUUC#y}}!*oo9  -    H
 &h/F!' E) E)D)#88:: )'(D 'LLLLma	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0* !O2778Xu8X8X8XYYY'0'9'9#eDk:J:J'K'KH+4+=+=c%+>N>NQY>Y+Z+ZL'00 D &Hl C C C(...===2>E,/ 33E:::.6.?.?.N.NO-1_-C-J-V*g*gZ_`dZe*g*gK',X|'D & &),T,/
O	/29~+:+C+CCKK+P+P/;/D/D]TWX^T_T_/`/`0;-G-Gv-G-G
/5/G/K/K/9040F0M0Y+C+C+C 0L 0" 0"
 (4 !&393K3K3=48O4J4Q4]37?8<	 4L 4& 4&L 5> 14@ 14< 1#/#: !8,BUBUBWBW !8>CL$;CFL$@$0$5$5$7$7$7#&778#4#4 !&$($7$7(+Hdm(D(4%& %& %& 'LLL#8<<=RSS ;4@4I4I.4Y4Y 1#4#;#;#=#= !A$&II.?$@$@$@%)*;T%B%B !;a/3y/J/J5QU;/W/WH3; %v %v+2;;x+D+D+H+H+W+W )p,0,?,?@QRVR_@`bn,o,o,o+2;;~r+J+J+N+Nt}+]+] )v,0,?,?@WX\Xe@fht,u,u,u$(IIh$:$:$:!; !; !; !; !; !; !; !; !; !; !; !; !; !; !;  $y "53Eg3NQS3S3SC" C";?9;R;RSXY]S^;_;_C" C" C"k 2; ? ,1+=k+J h h#*;;x#8#8 !h$($7$78I$-8XZf$g$g$g$X22:>> v $ 3 3E(O4G4G
4S4S4W4WX\Xe4f4fht u u u$X229== y $ 3 3E(O4G4G	SU4V4V4Z4Z[_[h4i4ikw x x x$X22:rBB z $ 3 3E(O4G4G
TV4W4W4[4[\`\i4j4jlx y y y"d&6&6u=M7N}7]_npu&v&vvF1=1F1F1W1W.188:: > "		*< = = = O2778]^^^!%&8$!?!? 	p1/3y/E/EeDk/R/R !p !pG'.{{8R'@'@'D'DT]'S'S %l(,(;(;GH<Mdm<\^j(k(k(k'.{{>2'F'F'J'J4='Y'Y %r(,(;(;GN<STXTa<bdp(q(q(q$%GGDJJw,?,?$,F$G$G$G$(O$E$E$J$E$E$(O$<$<Y$G$G$G$*d.>.>w~?VXgin.o.o$oFF!p	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 4893R3RSXY]S^3_3_E-0 *.)G)Gd)T)TJ.:.C.CDU.V.VO!%ot!<!< 9 $		*a 8 8 89 9 9 9 9 9 9 9 9 9 9 9 9 9 9 (,y'='=eDk'J'JH+3 Z Z $ 3 3GDM4JL Y Y Y Y,8,A,A/,R,RM!%mT!:!: 7a $		(A 6 6 67 7 7 7 7 7 7 7 7 7 7 7 7 7 7"Kh???+1141@@@(0(9(9+(F(FI25h--2G2GRT2U2UE,/!%i!6!6 A! $		% 3 3 3 $ A AQ F A A $ 8 8 @ @ @A A A A A A A A A A A A A A A )1(9(9-(H(HI!%i!5!5 , !, , , , , , , , , , , , , , ,(   "aKF O55 aSX a a\_ a a *)2+1	 6         'LLLLJLLLLKE)L !      O--I(0I I5?I ICFI I"!*#) .    aKFFFFFF  $''///}^0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0 a	0sd  1oAm!k=8m!K=k=C+S<k=Sk=SI"k=2Ebk=bk=bA+k=d)k=)d--k=0d-1A.k=g;k=gk=gA9k=Ajk=j##k=&j#'(k=k1%k=1k55k=8k59k=<m=
l:)l50m5l::m=m!mm! o!
n'+2n"o"n''oooc           
      h    t          |d          d          }|                    d            j                                        }d}t	           j                  }d|k    r| fdt          dt	           j                            D             } j                                        }|D ]}|                    |           |                    d            g }	t           j                  D ]z}
 j	        
                     j        d|
d	z    ||||d
          }|	                    |           |                                  j        j                            d|            {d}|z  }t	          |           j        z   d	z
   j        z  }||z  } j        j                            d|dz   d|dz  dz   d|dz   d           |	D ]Y}|                    |           |                                r- j                            dddd           t)          d          Z j        j                            d           |                                s+||                                z  }|                                + j        j                            d|            |S )NrJ  /tasksTrt  r   2   c                 4    g | ]}j         ||z            S r/   )task_id_list)r  ru  r"   task_chunk_sizes     r#   r  z-JiraAPIImport._dump_tasks.<locals>.<listcomp>  s;     
 
 
 aO 334
 
 
r%   _dump_task_part_r3   )r  rp  r  r  targetr   r>   u   Запущен r  u&   Тайм-аут дампа задач r  u   ч u   м u   сtimeoutu$   Возможно завис дампzERR-0055r  rx   r  u"   Ошибка дампа задачuK   Закончили параллельное скачивание задачu   Ошибок: )r   r  r   Queuer   r  rk  r  r   r   Threadr  r   r  r4   re   r  r   is_aliver;   TimeoutErroremptyrY   )r"   rp  r  r  r  r  task_chunksr  r  threadsru  threadtime_per_tasktime_per_chunkchunks_per_threadtotal_time_per_threadr  s   `               @r#   _dump_taskszJiraAPIImport._dump_tasks  s[   L7???@@	&&&"j..00
 $+,,/)))O
 
 
 
 
1c$"344oFF
 
 

  :++--% 	- 	-J  ,,,,T"""t899 	D 	DA^**+/A//!*$0(8+>	  + 	 	F NN6"""LLNNNO"''(B&(B(BCCCC &8 --0QQTUUZ^Z{{ 1N B##.$,. .%,3. . %r). . .	
 	
 	
  		I 		IFKK 5K666   I)):&%	 *    ##GHHHI 	##$qrrr%++-- 	0)--///F &++-- 	0##$=V$=$=>>>r%   c                    | j         j                            d|d          d|d          d           | j                            |d                   }|r|                    d          si }| j        j        r!| j                            |d                   }nA|                    dg           D ]*}|d         d	k    r|d
         D ]}|d         ||d         <   +|                    dg           D ]}g |d<   |                    |d         g           D ]\}|d                             |           |d         dk    r3| 	                    |d         | j         
                                           ]t          |d          d          }	|	                                rt                              |	           t          |	d          5 }
t                               ||
           d d d            d S # 1 swxY w Y   d S )NuH   Дамп схемы безопасности задач проекта "r   rr  r   rt  r   r  r  BROWSE_PROJECTSr  r  levelsrW  r  r   rJ  /issue_security_scheme.jsonrp   )r4   re   r  rG   !get_project_issue_security_schemerY   rV    get_issue_security_level_membersr   rH  rq   r   rs   r~   r	  rt   ru   rx   )r"   rp  r  security_schemesecurity_level_membersr  security_levelrh   member	dump_filerz   s              r#   #_dump_project_issue_security_schemez1JiraAPIImport._dump_project_issue_security_scheme&  s   ## IXdekXl  I  Ir~  @E  sF  I  I  I	
 	
 	
 )EElSWFXYY 	b<#3#3L#A#A 	b%'"y e)-)S)STcdhTi)j)j&&*..CC e eFe}(999.4Z.@ e eNKYZcKd2>$3GHH(,,Xr:: b b#%i 488tbII b bF)$++F333f~//++F7OT_=^=^=`=`aaab
 L7TTTUU	 	!IIi   )T"" 	*aIIoq)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   	G22G69G6c                 T   | j         j                            d           t          |d          d          }|                                rt
                              |           t          |d          5 }i }	 d}| j        	                    |d         d
                    |                    }nB# t          $ r5}| j                             t          |          d	d
d           Y d }~nd }~ww xY wt                              ||           |cd d d            S # 1 swxY w Y   d S )Nug   Дампим конфигурацию проекта через плагин "Smart Jira Configuration"rJ  z/smart_config.jsonrX  )	projectInformationprojectSchemesprojectIssuetypesprojectVersionsprojectComponentsprojectMembersprojectCustomfieldsprojectGlobalActionsprojectWorkflowActionsr   r   )r  ERR-0056r  rx   r  )r4   re   r  r   rs   r~   r	  rt   rG   get_project_smart_configr   r8   r;   r-   ru   rx   )r"   rp  smart_config_filerz   r  r  r\  s          r#   _dump_smart_configz JiraAPIImport._dump_smart_configC  s    	##  %N  	O  	O  	O L$?!S!S!STT##%% 	)II'(((#T** 	 aL
  $yAA,uBU_b_g_gho_p_pAqq   ))HHj)% *         IIlA&&&/	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s<   6D:7B21D2
C1<+C,'D,C11DD!$D!Etc/UTC%Y-%m-%d %H:%Mdttzr  c                 ~   | p@t           j                             t           j        j                                      |          } t          j        |          }t
          j                            t           j                             | |                                        |          }|                    |          }|S r   )	rT  nowtimezoneutcstrftimepytzlocalizestrptime
astimezone)r  r  r  dt_tzdt_strs        r#   _datetime_in_user_tzz"JiraAPIImport._datetime_in_user_tze  s    P8$(():)>??HHPP]2!!("3"<"<R"H"HIITTUWXX''r%   c                 4   dd l }| j        d         d         d         }|d         st          d          d |d         D             | _        | j                                                            d          }|                    d	
           t          | j                  }t          d|z            }| j        D ]}|d         }|d         }|d         }		 | j        
                                r d S | j        xj        dz  c_        | j        j                            d|	 d           |                    |          }
|                    | d          }|
                    d          }| j        j        r&| j                            | j        j                  }n%| j                            | j        j                  }|r|d         d         nd}| j                            |          }d }|                                rot)          |d          5 }t*                              |          }|                    d          }d d d            n# 1 swxY w Y   |r|                     ||          }|
                                rt3          j        |
|           nt6                              |d	
           t;          j                    }| j                            |          }tA          |          |d<   d }| j        j        s| !                    |          }| j        j                            d           tE          |d          d          }|                                rt6          #                    |           t)          |d          5 }| j        $                    |d                   }	 |d         D ]}|d          d!         d"k    r| j        j        rU|d                              d          r9| %                    |d          d         | j                                                   u| %                    |d          d#         | j                                                   n'#  | j        &                    d$| d%d&d'(            xY wt*          '                    ||           d d d            n# 1 swxY w Y   | (                    ||)           | j        j        r|d*         sr| j        )                    |d                   d         d+         |d,<   | j        *                    |d                   |d-<   | +                    |d                   |d.<   n[| j        j                            d/           tE          |d          d0          }|                                rt6          #                    |           g }t)          |d          5 }| j        ,                    |d                   D ]b}|-                    |d                    | j        xj        dz  c_        |.                    t*          /                    |          d1z              c	 d d d            n# 1 swxY w Y   | j        0                    |d                   |d2<   | 1                    ||           n| j        0                    |d                   |d,<   d|d,         vr|d,         d         |d,         d3|d,<   n/| j        2                    |d,         d                   |d,         d4<   |                    d5i           |d,         d5<   | 3                    |           |                    d6          r| 4                    |          |d-<   |                    d7i           |d.<   | 5                    |d.                    |                    d8          }|r| j        6                    d9|            | j                            |d:         d	;          |d8<   | %                    |d8         | j7                 | j                                                   | j        j                            d<           tE          |d          d=          }|                                rt6          #                    |           t)          |d          5 }| j        8                    |d                   D ]G}| j        xj        dz  c_        |.                    t*          /                    |          d1z              H	 d d d            n# 1 swxY w Y   | j        j                            d>           tE          |d          d?          } |                                 rt6          #                    |            t)          | d          5 }| j        9                    |d         @          :                                D ]0}!| j        
                                r d d d             d S | j        xj        dz  c_        | j                            |!d	;          }"g }#|"                    dAg           D ]U}$|$d!         dBk    rE	 | j        j        rR| j        ;                    |$dC                             d          |$dC                             dD          E          |$dF<   n$| j        ;                    |$d                   |$dF<   nn# |j<        j=        $ r\}%|%j>        j?        dGk    rF|#-                    |$           | j        j        @                    dH|"d          dI|% dJ           Y d }%~% d }%~%ww xY w|$                    dF          r>| %                    |$dF         | j7                 | j                                                   W|"                    dA          r |#D ]}&|"dA         #                    |&           |.                    t*          /                    |"          d1z              2	 d d d            n# 1 swxY w Y   | j        j                            dK           tE          |d          dL          }'|'                                rt3          jA        |'           |'                                 tE          |d          dM          }(|(                                rt3          jA        |(           |(                                 	 | j        B                    |d         @          D ]L})| j        
                                r  d S | j        xj        dz  c_        | j        j                            dN|)d                     | j        C                    |)d                   |)d4<   | j        D                    |)d4         dO         d                   |)d4         dO<   | j        E                    |)d                   }*| j        j        rCdPdQdR | j        F                    |)d                   D             ii}+|*G                    |+           |*|)d4         dS<   | j        j        sI| j        H                    |)d                   },t          t          |,          dk              |)d4         dT<   |d         |)dU<   |'                    tA          |)d                             }-|-                    d	
           |-                    d          }.t)          |.dV          5 }t*          '                    |)|           d d d            n# 1 swxY w Y   	 |)d!         dWv r`| j        j                            dX           | j        J                    |)d                   D ]}/| j        
                                r   d S |/dY         |)d         k    r4| j        xj        dz  c_        |(                    tA          |/d                             }0|0                    d	
           |0                    d          }1|1                                r*| j        j                            dZ|/d          d[           | j        j        s|)d4         dT         |/dT<   i |/d\<   | j        j                            dZ|/d                     | j        K                    |/d         d]g^          D ]z}2| j        
                                r    d S |2d         }3|3|2d         |2d_         d]         d         |2d_         d]         d         |2d_         d]         d         d`da}4|4|/d\         |3<   {t)          |1dV          5 }t*          '                    |/|           | j        L                    db           d d d            n# 1 swxY w Y   !# |j<        j=        $ r}5|5j>        j?        dck    rJddtA          |5          v sdetA          |5          v r(| j        6                    tA          |5                     n"| j        &                    df|) dgdhd'(            Y d }5~5$d }5~5w | j        &                    df|) dgdhd'(            xY wn8#  | xjM        dz  c_M        | j        &                    di| dgdhd'(           Y nxY w| j        6                    dj           tE          |d          dk          }6|6                                rt6          #                    |6           t)          |6d          5 }| j        N                    |d                   D ]o}7| j        
                                r d d d             d S | j        xj        dz  c_        |.                    t*          /                    |7          d1z              p	 d d d            n# 1 swxY w Y   | j        6                    dl           tE          |d          dm          }8|8                                rt6          #                    |8           t)          |8d          5 }| j        O                    |d                   D ]}9| j        
                                r d d d             d S |9                    d8          r>| %                    |9d8         | j7                 | j                                                   | j        xj        dz  c_        |.                    t*          /                    |9          d1z              	 d d d            n# 1 swxY w Y   | j        6                    dn           | j        P                    |          }:tE          |d          do          };t)          |;dp          5 }t*          '                    |:|dqdrs           d d d            n# 1 swxY w Y   dtt6          jQ        du<   | j        xjR        |z  c_R        | j        S                    d	v           t                       dwt6          jQ        du<   t3          j        |d         |
           tA          |
          |d<   |d          dx}t)          |dV          5 }t*          '                    ||           d d d            n# 1 swxY w Y   t;          j                    |z
  }<| j        j                            dy|	 dz|<d{d|           tE          |d          d}          }=|r| U                    |d                   \  }>}?|=                                s5| j        j        @                    d~|	 d|d          d|= d| d	           d }n-|>s+| j        j        @                    d|	 d|= d| d           d }|d         d         s;|d         d         }@| j        &                    d|@ d|@ d|	 d| d	dd&d'(           nt          jV        W                    t          jX        jY                  Z                    d          }A|                     |A|          }Bd}Ct;          j                    }| j        [                    |d         ||B          }D|Drd|	 d|D }E|s|Br"|Edz  }E|r|Ed| z  }E|Br|Ed|B z  }E|Ed| dz  }E| j        6                    |E           d|d          d}F|r	|Fd| dz  }F|Br	|Fd|B dz  }F|Fdz  }Fd | j        \                    |Fd^          D             | _]        |C| ^                    |          z  }Ct;          j                    |z
  }<| j        j                            d|	 dz|<d{d|           | _                    |           n#| j        j                            d|	 d           |CsI|A|d<   t)          |dV          5 }t*          '                    ||           d d d            n# 1 swxY w Y   n| xjM        |Cz  c_M        /#  | xjM        dz  c_M        |                    d          r#| j        &                    d|	 ddd&d'(           n!| j        &                    d| dd&d'(           Y xY w| j        6                    d           d S )Nr   r  r   	isCheckedu5   Не выбрали ни одного проекта!c                 >    g | ]}|d          
|d         |d          S )r<   r  r/   )r  vals     r#   r  z0JiraAPIImport._dump_projects.<locals>.<listcomp>t  s2    !l!l!lCPUJ!l[^_j[k!l#e*!l!l!lr%   rk  r  Trt  P   r   r   r   r3   u   Дампим "rQ  ry  r  )r  )r  timeZoner  rP  rU  	dump_daterJ  u   Дампим права/permissions.jsonrX  permissionsholderrW  r  	parameteru0   Не удалось сдампить права r  r  rx   r  )r  r  workflowSchemerL  jira_screen_schemer  u/   Дампим типы задач проектаr  r   rb  )r   r  r  rK  rQ  
fieldsUsedr  u1   Ищем руководителя проекта r"   )absoluteu*   Дампим статусы проектаr  u$   Дампим роли проектаr  )r   r  r	  	actorUserrJ   )r  r  r  i  u&   Пользователь к роли "u   " не найден. u+   . Возможно он был удаленu&   Дампим доски проектаz/boards/z	/sprints/r  r   r  r  c                     g | ]}|S r/   r/   )r  qfs     r#   r  z0JiraAPIImport._dump_projects.<locals>.<listcomp>D  s%     5& 5& 5&/15& 5& 5&r%   r   r  r}  rp   )r  simpleu&   Дампим спринты доскиoriginBoardIdu   Спринт u    уже скачанr  r  r  r   )r   r   r   )r   r   r  r.  i  z"The board does not support sprintsuD   Данная доска не поддерживает спринтыu4   Не удалось сдампить спринты zERR-0057rH  u   Не удалось сдампить доски, возможно проект не поддерживает доски или у вас нет прав project_info=u(   Дампим версии проектаr  u!   Дампим компонентыr  u$   Дамп ссылок проектаz/shortcuts.jsonr  r  F)r   ry  r   NO_CACHEr`  1r  u&   Дамп данных проекта "u   " выполнен за r  r)  r  u$   В каталоге проекта "rr  u5   ), отсутствует каталог задач (u@   ). Дата последнего успешного дампа (u   ) будет сброшена.u/   В каталоге задач проекта "ud   ) отсутствуют задачи. Дата последнего успешного дампа (r  havePermissionu   Не удалось выполнить дамп задач проекта. Пользователь не имеет разрешения 'uA   '. Предоставьте пользователю право 'u0   ' в схеме прав для проекта 'rr  rt  zERR-0128r  )rM  rV  u$   Дамп задач проекта 'r  u    (в периодu    с u    по u4    включительно, часовой пояс: zproject = 'r`  z AND updated >= 'z AND updated <= 'z ORDER BY updatedc                 8    g | ]}t          |d                    S r   rb  )r  r  s     r#   r  z0JiraAPIImport._dump_projects.<locals>.<listcomp>   s2     - - - $  T
OO- - -r%   r4  u$   Дамп задач проекта "u   В проекте 'u5   ' нет новых/обновленных задачr.  u   Проект "u   " является приватным и не может быть импортирован, отключите приватность в Jira или предоставьте пользователю праваzERR-0058u2   Не удалось получить проект u0   Закончили дампить проекты)`requestsr'  r8   rb   r4   rq   rr   r  r   r  r6   r  re   r  rG   rV   user_find_by_user_stringr  get_permissionsrs   rt   ru   rv   rY   r  r}   r   r~   makedirsr  rz  r  r-   r  r   r	  get_project_permission_schemerH  r;   rx   r  get_project_schemeget_project_screen_schemer!  r  r   r?  r@  get_project_workflow_schemerp  get_workflow_schemer  r  rc  r5   rU   get_statusesget_project_rolesr   r  
exceptions	HTTPErrorr  r  r  r  get_all_agile_boardsget_agile_board_configuration
get_filterget_advanced_board_settingsget_board_quick_filtersr  get_agile_board_projectr   get_sprintsget_sprint_issuesr  r:   get_project_versions_paginatedget_project_componentsget_project_shortcutsenvironprogressrI  r7   r  rT  r  r  r  r  get_project_issues_count_duringjql_get_list_of_ticketsr  r  rG  )Gr"   r  rootr  ru  rC  r  r}  r   r  rJ  project_tmp_dirr4  r  user_tzuser_permissionslast_dump_daterz   current_dumplast_dump_date_utcr  rp  r  permission_fileperm_sch	perm_dict
types_filer  rH  r  statuses_filerB  	role_filerole_uri	role_infounfound_actorsr  r\  unfound_actor
boards_dirr  r  advanced_settingsquick_filtersboard_projectsr  board_info_filer.  sprint_pathsprint_file_pathr(  r0  r1  r  version_list_filenamer  components_list_filenamer  project_shortcutsshortcuts_filer  r  r  r  r  new_dump_date_utcnew_dump_datetask_errorsr  info_msgrs  sG                                                                          r#   _dump_projectszJiraAPIImport._dump_projectso  s    }./8;K  	USTTT!l!lZ8H!l!l!l88::CCJOOD)))$())28}}- k	d k	dG J!%.K"6?Lgd?,,.. FF11Q611&++,L\,L,L,LMMM*33J??"."7"7:8M8M8M"N"N'00==	 9? ` $	 B BI[ B \ \II $	 B BDIL^ B _ _I6?N)A,z22Y $(9#<#<
#<#S#S  "&##%% `i-- K'+yy||-9-=-=k-J-J*K K K K K K K K K K K K K K K * `)-)B)BCUW^)_)_%%'' @K_====KK$K???&((#y44[AA.1/.B.B]+  $y I#'#:#:<#H#HL &++,EFFF"&,}*E'X'X'X"Y"Y"))++ /IIo.../400 +A#yFF|TXGYZZH)1-)@  I(26:fDD#'9? !'0':'>'>w'G'G %(,(;(;Ih<OPW<XZ^ZiZ{Z{Z}Z}(~(~(~$($7$7	(8KK8XZ^ZiZ{Z{Z}Z}$~$~$~112pen2p2p4>bh 2 j j jIIh***+ + + + + + + + + + + + + + +  88T`8aaa9? *J'5 ^	44\$5GHHKL\] %%;< >BY=`=`amnras=t=t%9:6:6S6ST`aeTf6g6g]33 .334efff%)\--H*[*[*[%\%\
%,,.. 2IIj111)+!*d33 Gq.2i.M.MYefjYk.M.l.l G G
 . 5 5j6F G G G $ A AQ F A A !

:(>(>(E F F F FGG G G G G G G G G G G G G G G ;?):_:_(/; ;%67 ??n]]]];?9;`;`$U+< <L!78 <0F#GGGEQRhEijpEq  |H  I_  |`  @a  @a%;<<GKyGdGd()?@FH H%;<VD IUHXHXYdfhHiHiL!78E66|DDD#''	22 k=A=\=\]i=j=j%9:2>2B2B<QS2T2TL/,,\--HIII+//77 rO''(j\h(j(jkkk+/9==f9MX\=+]+]L(''V(<T](KT_MnMnMpMpqqq &++,XYYY $](C%S%S%S T T '')) -IIm,,,-.. 8!#y55dAS5TT 8 899Q>99

3$ 6777788 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 &++,RSSS L$?!L!L!LMM	##%% )IIi((()T** %>a$(I$?$?LY^L_$?$`$`$g$g$i$i $> $>?4466 #"%> %> %> %> %> %> %> %> %> 99Q>99$(IMM(TM$J$J	)+%.]]8R%@%@ ] ]E$V}0KKK!.'+y %d=AY^^5:;5G5K5KF5S5S7<[7I7M7Mk7Z7Z >L >\ >\k(:(: >BY^^UZ[aUb^=c=ck(:'/':'D 
!. 
!. 
!.'*|'?3'F'F(6(=(=e(D(D(D(,(>(F(F-`V_`fVg -` -`/2-` -` -`)* )* )* )1(-
!. $)99[#9#9 !]$($7$7k8J4=8Y8<8Y8Y8[8[%] %] %] %==22 J1? J J )( 3 : := I I I I

9 5 5 <====I$>%> %> %> %> %> %> %> %> %> %> %> %> %> %> %>P &++,TUUU!\-%@"J"J"JKK
$$&& .M*---  """"l=&A#L#L#LMM%%'' /M+...!!###[c!%!?!?LY]L^!?!_!_ V" V"?4466 #"FFF99Q>99.334Q%-4Q4QRRR(,	(O(OPUVZP[(\(\f26)2F2FuV}U]G^_cGd2e2efh/ -1I,Q,QRWX\R],^,^)9? D 3$2 5& 5&59Y5V5VW\]aWb5c5c5& 5& 5&6"-M .44]CCC2Cfh/#y Z .2Y-N-NuUY{-[-[N<@^ATATWXAX<Y<YE&M.9.:4.@l+$.$7$7E$K8H8H$I$I	!666*3*<*<[*I*I!/488 0A IIeQ///0 0 0 0 0 0 0 0 0 0 0 0 0 0 02"$V}0CCC $ 6 ; ;<d e e e.2i.C.CE$K.P.P #!K #!KF'+'@'@'B'B %/(.'-o'>%+'M'M(0$(O$E$E$J$E$E2=2F2Fs6RV<GXGX2Y2YK$/$5$5t$5$D$D$D7B7K7KK7X7X$4'7'>'>'@'@ %1(,(>(C(CDxTZ[aTbDxDxDx(y(y(y(0+/9? %_AFv~A^~(>79F8$4$(O$:$?$?@`PVW]P^@`@`$a$a$a151L1L(.t09{ 2M 2& 2& %P %P ,0?+D+D+F+F )3,2FFFFF38;2:38<6;Hoi6PQU6V7<Xy7QRW7X8=h	8RSY8Z8. 8.6* 6*
 FPx(8(B(B)-.>)E)E %K(,		&!(<(<(<(,(@(@(J(J(J%K %K %K %K %K %K %K %K %K %K %K %K %K %K %K  (2< & & & z5<<BfjmnojpjpBpBp  u{  B  CD  E  E  uE  uE $ 3 3CFF ; ; ; ; $ 9 9:xqv:x:x<FQZgm !: !o !o !o %	 !< ; ; ; ;
" O556tmr6t6t8BYci 6 k k k!mV"ncOOq(OOO--  /f  Xd  /f  /f0:Y[a . c c c c c ##$NOOO(,]0K-[-[-[(\(\%(//11 5II3444/66 <!#'9#K#KLY^L_#`#` < <?4466 #"< < < < < < < < < 99Q>99

7 3 3d :;;;;	<< < < < < < < < < < < < < < < ##$GHHH+/<3N0`0`0`+a+a(+2244 8II67772D99 >Q%)Y%E%ElSXFY%Z%Z > >	?4466 #"> > > > > > > > > %==00 w //	&0A$-0PRVRaRsRsRuRuvvv99Q>99

9 5 5 <====>> > > > > > > > > > > > > > > ##$JKKK$(I$C$CK$P$P!!%m)D&U&U&U!V!V.#.. R!II/15IQQQR R R R R R R R R R R R R R R *,
:&((D0(($$t$444),
:&L7EEE.1+.>.>]++M:FFF	)T** /aIIlA.../ / / / / / / / / / / / / / / &((2-&++  -LUa  -L  -L{}  -L  -L  -L  -L  M  M  M !L$?!G!G!GHH	! .%)%>%>|D?Q%R%RNK$++-- ..66KL K KVbcpVq K KQZK K\jK K K  
 *.( ..66K| K Kaj K K\jK K K   *.'(9:;KL G7&67H&I&&QOO--iZii iYhi i JVi i [fi i i #!-#) .     )1(9(=(=h>O>S(T(T(](]^n(o(o%$($=$=>OQX$Y$YM"#K*,,B!%!J!J$T*#1!. "K " "J
 " $#g,#g#g[e#g#g) j] j$(;;H- D (,C>,C,C C, E (,D],D,D D$(i_f(i(i(iiH++H555 BL,>AAA) I#H~#H#H#HHC( H#G}#G#G#GGC22- -(,	(I(I#VZ(I([([- - -) $t'7'7\'7'R'RR!.0025.33y<yyikyyyy  
 66|DDDD.33u,uuu  
 ' 74E[1!)T22 7a IIlA6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ;6
d1$;;{++ dO--R, R R R"\f .     O--.lcj.l.l.8<\b . d d dNOOOOOs+  Ag*3D$Ag*0IAg*I	Ag*I	D8Ag*!R;5B7Q-,R;-$RR;/Ag*;R?	?Ag*R?	DAg*BY-!Ag*-Y1	1Ag*4Y1	5IAg*A*e6Ag*e	Ag*	e	
A8Ag*Ap5Ag*!Ap5;Bk>=p5>m)Am$p5#m$$m))B?p5)Ag*5p9	9Ag*<p9	=C
Ag*>AI8	GAI8}7AI8}AI8
}AI8A'AF<6AI8:EAF<C=AI8DA*AF<E+6AF-	F!AF<F-AF1F1AF<F4AF1F5AF<F:AI8F<AI4GA<AIIAI8I'AI4I4AI8I7Ag*I83AJ-J+A5Ag*L =AN>MAg*M+AAN>N2Ag*N>AO	OAg*OAO	OA3Ag*P9=AT*Q6Ag*RBAT*TAg*T*AT.	T.Ag*T1AT.	T2AAg*VAV<V0Ag*V<AW 	W Ag*WAW 	WB'Ag*Y+AZZAg*ZAZ	ZAg*ZAZ	ZL	Ag*f$Agg Ag*gAg	gAg*gAg	gAg*g*A+Aic                    | j                                         }t          j        |          \  }}}||z  dz  }| j                             d| d           | j         j                            d           | j        j        r(| 	                                 | 
                                 | j         j                            d           |                                  |                                 | _        | j         j        j                            dd          r@| j         j                            d           |                     | j        j        d	           n&| j                             d
t&          j                   |                                  | j         j                            d           |                     | j        j        d           | j         j                            d           |                     | j        j        d           |                     | j        j        d           | j        j        r~| j         j                            d           |                     | j        j        d           | j         j                            d           |                     | j        j        d           | j                             d           |                     | j        j        d           |                     | j        j        d           | j                             d           |                     | j        j        d           |                     | j        j        d           | j                             d           |                     | j        j        d           | j                             d           |                     | j        j         d           dtB          j"        d <   d!| j         _#        | j         $                                 tK                       d"tB          j"        d <   | j         j                            d#           | &                                 d$S )%u_   
        Загружаем все данные из апи, кроме аттачей
        d   u   Свободно места: r  u$   Скачаем данные из APIu9   Дампим глобальные настройки Jirar0  Tu'   Дампим пользователейr  uA   Не дампим пользователей из-за опцийr1  u   Дампим статусыr;  u    Дампим типы задачr~  issue_security_schemesu*   Дампим бизнес процессыrK  u7   Дампим схемы бизнес процессовrb  u   Дампим экраныr&  r  u!   Дампим приоритетыr  r  u+   Дамп решений(резолюций)r  u   Дамп фильтровr  r   r     r  u   Дампим проектыN)'r4   rq   r}   
disk_usager5   re   r  rG   rV   r5  r9  rK  r\   r]   r   r   rY   r  r  rc   r  r  r  get_issue_typesget_issue_security_schemesget_workflowsget_all_workflow_schemesget_all_screensget_screen_schemeget_all_prioritiesget_priority_schemesget_all_resolutionsget_all_filtersr~   r  r  rI  r7   r'  )r"   download_pathr  usedfreefree_percents         r#   download_datazJiraAPIImport.download_data'  s    99;;"-m<<tTe|c)KLKKKLLL##$JKKK9? 	'   $$&&&##$_```'')))$($B$B$D$D!?(.22<FF 	|O"''(QRRRdi17;;;;O ckrkz{{{##$ABBB$)0*===##$FGGG$)3]CCC$)>@XYYY9? 	UO"''(TUUUdi5{CCCO"''(abbbdi@BSTTT7888$)3Y???$)5GGG?@@@$)6EEE$)8:LMMMIJJJ$)7GGG7888$)3Y??? "$
:#% !$
:##$ABBBr%   c                 :   dt           j        d<   t          j                            | j        j        g d          }|j        rHt          |j	        |j        z            dz  |_
        |                    d           t                       dt           j        d<   d S )	Nr   r  )r,  r  r  r   r   r)  Tr`  r  )r~   r  rW   	CmfImportrY   r4   r   r  r  r,  r  rI  r7   )r"   r4   s     r#   rI  zJiraAPIImport._calc_progress[  s    !#
:%))T_-?1k1k1k * m m
' 	"%j&FIe&e"f"fil"lJOOdO+++LLL!$
:r%   c                    ddl m} t          |d          d          } |            }d |d         D             }t          |d          5 }t                              |          }d d d            n# 1 swxY w Y   | j        j        j        j         d|d	          }t          j
                            |
          }	|	s"t          
                    |d| j                  }	|	j        r$|d         |	_        |	                    d           n#| j        j                            d|	 d           ddg}
g d}|
|z   }dg|
z   }t          j                            |	|          D ]|}|j        s1| j        j                            d|	 d|j        j         d           :|
D ]}t)          ||g            |D ]}t)          ||d           |                    d           }|d         D ]}	 d| j        j        j        j         d|d	          d}|                    |d                   r.t          j                            ||d                  d          }n#| j        j                            d|            ddd | d g}t          j                            ||!          }|sut          j                            ||	|"          }|s2| j                            d#| d$|	%           | xj        d&z  c_        |j        r|j         | |_        n||_        |j        s=|d'         d(         d)k    ri| j        j        j        j         d|d'         d)         d	          }t          j                            |
          }|j                            |           n|d'         d(         d*v r	d|_        n|d'         d(         d+k    r	d|_        n|d'         d(         d,k    r	d|_        n|d'         d(         d-k    rd|_        d|_         n|d'         d(         d.k    r	d|_!        ns|d'         d(         d/k    r| j"        j#        r=|d'                             d0          r!| $                    |d'         d0                   }n!| $                    |d'         d1                   }|r|j%                            |           n| j                            d2| d3|%           | xj        d&z  c_        |d'         d(         d4k    rV| j"        j#        r*d| j        j        j        j         d|d'         d0          d}n/d| j        j        j        j         d|d'         d4         d          d}t          j&                            ddd | d gdg!          }|s9|d'         d4         d         }t          j&                            dd5|gdg!          }|rY|j        s||_        n||j        vr|j         | |_        |                    d           |j%                            |           np| j                            d6| d7|%           | xj        d&z  c_        y| j                            d8|d'         d(          d9|%           | xj        d&z  c_        |                    d           #  | j                            d:| d;d<=           | xj        d&z  c_        Y xY wg d>d?gd@dAgdB}|'                                D ]\  }}	 t          j                            dCdD|gdEdD|	gg|!          }|D ]m}t          j                            dCdD|gdEdD|	gg|!          }|j        s3|D ]!}t)          ||tQ          ||                     "|                    d           n#  | j                            dF|	 dG| dH| dIdJdK=           | xj        d&z  c_        Y xY wtS                       |	S )LNr   r  rJ  r  c                 V    i | ]&}|                     d           |d          |d         'S )r  rM   r   r  s     r#   rd  z6JiraAPIImport._process_permissions.<locals>.<dictcomp>j  sE     
 
 
ww{##
c&k
 
 
r%   r  rU  r7  r   r>  Tr?  rh  r4   r   rB  u#   Схема прав доступа u@    была изменена и не будет обновленаaccess_project_roleaccess_members)access_local_useraccess_owneraccess_owner_assistantaccess_authoraccess_spectatorsaccess_executorsaccess_responsibleaccess_list_owneraccess_project_owneraccess_project_owner_assistantaccess_project_spectatorsaccess_project_executorsaccess_sdesk_clientaccess_anonymousaccess_guestaccess_sharelink_anonymousr   r  u&   В схеме прав доступа u+    было изменено правило 'u,   ', оно не будет обновленоFr  r  )rM   r  u4   Не нашли соответствия права r?  r  r  r  )project_permissionr:  r   u*   Не найдено правило для zERR-0059rT  r3   r  rW  projectRole)applicationRoleanyoneprojectLeadrR   r   sd.customer.portal.onlyr  r   r  u9   Не нашли пользователя для прав zERR-0060r(  r  u-   Не нашли группу для прав zERR-0061u'   Неизвестный тип прав zERR-0062u6   Не удалось загрузить правило zERR-0063CmfProjectPermPermissionr  )zPPP-RELEASE-EDITzPPP-OBJ-CREATEzPPP-OBJ-EDITzPPP-OBJ-DELETEzPPP-OBJ-TREEMOVEzPPP-OBJ-ORDERzPPP-TSK-ASSIGN-EXECUTORSzPPP-TSK-DEADLINEzPPP-TSK-ORDER)zPPP-PR-ADMINzPPP-TSK-ASSIGNzPPP-TSK-SCHEDULEzproject_permission.coderJ  r:  u   В схеме uR    не удалось скопировать разрешения из права 'u   ' в 'r`  zERR-0113CmfProjectPermSchemeRule)*r  r  r   rt   ru   rv   r4   rE  rF  rW   CmfProjectPermSchemerY   rh  r   rI  re   r  r[  r   rT  r  rZ  r;   r:   r?  r  rB  r   rD  rL  rJ  rE  rG  rP  rG   rV   rV  rC  r  r   getattrr7   ) r"   rp  r  r  r  map_permrz   perm_scheme_dictr?  perm_schemerule_list_access_fieldsrule_bool_access_fieldsrule_access_fieldsrule_fieldsscheme_rule
list_field
bool_fieldr  r  rK  r  r  r[  r(  r  copy_access_rulesfrom_rule_codeto_rules	from_ruleto_rule_codeto_rulerule_access_fields                                    r#   rE  z"JiraAPIImport._process_permissionsf  s
   ,,,,,,,}"=PPPQQhjj
 
"#<=
 
 

 /3'' 	,1#yy||	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,O*1=YYAQRVAWYY155V5DD 	w 55VUYfjfu5vvK& 	/7K....O"** Dk  D  D  D  
 "#
#
 #
 #
$ 57NNe55 ":?? @ 
 
 	/ 	/K . &..A[ A AALA_AdA A A  
 5 5 5
Z44445 8 8
Z7777.... *-8 U	% U	%IT%^do4;G^^9UY?^^^<<	, 788 !:>>HYWcMdDew{>||DDO*223ujs3u3uvvv#V]]]];$=AAYdAee" 
4"("A"E"EY]fq  {F"E  #G  #GK& !112j_h2j2j2<+ 2 O O O1, ") 40;0B-LF-L-L**-3*"2 X&v.-??%)_%;%B%N"|"|R[\dRefsRtuyRz"|"|K!044K4HHD3::4@@@@x(04QQQ48K11x(0MAA7;K44x(0J>>59K22x(0J>>/3K,04K--x(04MMM6:K33x(0F::y T$X.227;; T%)%5%5i6I'6R%S%SF!%!1!1)H2Ek2R!S!S !#299&AAAA112ynw2y2y2<+ 2 O O O1, x(0G;;y |!sdo&<&C&O!s!sS\]eSfgnSo!s!s!s!{do&<&C&O!{!{S\]eSfgnSopvSw!{!{!{"155hP]TZP]P]P]=^hpgq5rrE  s%.x%8%A&%I
 & 5 9 9&'S]A^hpgq 9 r r !$| E+1ELL#5<77.3l+DF+D+DEL

t
444#299%@@@@112mbk2m2m2<+ 2 O O O1, O--.uXabjXklrXs.u.u.8k . K K KOOq(OO  T 2222%))*ncl*n*n*4?Y * [ [ [1$
   + #!
 
" ):(?(?(A(A !	% !	%$NH %";??2CH!34 . @  	 %- 3 3L$=AA6\J%sK8   2 B  G #2 ! -?  )#-#I/@AA   
 LLTL2222!3"%))J[ J J(6J J>FJ J J7	 *    1$sS   A22A69A6-BZ8<B Z8>&Z8&GZ89E'Z8"<Z8 Z882[-B^//9_*c                    t          d          5  d}	 |                                }|dk    rn| j                                        rnt          j                            |g d          }t          |j                  }t          |j                  }t          |j	                  }t          |j
                                      d          }	t          |	          d	k    rd
|	d	          dnd}
d| d}|j        r|j        d         }|dz  }| d|dd}| j        j                            |
 d| d| d           	 | j                            ||t$          j                   | j        j                            |
 d| d| d           d|_        |                                 t-                       | j                            d           nT# t0          $ rG}t3                       | j                            |
 d| d| d| ddd|           |d	z  }Y d }~nd }~ww xY w|                    |           d d d            d S # 1 swxY w Y   d S )NFr  r   Tr  )r   r  rU  rQ  rv  r=  r7  r3   u   [Задача ID: z] r   r`  rq  i   r  r  z MB)u   Скачивание r_  r  u	   Файл u    сохранен в 're  u"   Ошибка скачивания r  zERR-0027rT  rx   )r  r  r  ext_href)r   rY   r4   r6   rW   rT  r-   r   r  rU  rQ  r   r   rv  re   r  rG   download_filer   IMPORT_DOWNLOAD_TIMEOUTrV  rI  r7   r  r8   r9   r;   r  )r"   download_queueerror_queuer  download_job_iddownload_objr{  file_urlry   ext_id_splittask_id_msg	file_sizefile_size_mbr\  s                 r#   _download_file_workerz#JiraAPIImport._download_file_worker:  s7   5111 ;	$ ;	$F6 "0"4"4"6"6"f,,?,,.. %7;;&    < 	  	    122	|011 122	"<#:;;AA$GGJMlJ[J[^_J_J_F<?FFFFeg,	,,,	/ G , <V DI#,#8L#, F F F F F FI&++{,j,jQZ,j,j_g,j,j,jkkk I++ ! & > ,   
 O*//&^^^^R[^^^   /3L+ %%'''LLLO,,\::::  	  	  	  NNNO--&jj)jjX`jjehjj#-!4#)!) .    aKFFFFFF	 [6 p OOF###w;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$s=   D2IBGI
H(!=H#I#H((IIIc                    | j         j                            d           | j                                        }| j                                        }d}| j                             dg           dd| j         j        j        j        gg dg dg}| j                                         	                    d          }d}g }| j
        D ]}|d	         }	|	                    |	          }
t          |
                              d
          st          |
          d
z   }
dd|
 dgg}t          j                            ||z             }|r||z  }|                    ||z              |s!| j         j                            d           |S | j         j                            d|            g }t#          | j                  D ]u}| j                            | j        d| ||d          }|                    |           |                                 | j         j                            d|            v|D ]A}t          j                            |dg          D ]}|                    |j                   Bt5                       |D ]}|                    d           |                                s|D ]}|                                 | j                                         r|S |                                s+||                                z  }|                                +| j         j                            d|            |S )Nu=   Скачиваем все найденные вложенияr   zplugin.plugin.source_hashrF  rJ  )rV  rJ  F)r   rS  r#  r  r   r  rU  r  r  r6  u3   Нет вложений для скачиванияu'   Скачивание вложений: _download_file_worker_)rs  rt  r  u    Запустили задачу r!  r  r  uC   Закончили скачивание файлов, ошибок )r4   re   r  r   r  r  rE  rF  rq   rr   rb   r-   r4  rW   rT  r  r   rk  r   r   r  r|  r  slistr  r   r7   r  r   r6   rY   )r"   rs  rt  r:   main_filterprojects_pathattachment_countr  r  r}  project_pathpath_filterdownload_countr  ru  r  r  rY  s                     r#   download_fileszJiraAPIImport.download_filesx  s   ##$cddd))++j&&((
##%@$ABBB C!7!>!JK&&&111	
 99;;DDZPP - 		: 		:G J(11*==L|$$--c22 7"<0036"F|,>,>,>?@K#5;;;Q\C\;]]N : N2 {[8999 	fO"''(]^^^O"''(dRb(d(deeet899 	U 	UA^**11a11&4#.  +  F NN6"""LLNNNO"''(S6(S(STTTT 	4 	4G & 8 > >gW[V\ > ] ] 4 4""<?33334 	' 	'Fv&&&&##%% 	!  ?$$&& 	##%% 	,+//+++J ##%% 	,##$vjt$v$vwwwr%   c           	      8   | j                                         rd S | j         j                            d|d          d|d          d           d }t	          |d          d          }t          |          5 }t                              |          }d d d            n# 1 swxY w Y   |rn| j         j        j        j	         d|d	          }t          j                            |
          }|s"t                              || j         d          }|j        r'|d         |_        |                    d          |_        ||_        |                    d           |d         D ]}|d          d|d	          d}| j         j        j        j	         d|d	          }	t          j                            |	
          }
|
s#t                              ||	| j         d          }
|
j        r|d         |
_        |                    d          |
_        t          j                            |
          D ]}|                    d           |                    dg           D ]}	 t                              |
          }|                    d          }|                    d          }|dk    r't          j                            d          |_        n5|dk    rv| j         j        j        j	         d| }t          j                            |
          }|r't          j                            |
          |_        nt3          d|           |dk    r't          j                            d          |_        n|dk    r't          j                            d          |_        n_|d k    r't          j                            d!          |_        n2|d"k    r|rd| j         j        j        j	         d| d}t          j                            d#d$d%| d%gd#g&          }|s;| j        j        r|d'         n|}t          j                            dd(|gd#g&          }|rG|j        s||_        n||j        vr|j         | |_        |                    d           ||_        n]t3          d)|           t          j                            d*          |_        n$|d+k    rr	 |                     |          }n$# t2          $ r}t3          | d,          d }~ww xY w|                     |d-d-.          \  }}|r||_        nt3          d/|           |d0v rj| j         j        j        j	         d| }t          j                             |
          }|rtC          |j                  g|_"        nPt3          d1|           |d2k    r&t          j                            d3          |_        nt3          d4|           |                    d           tG                       # t2          $ r>}| xj$        d5z  c_$        | j         %                    d6| d7| d8|9           Y d }~d }~ww xY w|
                    d           tG                       |                    d:          rVtM          |                    d:                    tM          |d	                   k    r|
|_'        |                    d           tG                       |S );NuV   Импортируем схему безопасности задач проекта "r   rr  r   rt  rJ  r  r7  r   r>  Tr  r   rB  r  r  r  r/  rf  r  rW  r   rV  zvar:current_userrL   rU  u0   Не найдена проектная роль rX  zvar:project_ownerr   z
var:authorrR   zvar:responsibler(  r?  r  r  r  r  r  u!   Не найдена группа Usersr  r  Fr  u+   Не найден пользователь )groupCustomFielduserCustomFieldu>   Не найдено пользовательское поле rY  zsdesk-client:defaultu-   Неизвестный тип правила r3   uF   Не удалось создать правило для уровня rS  zERR-0070rT  defaultSecurityLevelId)(r4   r6   re   r  r   rt   ru   rv   rE  rF  rW   CmfSecurityLevelSchemerY   rh  r   r   rv  rI  r  CmfSecurityLevelRuler   ro  r   access_memberr  r8   r  rG   rV   r?  r  r)  CmfCustFieldr-   access_task_fieldsr7   r:   r;   r  default_task_security_level)r"   rp  r2  r  rz   rl  scheme_ext_idrh   	level_msglevel_ext_idr  
level_ruler  member_typemember_valuer  r  r?  r(  r  r  r\  r[  r  cust_field_ext_id
cust_fields                             r#   rF  z&JiraAPIImport._process_security_levels  s   ?$$&& 	F## Wfrsyfz  W  W  AM  NS  AT  W  W  W	
 	
 	
 !%L7TTTUU	)__ 	 99Q<<D	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  C	#5<HXXDQUJXXM$*$A$E$E]$E$[$[!( (.(E(E(#$( )F ) )% %4 E-1&\%*-1XXm-D-D%*48!1!&&4&888h pA pA$V}>>d>>>	"&/"8"?"K\\uUY{\\!'!8!<!<L!<!Q!Q% %+%<%<!6+#'?(,	 &= & &N "1 ]*/-N'*/))M*B*BN'&,&A&F&Fn&F&]&] A A
"))4)@@@@"'))Ir":": V VU)/)D)DN)D)[)[J*0**V*<*<K+1::g+>+>L*.???;A;K;O;OUg;O;h;h
 8 8!,!=!=151G1N1Z.l.l^j.l.l'-'<'@'@'@'T'T#' !w?E?T?X?X`k?X?l?lJ$<$<*34ugs4u4u*v*v$v!,!=!=;A;K;O;OUh;O;i;i
 8 8!,
!:!:;A;K;O;OUa;O;b;b
 8 8!,
!:!:;A;K;O;OUf;O;g;g
 8 8!,!7!7#/ !g-o$/2H2O2[-o-o_k-o-o-oF,2,A,E,E08&-f---/P08z -F -& -&E ,1 %*LPIO5mVK5H5Ham
060E0I0I4:GZ3P4<: 1J 1* 1* (- 	%l/4| )U;AELL-35<-G-G>Cl;TF;T;TEL(-

t
(D(D(DCH
(@(@.78j\h8j8j.k.k(k @F?T?X?X^e?X?f?fJ$<$<!,!6!6!F040M0Ml0[0[II'0 !F !F !F*3s  5E  5E  5E  +F  +F  %F!F,0,@,@SXaf,@,g,g	#) !r?EJ$<$<*34pbn4p4p*q*q$q!,0W!W!W7;7M7T7`4r4rdp4r4r 1-3-@-D-DL]-D-^-^
#- !EEHEYEYDZJ$A$A*3  5D  vB  5D  5D  +E  +E  %E!,0I!I!I;A;P;T;TZp;T;q;q
 8 8&/0m`k0m0m&n&n n&OOO===&LLLL(    OOq0OO O55 {ir { {vy { { *$. 6         ###55588455 A#dhhG_>`>`:a:aehinositeueu:u:uHV)E)..4.@@@LLL$$sP   7BB"%B"#J	X0-TX0
T$TT$$D
X00
Y8:3Y33Y8r   c           	      t   |d         d                              dd          }|d| j        j        j        j                                         z  }|d         d|g g g g dd	d	d
}|d         }|d         d                             dd          d         }|dk    rd|d<   n|dk    rd|d<   n	|dk    rd|d<   n|dk    rd|d<   n|dv rd|d<   d |d         D             |d<   n|dv rd|d<   d |d         D             |d<   n|dk    rd |d<   |d         |d<   n|d!k    rd"|d<   i |d<   n|d#k    rd$|d<   n|d%k    rd%|d<   ns|d&k    rd'|d<   ng|d(k    rd)|d<   n[|d*v rd+|d<   nQ| j                            d,|d-          d.|d          d/|d         d          d0d1d23           | xj        dz  c_        d }|S )4Nr   r   customfieldcfr  r   T)r  rQ  r  r  F)r#  r   r  visible_filterrequiredrequiredChangedr   r   rP  r3   r  textarear   field_custom_type	textfieldr-   floatri  )r:  radiobuttons
choice_strc                 ,    i | ]}|d          |d         S r   r   r/   r  opts     r#   rd  z,JiraAPIImport._map_field.<locals>.<dictcomp>k  "    VVV#c$iWVVVr%   r  r  )multiselectmulticheckboxeschoice_multic                 ,    i | ]}|d          |d         S r  r/   r  s     r#   rd  z,JiraAPIImport._map_field.<locals>.<dictcomp>o  r  r%   r  r  cascadingselectchoice_cascade_multi
datepickerdaterT  rf  r  rg  r  )ri  rh  r  r  r   rr  u6   ) имеет неподдерживаемый тип 'r`  zERR-0064r  r  )r  r4   rE  rF  r  r   r;   r:   )r"   r   r  r?   r   rm  s         r#   
_map_fieldzJiraAPIImport._map_fieldR  s   ;'-55mTJJ
E$/07CEEKKMMM
.D
+-22_a"b"b!e= = +&	&x0:@@aHHL++'-C#$$;..',C#$$7**'.C#$$5((',C#$$#==='3C#$VV9AUVVVC	NN#EEE'5C#$VV9AUVVVC	NN8++'-C#$&y1C	NN#444'=C#$C	NN<//'-C#$$:--'1C#$$<//'-C#$$#444'.C#$$#FFF'/C#$$O%%hYv. h h9T? h hGPQYGZ[cGdh h h'	 &    OOq OOC
r%   c                    d | _         | j        D ]v}| j        t          j        j                 d         D ]Q}d|vr)| j                            dt          j	                     d S |d         d         |k    r| j        |         |d<   Rw| j        j
        j
        j        }t          j                            |dg          }|s#t                              d|d| j        	          }d
|_        |                                 t          j                            dd|          }| j        j        j                            dd          s!| j        j                            d           d S | j                            d           d t          j                                        D             }g }g }| j        t          j        j                 d         D ]}|                    d          r|d         d         s$| j                            d|d                     J|                     |          }	|d         d                             dd          }
|
d| j        j
        j
        j                                         z  }
|
|d<   |	s|	d         dv r|                    |           | j        j
        j
        j         d|d         d          }t          j                            |g d          }|s8t                              |d         |d         |	d         d|| j        d          }|
|v r||
         d         |j        j        k    rU| j                            d |d         d          d!|d         d          d"|j         d#||
         d          d$	d%d&'           | j                            d(|
 d)|d          d*           ||
         |d+<   n<| j                            d,|
 d)|d          d-           |                    |           |j        rt|d         |_        |	d         d.k    r|j        j        pi }tA          |j!        j                  ptA                      }|d         d/         D ]}|d0         si tA                      }|                    d1g           D ]G}tE          j#        |d2         d3d45          }|d2         |<   |d6         r|$                    |           Hfd7|D             }|%                    |           |%                                n|}||_        tM          |          |_!        |j'        rd|_(        |                    |           |                    d8           tS                       t          j*                            ||
||9          }|s2t          *                    ||
||9                              d8           tS                       |+                                 |rt          j        ,                    tZ          j-        .                                /                    d:          d
dd;           t          j        0                    d<d
i           d= t          j                                        D             }|D ]}||d                  |d+<   dDfd>	|D ]`}t          j        j1        |d+         d?                  }te          t                    |j3                 |d         d1         D ]} |           a| j        j        j        }|d@         D ]B}|d         t          j        j        k    r%| j        t          j        j                 d         |d<   C|| j        _        dAth          j5        dB<   d| j        j        _'        | j                                         tS                       dCth          j5        dB<   d S )ENr   r   uj   Текущая настройка не поддерживает импорт кастомных полейr   r   r  u8   Экран проектов Jira по умолчаниюTr   r?  rh  r4   r  _customr(  )r   rW  r:  import_custom_fieldsFuI   Отключен импорт пользовательских полейu8   Импорт пользовательских полейc                      i | ]}|d          |S r   r/   r  s     r#   rd  z8JiraAPIImport._process_custom_fields.<locals>.<dictcomp>      WWWaqWWWr%   r   u!   Поле не кастомное r   r  r  r  r   r  )r  r  r  r7  )widgetr  r#  disabled_choices)r#  r   r  dirtyr?  r4   rh  r  u,   Неудалось смапить поле 'rr  u   ): widget поля 'u7   ' не совпадает с существующим 'r`  zERR-0065r  r  u   Поле с именем r  u4   ) есть в таблице, мапим в негоr   u(   Создаем поле с именем u   ), и мапим в негоr  r  r]  r  r   r_      seplengthdisabledc                     h | ]}|v|	S r/   r/   )r  r   default_choicess     r#   	<setcomp>z7JiraAPIImport._process_custom_fields.<locals>.<setcomp>   s.     , , ,$'"/99  999r%   rB  )r  r   r:  ui_form_groupz%Y%m%d%H%M%S)meta_version
model_namerU  ri  c                      i | ]}|d          |S r  r/   r  s     r#   rd  z8JiraAPIImport._process_custom_fields.<locals>.<dictcomp>/  s    [[[!1\?A[[[r%   c                    t          | t                    rC                    |           }|s |           }|j        r|                                 d S d S t          | t
                    r                    | d                   }|s | d                   }|                     dd          |_        |r|j        |_        |j        r|                                 |                     dg           D ]} ||           d S d S )Nr  r   r  Frk  )	r   r-   rY   r  rI  r   
cmf_hiddenr   choice_parent_id)r_  
parent_optr   childchoice_modelcreate_options       r#   r  z;JiraAPIImport._process_custom_fields.<locals>.create_option3  s;   &#&& 0$((f(55 6(Lf555E# !JJLLLLL! !FD)) 
0$((fWo(>> ?(LfWo>>>E#)::j%#@#@  ;-7]E*# !JJLLL#ZZ
B77 0 0E!M%////
0 
00 0r%   r   r  r   r  r  r   )6rF   r{   r'  rW   r  r   r4   r5   rc   r  rE  rF  r+  rY   ri  rI  CmfUiFormGroupr   r   re   r  r   r  r  r  r   r  r  r;   rh  r#  r  r3  r  r   translit_stripr5  r  r   r  r  r7   CmfUiFormFieldinvalidate_cachecustom_fields_gen_metarT  r  r  custom_field_sync_update_modelsr   varsr   r~   r  )r"   ext_field_namer   r?  ui_view_formr  shop_fields
new_fields
m2m_fieldsui_fieldr   r  current_choicescurrent_disabled_choicesr  default_disabled_choicesr_  
option_keyr  ui_form_fieldfield_classr'  rZ  r  r  r  s                          @@@r#   _process_custom_fieldsz$JiraAPIImport._process_custom_fields  s0	   !". 	J 	JNv~'BCHM J J"e++O''  )U  W^  Wf  g  g  gFFF%d+~==)-)9.)IE+&J %,8'++63%+HH 	!++O $?	 ,  L '0#-11ywWc1dd,2667MuUU 	O"**[   FVWWWWW6>3T3T3V3VWWW

]6>#>?I i	) i	)E99[)) {1CH1M ##$Xg$X$XYYYu--H%d+33M4HHDC.5ACCIIKKKD E&M +,0```!!%(((.5A__U;EWX\E]__F,00KKK 1  J  	#00!'Nv&./B&C!#$( 1  
 {""t$X.*2C2IIIO--W!+.v6W W;@;Md;SW W,6,=W W 9DD8I(8SW W W #!/ .    ##  %M  %M  %Mg  %M  %M  %M  N  N  N'24'8m$$##  %Dt  %D  %DW\]dWe  %D  %D  %D  E  E  E!!%((() '%*7^
"/0L@@&0&8&>&D"O/2:3N3T/U/U/^Y\Y^Y^,#(#5i#@ D D&'89 %$*,36550&-kk)R&@&@ I IF)0)? &w$'')* * *J
 ;A/OJ7%j1 I 8 < <Z H H H, , , ,+:, , ,( )//0HIII'..???+C()8J&267G2H2HJ/( -'+J$%%e,,,D111 #155%#+	 6  M ! )%%)'"/	 &  
 $4$(((%%''' 	BN11$,$5$9$9$;$;$D$D^$T$T"+"    N::<Li;XYYY[[v~7X7X7Z7Z[[[K# B B'25='Am$$	0 	0 	0 	0 	0 	0 	0(   	& 	&E ./m0D\0RSK<<(9:L,Y7 & &f%%%%& ?06+, 	S 	SAyFN777"mFN,GHR((0%!#
:37%0!$
:r%   c                    i dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j	        d	t           j        j
        d
t           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        t           j        j        t           j        j        d}d t           j                                        D             }d}|d         }|d         }|dz  }| j        j        j        j         d| }| d}t           j                            |ddg          }	|	sOt           j                            |ddg          }	|	r*t           j                            dd|	g          }
|
rd }	nd!}|	sI| j        j                            d"| d#| d$           t                               d%|| j        d!&          }	|	j        rG||	_         ||	_        |                    dd'          |	_	        ||	_!        |	"                    d!(           n#| j        j        #                    d)|	 d*           |r=t           j$        %                    |	d!+          }|D ]}|&                    d!d!,           tO          |d-         d.          D ]\  }}|d         }|d         }|d/z  }| d| }t           j$                            |g d0d!1          }|sM| j        j                            d2|	 d3| d#| d$           t           $                    d4|	|| j        d!5          }|j(        r2| j        j        #                    d6|	 d7|j         d#| d8| d9	           n|j        s2| j        j        #                    d:|	 d;|j         d#| d8| d9	           n|j!        rL|j!        j)                            d<          r-|j*        |j!        d<         k    r||d<<   n|j!        d<         |d<<   n||d<<   |d<         |_*        ||_        ||_!        |"                    d!(           |d=         D ]V}|d         }|                    |          }|r|j+        }n|,                    d>          r|d         }|                    |          }|r|j+        }n|-                    d?d@          }|dA| j        j        j        j         .                                z  }||vr| j        j        j        j         d| }t           j/                            |dBdCg          }|st           j0                            dd|gdd|	ggdDgE          }|rA|j        s:| j        j        #                    d:|	 dF|j1         dG|j2        j         dH           ]|st           j0                            dd|gdd|	gg dIg dJgd!K          }|r-| j        j        #                    d:|	 dF|j1         dL           t           0                    ||	| j        d!M          }tg          |t           j/                  r||_4        ||_2        |j5        rG| j        j                            d2|	 dN|j1         d#| dO| dP	           |"                    d!(           X|	6                                 to                       |	S )Qu  
        Создает отдельный экран для перехода бизнес-процесса
        Экран перехода создается без вкладок и групп,
        в него добавляются только те вкладки, которые есть в Jira

        Args:
            screen_data (dict): сырые данные экрана

        Returns:
            CmfUiForm: объект экрана
        r   re  r  rR   r  r  r  r   rO   r   rW  r   r   rQ   r  r:  z	Epic Link)Sprintr  c                      i | ]}|d          |S r  r/   r  s     r#   rd  z<JiraAPIImport._process_transition_screen.<locals>.<dictcomp>  r  r%   Fr   r   u    [переход]r7  z::transitionr   r4   r  r  rJ  r6  NT   Создан экран 'rr  rt  r  )ri  r?  r4   rh  u   Экран переходаrB     Экран uv    был изменен пользователем. Новые данные из импорта не применены)r:  r  )rg  rU  tabsr3   rW  )r  ri  rv  r?  r   r     На экран $    добавлена вкладка 'tab)rW  r:  r?  r4   rh     C экрана D    пользователем была удалена вкладка 'r  uF   ). Новые данные из импорта не применены   На экране F    пользователем была изменена вкладка 'ri  r   r  r  r  r  r#  r  r  r      поле 'm   ' было изменено или уже добавлено пользователем во вкладку 'uF   '. Новые данные из импорта не примененыrb  r  r  uy   ' было удалено пользователем. Новые данные из импорта не примененыrm      добавлено поле 'u   ) во вкладку 'r`  )8rW   r  r   r  r  rP   r  r  r  r   rO   r   rX  r   r   rN   r  r*  r5  r%  r  r   r4   rE  rF  r+  rY   CmfUiFormSchemeRuler  re   r  rh  r?  rv  rI  r  r  r   ro  r%  r  r   ri  r  r  r  r  r  r  r#  r  r   r  r  r  r7   )r"   r1  task_field_mapr  purge_groupsr%  screen_namescreen_ext_idtransition_screen_ext_idui_formin_screen_schemeui_form_groupsr  r~  tab_datatab_idtab_nameri  
tab_ext_idr  jira_field_id
task_fieldr   jira_field_namer  r  s                             r#   r-  z(JiraAPIImport._process_transition_screenZ  s	   
0
 &.4
 8	

 2
 6>6
 &.3
 fn)
 6>.
 /
 &.3
 v~9
 v~.
 v~*
 2
  :!
" fn0#
& ,'
( n*"N=+
 
 
< XW6>3T3T3V3VWWW%	!&)**?18DSS	SS&3#A#A#A "&&+& ' 
 
  	( &**$\* +  G  (#)#=#B#B8UXZaJb#B#c#c # ("GG#'L 		O"''HKHHIHHH   &&(/? $	 '  G " 
	5GN&GL&??=:WXXGL&1G#LLTL****O"**Wg W W W  
  	H#277 $ 8  N "0 H H$$d$$GGGG(V)<a@@ M	9 M	9OE8d^F'HdlG4@@@@J"155!  
 !% 6  M ! 
&++jwjjT\jjagjjj   !' 5 5"%#$( !6 ! ! ( 5&..[g [ ['4'9[ [>D[ [HP[ [ [   
 #2 5&..[ [ ['4'9[ [>D[ [HP[ [ [    "1	2%5;??	JJ	2 %,0Mi0XXX.5++.;.KI.V++*1HY'(0(;%%-"08-""t"444&x0 S9 S9
 *4 0+//>>
 !+!6JJ"--n== &0&8O!/!3!3O!D!DJ! %/%:

%2%:%:=$%O%O
"&U$/*@*G*S&U&U&[&[&]&]]
%[88$/3/E/L/X,k,k\i,k,k)%+%8%<%<#4 ) 3$ &= & &
 "  & 5 9 9j1!30
 ( !: ! ! ! )F O*22_W _ _%/%7_ _ 1>0K0P_ _ _   $ >$*$9$=$=#S*5%sG4666666	  )- %> % %M % !.66c c c)3);c c c  
 !$*$9$9'&#'?(,	 %: % %M "*f.ABB >3=0.;+ + 9O*//<7 < <8B8J< <OY< <08< < <  
 "&&4&888gS9j 	  """r%   c                    d t           j                                        D             }|d         }|d         }| j        j        j        j         d| }t           j                            |ddg          }|sI| j        j        	                    d| d	| d
           t                               d|d| j                  }|j
        }|j        r>||_        |                    dd          |_        ||_        |                                 n#| j        j                            d| d           |r<t           j                            |d          }|D ]}	|	                    d           |r| j        j        sddddddddddddddiddddddddddd dd!	}
t           j                            |"          }|D ]w}|
                    |j                  }|rC|                    d#d$          |_        |                    d%d$          |_        |d         |_        |                    d&           xng }t           j                            d'd(|gg d)g d*gd+g,          }|D ]T}||v r|                    d           |j        |_        |                    d&           |                    |           Ud d d d d d-}| j        j        s|D ]}dd(|gd.d(|d/k    rd0nd1gd'd(|gg}|d2k    r|                    g d3           t           j                            |dd.g4          }|sst           j                            |d.g5          }|r&|d6         }d|_        |                    d&           n)| j        j                            d7| d8| d9| d:           |||<   t7                       t9          |d;                   }|d;         D ]}|d<k    r|d=         r
|d=         }n |d         }|d         }| d| }t           j                            |d.d>gd?          }|sM| j        j        	                    d@| dA| d	| d
           t                               d1||d| j        B          }|j        r2| j        j                            dC| dD|j         d	| dE| dF	           n]|j        s2| j        j                            d7| dG|j         d	| dE| dF	           n$||_        ||_        |                    d&           |dH         D ]}|d                             dI          s!                    dJdK          }|dL| j        j        j        j                                          z  }||vrjtC          tE          fdM| j#        t           j        j$                 dH                   d           }|s| j        j        j        j         d|dN         d          }t           j%                            |dOdPg          }t           j                            dQd(|gd'd(|ggdRg5          }|rA|j        s:| j        j                            d7| dS|j&         dT|j'        j         dU           e|st           j                            dQd(|gd'd(|gg dVg dWgdX          }|r-| j        j                            d7| dS|j&         dY           t                               |||| j        dZ          }|j(        d[v r|d\         p||_'        n |j(        d]v r|d^         p||_'        n||_'        |j)        rj|j'        j*        }|j'        j        }| j        j        	                    d@| d_|j&         d	| d`|d1k    rdandb dc| dd           |                    d&           |+                                 t7                       |S )eNc                      i | ]}|d          |S r  r/   r  s     r#   rd  z1JiraAPIImport._process_screen.<locals>.<dictcomp>U  r  r%   r   r   r7  r   r4   r  r  rr  rt  r  T)ri  r?  rh  r4   r   r   r  rj  waiting_for)r:  r   rf  rW  )r8  ri  i  i  i  ri  i  ip  )hiddenri  iX  i@  i(#  )	_main   Участники   Даты   Планu   Разработкаu
   Связи_addonr  _descrr/  r8  Fr		  rB  r:  rJ  )rh  rJ  T)r4   rJ  Nz-cmf_created_at)r   order_by)r	  r	  r
	  r	  r	  rW  r	  r(  r  r	  )r  rJ  click)r   r8  r   r  r   r  u6    не найдена системная группа 'u   '. Возможно она была удалена пользователем. Поля на экране могут отображаться некорректно. Создайте группу с названием 'u$   ' и повторите импортr  r3   r
	  r  r  r  r  )rW  r:  r?  rh  r4   r  r  r  uL   ). Изменения из импорта не будут примененыr  r   r  r  r  r  c                 R    |                      d          o| d         d         k    S )Nr   r   r   )r   r	  s    r#   r   z/JiraAPIImport._process_screen.<locals>.<lambda>;   s/    !IIk22 J %k 24 8M I r%   r   r#  r  r  zui_form_group.typer  r  uL   '. Изменения из импорта не будут примененыrb  r  r  u   ' было удалено пользователем. Изменения из импорта не будут применены)r  r   r:  r4   rh  )r  r  r  r  r	  )r  rT  r	  r  r  u   во вкладкуu   в группуr  r`  ),rW   r  r   r4   rE  rF  r+  rY   re   r  r  rh  r   r   rv  rI  r  r  r   ro  rG   rV   r  r8  r		  ri  r   r7   r   r  r  r  r  r   r   r'  r   r  r#  r  r  r  rW  r  ) r"   r$  r  r%  r  r  r  ui_form_is_newform_fields
form_fielddefault_groupsr  r  group_configcurrent_ui_form_fieldsui_form_fieldsr  r  r  r  num_tabsr  r 	  r	  r	  
jira_fieldr   r   r  r  
group_typer	  s                                   @r#   _process_screenzJiraAPIImport._process_screenT  s   WW6>3T3T3V3VWWW4L	Vn?18DSS	SS"&& & ' 
 
  		O"''HKHHIHHH   &&($ $?	 '  G !" 		&GL!::mR88GL&,G#LLNNNNO"**]g ] ] ]  
  	9 /44" 5  K * 9 9
!!4!8888 I	=$)/ I	= ## 
 ##' '
 ## 
 ## 
 t) ## 
 ## 
 ## 
 ## A$ $NJ $277w7GGN!/ 5 5-11-2DEE D+7+;+;He+L+LM(+7+;+;He+L+LM(,8,CM)""t"44445 &("#277sG,222---
 ,, 8  N "0 = = $:::!(($(???+2+=(""t"444&--m<<<< #'  
 
 y  	;, ; ;
S*-SZ8-C-C''PsG,
 ++NN#;#;#;<<< & 5 9 9""8 !: ! !
 %  $277& &x 8  F  
(.q	/3,%**t*<<<<.66E E Epz E E U_E E E   .;z**vf~&&&> Z	9 Z	9C1}}!8} !/w 7Tv; -9999
 & 5 9 9%% %) !: ! ! % 
O*//n7nnX`nneknnn   %+$9$9"&)(,#'? %: % %M !, 9O*22e' e e+8+=e eBHe eLTe e e   
 '6 	9O*22eW e e+8+=e eBHe eLTe e e    *2M&47M1!&&4&888!(m j9 j9
 *4 0$//?? $,,]DAAGDO29EGGMMOOO{**    fn&AB8L  	 	  '+'='D'P$n$nTYZeTfgkTl$n$n!#044,!+ 5  
 !' 5 9 9%sJ7!30
 - !: ! ! ! )F O*22eW e e%/%7e e 1>0K0Pe e e   $ $*$9$=$=)3
;%sG4666666	  )- %> % %M % !.66i i i)3);i i i  
 !$*$9$9#-!&#'?(, %: % %M / 4   3AAU2V2gZgM//1 6   3A2L2]P]M// 3@M/ + 9!.!<!AJ!.!<!AJO*//p7 p p8B8Jp pOSp p4>%4G4G00M^p pblp p p  
 "&&4&888Uj9X 	  """r%   u,   Обработка схемы экрановc           
      \   |                     d          r|d         }|d         }| j        j        j        j         d| }t          j                             |dg          }|s"t                              || j        d          }|j        rHd |                     d	          D             }|j        s7t          j	        
                    |
          D ]}|                                 |d         |_        |                    d           |d         D ]}|d         }	d }
|	dk    re| j        j        j        j         d|	 }t          j                             ddd| dg          }
|
s!| j                            d|	 dd           x|d                                         D ]*\  }}|                     |          }|s$| j                            d| d| dd           A	 |                     |          }n*#  | j                            d| d| dd           Y xY wddd d!dd d!d"}| j                                        r  d S ||d#|                     |d          | j        d$}t	          j	        j         d+i |d%d&gi}|st	          j	        d+i |}|
r|j                            |
           |                    d           ,nD| j        j        j        j         d|d          }t          j                             |dg          }|sJt                              |d'          d(|d          || j        d)          }|                    d           t          j                             | j        j        j        j        dg          }|j        rxt          j	                             |dg          }|s"t          	                    |d| j        *          }|j        r+||_        ||_        d#|_        |                    d           t3                       |S ),Nr  r   r7  r   r  Tr  c                      i | ]}|d          |S r   r/   )r  rZ  s     r#   rd  z8JiraAPIImport._process_screen_scheme.<locals>.<dictcomp>   s    JJJ1T71JJJr%   r&  )r0  r   rB  r~  r  rO  r?  r  r  r  r6  ;   Не удалось найти логический тип rY  CmfUiFormSchemer  r  u8   Не удалось найти в дампе экран u    для zERR-0069u:   Не удалось импортировать экран zERR-0068r  r  rx  )rO  r  r  r  r  r  r  r  )r0  r  ri  crud_choicer4   r   logic_typesr   u+   : Схема экранов проекта r   rA  r/   )rY   r4   rE  rF  rW   r!	  rh  r  r  r  r   ro  r   rI  rx  r;   r   r	  r6   r#	  r   r+  r0  r  ri  r7   )r"   rp  screen_scheme_datascreen_scheme_idr?  r0  r&  r  issue_type_datar  rN   r  r  r%  r$  r  action_mappingr  r  s                      r#   rD  z$JiraAPIImport._process_screen_scheme   s+   011 r	0!-.B!C1$7.5AWWEUWWF#377vse7TTN! !'!7!7!#$( "8 " " - H4JJd.>.>y.I.IJJJ%, & & : ? ?~ ? ^ ^ & &&8&@####555'9-'H >4 >4O$3M$BM!%J$	11/3/E/L/X,k,k\i,k,k)%+%8%<%<XvWs]nWsWsWsDt%<%u%u
) % O55 m^k m m *): 6   
 %-<Y-G-M-M-O-O /4 /4)	!(Y!7!7% % O55 v[d v vnt v v *): 6   
 %%&*&:&:6&B&BGG% O55 x]f x xpv x x *): 6   
 %H (1&.$,$*,4*2.4* *  ?4466 #"FFF /=&-.7+9+=+=fi+P+P*./% %	  &9=bb	bbS`Rabbb# K#)#=#J#J	#J#JD% @ ,33J???		d	3333_/4b .5AYY\RVEWYYF#377vse7TTN! 6!'!7!7(/rr\hio\prr!#$(	 "8 " " ###555!+//t7M7T7`jmin/ooL- 0155VSE5RR !55%(,#'? 6  D
 ' 0*8D'".DK*3D'II$I///s   ,H%H)c                 
   i }t                      }|                    d          s|S d t          j                                        D             }|d                                         D ]Z}|d                             d          s|d                             dd          }|d| j        j	        j	        j
                                         z  }||vrn| j        t          j        j                 d         D ]}|                    d	          s|d         |d	         d         k    r|d
                                         D ]~\  }}	|	                    d          s|                                }
|	|
d
<   |                    |i           }|
||
d         <   |	d         r!|                    di           }|
||
d         <   ʐ\|                                D ]{\  }}d}| j        j	        j	        j
         d|d          }|d          d|d          }|dk    r~d| j        j	        j	        j
         d| d}t          j                            ddd| dg          }|s!| j                            d| dd           |d| z  }|d|d          z  }n|dz  }t          j                            |dg          }|s9t                              ||d| j                  }|                    d            |                    ||f           |                                D ],\  }}
|
d
         }	| j        j	        j	        j
         d| }t          j                            |g d!          }t          j                            ||"          }|s"t                              ||| j        #          }|	                    d$d%          |_        |	                    d&d%           |_        |j        d'k    r|j        j        pi }t          |j        j                  pt                      }i }t                      }|	                    d(i                                           D ]`}t=          j        |d)         d*d+,          }|d)         ||<   |d-         r|                    |           ||vr|                    |           a|                     |           ||_        tC          |          |_        ||_        tC          |          |_        |                                 |j"        r|                    d            tG                       .}|S ).u1    Импорт конфигураций полейr  c                      i | ]}|d          |S r  r/   r  s     r#   rd  z5JiraAPIImport._process_field_conf.<locals>.<dictcomp>"!  r  r%   r   r  r  r  r  r   r   r  r  r  Nr7  r   5   : Конфигурация полей проекта r   r?  r  r  r6  r 	  rY  CmfCustFieldConfSchemer  u    для типа     по умолчаниюr   r  Tr  rB  )r  r  r  )r  r:  )r  r:  r4   r  Fr   r  r  r   r_  r  r  r  )$r3  rY   rW   r  r   r   r  r  r4   rE  rF  r  r'  r   r   r<  rk  rx  r;   r  rI  r5  r  r  r  visibler  r  r   r  r   r  r  r   r  r7   )r"   rp  logic_type_fieldslogic_type_field_confr  r  r   r	  r  r  r   r   rN   r  r   r  r  field_idfield_ext_idr  r  r  r  r  r  r_  r  s                              r#   _process_field_confz!JiraAPIImport._process_field_conf!  s     #.. 	)((WW6>3T3T3V3VWWW '}5<<>> 	8 	8Jd#..~>> #D)11-FFJIdo4;GIIOOQQQJ,,"mFN,GHR 8 8
!~~k22 d#z+'>t'DDD2<Y2G2M2M2O2O 8 8.w&{{400 %$ * 1 1+2i(!2!=!=mR!P!P.3uT{+"#34 8%6%A%A%%L%LF27F5;/%8* &7%<%<%>%> \	 \	!M6J(,(>(E(Q%i%iUabfUg%i%i""5)vv`lms`tvvD%%$g)?)F)R$g$gVc$g$g$g!#044XvOgSdOgOgOg<h4ii
! O--eVcee"!9 .   
 &*>}*>*>>&@Jv,>@@@22$599AWad`e9ffO" 7"("9"91$(#	 #: # #  $$$666!%%z?&CDDD $*<<>> 9 9%	*"&/"8"?"KYYxYY#044'   5  
 )/(D(H(HT^gv(H(w(w%, ,2,H,H#-.#'? -I - -)
 29\51Q1Q%.4;KK
E4R4R0R%-/<??&0&8&>&D"O/2:3N3T/U/U/^Y\Y^Y^, G'*uu$")++i"<"<"C"C"E"E E E%,%;"7O ##%& & &

 /5Wo
+!*- =,00<<< &_<<488DDD $**73334;)1=ABR=S=S):)8J&267O2P2PJ/%**,,,( 6OOO555s9v %$r%   uA   Обработка схемы конфигурации полейc                 D   | j         j        j        j         d|d          }t          j                            |dg          }|sJt                              |d          d|d          || j         d	          }|                    d
           t          j                            |dg          }|sKt                              |d          d|d          d|d| j                   }|                    d
           |                     |          }|	                    d |f           |j
        rt          j                            |          D ]}|                    d           t                      }|D ]Z\  }}	|	                    |	           ||	|r|gng d| j         d}
|sd|
d<   t          j        di |
}|                    d
           [|D ],}	|	                                 |	                    d
           -|                                 || _        |S )Nr7  r   r   r  r   u@   : Схема конфигурации полей проекта r   Tr   rB  r*	  r,	  r  r/  rf  )r:  r  r#	  rh  r4   r3   ri  r/   )r4   rE  rF  rW   r+	  rY   rI  r  r2	  r5  rh  CmfCustFieldConfSchemeRuler   ro  r3  
calc_cacher  r3  )r"   rp  r?  r3  r  r/	  r  field_confsrN   
field_confr  s              r#   rG  z(JiraAPIImport._process_field_conf_scheme!  s   O*1=UUdASUU!'!>!B!B&Z]Y^!B!_!_% 	:%+%B%B$U+  D  Dmy  {A  nB  D  D? $	 &C & &" #''D'999 155VSE5RR 	3$55$U+  Q  Qbnoubv  Q  Q  Q $?	 6  O   T 222 $ 8 8 F F!!4"9:::!1 	29>>F\>]] 3 3T2222%%K*? , ,&
J
+++4'13=#EJ<<2'+"&/ 	 " -+,Ii(8EE9EE		d	++++) 2 2
%%'''D1111//111&<#%%r%   c                 n   |                                   | xj        |                                 z  c_        | j                                         |                                  |                                  |                                  |                                  |                                  |                                  |                                  | 	                                 |                                  | 
                                 |                                  |                                  | j        j        rP|                                  |                                  |                                  |                                  |                                  |                     | j        j        j                            dd                     |                     | j        j        j                            dd                     |                                  |                                  | j        j        j                            dd          r(| xj        | j                                        z  c_        n| j        j                            d           | j                                        rd S d| j        _        | j                                         t=                       | j                            d           |                                  D ]}|d	         d
 | j!        D             vr| j        j        "                    d|d          d           tF          j$        sR	 d| j        j%        j%        j&         d|d	          d}| j        '                    || j        j                   # tP          $ r,}| j        j        )                    d|            Y d }~d }~ww xY w| j                            d| j        j*                    | j         S )Nprocess_task_linksT)r  import_filtersprocess_linksu2   Отключена обработка ссылокr)  rw  r   c                     g | ]
}|d          S r   r/   r  s     r#   r  z0JiraAPIImport.process_import.<locals>.<listcomp>"  s    $Q$Q$Q3SY$Q$Q$Qr%   u'   Импортирован проект 'r   r`  r7  )re   uC   Не удалось создать отчет по проекту. u-   Импортировано объектов: )+r;  r:   r  rG   r=  rI  r.  r9  rD  r  r  r  rV   r  r  r  rT  r4   r   r   rY   r  r  r  process_cross_linksre   r  r6   r  rI  r7   r5   r  rb   r  r   IMPORT_COLLECT_STATSrE  rF  project_statsr8   r|  r,  )r"   r  r  r\  s       r#   process_importzJiraAPIImport.process_import!  s!   4..000	     """##%%%!!###9? 	"""$$$!!!))+++!!!   4:>>?SUYZZ 	  	
 	
 	
 	4:>>?OQUVV 	 	
 	
 	
 	$$&&&?(.22?DII 	aOOtBBDDDOOOO"**+_```?$$&& 	F#& H%%%))++ 	z 	zGt}$Q$Q$:P$Q$Q$QQQO"''(dRYZ`Ra(d(d(deee. z!ddo&<&C&O!d!dSZ[_S`!d!d!d--nT_E[-\\\\ z z z&,,-xsv-x-xyyyyyyyyzsDOLqssttt?""s   A	O
P"P  P)T)r.  r/  )TTNr  )re  rW  )NFr   )r   rW  F)Nr  r  )r)   r*   r+   r,   r  r.   r   r-   r   r   rT   propertyr{   r   rj   r   r   staticmethodr  r	   r
   r   ri   r   r   r   r   r   r  r*  r-  rN  rC   r]  r  r  r  r   r  r)  r.  r9  rD  rW   rt  r  rm  r  r  r2  r  r  r  r  r  r  r   r  r  r  r  r+  rU  rd  rv  r  rL  r  r  r  rM  rN  r8  rV  r   rC  rH  rZ  rf  rm  ry  r  r  r  r  r  r  r  r  r  r  r  r%  rT  rK  rJ  r  r  r  r  r  r  rH  r  r  r  r  r  rl  rj  rf  r  r  r#  rk  ra  r  r  r  r  r  r!  r  rt  rR  r  rU  r\   r5  r9  rG  rK  r[  rc  r8  r   rp  r  r  r  r  r  r'  r;  rI  rE  r|  r  rF  r  r  r-  r	  rD  r2	  rG  r@	  __classcell__)rm   s   @r#   rE   rE   B   sb        EEOOOT	?"""
W 
$ 
 
 
 
 
 
B "T#t)_ " " " X". . .
2 
2 
2  
   'y 'c 'htDz>R ' ' ' \'A A A Dc3h,@        D   \     \ E E E" ! ! ! \!F<tDz < < < <|d    
DJ 
4 
 
 
 
 =E (   2 _OPP* * QP*" _:;;U U <;Un _YZZT3 T T T T [ZTlw w w& _:;;5X 5XY 5X 5X 5X <;5Xnr" r" r" r"h _455!Q !Q 65!QF _DEEc c FEc6 _:;;7 7 <;7<LHZ L L L L\5 5 5nT T T TlY Y Y Yv: : :xc c cJ  *
' 
' 
' _455  65> _@AA/= /= BA/=b _LMM7 7 NM7> _455~
 ~
4 ~
 ~
 ~
 65~
@9 9 9vu
 u
 u
n _GHHQ Q IHQ _233,2 ,2 43,2\Xt X4 X X X Xt  0 "4 4 4 4l+ + +@e_ e_ e_N _:;;,M ,M <;,M\E E EN _RSS  TS. _455DG DG 65DGL _:;;sJ sJ <;sJj9 9 9' ' ' 'RT    V V V V V* _CDD/$ / / / ED/4@ @ @&   _OPP6B4 6B 6B 6B QP6Bp{) {) {)z _GHHC C IHC: : :60 0 0   8M< M< M<^ _EFF<J <J GF<J| _tuu%, %, vu%,N(! (! (!T+ + +, _677i i i 87iV _=>>' ' ?>' _JKKH
 H
T H
 H
 H
 LKH
T _@AAd4 d4 d4 d4 BAd4L _677[2 [2 87[2z _ABB;| ;| CB;|z _677  87 _IJJQ7 Q7 KJQ7f _IJJZ7 Z7 KJZ7x _788`7 `7 98`7DV V V< < < <@H# H H H H8 _.//n3 n n n 0/n"    ' ' '"$ $ $
     & & && & && & &# # ## # #& & && & &" " ""   8! ! !F  8: : :x5 5 5n[D [ [ [ [& & & & &     4        
         
  ( ( (2 2 2.-B -B -B^/ / / _FGGA Ad A4 A A A HGAF2 2 2892 92 92v88 8 8 8 8b0 b0 b0HF F F F FP* * * *:        D    # eh    \vP vP vPp2 2 2h	% 	% 	%R R Rh<$ <$ <$|D D DLR% R% R%h? ? ? ? ?BE% E% E%Nx x xtJ J JX
 _CDDv v EDvpH% H% H%T _XYY2& 2& ZY2&h8# 8# 8# 8# 8# 8# 8#r%   rE   )6cmf.appr   cmf.includecmf.utilr   r   dataclassesrg  r  rT  r  r  r  r  pathlibr   r}   r  typingr   r	   r
   r   r   r   r   bs4r   	itertoolsr   textwrapr   r   unicodedatar   
cmf.modelsr   %common.models.cmf_plugin_import_mixinr   modules.jira.apir   modules.jira.base_importr   modules.jira.jql.parserr   rW   r  r   r  r  	dataclassr   rC   rE   r/   r%   r#   <module>rT	     sB             ) ) ) ) ) ) ) )          				             H H H H H H H H H H H H H H H H H H       " " " " " " # # # # # # # # ! ! ! ! ! !             F F F F F F $ $ $ $ $ $ 3 3 3 3 3 3 1 1 1 1 1 1$v~&V-=(>VEV@WWX	 
% 
% 
% 
% 
% 
% 
% 
%  *NG# NG# NG# NG# NG#N NG# NG# NG# NG# NG#r%   