
    ri                       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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j.                    Z/eee0j1                 ee0j2                 ee0j3                 f         Z4ej5         G d d                      Z6d Z7 G d de+          Z8d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                    	 t          t          d          rd dt          j         d }nd d }| j                            |           | j                                        rdS  | g|R i |}t                       |S # t          $ rg t                       | xj	        dz  c_	        d }t          t          d          rt          j         d| }| j        
                    |           Y dS w xY w)Ntask_msgz
========== r      u   Ошибка )hasattr
thread_ctxr3   
cmf_importlog	is_cancel
cmf_commit	Exceptioncmf_rollback
has_errors	log_error)objargskwargslog_msgres	error_msgfuncr   s         r#   wrapperz3catch_exception.<locals>.decorator.<locals>.wrapper2   s2   :z22 3!)HHJ,?HH$HHGG!)22D22G""7+++>++-- 1d3000000
   !#2D22	:z22 E#-#6 D D D DI((333qqs   A$B )B A-C65C6r/   )rF   rG   r   s   ` r#   	decoratorz"catch_exception.<locals>.decorator1   s)    	 	 	 	 	 	* r%   r/   )r   rH   s   ` r#   catch_exceptionrI   0   s$        0 r%   c            
       j
    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             ZEdU ZF e dV          dW             ZG e dX          dY             ZHdZ ZIdd\ZJd]eKfd^ZLd]eKfd_ZM e d`          daefdb            ZNdc ZOdd ZP e de          daefdf            ZQdg ZR e dh          di             ZSdj ZTdk ZUdl ZVdm ZW e dn          do             ZX e dp          dq             ZYdr ZZds Z[ e dt          ddu            Z\ e dv          dw             Z] e dx          dd?e8fdy            Z^ e dz          dHefd{            Z_ e d|          d}             Z` e d~          d             Za e d          d             Zb e d          d             Zc e d          d             Zd e d          d             Zed ZfddZgdefdZh e d          defd            ZidefdZjd Zkd Zld Zmd Znd Zod Zpd Zqd Zrd Zsd Ztd ZuddZvd Zwd Zxd Zyd ZzdaefdZ{daefdZ|daefdZ}daefdZ~daefdZd Zd Zd Zd Zd Z e d          dedeKdae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Ą Zdń ZdefdǄZdȄ ZdɄ Zdʄ Z e d˦          d̄             Zd̈́ Z e dΦ          dτ             ZdЄ Zdф Zd҄ Z e dӦ          dded?e8f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)	issuetyperU   assignee)super__init__rM   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	getLoggerr8   loggerhandlerssetLevellevel_prepare_multiprocessing_set_fallback_personrL   update_fields_board_card_colors_mapping)r"   rM   rA   rB   rk   	__class__s        r#   rZ   zJiraAPIImport.__init__Q   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)rL   r8   get_download_pathjoinpathexistsrq   openjsonloadrM   
get_fieldsdump)r"   	file_pathfs      r#   jira_fieldszJiraAPIImport.jira_fieldsr   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   ru   zfields.json.rv   )shutilrL   r8   rw   rx   osgetpidrz   r{   r~   move)r"   fieldsr   r   file_path_tmpr   s         r#   update_jira_fieldsz JiraAPIImport.update_jira_fields   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)r8   json_settingsvaluer_   bool_is_default_userr]   	CmfPerson_fallback_persongsystem_user)r"   r   s     r#   rp   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r_   )r   
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   rD   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_forksr8   get_max_processesmax_processes)r"   r   r   s      r#   ro   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_ownerrV   rU   status
alarm_datedeadlinecmf_modified_atcmf_created_atstatus_closed_at
resolution)summarydescriptionreporterrX   rU   r   customfield_10015duedateupdatedcreatedresolutiondater   z.namez.watchCountz.votes)rU   watchesvoteszfields. N)model_field	json_path	ext_field)r   itemsr_   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   .r5   r   r   )splitlenr   r_   )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dictr_   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   rN   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>>  s    BBBSSBBBr%   r5   limitr   c                     g | ]}|S r/   r/   r  s     r#   r  z7JiraAPIImport.tmplt_import_settings.<locals>.<listcomp>B  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   	TypeModelr8   load_fieldsrw   rx   ry   _get_projectsget_project_tasks_simple_getrM   
get_issues	get_usersr  r<   rq   r   r]   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_settingsr8   r   rM   r  	enumerater]   r  r  r   _normalize_jira_valuer   )r"   settingsr   issuenumr  r   s          r#   previewzJiraAPIImport.preview^  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,  r_   )r"   r@   r-  normalized_objr  r   s         r#   _normalize_objzJiraAPIImport._normalize_objm  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_typer8  archiver:  r   ::r   r   	startDateendDate)r   parenttree_parent	list_typeplan_start_dateplan_end_dateext_idrE  
filter_objTsave_import)r   r_   r   r]   	CmfFolderr8   pluginsource_hashr   process_any_table_fieldsCmfListr   save)
r"   r@  r4  parent_sys_typerB  _filterrA  rE  list_objnews
             r#   _process_listzJiraAPIImport._process_listy  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   "rP   T)r@   raise_on_erroruC   Не удалось найти наблюдателя задачи . zERR-0135r@   N)	_get_issue_watchersrM   r\   _get_personr   r<   r8   r?   
spectators)	r"   	issue_objr.  r@   r]  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i g }|d         d         D ]J}t          |d	                   }||<   |                     j        j        j        j         d
|            K|rDt
          j                            ddgdd|gg dg          }|D ]}|                                  fd}	 	                    |          D ]8}
| |	|
d         |
d                   z  } j        
                    dd           9|S )Nr   u   Вложения задачи r   : 'r   r   '
attachmentr   r=  r@  =rE  NOT INr8   !=Nr<  c                 "   d}g d}d }	                      |           }|r|d         nd}|r|d         n| }|r<j        j        j        j         d| }t          j                             ||          }|s.dd	|gd
d	gg dg}	t          j                             |	|          }|st          j                            |          \  }
}d}t          j        	                    |dg          r1|
 d| | }|dz  }t          j        	                    |dg          1t                              |j        d          }|
                    d           |j        r|r||_        nd|_        j        |_        |rb|                     d          r9                    |d         j                           |_        |j        |_        |d         |_        ||_        t-          |d          5 }|                    |                                dd           d d d            n# 1 swxY w Y   d|_        |
                    d           |r|d         }|j        |k    sJ t5                       n# t6          $ rB t5                       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   )import_originalurlurl_preview_imgurl_previewr   r   filenamer=  rE  r   r   rh  r@  rE  rh  Nr   r   r5   --r   r@  r   -Tr   r@  r8   rm  rH  r   rZ  r   rbF)smart_backup
mark_dirtysizeu   Размер файла '' (u@   ) не соответствует размеру из меты: z	 bytes / z bytesERR-0034u;   Не удалось обработать вложение ')zERR-0035)r_   r8   rK  rL  r]   CmfAttachmentr   pathsplitextsgetrO  rm  rE  embeddedr@  r   r\  r[   r   r   r   import_raw_jsonrz   upload_filereadst_sizer;   AssertionErrorr?   r<   r=   )	file_namer   errorattachment_fieldsrg  attachment_metaattachment_idattachment_nameattachment_ext_idattachment_filter	base_nameextcounterr   attachment_sizeattachment_metas	issue_msgr^  r"   s                  r#   _process_attachmentz?JiraAPIImport._process_attachments.<locals>._process_attachment  s    E! ! ! J["2"6"6y"A"A9H P 5 5bAP"_/*"="=V_  +/?+A+H+T(g(gXe(g(g%!'!5!9!900 ": " "J
 " 	o6!3	2---)%
 "(!5!9!900 ": " "J " 6 &(W%5%5o%F%FNIsG .33,( $v 4   %
 .7*G*G*G#*G*G1 !.33,( $v 4   % "(!5!5,(#'?(,	 "6 " "J OOO555- E
 % 3,=
)).2
+)2)9J&& E*..x88 I484D4D / 9$- H$- 5E 5 5J1 4>3HJ04CI4N
15D
2i.. !"..FFHH)-', /                  26J.OOO555& E*9&*A)1_DDDD!   ))j j jM j j5?5Gj jRaj j j!	 *       ))vRavvfsvvv! *   
  us\   G'I7 2+H)I7 )H--I7 0H-1AI7 6L 7A	L L =L?L LL Lr  r   	processed)r-   r   r8   rK  rL  r]   r  r   delete_get_issue_attachmentsinc_stat)r"   r^  
jira_issueerrorsattachment_ext_idsatt_dataatt_idattachments_to_deleterg  r  attachment_datar  r  s   ``         @@r#   _process_attachmentsz"JiraAPIImport._process_attachments  s   mZ5Fmm:V^K_`iKjmmm	"8,\: 	` 	`H$((F'/V$%%)?)F)R&^&^V\&^&^____ 
	$$*$8$=$=sI.x);<... %> % %! 4 $ $
!!####h	 h	 h	 h	 h	 h	 h	 h	T  $:::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_qsr  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.parserr5   uR   Ошибка конвертации упоминания пользователя : zERR-0036rZ  N)urllib.parser  r  
class_namefind_allr  r_   r\  query_get_user_info_from_dumplowerr[   r<   r   formatr-   r   loginr  r   replace_with
currentTagr>   r8   r?   )r"   r  r@   r  r  TMPLtagra  
parsed_urlr  	user_infonew_tages                r#   _process_mentionszJiraAPIImport._process_mentions0  sn    	43333333>_,,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redisr_   r8   r   pickleloadsr  r[   r  r<   )r"   r`  redis_dbr  s       r#   r  z&JiraAPIImport._get_user_info_from_dump  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                 H   |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         }dd|gdd|gg}t          j        dt          j                            |                              d          d                   }|ra|d         |d         d         }	t!          t#          fd|	          d           }
|
r(|
d         }| j        j        j        j         d }dd|g}t(          j                            |dg          }|r|                    d	          r|j        d	         |j        d<   |j        |j        d	<   d|j        d<   t1          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                    0d$|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>  s$    #,,v2F2F2]#,,W\J]J] r%   cmf_convertedu   Уже обработали r  #u   Это якорь u&   Обрабатываем ссылку r  /?r   r   rh  r@  (/attachment(?:/content)?/(\d+)(?:/)?(.*)r5   r   rg  c                 6    |                      d          k    S Nr   r   item	attach_ids    r#   r   z.JiraAPIImport._process_links.<locals>.<lambda>  s    $((4..I2M r%   rq  r=  rE  rn  rt  src_origTvideocontrolsz100%widthheight	href_origu   Заменили на z/people/r   )r  r@  r  r  r_   r8   rk   infor  
startswithurllibparseunquoter   researchr   r   rK  rL  r]   r  r  rn  	mimetypes
guess_typer   r\  r  )r"   r  r@  r  r  rn  r  r  	url_matchattachmentsattachr  
attach_obj	mime_type
account_idra  r  s                   @r#   _process_linkszJiraAPIImport._process_links  s:   //]F%%&]&]^^ 7	X 7	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i(3'!
 	"Mv|OcOcdgOhOhOnOnorOsOstuOvwwI K%aL	(2<@f%M%M%M%M{[[]abb K &z 2I+/?+A+H+T(c(cXa(c(c%)138I(J%-22:KUZT[2\\J <<&& 	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Wo7	X 7	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(r  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%   r5   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_2r=  r4      	last_name
first_namesecond_name   u?   Часть полного имени пользователя "u   " длиннее u_    символов. Фамилия, Имя и Отчество не были заполнены.zERR-0110r   obj_typer   rg_member_ofrE  LIKE%rt  u    ext_id пользователя N    содержит несколько ID из одного источника: z::.+?::TrH  uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0004r  
error_coder  ORzNOT LIKE%::::%rE  r8  Nr  ILIKEu+   Пользователей с почтой z > zERR-0037uH   Не удалось найти пользователя с почтой u+   Пользователей с именем  (z) > uM   Не нашли пользователя среди существующих ) FuQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифруr  +)rE  r  r8   rm  c                 ^    g | ]*}|                                 |                                 +S r/   r  r  s     r#   r  z1JiraAPIImport._process_person.<locals>.<listcomp>  r   r%   groupsr   groupIdr8  )rE  r8   rm  r   r  )2r8   rk   r  rM   r\   warningr3  r-  r]   r   r  r  r   r   removerK  rL  r[   minr  
max_lengthr
  r  r>   r?   r_   rE  r   countsubrO  r   r   r   r9   ri   INFOr  WARNINGr-   r  rm  setattrCmfPersonGroup
jira_group
user_groupr  
user_localr   
is_changed) r"   r  createupdater@   obj_msg	user_dictemailsemails_by_loginemails_by_namerE  	full_namecurrent_length_namer   max_length_namer   ra  not_source_hash_filterpersonsrQ  
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  r=  r   rE  r  r  r   rt  r  T)r   rE  r8   rm  r  rH  r5   u4   Не удалось загрузить группу ERR-0038r*  r  )r  r8   r:   rK  rL  r]   r*  r_   rm  r   rE  rO  r;   imported_object_countr=   r>   r?   )r"   
group_datarE  rA  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   Не грузим пользователей из-за опцийrn   r	  r5   z.evateam.ruu@   Не удалось загрузить пользователя rD  r   r  send_invites)rA   )r8   r   r   r_   r9   ri   r(  setr  r:   rB  r;   rE  r   r   endswithaddr=   r>   r?   schedule_deferred_jobr]   r   register_personsr   )r"   new_user_emailsr  ra  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   r=  r   untranslatedNamerE  r8  r  r<  )r   r8   TrH  r5   )r  r8   r:   rM   r\   rK  rL  r_   r]   CmfStatusCoderE  r   get_status_typestatus_typer   rO  r;   rE  )r"   r   rZ  rE  status_namecmf_status_coderQ  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           	      Z
    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#   
<dictcomp>zEJiraAPIImport._create_schemewf_for_simple_project.<locals>.<dictcomp>1  s/     
 
 
 tZ
 
 
r%   default.system:defaultrR   r=  rE  rh  r<  TtemplaterE  r8   rm  r   r  r   r   r   rH  associatedWithr   
issueTypeshierarchyLevelr  :rT  workflowr8  r  rZ  rt  rE  rk  Nforcetransitionstype)rj  rE  )rj  rE  r8   c                 T    g | ]$}|                     d            d|d           %S )fromStatusReferencer=  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toStatusReferencerW  global	only_dataworkflow_scheme
::SIMPLE::softdev:default)re  rE  r8   )	scheme_wfTEXKOM_db_deleter  r  r  )r}  rT   target_workflowr8   cmf_model_namer/   ) _get_issue_types_for_projectr]   CmfWorkflowr_   !_get_simplified_project_workflowsr8   rK  rL  rm  r   r   r  rO  _create_status	CmfStatusr   rZ  r  create_create_transr   r  CmfTransstatus_fromallow_empty_transition	status_toCmfSchemeWfdefault_task_workflowdefault_subtask_workflowCmfSchemeWfRuler   r:   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_idrj  issue_type_idsissue_type_idra  issue_type_ext_idr   workflow_transitiontransition_ext_idtransition_type
transitionstatus_from_ext_id_liststatus_to_ext_idr  workflow_scheme_datascheme_wf_ext_idr}  template_wfrulelogic_type_ext_idrT   	rule_dictrs  s!                                   @r#   #_create_schemewf_for_simple_projectz1JiraAPIImport._create_schemewf_for_simple_project+  sw   	$(!'+$&t,

 
"??
KK
 
 

 (,,2J,KK??
KK+ \	2 \	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 )Nr=  r   rW  rU  rV  r   )rE  r   r8   TrH  rE  r8  r<  rj  status_coder  )rj  r8   r  r   F#a0a0a0z#3f82d8z#e36b51z#23a055)OPENIN_PROGRESS	IN_REVIEWCLOSED)r8   rK  rL  r   r]   rX  r_   r   rY  rZ  rO  r  rE  r   r   r  r  color)
r"   jira_status_datarj  status_ext_idrE  r  rZ  r[  r   status_type_colors
             r#   r  zJiraAPIImport._create_status  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 )Nr=  r  rE  r  r  r   r<  u   Группа '   ' не найденаu8               # Пользователь в Группе 'zU'
            try:
                return g.current_user.in_person_group(group_code='@')
            except:
                return False
            )	r8   rK  rL  r]   r*  r_   r<   r   rS   )rA  rB   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 )Nr=  rW  u
   Роль 'r  uG               # Пользователь в проектной роли 'zb'
            try:
                return g.current_user.in_project_role(self.project, role_code='r  )	r8   rK  rL  r]   CmfProjectRoler_   r<   r   rS   )jira_projectrole_idrB   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  )r_   r  )r  
permissions    r#   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>4  sP     HH["55;;==AQAQASASS C#xx44
B r%   r   rS   u   Право 'u   ' не найденоu.               # Только с правами 'zR'
            try:
                return self.project.check_project_role_access('zJ', obj=self)
            except:
                return False
            )cmf.system_datar  r   r   r_   r<   )	r  r  rB   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/   rB   r  s     r#   allow_only_assigneezIJiraAPIImport._process_transition_conditions.<locals>.allow_only_assigneeK      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_reporterR  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   переход 'rf  r  r  r=  Tcmf_deletedrE  include_deletedr   r  z6 eval)	r  rT   r  eval_unsaferj  r  r8   rm  rE     Бизнес-процесс , u7   . Пользователь удалил условие K   . Изменения из импорта не будут примененыu9   . Пользователь изменил условие Fu$   . Добавлено условие re  r  u   Условие '' Jira: ' bzPython: u5   . Не удалось создать условие ''. zERR-0127CmfTransFilterr  #   ' не поддерживаетсяr  rh  rS   ri  rj  r   r  r~  r   NNr/   )r   r+  r_   r   rE  r]   r  r8   r  rk   r!  rm  r  r.  rO  r;   r  rS   r   r-   r<   r?   debugr   r  )r"   
conditionsr  rj  r  r  r  r  r  condition_maptransition_namefilter_codesr/  condition_datacondition_name	conditionr  filter_ext_idtrans_filterrb  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   
            Пост-функция "Обновить Поле Задачи"
               ИсполнительrV   )r  r   u   Описаниеr      ПриоритетrU      Решениеr   u   Темаr   )rX   r   rU   r   r   
   Поле 'r  r  u   # Поле Nz-1u    будет очищеноFr/  r0     Пользователь '   ' не найден: u    в rf  u    в Обычныйr   r=  rW  u   Резолюция 'r  z            z
            self.z = z
            )r_   r<   r  rB  r   rS   _get_cached_priorityr8   rK  rL  r]   CmfResolution)r   field_valuerB   	field_map
field_datafield_titlecode_commentr   	user_datara  _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/   )rB   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  rB  r<   r   rS   )r  rB   r  ra  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   Начальный переход бизнес-процесса 'rf  uX   Действия начального перехода в бизнес-процессе r  r  r/  
after_save)	r   r   r  crud_action	eval_typer  r8   rm  rE  r  r  u(   . Пользователь удалил r4   r  u*   . Пользователь изменил r  r5   )startr  r  r=  eval)r  rT   r  rj  r  r8   rm  rE  Fu   . Добавлено re  r   u   Действие 'r  r  u7   . Не удалось создать действие 'r  zERR-0126u   Пост-функция 'r  r~  u   . Удален  'uY   ', так как начальный переход не содержит действийz\'zif self.workflow.code == 'z':u3   cmf_alert(f'В задаче "{self.code}" поля uC    заполнены автоматически триггером "z"')
z    u   . Добавлен r  rh  rS   ri  rj  r  r  r   r/   )%r]   CmfAutomationCrudTriggerr  r  rE  r_   r   rS   r8   r  rk   r!  rm  rL  r   r  CmfTransActionr+  r   rN  r   r  r.  r  rO  r;   r  r-   r<   r?   r  is_newr  replacer   r   r   )r"   post_functionsr  rj  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_actionrb  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   
        Обработка перехода бизнес-процесса
        r=  r   rj  rE  )rE  rj  r   Trj  rE  r8   rm     Переход '$   ' в бизнес-процессе ';   ' был изменен и не будет обновленr   r   c                      g | ]
}|         S r/   r/   )r  r  stepss     r#   r  z5JiraAPIImport._process_transition.<locals>.<listcomp>  s.     & & & k"& & &r%   fromtofieldscreenc                 j    t          |                     d                    t                    k    S r  r-   r_   screen	screen_ids    r#   r   z3JiraAPIImport._process_transition.<locals>.<lambda>  s&    s6::d+;+;'<'<I'N r%   screensN7   Не удалось установить экран ID     для перехода '!   ' бизнес-процесса 'rf  ERR-0122	CmfUiFormr  r@   rH  )r8   rK  rL  r   r]   r  r_   rm  rk   r!  r   r   r  r  r   r   r  _process_transition_screencmf_ui_formtrans_form_showr?   rO  )	r"   transition_datar3  rj  rs  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(          t1          |d)          5 }|                                }d d d            n# 1 swxY w Y   t5          |d*          }|st7          d+          t9                      }i }i }t;          |                    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|s0t7          dDtQ          |           dEtQ          |           dF          | j        )                    dGtQ          |           dHtT          j+                   |,                                D ]d}*|*dI         d:k    rd:}+n5| -                    |*||          }+| .                    |*dJ         |+|K           | /                    |*dL         |+|K           e# t6          $ 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          j0                            dd|-gg dPddQ| j        j        j        j	         dRgg"          }/|/s t          j0                            |.S          }/|d	         dT         }0|/sBt          j0                            dU          }1t          0                    |1| j        dV          }/|/j1        r|-|/_
        |0                    dd          |/_        ||/_2        ||/_3        ||/_4        g }2|d	         d         }|D ]}d| j        j        j        j	         d|d          d}t          j5                            ddQdW| dWg"          }3|2&                    |3           |dX         r|3|/_6        |dY         r|3|/_7        |2|/_8        |.|/_9        |0|/_:        |/                    d           n(| j        j;        <                    dZ|/j
         d[           g }4|"                                D ]\  }5}t          j5                            ddQdW|5 dWg"          }3t          j=                            d\d|3gd]d|/gg"          }6|6rZ|6j1        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  rN  rK  rL  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 > functionrN  r   rO  )r%  r  functionfunction_datarN  rK  rL  s         r#   _get_action_post_functionszDJiraAPIImport._process_wf_scheme.<locals>._get_action_post_functions8  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   ro  r   r   r4  r5  r6  r  r  )rP  findrQ  )
step_idr%  action_type
from_stepsto_stepr   r;  rF  rR  rV  s
           r#   _get_transitionz9JiraAPIImport._process_wf_scheme.<locals>._get_transitionF  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	workflowsrc  rR   jira_workflow_schememappingsr   r{  rE  rh  rt  rE  re  r8   r   r   TrH  defaultrg  r=  r   r  rT  rU  r   rj  r8  r  rZ  rk  r<  rl  	workflow_.xmlreplace_spacesu,   XML файл бизнес-процесса 'u   ' не найденrxmlur   Не удалось получить список переходов между статусами в виде XMLzsteps > stepr5   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  rw  commonrX  rX  r%  r  r   rw  zactions > common-actionrx  u7   В XML разметке бизнес-процесса 'u%   ' не найден common-action ID zERR-0121rZ  r4  u   Из XML получено u    статусов и u'    переходов между нимиu   Настраиваем u1    переходов между статусамиro  r  )r  rj  r  u   Не удалось импортировать переходы между статусами для бизнес-процесса «u   »: ERR-0067rj  r  r  rW  r  r|  )re  r8   rm  r  defaultIssueTypesubTask*   Схема бизнес-процесса '[   ' была изменена после импорта и не будет обновленаrT   r}  -   В схеме бизнес-процесса '   ' правило )    для логического типа 'j   ' было изменено или добавлено вручную и не будет обновленоr  rh  Tr  V   ' было удалено вручную и не будет восстановленоr  r  rT   r}  r8   rS   ri  r~  )Ar   rx   r]   r  r_   r   short_str_encr8   rK  rL  r   r   rO  _get_statuses_for_projectr  r  r   rZ  r  r  r   safe_filenamery   FileNotFoundErrorrz   r  r   r<   r   r+  rP  rZ  rQ  ordernor   find_parentr  
setdefaultr   r?   r   r9   ri   r'  r   rH  r  r,  r  rm  r  r  default_epic_workflowr  default_task_logic_typedefault_subtask_logic_typestrict_task_logic_typerE  r  rk   r!  r  rS   r  r;   );r"   project_infor_  r  default_wf_for_taskdefault_wf_for_subtaskdefault_wf_for_epicall_statusesworkflows_dirr  r  r  workflow_name_hashr  rj  r  r  r  r  ra  jira_statusr   workflow_filenameworkflow_filer   workflow_xmlrl  
jira_stepsjira_transitionscommon_transitionsorderrY  r[  jira_status_idaction_typesr\  step_actionsstep_actionr%  r]  	action_idrF  jira_transitionr  r  wf_scheme_namewf_scheme_ext_id	wf_schemewf_scheme_infore  r  rT   current_rulesr  r  rules_for_deletionrR  rV  rL  s;                                                           @@@r#   _process_wf_schemez JiraAPIImport._process_wf_scheme   s   	$ 	$ 	$	 	 	 	 		" 	" 	" 	" 	" 	#  	#  	#  	#  	#  	#D 	"!%" \-899BB;OO(,,2J,KK%&<=jI+ \	D \	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>   8A0X+(L	=X+	L	X+L	LX++
Y(5(Y##Y(c                    | j         j        rj|d         }|r|                     |          }n_| j        j        j        j         d|d         d          }t          j                            |dg          }n| 	                    |          }|S )N
simplifiedr=  rb  r   default_release_workflowrr  )
rM   r\   r  r8   rK  rL  r]   r  r_   r  )r"   r  project_simplifiedr}  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                 2   d}t          d          5  	 | j                                        rn|                                }|dk    rnt	          |                              d          }t          |d          5 }t                              |          }d d d            n# 1 swxY w Y   |d         }	|d	         }
d
|
 d|	 dt          _
        ||                     ||          z  }d d d            n# 1 swxY w Y   |                    |           d S )Nr   Finit_views_and_dsTDONE	info.jsonrk  r   r   u   [Задача r  z)])r   r8   r:   r_   r   rx   rz   r{   r|   r7   r3   _process_issueput)r"   issue_queueissue_queue_errorsr   r  
issue_path	info_filer   
issue_dataissue_id	issue_keys              r#   _process_issue_threadz#JiraAPIImport._process_issue_thread  s   5111 	C 	CC?,,.. (__..
'' ,,55kBB	)S)) .Q!%1J. . . . . . . . . . . . . . . &d+&u-	&Py&P&PH&P&P&P
#$--j'BBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C" 	v&&&&&s7   A)C7<B#C7#B'	'C7*B'	+A C77C;>C;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   labelsr4   r  r  r   ruTlanguage_codereversedr  aliasr  rW  "%r   r<  r   rH  u*   Не удалось создать тег r  zERR-0134CmfTagr  )transliterater  rL  _count_project_tasksr  r8   r:   r_   unionr  r]   r  rO  r;   r<   r=   r?   )r"   r  r  tagstotal_tasksr  r.  tag_name
name_aliasrQ  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 )Nr=  r   rE  r  r  r<  priority_schemesr   projectKeysdefaultOptionId
prioritiesr   rU   choicesre  rv  r  T)r)  r   orig_captionr@  r8   rm  u"   Конфигурация поля ue    была изменена. Изменения из импорта не будут примененыr   _NONE_rH  )r8   rK  rL  r]   CmfCustFieldConfr   r  r_   CmfCustFieldConfFieldrm  rk   r!  r  re  r.  rO  )r"   r  cust_field_conf_ext_idcust_field_confsr  
default_idpriority_schemerU   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   rV  r   r=  rW  T)rE  r8   r  rm  r   rH  u   Резолюция 
 (Jira ID re  ug   ') была изменена. Изменения из импорта не будут примененыr5   )r  r8   r:   r_   rK  rL  r]   r   rm  r   r   r  rO  rk   r!  rE  )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                     |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 )-NuN   Импорт фильтров и конвертация JQL отключены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_
            Nro  rA  r   r=  r  rE  r  r  r<  u"   Не найдена группа 'rf  r   r   r   r  r  r  u~   Не удалось добавить разрешение на доступ к фильтру. Не найден проект re  u=   '. Возможно он еще не импортированr  r   H   . Возможно пользователь был удален в Jira.Fr  u,   Не найден пользователь 'r}  r  loggedinr5   u_   Не удалось добавить разрешение на доступ к фильтру 'r  zERR-0129r  r@   )r8   rK  rL  r]   r*  r_   r<   
CmfProjectrk   r!  r[   r  rB  r>   r?   r   )share_permissiontask_filtershareeshare_permission_type
group_namer  r  r   project_nameproject_ext_idr[   	user_nameuser_display_namer  rb  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   r=  r   rm  r  rr  Tr8   rE  rm  r   ownerrZ  privatesharePermissionsr  readonlyrn  editvieweditPermissionsc              3   J   K   | ]}t          |t          j                  V  d S r   )r   r]   r  r  s     r#   	<genexpr>z1JiraAPIImport._process_filters.<locals>.<genexpr>	  sC       & & #3(9::& & & & & &r%   fullrH  r5   u0   Ошибка обработки фильтра 'z' (ID: z). zERR-0130CmfBqlFilterr     Фильтр r  re  uc   ') был изменен. Изменения из импорта не будут примененыu4   Импорт фильтров выполнен за .3fu
    сек.: r  .2fu   /с | ~<   u   /мин))&r8   rk   r!  time	monotonicr  r:   rK  rL  r]   r  r_   rm  r   r   r[   r\  r   rL  rM   r\   rN  r   r]  	executorsanyperm_policy
view_scoper  rO  r;   r<   r=   r>   r?   r  int_process_jql_in_filters)r"   r  r  t1filter_countfilter_data	filter_idfilter_namer  r  r  r  r]  r	  r  r  edit_permissionhas_projectrb  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   Обработка проектной роли 'r}  r  T	anonymousr=  rE  r8   rr  r  rs  rt  r   rE  r8   rm  u7   Создана новая проектная роль 'rf  r   rH  u   Проектная роль u_    была изменена. Новые данные из импорта не примененыrn   r  )r8   r9   rK  rL  r]   r  r_   rm  r   r   rO  ri   r(  rE  )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   Tr~  u+   Состав участников роли u    в проекте u[    был изменен. Новые данные из импорта не примененыr  Nu6   Добавление участников к роли     проекта r   ro  u)   Добавление участника 'z	' (type: u   ) к роли atlassian-user-role-actorr  rP   r   rX  u?   Не удалось добавить пользователя 'r}  rY  zERR-0039rZ  r5   zatlassian-group-role-actor
actorGroupr   r=  rE  r  r  rt  r  rH  u3   Не удалось добавить группу 'u"   . Группа не найденаu<   Неподдерживаемый тип участника '': zERR-0040)r!  r@  r8   rm  u   К роли u*    добавлено участников: r  )r]   CmfProjectRoleAssignr_   rm  r  r;   r8   r9   ri   r(  rM   r\   r\  r   r<   r?   r>   rK  rL  r*  rE  rO  r$  r   )r"   actorsr!  project_objrole_assignr$  actoractor_display_name
actor_typer`  r  rb  group_idr  r  rA  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"  r_   r2  )r"   r  r,  rolesr  r!  r+  s          r#   _process_project_rolesz$JiraAPIImport._process_project_roles
  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.jsonNrk  rn  r   z<p><a href="z5" class="plugin_link" target="_blank" rel="noopener">z</a></p>r=  z::shourtcutsrW  r   )r7  rn   r  r7  Ti'  )r   r@  rA  rE  r8   rm  r  r   rH  )r8   rw   rx   ry   rz   r{   r|   r   rK  rL  r]   CmfDocumentr_   CmfMenuTreeget_treer   r  r   r   rO  )r"   r  r,  shourtcuts_filer   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_shourtcuts
  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_structr  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|_        |j        dk    rd|_        d|_        d|_        n |j        dk    r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           t_                       | 0                    |           | j        1                                rd S t_                       | 2                    ||           | )                                 | 3                    ||           t           j.        4                    d#d$|gg d%g&          }|r+d|_5        |
                    d'           t_                       | j        j6        7                    |           | j        j6        8                    |           | j        xj9        d(z  c_9        | )                                 |S ))Nr   r8  rT   rE  rt  r  r  u   Проект с именем u8    уже существует! Переименуем в r  r  T)r8   rE  r   rm  	isPrivater  Fproject.baseproject.servicedeskrH  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыr@  r~  r   ui_form_schemeproject_perm_schemesecurity_level_schemecust_field_conf_schemer}  r  epic)rA  r:  include_systemEpics)r   rA  r:  systemrA  rh  )has_children_archivedrh  Tr<  rx  r5   ):r]   r  r_   rT   r   rE  r8   rk   r!  r   rO  keysr  rm  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_chatlogic_prefixshow_sprintshow_releaseshow_componentsr  r   r  r6  _process_screen_scheme_process_permissions_process_security_levels_process_field_conf_schemer  _cache_prioritiesr  r   _calc_progressr  _process_versions_process_componentsrH  rJ  r;   _process_tasksr:   _process_boards_process_sprintsr%  rX  rK  _hack_replace_creation_date_hack_create_fake_taskrE  )r"   rI  r  r,  r  r   r  schemesschemer   epics_folderfolder_has_children_archiveds               r#   _process_projectzJiraAPIImport._process_project
  s   '++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!'>99*/'+/(.2++)-BBB*/'+0(.3+....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stderrz[PID u(   ] Запуск процесса (offset=z, limit=r  )	
subprocessPopenr8   rK  r   rz   r9   pid
log_detail)r"   r  offsetr  r  procs         r#   _execute_taskzJiraAPIImport._execute_taskt  s    "K9O9R  * 0: ?E IN   "<dCC@$GG   
 
 	nDHnnV\nnfknnnooo""$$$r%      rm  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   r5   )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distributionr  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).processingr  T)
missing_okr5   r  )r8   rw   rx   r-   ry   r   iterdiris_dirr   rM  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                 P	   |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                  }	t           j        }
d |	D             }|	                                }i }t          j                    }|s|rQt!          |          |k     r*|r'|                    d          }||         dz   }| j        j                            d| d| d|
            |\  }}	 |                     |||          }||f||<   |||<   n# t&          $ r~}||
k     rA| j        j                            d| d|dz    d|            |                    |           n-| j                            d| d|j         d| d| d           Y d }~nd }~ww xY wt          j        d           t!          |          |k     r|'g }|                                D ]\  }\  }}|                                }||                    |           |dk    r)| j                            d| d|j         d|            b||
k     rA| j        j                            d| d|dz    d |            |                    |           | j                            d| d|j         d| d!| d           |D ]}||= |s|rt          j        d"           |N|Qt          j                    }||z
  }t5          |d#          \  }}t5          |d$          \  }}|                     |          \  }}| j        j                            | d%t9          |          d&d't9          |          d&d'|d(           | j        j                            d)| d| d|            | j        j                            d*||z  d+d,           | j        j                            d-|            d S ).Nr   u   Проект 'r   r}  r  r   r  u   Будет выполнена обработка только новых или обновленных задач. Для обработки всех задач измените значение параметра 'IMPORT_ONLY_NEW_OR_UPDATED'uU   . Нет новых/обновленных задач для обработки из     задачTr  u   . Обработка u    из u(    задач с ограничением u,    одновременных процессаc                     i | ]}|d S )r   r/   )r  
task_chunks     r#   rb  z0JiraAPIImport._process_tasks.<locals>.<dictcomp>  s    LLLz1LLLr%   r   r5   [u   ] Попытка: r  u3   ] Повторный запуск, попытка: u4   . Ошибка предыдущей попытки: z] [PID uC   ] Процесс завершился с ошибкой после u    попыток. Ошибка: r~  )r  g      ?uF   ] Процесс завершился успешно. Попытка: u?   . Код возврата предыдущей попытки: u*    попыток. Код возврата: r(    r  u8   . Обработка задач завершена за 02dri  z06.3fuE   Обработано задач (успешно/неуспешно): u%   Скорость обработки: r  u    задач/секu)   Всего задач в проекте: )r   IMPORT_ONLY_NEW_OR_UPDATEDr8   rk   r!  r  r9   r   r  r  r   IMPORT_OBJ_CNTIMPORT_PROCESS_RETRYcopyr  perf_counterr   popr  r<   r   r?   r  sleepr   polldivmodr  r  )r"   r  r  project_msgonly_new_or_updatedr  unprocessed_tasks
task_countr   r  max_retriestask_chunk_attemptspending_task_chunksactive_processesr  r  attemptr  r  processrb  processes_to_removereturn_codeenddiffhoursr  minutessecondssuccess_tasksfailed_taskss                                  r#   ro  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	
 	
 	

 33$!	
 
 1 ML|LLL +//11!##! ?	%5 ?	&''-77<O7044Q77
-j9A=&++,e
,e,eg,e,eXc,e,efff !+"00VUKKG1;W0E$W-6='
33    ,,.66W
 W W_fij_j W WQTW W   ,22:>>>>113
 3 37; 3 3*13 3-03 3 (2	 2    
35 &''-77<O7: #%2B2H2H2J2J  ..*g%llnn*'..w777"a''++9
 9 97; 9 9/69 9   
 #[00 O2::!nJ !n !ncjmncn !n !n`k!n !n   066zBBBB O55!JJ !J !Jw{ !J !J.5!J !J<G!J !J ,6	 6    / . .$W--   #6 
1 " ?	%5 ?	B !!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   ,#G 
IA4II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 )NrQ   rR   r   c                     g | ]
}|d          S r   r/   r  s     r#   r  z3JiraAPIImport._process_projects.<locals>.<listcomp>g  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    временно не поддерживаютсяr=  rE  r   r   r   )r   rT   r   activitytask_code_prefixr   rE  r  r5   u<   Не удалось импортировать проект zERR-0041r  r  )r]   r^   r_   r   r   r  rh   r8   r:   r\  r[   r  r<   rK  rL  rx  r=   r>   r?   )r"   r  r  project_leadr   rT   rI  s          r#   _process_projectszJiraAPIImport._process_projectsb  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   NrT   r=  rE  r  r  r<  u'   Не найден тип задачи 'r}  r  rV   
unassignedTr'  rU   r  )r  rT   rV   rU   r   rr  r@  rE  r8   rm  r  rH  u&   Цвет карточки задач 'u\   ) был изменен. Новые данные из импорта не примененыr  )r8   rK  rL  r]   r  r_   r<   r\  CmfKanbanBoardCardColorRulerm  r  rT   rV   rU   r   rO  r9   ri   r(  r;   )r"   card_color_datacard_color_scheme	board_objr   display_valuecard_color_idlogic_type_ruleresponsible_rulepriority_rule	name_ruler  rT   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  )r_   r   rr   r  r<   r=   r8   r?   )r"   card_color_configr  card_colors_strategiesstrategy_typecard_colors_datar  card_colorsr  r  rb  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 c                    i ddddddddd	d
dddddddddddddddddddddddddd d!d!d!d"d#d$d%d&d'd(d)}g }|                     d*g           }|D ]}	 |d+         d,k    r|d-         }|d.         }|                     |          }	|	s|                    d/          r| j                             |          }
|
                     d0i                                d1          }|                     |          }	|	s|
d-         }|                     |          }	|	sE| j        j        j        j         d2| }t          j                            |d3d-g4          }|j	        }	|	s(| j        j
                            d5| d6| d7           5|	                    d8          r4t          t          j        |	                    d9          d:                   }nt          t          j        |	          }|                    |j        |	d;           # t$          $ r.}| j                            d<| d=| d>|?           Y d }~d }~ww xY w|S )@Nr   r   r   r   versionsaffected_versionsrX   rV   fixVersionsfix_versions
componentsr  r  r   r]  r   r   r   r   rU   r   r@  r   r   r   creatorr   r   r   r   rT   perm_security_levelrT  listsagile_story_pointsop_gantt_task.actual_workop_gantt_task.sched_workzop_gantt_task.actual_completezop_gantt_task.sched_start_datezop_gantt_task.sched_finish_date)rW   securityr@  z)com.atlassian.jpo:jpo-custom-field-parent'com.pyxis.greenhopper.jira:gh-epic-linkz$com.pyxis.greenhopper.jira:gh-sprintStory Points	timespenttimeoriginalestimateprogress1com.atlassian.jpo:jpo-custom-field-baseline-start/com.atlassian.jpo:jpo-custom-field-baseline-endcurrentFieldsmodeworkModer   fieldIdcustomfield_r   r   r=  ru  rr  u5   Не удалось сопоставить поле 'r}  r  zop_gantt_task.r   r5   )r)  	classNameua   Не удалось добавить поле в раскладке карточек доски: rY  zERR-0139rZ  )r_   r  r   r8   rK  rL  r]   CmfCustFieldr  r   rk   r!  getattrCmfGanttTaskr   r  r   r)  r<   r?   )r"   card_layout_configr  r  card_task_fieldscurrent_fieldscurrent_fieldcurrent_field_namecurrent_field_idr   r   custom_field_schemacustom_field_namecust_field_ext_id
cust_field
task_fieldrb  s                    r#   _get_card_task_fieldsz#JiraAPIImport._get_card_task_fields  s   

0
 +
 	

 >
 ,
 f
 |
 (
 6
 

 x
 ,
 '
 |
  z!
" h#
$ &-9?7=4;04$>7Aa?`;
 
 
	@ +//DD+ +	 +	M* (J66%26%:"#0#; &]]+;<<
! 5&6&A&A.&Q&Q 5#'#3#7#78H#I#IL*6*:*:8R*H*H*L*LX*V*V'!*/B!C!CJ% F,8,@)%.]]3D%E%E
% 5/3/E/L/X,n,n\l,n,n)%+%8%=%=#4$(&> &> & &
 &0_
! O*22zPbzzgwzzz   (()9:: E!()<j>N>Ns>S>STU>V!W!WJJ!(!D!DJ '')1!+) )        )) O  yF  O  O  JM  O  O! *          s&   #H0D"HB H
I #I		I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         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 }|d0         d1         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                            d2| d'| d| d(           |                    |           | j        j
        j
        j         d|	 |d3<   t           j                            d3d4|d3         gd5d4|ggg d67          } | s(t                               |d3         | j        d8          } | j        r|d         | _        || _        || _        |                    |d9                   | _        || _        || _        || _        |                    |d:         d	          | _        |                    |d;         d          | _        | j                            |d<         d=          | _        |                      ||           | _!        d| _"        |d         | _        |                     d%           tG                       n)| j        j                            d>|  d'|	 d|
 d/           | $                    ||            tK          tM          d? |d@         dA                   d          }!tK          tM          dB |d@         dA         ddd+                   d          }"|"rdC|"dD<   |!rdE|!dD<   d}#t           j'        (                    | g dFG          }$|$D ]`}%|%j        j)        pi }&|&                    dH          }'|%j        r|'r2|'|%j*        k    r'| j        j                            dI|  dJ           dK}# nag }(dL}'|d@         dA         D ]})	 |)d         }*|)d         }+| j        j
        j
        j         d|* },t           j'                            d3d4|,gd5d4| ggdMdNgdO          }%|%s9t           '                    | |,| j        dP          }%|%                    d%           |(                    |%j+                   |%j,        r*| j        j                            dQ|% d'|* d|+ dR           |%j        j)        pi }&|%j        r|+|%_        |)dS         |%_-        |)dT         |%_.        g }-|)dU         D ]}.| j        j
        j
        j         d|.d          }/t           j/                            |/V          }0|0s*| j        0                    dW|% d'|* d|+ dX|. dY| Z           o|-                    |0           |-|%_1        |)d[         rd\|%_2        n+|)dU         sd]|%_2        n|)                    dDd^          |%_2        |&3                    |)           n)| j        j                            dQ|% d'|* d|+ d/           |#r|'|%_*        |%j*        |&dH<   |&|%_        |%                    d%           tG                       |'dLz  }'m# th          $ r?}1tk                       | j        0                    d_|* d|+ d|1 d`| Z           Y d}1~1d}1~1ww xY wt           j'        (                    dadb|(gd5d4| gg dcgdd          }2|2D ]})|)6                    de           |2r"| j        j                            df|2            tG                       | j        xj7        dgz  c_7        	#  tk                       | j        0                    dh| di|Z           Y 	xY wdS )ju  
        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)scrumr5  z	1 queriesz2 userstoryz
3 assigneez4 epicz	5 projectz7 none)r   parentChildrX   rT  r   nonez1 -1wz2 -2wz3 -4wz6 none)z-1wz-2wz-4wNONEu
   Доскиtree_node_is_branchrv  N)r   r@  rA  r:  r8   Tr   r   u!   Обработка доски ID r  r  r   cardColorConfigcardLayoutConfigr   r=  )r   r]  rm  r  rr  r  r  rn  rH  u   Основной фильтр z (ID u;   ) был изменен и не будет обновленswimlanesConfig	swimlanesr  r  r  u   Дорожка uA   ) была изменена и не будет обновленаquickFilterConfigquickFiltersu   Быстрый фильтр rE  rh  r@  )	r@  rA  kanban_bql_filterswimlane_bql_filtersquick_bql_filters
limit_dayskanban_board_columnsr  r  rt  rE  r8   rm  ro  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 r2  r/   r5  s    r#   r   z/JiraAPIImport._process_boards.<locals>.<lambda>6  r7  r%   z#00875ar  z#42526e)r8   r  r  r@  r   r  u.   Порядок колонок на доске up    был изменен и не будет обновлен. Упорядочите колонки вручнуюFrm  r  r  )r   r   r  r  u   Колонка uG   ) была удалена и не будет восстановленаr#  r  r3  rW  u   Для колонки u!   ) не найден статус zERR-0124rZ  r4  r  z#6b778cz#0052ccu5   Не удалось создать колонку ID zERR-0042rS   ri  rj  r  r~  uC   Удалены колонки, отсутствующие в Jira: r5   u:   Не удалось импортировать доску zERR-0043)8r]   rJ  r_   r8   r   rO  _get_project_boardsr:   rk   r  rK  rL  r  rm  r   r  r  r]  r   r  r!  CmfKanbanBoardr@  rA  rT   r'  r)  r(  swimlane_typer*  rr   r  r  r  "kanban_board_quick_filters_visibler;   r  r   r   CmfKanbanBoardColumnr   r   r  rS   r  min_sizemax_sizerX  r?   mapped_status_codesr  r0  r<   r=   r  rE  )3r"   r  r,  
board_typeswimlane_type_mappinglimit_days_mappingboard_folderr  boardboard_id
board_nameboard_configr  r  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_columnsr6  	column_idcolumn_namecolumn_ext_idrC  r   r  status_globalrb  columns_for_deletions3                                                      r#   rp  zJiraAPIImport._process_boardsC  s    +,
 

 "($"!
 !
 	
 
 '++)* , 
 

  	!++!"'? ,  L / 	 /3L,!$'
--j99 W	G W	GEVG?,,.. FF ;"6]
&++PPPJPP    %V}X6$01B$C!%12D%E" %)!$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/ 261K1K*!2 2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m
W	G W	GsL   "h:>X6h:5Ceh:F
eh:
f'(4f"h:"f''Bh::0i-u#   Обработка спринтовc                 <   t           j                            dd|gg dgddg          }|sFt                               ddd	||d
          }|j        dv rd	|_        |                    d	           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	           t=                       d&}| j	        j                             d'|	j         d(tC          |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          d0| d1| d2|d          d1|d*          d3tR          j*        4           |d5z  }"| xj+        d5z  c_+        | j	        ,                    d/|d          d0| d1| d6d7|	8           a|r*| j	        ,                    d/|d          d9| d:d;|	8           |	                    d	           |d"k    r|
s t           j-        .                    |	<          s|	j                            d!          |	_        |	                    d	           | j	        j                             d=|	j         d>           |	/                                 d	|	_        |	                    d	           t=                       |0                    tc          |	j2                             | j	        xj3        d5z  c_3        | j	        4                    dd?           tk          t           j        6                    dd|gg d@gdAgd	                    |_7        |j7        rd	|_8        n8tk          t           j        6                    dd|gdAgd	                    |_8        |                    d	           t           j        9                    tu          |          B           d S )CNrA  r8  )r:  r8  r4  r   rX  rt  Sprintsr4  Ti  r   r:  rW  r@  rA  r  )rL  rM  rH  zlist.agile_sprint:defaultrR   r   stater=  rE  rh  r@  )rE  r   rT   rm  r$  rj  rC  rD  rA  r   cmf_archived)r   r   include_archived)rT   rE  r8   rm  r   multiprojectFr  r  r>  r?  futurer  r   r  closedr  r   u0   Добавляем задачи в спринт r  issuesr   r   )zlists.cmf_archivedrE  cache_status_typer  zop_gantt_task.sched_durationr  r  rl  )rE  r   rm  rx  u   В спринт 'u5   ' не удалось добавить задачу 'r}  u   ) проекта 'u\   ). Возможно проект или задача еще не импортированы.rJ  r5   u$   ). Задача не найдена.zERR-0044r  uX   ' не удалось добавить задачи из других проектов: u]   . Возможно проекты или задачи еще не импортированы.zERR-0133)	task_listu   Запуск спринта "rW  r  rl  rh  Tru  )list_ids);r]   rJ  r_   rc  tree_hiddenrO  r  rL  _get_all_sprintsr8   r:   rK  rL  rN  r  rm  rT   rA  r   rM   r\   r  rC  rD  r  r.  rj  get_default_statusr   rl  r;   rk   r  r   r   r  r$  r   rr  r  r9   ri   r(  r>   r?   CmfListHistoryOTRr%  do_startrN  r-   r   rE  r  r   r  rX  r   recalculate_count_cacher   )r"   r  r,  sprint_foldersprint_logic_type
sprint_idsr4  sprint_staterE  
sprint_objsprint_is_newexternal_tasks_countr  r  r  issue_projectissue_ext_idr  rs  s                      r#   rq  zJiraAPIImport._process_sprints  s/   (,,k2,,,
 &' - 	
 	
  	1",,!"' -  M '+SSS,0)4000"/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: Объект пользователя.
        unknownNFrZ  ue   Пользователь с указанными данными не найден в системе:    по умолчанию    'Система';   . Будет установлен пользователь zERR-0045r   r  r5   )r  rB  r<   r   r   r8   r?   r>   )	r"   r`  r@   rX  r  ra  r  rb  
person_msgs	            r#   r\  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.jsonrk  r   r{  r  )rx   ry   rz   r{   r  writedumps)r"   rA  r  groups_pathr   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.jsonrk  r{  r  uM   Неудалось сдампить пользователя по ключу rJ  )r  r<   rx   ry   rz   r{   r  r[   rM   get_user_infor  r  r8   r9   ri   r(  )r"   r`  r  
users_pathr   r  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   rV  r   r   rW  rp  r   r8   r   rZ  r   r   updateAuthorcmf_modified_byr@  started
start_datetimeSpentSecondsr  
time_spentcommentr   r   r=  r   rE  r  r   remaining_estimaterW  )r  TrH  r/   )r8   rk   r  _get_issue_worklogsr   r_   r[   r\  rK  rL  r]   CmfTimeTrackerHistoryr  r   datetime	timedeltar  end_daterO  )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   
        Конвертирует "Фрагмент кода"
        prerS   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   rw  r5   z	language-N)r  r  extendcontentsclearr   r_   r   )r"   r  r  code_tag	class_tag
code_classrS   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/   r-   )r  cs     r#   r  z/JiraAPIImport._convert_text.<locals>.<listcomp>  s    @@@1A@@@r%   )r   r  r  r  r   r   children)r"   r   r@   datar  s        r#   _convert_textzJiraAPIImport._convert_text  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         |_        ||_        |j        |_        |                     |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_        y|                    d          rTt7          t9          d |d                   i           }
|
                    di                               d d!          |_        |j        r|                    d"           | j                            d#d$           | j                             d%| d&|            d S )'Nu$   Комментарий задачи r   rV  r   r   rW  r   r5   r=  r   rW  uN   Комментарий уже есть, и правился в системе zERR-0046rZ  Tr  z**r   r  r   r   r   
visibilityro  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>N  s    !%%,,2E"E r%   internalFrH  r  r  u   Обработано u:    комментариев, из них приватных )!_get_issue_commentsr8   rK  rL  r]   r  r_   rm  r?   r  r[   r\  r   r   r  r   r   r@  r   r  r   r  r  r]  r   r  r>   r   r   r.  rO  r  r9   )r"   r  r.  r@   cntprivate_cntr  rE  cmf_commentr  sd_public_comments              r#   _process_issue_commentsz%JiraAPIImport._process_issue_comments   s   eU5\eeuXW`Gaeee//66 2	= 2	=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"&+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@  rh  rj  Tr  )r   r  r   u   Удаленu   Изменен   Задача u   . Чек-лист rY  uf    пользователем. Изменения из импорта не будут применены)r@  r8   rm  rH  r  )rm  rh  Frx  r  u   . Пункты изменены пользователем. Изменения из импорта не будут примененыrN  r~  r   r  r  r  CANCEL)rw  ~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
>r4   )r   	mandatorycustom_statusr   r   r5   r  )
cache_taskr@  r   r   r   r8   rm  r  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%   )r]   CmfChecklistr_   rm  r  r8   rk   r!  rO  CmfChecklistItemr  r   r  r  compileMfinditerr  r  r   r   r  r   r  r   r   checklist_items_countchecklist_items_done_countr  )r"   checklist_datar^  	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_checklistZ  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.  r^  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 )Nr  r  )attrr   r  r  )FixAffectedr   r   
::version:r   rW  u   Не найдена 'u   ' версия zERR-0050rN  r  r5   r  )r   r_   r8   rK  rL  r]   rN  r   r?   r>   r)  )
r"   r.  r^  version_typesversion_typeversionr  version_datarE  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   r  r=  r   rW  u%   Не найден компонент zERR-0051CmfComponentr  r5   )
r_   r8   rK  rL  r]   r  r?   r>   r   r  )r"   r.  r^  issue_componentsr  	componentrE  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  r4   r  r  r   r  Tr  r  r  r  rW  r  r   r<  r  u+   Не удалось создать тег 'r  zERR-0125r  )r  r  r_   r  r]   r  rO  r   r<   r8   r?   r  )r"   r.  r^  r  r  r  labelr  filter_r  rb  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   )ru  rS   r   r  )r  r   cmf_author_idr   obj_idobj_coder4  r5  )r   rV   rZ  r   r=  rr  rU   r   rE  rh  rZ  rt  
from_valueto_valuefrom_value_codeto_value_codefrom_value_nameto_value_namer   r  r	  r   r
  ru  )r   r  r	  r   r
  from_value_idto_value_idr   )cmfr   r   r   r-   rS   r\  r]   r   r_   r8   rK  rL  rj  r  r  
issubclassCmfRelationBaser   CmfOrmColumnHistoryr  )r"   r   history_itemr   
created_atr^  r   fields_history_datar  r  item_from_id
item_to_idr  	field_clscolumn_historys                   r#   _get_history_fieldz JiraAPIImport._get_history_field%  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   rX   rU   r   r   u   История задачи r   rV  r   r   rW  	changelog	historiesz	::historyr   r   rZ  u   Аудит без автора r   r5   )r   r   	log_levelr@  r   r   r   r)  r  r   
fromStringtoStringr   z<br>)r   r   r$  r@  r   rr  T)r8   rm  rE  rH  )r   )r8   rK  rL  r_   r\  r[   rk   r!  jira_map_fieldsr   r   r  r]   r  r)  r.  rO  r  bulk_insert)r"   r.  r^  field_title_mapr@   history_fieldsr  rE  r   r  r  r)  r   history_fieldr  history_commentr   s                    r#   _process_historyzJiraAPIImport._process_historyt  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remotelinksr=  r   objectapplicationrW  Tr  r  rn  rH  ro  zcom.atlassian.confluencerelationshipz	Wiki Pagez$/pages/viewpage.action\?pageId=(\d+)r5   rE  r  r  r<  r  )r_   r8   rK  rL  r]   CmfLinkrm  r   rn  r  rO  r  r  rA  r9  r   local_links)r"   r.  r^  r4  
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_workr  r   sched_start_dater  sched_finish_datec                     g | ]}|S r/   r/   r  r   s     r#   r  z0JiraAPIImport._process_gantt.<locals>.<listcomp>  s    HZHZHZqHZHZHZr%   )r  r   TrH  u8   Не удалось импортировать Гант u    для задачи 'rf  zERR-0112r  r  r5   )r_   r   r]   r  r)  r.  rO  r<   r8   r?   r>   )
r"   r.  r^  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   rr  r	  T)r@  r$  rE  r8   rm  z/browse/r   u<   Задача импортирована из Jira: <a href="z" target="_blank">z</a>rH  )r8   rK  rL  r]   r  r_   rM   
url_joinerrn  r   r.  rO  )r"   r^  r.  comment_ext_idr  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           	      H  , d}|d         }|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          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          }|r0|                     |	                    | j                  |          }nn| j        }t"          j         d}| j        rd| nd}| j                            | d | d!d           | j                            |t*          j        dd"           ||d#<   |d         	                    d$          }|r0|                     |	                    | j                  |          }n\|}t"          j         d%}| j                            | d&| d'd!d           | j                            |t*          j        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"           nd,|d*<   |d         d-         d         ,|d         d.         	                    d/          }|r|d         d.         d          d0, }n,}d| j        j        j        j         d| d}t          j        	                    dd1d2| d2g3          |d4<   |j        j        	                    d5          }| j        j        r|r|j        j        	                    d          }|                     |          }t;          t=          ,fd6|          d,          }| j        j        j        j         d|d          }t          j        	                    dd7|g3          }n|d8         }|d9         }|	                    ,|          }| j        j        j        j         d| }t          j        	                    dd1| d:g3          }nt;          t=          ,fd;|d<                   d,          }|r	|d=         }n|d>         d8         }tA          j!        |          }| j        j        j        j         d?| }t          j        	                    dd7|g3          }||d@<   |d         dA         d         }| j        j        j        j         d|j"         d| }t          j#        	                    dd7|gdBgC          } | s|d         dA         d=         }!|d         dA         dD         d         }"tI          j%        |"          }#|&                    |#E          } | j                            t"          j         dF|! dG| dHdId           | |dA<   |dA         j'        |dJ<   |d         	                    dK          r| j        j        j        j         d|d         dK         d          }$t          j(        	                    |$          |dK<   |dK         sI| j                            dL|d         	                    dK           dMd           | xj        dz  c_        |)                    dNd,          }%|%r|dO         dP         }%| j        j*        +                    dQ| dR|            tI          j,        | j        t          j        |ddS|d         gT          \  }&}'|| -                    |&|          z  }|&j.        r|&/                    g dU           | 0                    |%|&|          |&_1        |pg }|D ]}(|&j2        3                    |(           | 4                    ||&           | 5                    ||&           | 6                    ||&           | 7                    ||&           |&j8        dVk    rOt          j9        	                    |dWddXgY          })|)|&_:        |)j;        sd|)_;        |)<                    dZ           |d         d[         |&_=        | >                    |&|           ||&_        |&j?        r|&<                    dZ           t                       | A                    ||&           | B                    ||&           | C                    |&|           n#| j        j*        D                    d|& d\           | E                    ||&           |d         d]         d^         r| F                    |&|           | jG        	                    d_          r| H                    |&|           t                       | j        I                    d`da           t          |db                   K                    dc          }*t          |*dd          5 }+|+M                    de           d,d,d,           n# 1 swxY w Y   |S )fu   
        Общая логика обработки которая потом разделяется на задачи и эпики
        r   r   r   r  r  z): 'r   r   rf  r@  r  Tapprovedr=  rE  rS   r  rW  r  u:   Не найден уровень безопасности zERR-0048r  r  r5   r   r  r  rZ  u;    Не указан создатель(creator) задачиr  r  r  zERR-0049)r  exc_infor   r   u    Не указан автор(reporter) задачи. Будет установлен тот же пользователь, что и создательr  r  r   rX   rV   u6   Не найден исполнитель задачи NrW   r   r  ri  r  r  r<  rT   rb  c                 0    | d         d         d         v S )Nrf  r   rg  r/   wfissuetype_ids    r#   r   z.JiraAPIImport._process_issue.<locals>.<lambda>  s    <26F3G3J<3X#X r%   rh  defaultWorkflowissueTypeMappingsr  c                     | d         v S )Nrg  r/   rU  s    r#   r   z.JiraAPIImport._process_issue.<locals>.<lambda>  s    |r,/?? r%   rc  r   r  r{  rj  r   rZ  rt  rU  )rZ  u!    Не найден статус 'r}  u  ). Необходимо проверить схему бизнес-процессов проекта и бизнес-процесс задачи в Jira. У задачи установлен статус по умолчанию аналогичного типа.zERR-0071rr  r   u'   Не найдена резолюция zERR-0116r   renderedFieldsr   u4   Создание/обновление задачи 'r)  r8  rF  )
r   r  r  r  r4  rc  rA  r   r]  r  z	task.epicrT  r   rA  r:  rU  r   rH  r   u[    была изменена пользователем и не будет обновленаr  totaltimeTrackingEnabledr  r  r  r  wr   )Nr3  r-  r]   r  r  r`   r8   rK  rL  r_   CmfSecurityLevelr?   r>   r   r\  r[   r   r7   r3   r   r9   ri   ERRORr  r  r   rM   r\   r  r   r   r  r   r{  r   r  r   rY  rx  rZ  r   r  rk   r  rM  r  rm  r  r  r   r  r   r  r  r  r<  rc  rJ  rA  r   rO  r   rc  r.  r;   rL  r-  rP  r!  r  r  rc   r  r  r   rx   rz   r  )-r"   r.  r   sprintsr  r  r  r@   normalized_issuerE  story_p_fieldissue_creatorr   rE   r  issue_reporterr   simplified_projectissuetype_ext_idr  r  r  r  r  r  rj  default_workflowissue_type_mappingsworkflow_namer  	status_idr  
status_objr[     status_сategoryrZ  r	  
issue_textr^  r  r4  rv  r  r   rW  s-                                               @r#   r  zJiraAPIImport._process_issue  s$   
 ;%L	ViVV8VVx9SVVV  ..udmFND_6`ai6jkk%,"'+'<$'+$(,(>(E(Q%_%_U]%_%_"#, ?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 h++I66 	Y))!!$-00 *  JJ
 .J%.kkkIDHDYq@J@@@_qJO%%eeYcee" &   
 O	7=DSWXXX)3& x,,Z88 	Y((""4=11 )  II
 #I& v v v  O%%,,z,,," &   
 O	7=DSWXXX(1% ?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'/$(OH-d3	?18DbbbbW`bb%))c=1!? * 
 

  	/(3F;K$Xx89IJ5Q.>?OPPK!444MMJO%%& @ @ @ @Yb @ @ @ " &    &0"0@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   5nnnu&   Обработка всех задачc                     | j                                         }|D ]3}| j                                        r d S |                     |           4d S r   )rM   r  r8   r:   r  )r"   rq  r.  s      r#   _process_issueszJiraAPIImport._process_issues.  sb    %%'' 	' 	'E((** &&&&	' 	'r%   u3   Обработка связей всех задачc                 H   |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           tW          | dN          r:| j         j                            dO           | j,        -                                 dS dS )PuD   
        Постобработка связей задач
        uF   Отключена обработка связей всех задачNc                 \    |                      di                                d          dk    S )Nr   r   r  r   )r   s    r#   r   z2JiraAPIImport._process_relations.<locals>.<lambda>C  s(    !%%"--11(;;?hh r%   r   r  r   r@  r=  
issuelinksr   r   )rE  r   r   rE  uD   Анализ связей всех задач выполнен за r      сек.u   Подзадачи: zsystem.additional_parentrR   zsystem.linkr  r8  rS   r   rt  uP   Не удалось связать задачи, возможно задача 'u#   ' не попала в импортparent_taskrr  )relation_type.coderh  system.finish:finishin_linkrh  out_linkr<  TrH  u,   Тип связи родительской 'u$   ' и дочерней задачи 'ud   ' изменен с 'Блокируется/Блокирует (ОО)' на 'Относится к'.u   У задачи 'u3   ' эпик(родительская задача) 'uo   ' из другого проекта. Создана связь 'Дополнительный родитель'z:additional_parent:rW  )ry  rz  relation_typerE  r8   u<   Не удалось создать связь задачи 'u&   ' с дочерней задачей 'rf  zERR-0114r  r  r5   uG   Создание связей подзадач выполнено за rx  zsystem.duplicatezsystem.clone)Blocks	DuplicateRelatesClonersu   Связи: ro  r   )rE  r8   r   inwardoutwardu=   Не удалось найти входящую задачу r  u   ). Возможно задача не попала в импорт или находится в проекте, который еще не импортирован.u?   Не удалось найти исходящую задачу rw  )r{  rE  r8   u.   Не удалось создать связь z. in_link: z), out_link: r  zERR-0052uA   Создание связей задач выполнено за uL   Обработка связей всех задач выполнена за bigganttuB   Обработка связей задач плагина BigGantt).r8   rk   r!  r   r   r   r   r  r  r  r  r  r:   r_   rK  rL  rf   r   re   r  r9   r   r]   CmfRelationTyper  r   CmfRelationOptionr   r{  rO  rv  rE  r<   r?   r>   r;   rY  r   in_type_nameout_type_namerS   ry  rz  r6   r  process_relations)&r"   r  epic_link_fieldtotal_t1r   r  r  r.  issue_parentissue_epic_keyrE  parent_ext_id	sub_tasksissue_links
issue_linklink_ext_idanalysis_t2subtasks_t1additional_parent_relationlink_relationrv  child_ext_id
child_task	relationsrelation_optionrelation_ext_idrb  subtasks_t2	map_namesrelations_t1issue_relationrelation_coder{  ry  rz  
rel_ext_idrelations_t2total_t2s&                                         r#   _process_relationsz JiraAPIImport._process_relations6  s4   
  	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	
 	
 	
 4$$ 	.O"''(lmmmM++-----	. 	.s5   D;V
W4WW6FgA.g>DgA5iu)   Обработка компонентовc                 p   t           j                            |ddddg          }|sFt                               ddd||d          }|j        d	v rd|_        |                    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
           t9                       | j        xj        dz  c_        J#  t=                       | xj        dz  c_        | j                             d| d d!"           Y x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 )(uG  https://docs.atlassian.com/software/jira/docs/api/REST/1000.824.0/#api/2/project-getProjectComponents
        Пока грузим как списки, после доработки будут отдельные обекты

        Args:
            project_info (dict): проект из джиры как есть
        r  Tr   rX  r\  u   КомпонентыiI rj  rM  rH  r   Nr=  )descr_documentdefault_ownerdefault_responsiblerm  rA  r@  rl  rr  r,  r   archivedFr  u   Компонент rZ  assigneeTypePROJECT_DEFAULTPROJECT_LEADCOMPONENT_LEAD
UNASSIGNEDr   r   r5   u3   Ошибка загрузки компонента ERR-0053r  r  rA  rh  rt  r   rm  r<  )%r]   rJ  r_   rc  rv  rO  _get_project_componentsr8   r:   rK  rL  r  r@  r   rA  rl  r\  r[   r  rV   r  r   rm  r.  r  create_descr_document
text_draftr   r;   rE  r=   r>   r?   r   r%  rX  r   )r"   r  r,  component_folderr   rE  components_lists          r#   rn  z!JiraAPIImport._process_componentsG  s{    "+//#!%'	 0 
 
   	4%//+%"'  0     '+CCC/3 ,!!d!333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   K)H(KA Lu   Обработка версийc                    t           j                            d|ddg          }|sFt                               ddd||d          }|j        d	v rd|_        |                    d
           |                     |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           t=                       | j        xj        dz  c_        #  tA                       | xj!        dz  c_!        | j        "                    d | d!d"#           Y VxY wtG          t           j        $                    d$d%|gg d&gd'                    |_%        |j%        rd|_&        n5tG          t           j        $                    d$d%|g(                    |_&        |j        r|                    d
           d S d S ))Nreleaser   rX  )r:  rA  r   ReleasesTi0 rj  r  rH  r   rf  r  )rE  r   r@  rT   r   rC  rD  rj  rA  r   rl  rr  r,  zlist.release:defaultrR   r   r   r   r>  releaseDater  Freleasedr  r  u   Релиз |    был изменен пользователем. Изменения из импорта не будут примененыr5   u+   Ошибка загрузки версии r  rN  r  rA  rh  rt  r  r<  )'r]   rJ  r_   rc  rv  rO  _get_project_versionsr8   r:   rK  rL  rN  rm  r  rT   r@  rA  r   r   rC  rD  r}  r  rj  r  r.  rl  set_default_statusrk   r!  r;   rE  r=   r>   r?   r   r%  rX  r   )r"   r  r,  release_folderr  rE  version_lists          r#   rm  zJiraAPIImport._process_versions  s*   )--#%' . 
 
  	2#--""' .  N '+CCC-1*D111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   J)G1JA K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 в фильтрах задач
        rj  )rm  r8  T)r  ubqlbqlr   rt  rW  " (r  jqlr  jqlQueryapplinkrpcUrlr   2--------------------------------------------------u   ФИЛЬТР: Fensure_asciiTrH  zJQL:	zUBQL:	zBQL:	r  u0   : ошибка преобразования JQL rY  zERR-0066r  r  NuC   Обработка JQL в фильтрах выполнена за r  ru  )#r   r-   r8   rK  rL  r  process_timer]   r  r   r   rS   r  r   r_   r  r  r  ext_urlnetlocr9   get_modifiedr  r{   r  r  rO  r;   r  rk   r!  r<   r=   r?   r  )r"   r  rL  r  task_filtersr  
filter_msgr  r  r  rpc_urlr  r  rE   rb  r  s                   r#   r  z%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_audita  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   эпикrT  r  u-   Обрабатываем тип задачи Nr   r=  rE  r  r  r  scoper   ri  r  r  rt  r  z::\d+)::r5   u   ext_id типа задачи r  r   Trx  rV  r   u2   Поиск типа задачи по имени 'rf  r  uW   Ошибка объединения одноименных типов с именем 'u*   ': одинаковый источник 'zERR-0118r  )r@   r  u   Тип задачи 'u2   ' не найден. Создание новогоrh  r  r  rS   r8  ui_colorr   r  )r   r   r  re  r  rE  r8   )r  r8   rk   r  r:   rK  rL  r_   r]   r  r   r  findallrE  r   r!  r&  r-   rO  r  r  r?   r>   r  r   r;   r  rM   r\   r  rE  )r"   	name2codera  r  r  r  issue_type_scope_idrT   ext_id_patternissue_type_nameissue_type_aliaslogic_type_ext_id_oldlogic_type_ext_id_mergedtemplate_codere  s                  r#   _process_issue_typez!JiraAPIImport._process_issue_typei  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          |	_        t1          |	j                  t1          |
          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         t9          t;          fd'                      d(                    d          }	                      |          |	_        d|	_         n9#   j        !                    d) d*|	j         d+j         d,d-d./           Y nxY w|	                    d           tE                        j        xj#        d0z  c_#        dS )1u   Импортируем workflowrT  r   ra  Nr   r=  entityIdrW  r  rR   rd  r   TrH  rj  r8  r  rZ  rt  rk  r<  rl  rn  )rE  rj  r.  r/  r0  r1  c                 V    g | ]%}j         j        j        j         d j         d | &S )r=  )r8   rK  rL  r   )r  str"   rj  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%   r4  rE  ru  uN   DEV: Fatal Вероятно, сломали создание статусов!r5  ro  rw  rx  r:  c                 j    t          |                     d                    t                    k    S r  r8  r9  s    r#   r   z1JiraAPIImport._process_workflow.<locals>.<lambda>I  s&    3vzz$/?/?+@+@C	NN+R r%   r<  r=  r>  r?  rf  r@  rA  rB  r5   )$r  r8   r:   rk   r  rK  rL  r]   r  r_   r   r   rO  r  r  r   rZ  r  r  r   r  rm  r!  r  r   r  r  r  r   r   rC  rD  rE  r?   r;   rE  )r"   jira_statusesr  jira_workflowworkflow_idtemplate_workflowr   r  r  r  r  r  r  r  rG  r;  rj  s   `              @@r#   _process_workflowzJiraAPIImport._process_workflow  s      ++J77 	; 	;K/:M+d+,,!--k:: Q	7 Q	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1cQ	7 Q	7s   	!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 )(Nrz  r=  rX  rE  r  r  r<  u+   Не импортировался workflow r   rW  r|  rR   Trd  r   r   r   rH  rr  rs  rY  r  rT   rh  r}  rt  ru  rv  rw  rx  rj  r  ry  r  rz  rS   ri  r~  r5   )r  r8   r:   rK  rL  r]   r  r_   r  rm  r   r   r  r  r  rO  rk   r!  r   r  r  rS   r   r  r   r  r;   rE  )r"   rz  default_task_workflow_ext_idr  r  r  re  r  logic_type_idrk  r  rT   r  r  rj  r  s                   r#   _process_workflow_schemez&JiraAPIImport._process_workflow_scheme]  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  r_   r[   rL  r8   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   rh  rU   rj  cache_schemesru  r<  r@  r  rt  N)rL  priorities_cacher]   r  r   r   r  r  r   r   rN  r-   )r"   field_config_schemer  r  field_configsfield_configkvs           r#   rk  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 )r5   Nr/   r  rU   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  r<   )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.dirtyr{  r5   r  Trx  u
   Дамп 'u   ' выполнен за r  ru  )r  r  r8   rw   rx   ry   r   r"  rz   json_object_countr  r{   r  r   r   rO  rk   r  r)   )	r"   api_funcr   r  r   r   r   r  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+)r8   rw   rx   ry   rz   r{   r  )r"   r   r   r   r  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  r  r  uN   Отсутствует файл info.json в каталоге проекта 'rf  rk  )r8   rw   rx   ry   r  r   rM  rk   r!  rz   r{   r|   )r"   projects_dirr`  r  r   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  r  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
  )r8   rw   rx   rz   r{   r|   )r"   r  workflows_filer   s       r#   r  z/JiraAPIImport._get_simplified_project_workflows2  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
  r8   rw   rx   rz   r{   r  r"   r  r`  r   r  s        r#   r  z*JiraAPIImport._get_issue_types_for_project9  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#   r|  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#   r4  z JiraAPIImport._get_project_rolesE  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  rg   r  
/info.jsonr
  r8   rw   rx   r   listdirrz   r{   r|   )r"   r  	board_dirrI  r   s        r#   r<  z!JiraAPIImport._get_project_boardsK  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  rb  r  r  r
  r  )r"   r  sprints_dir	sprint_idr   s        r#   rw  zJiraAPIImport._get_all_sprintsQ  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#   r  z#JiraAPIImport._get_project_versionsW  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#   r  z%JiraAPIImport._get_project_components]  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!  r  r  r5   )	r8   rw   rx   ry   r   r  r  r   rM  )r"   r  r]  unprocessedr  r  s         r#   r  z"JiraAPIImport._count_project_tasksc  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   r  r  r5   r  r
  )r8   rw   rx   ry   rk   r!  r   r  r  r   rM  rz   r{   r|   )
r"   r  r  r  only_processingr  r%  r  task_idr   s
             r#   r  zJiraAPIImport.get_project_taskst  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"
        rt  issueTypeScreenSchemeglobalActionsr   )BROWSEPROJECTSCREATEISSUES
EDITISSUESr<  issueTypeIdactionsr:  r5   re  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   r  r_   r  r   rL  rN  r   )r"   smart_configscreen_schemer  r%  r  r   ra  r6  issue_type_screensr;  r:  issue_type_screens                r#   _get_project_screen_schemez(JiraAPIImport._get_project_screen_scheme  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 )Nr`  ra  rb  rc  r   u(   Дамп бизнес-процесса 'u   ' как XMLrg  rh  Tri  zwb+uB   Не удалось получить бизнес-процесс 'u   ' как XML: ro  r  r~   r  
error_type)r   rx   ry   r   rmtreemkdirr8   rk   r  rM   get_workflow_as_xmlr  r  quoter   r}  rz   r  r<   r?   )r"   r  r  r  r  rk  r  r  r  r   rb  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   r  r`  s     r#   r  z>JiraAPIImport._get_field_config_issue_type.<locals>.<listcomp>  s5     
 
 
 
4 !!
 
 
r%   rf  T)
is_defaultre  r   )r5  fieldConfigurationIdc                 P    g | ]#}|d          dk    t          |d                    $S )r5  re  r  )r  field_configurations     r#   r  z>JiraAPIImport._get_field_config_issue_type.<locals>.<listcomp>  s@     
 
 
#"=1Y>> #M233>>>r%   r5  rH  )r   contextisHidden
isRequired)issuetypeIdrL  rM  rK  )rM   get_issue_for_project"get_field_configuration_issue_typeget_field_configr   r-   get_field_config_fieldsr  )r"   field_configuration_scheme_idr  issue_types_projectfield_configuration_mappingfield_config_defaultissue_types_schemefields_usedrJ  r  field_configuration_idr   
field_usedra  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   r
  r5   u9   Не удалось получить опции поля u    в контексте r  responsez HTTP: Response text -> zERR-0109r  r~   r>  NisAnyIssueTyperK  options)rM   &get_project_field_configuration_schemer[  r   r  !get_field_context_project_mappingget_field_contextget_field_context_optionr<   r>   r6   r]  r   r8   r?   #get_field_context_issuetype_mappingr_   r   r0  )r"   r  rS  rX  rZ  field_used_id
context_idrK  context_optionrb  
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  r   )r   r   )r"   r.  attachments_pathr  s       r#   r  z$JiraAPIImport._get_issue_attachmentsB  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
  )rz   r{   r  )r"   r.  comments_file_pathr   r  s        r#   r  z!JiraAPIImport._get_issue_commentsI  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
  rz   r{   r|   )r"   r.  rp  r   rD   s        r#   r  z!JiraAPIImport._get_issue_worklogsO  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
  rr  )r"   r.  properties_file_pathr   s       r#   r  z#JiraAPIImport._get_issue_propertiesU  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
  rr  )r"   r.  watchers_file_pathr   s       r#   r[  z!JiraAPIImport._get_issue_watchersZ  s     %l 3CCC$d++ 	 q99Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 ru  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
  )r8   rw   rx   ry   rz   r{   r|   )r"   global_settings_file_pathr   s      r#   rb   z'JiraAPIImport._get_jira_global_settings_  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.jsonrv   cloudId)	rM   get_cloud_idr8   rw   rx   rz   r{   r~   ra   )r"   r  	data_filer   s       r#   _get_cloud_idzJiraAPIImport._get_cloud_idf  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   rK  r_  )
r8   rk   r  r   r   rM   _get_field_context_get_field_optionsr  r   )r"   r   rK  r_  s       r#   _get_fields_contextz!JiraAPIImport._get_fields_contextm  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  r  zusers.json.newrk  r{  r  r  zgroups.json.newa)r  r  r  r  r  r8   r:   r   rx   rw   ry   r   r  rz   r  r{   r  r_   r[   rL  r   r  r  r  r   close)r"   r  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 )Nry  rv   )rM   get_configurations_of_jirar8   rw   rx   rz   r{   r~   )r"   global_settings_datarz  r   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   r  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  r5   r	  r  r   rg  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_idrL  )r8   r  r  rL  Fu0   Не удалось скачать ссылку r  r  r  r  r  r  r  r  r   ))r   r  r  r  r  r8   rk   r!  r  r  urljoinrM   rn  r  r  r   r  r  r  r   r   r]   r9  _get_filenamerx   CmfImportDownloadr_   rK  rL  r  r   
downloadedrO  r;   r<   r=   r  r  r  r  r  )r"   r   r  r.  r>   r  r   rn  r  encodingr  attach_filenamer  r  r   r  r   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   rK  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   r_   r   r  r   r   )r"   rX  r   contextsrK  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_  r  r   ri  r5   r  
userpickerr  multiuserpickergrouppickermultigrouppickerr  N)rM   get_issue_metar   r_   r8   r9   ri   r(  r\   r   r   r  r[   r  r  r   rL  r   )r"   r.  metar   r_  r  cur_optcustom_field_typesr  r	  rA  r  r   s                r#   r  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   r`  r  rv   Fr  )rM    get_simplified_project_workflowsra   r   rx   rz   r{   r~   )r"   r   r  ra  r  r   s         r#   "_dump_simplified_project_workflowsz0JiraAPIImport._dump_simplified_project_workflowsT  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>n  s    .Q.Q.Q7w.Q.Q.Qr%   r  zchangelog,renderedFields)r  expandrq  r5   u   Задача 'r   rf  r   r  exist_okr  r  r=  r   rg  rq  content)r   r  r  )r  rL  r   )r  rL  r8   rm  r   r^  zworklog.jsonrv   r  r"  r]  (   c                     g | ]}|S r/   r/   )r  r  s     r#   r  z1JiraAPIImport._dump_task_part.<locals>.<listcomp>  s+     C" C" C"07GC" C" C"r%   r#  r   r  rX   r[  r   zcomments.jsonu#   Дампим комментарииr{  r  r  r   r/  zproperties.jsonzwatchers.jsonr  r   r  r  r_  u0   Не удалось скачать задачу rY  zERR-0111r  r~   r>  uB   Не удалось получить задачи проекта 'r   r)  )5r   r_   r  r   rM   r  r   r8   r:   r;   rk   r  rx   r-   ry   r   r   rA  r  rK  rL  r]   r  r   r  r  r.  r  r  rO  r  r[   rc   r   r"  rz   issue_get_worklogr{   r~   r\   get_changelogr  get_commentsr  r  r  r  get_issue_remotelinksget_issue_propertiesget_watchersr  r<   r?   )&r"   r  r  task_chunk_queuetasks_that_are_doner  r  r  r]  rq  r.  r  task_dir_tmpr  task_ext_idattr  r  download_urlatt_pathatt_path_tmp
att_ext_idr  worklog_file_namer   worklogsr  r  comments_file_namer  r  properties_filewatchersr_  watchers_file	info_pathr  rb  s&                                         r#   _dump_task_partzJiraAPIImport._dump_task_partc  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 )Nr`  /tasksTr  r   2   c                 4    g | ]}j         ||z            S r/   )task_id_list)r  r  r"   task_chunk_sizes     r#   r  z-JiraAPIImport._dump_tasks.<locals>.<listcomp>  s;     
 
 
 aO 334
 
 
r%   _dump_task_part_r5   )r  r  r  r  targetr   rB   u   Запущен r  u&   Тайм-аут дампа задач r  u   ч u   м u   сtimeoutu$   Возможно завис дампzERR-0055r  r~   r>  u"   Ошибка дампа задачuK   Закончили параллельное скачивание задачu   Ошибок: )r   rA  r   Queuer   r  r  r  r   r   Threadr  r   r  r8   rk   r  r   is_aliver?   TimeoutErroremptyr_   )r"   r  r  r  r  r  task_chunksr  r  threadsr  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   r  r   r  r   r  r1  BROWSE_PROJECTSr  r$  levelsro  r  r   r`  /issue_security_scheme.jsonrv   )r8   rk   r  rM   !get_project_issue_security_schemer_   r\    get_issue_security_level_membersr   r  rw   r   ry   r   r"  rz   r{   r~   )r"   r  r8  security_schemesecurity_level_membersr%  security_levelrn   member	dump_filer   s              r#   #_dump_project_issue_security_schemez1JiraAPIImport._dump_project_issue_security_schemeO  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"r`  z/smart_config.jsonr{  )	projectInformationprojectSchemesprojectIssuetypesprojectVersionsprojectComponentsprojectMembersprojectCustomfieldsprojectGlobalActionsprojectWorkflowActionsr   r   )r_  ERR-0056r  r~   r>  )r8   rk   r  r   ry   r   r"  rz   rM   get_project_smart_configr   r<   r?   r-   r{   r~   )r"   r  smart_config_filer   r8  r_  rb  s          r#   _dump_smart_configz JiraAPIImport._dump_smart_configl  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   )	r  nowtimezoneutcstrftimepytzlocalizestrptime
astimezone)r  r  r  dt_tzdt_strs        r#   _datetime_in_user_tzz"JiraAPIImport._datetime_in_user_tz  s    P8$(():)>??HHPP]2!!("3"<"<R"H"HIITTUWXX''r%   c                 P5   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 }| j        s|                                rot+          |d          5 }t,                              |          }|                    d          }d d d            n# 1 swxY w Y   |r|                     ||          }|
                                rt5          j        |
|           nt8                              |d	
           t=          j                    }| j                             |          }tC          |          |d<   d }| j        j        s| "                    |          }| j        j                            d           tG          |d          d          }|                                rt8          $                    |           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/           tG          |d          d0          }|                                rt8          $                    |           g }t+          |d          5 }| j        -                    |d                   D ]b}|.                    |d                    | j        xj        dz  c_        |/                    t,          0                    |          d1z              c	 d d d            n# 1 swxY w Y   | j        1                    |d                   |d2<   | 2                    ||           n| j        1                    |d                   |d,<   d|d,         vr|d,         d         |d,         d3|d,<   n/| j        3                    |d,         d                   |d,         d4<   |                    d5i           |d,         d5<   | 4                    |           |                    d6          r| 5                    |          |d-<   |                    d7i           |d.<   | 6                    |d.                    |                    d8          }|r| j        7                    d9|            | j                            |d:         d	;          |d8<   | &                    |d8         | j8                 | j                                                   | j        j                            d<           tG          |d          d=          }|                                rt8          $                    |           t+          |d          5 }| j        9                    |d                   D ]G}| j        xj        dz  c_        |/                    t,          0                    |          d1z              H	 d d d            n# 1 swxY w Y   | j        j                            d>           tG          |d          d?          } |                                 rt8          $                    |            t+          | d          5 }| j        :                    |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        A                    dH|"d          dI|% dJ           Y d }%~% d }%~%ww xY w|$                    dF          r>| &                    |$dF         | j8                 | j                                                   W|"                    dA          r |#D ]}&|"dA         $                    |&           |/                    t,          0                    |"          d1z              2	 d d d            n# 1 swxY w Y   | j        j                            dK           tG          |d          dL          }'|'                                rt5          jB        |'           |'                                 tG          |d          dM          }(|(                                rt5          jB        |(           |(                                 	 | j        C                    |d         @          D ]L})| j        
                                r  d S | j        xj        dz  c_        | j        j                            dN|)d                     | j        D                    |)d                   |)d4<   | j        E                    |)d4         dO         d                   |)d4         dO<   | j        F                    |)d                   }*| j        j        rCdPdQdR | j        G                    |)d                   D             ii}+|*H                    |+           |*|)d4         dS<   | j        j        sI| j        I                    |)d                   },t          t          |,          dk              |)d4         dT<   |d         |)dU<   |'                    tC          |)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        K                    |)d                   D ]}/| j        
                                r   d S |/dY         |)d         k    r4| j        xj        dz  c_        |(                    tC          |/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        L                    |/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        M                    db           d d d            n# 1 swxY w Y   !# |j=        j>        $ r}5|5j?        j@        dck    rJddtC          |5          v sdetC          |5          v r(| j        7                    tC          |5                     n"| j        '                    df|) dgdhd'(            Y d }5~5$d }5~5w | j        '                    df|) dgdhd'(            xY wn8#  | xjN        dz  c_N        | j        '                    di| dgdhd'(           Y nxY w| j        7                    dj           tG          |d          dk          }6|6                                rt8          $                    |6           t+          |6d          5 }| j        O                    |d                   D ]o}7| j        
                                r d d d             d S | j        xj        dz  c_        |/                    t,          0                    |7          d1z              p	 d d d            n# 1 swxY w Y   | j        7                    dl           tG          |d          dm          }8|8                                rt8          $                    |8           t+          |8d          5 }| j        P                    |d                   D ]}9| j        
                                r d d d             d S |9                    d8          r>| &                    |9d8         | j8                 | j                                                   | j        xj        dz  c_        |/                    t,          0                    |9          d1z              	 d d d            n# 1 swxY w Y   | j        7                    dn           | j        Q                    |          }:tG          |d          do          };t+          |;dp          5 }t,          (                    |:|dqdrs           d d d            n# 1 swxY w Y   dtt8          jR        du<   | j        xjS        |z  c_S        | j        T                    d	v           t                       dwt8          jR        du<   t5          j        |d         |
           tC          |
          |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|           tG          |d          d}          }=|r| V                    |d                   \  }>}?|=                                s5| j        j        A                    d~|	 d|d          d|= d| d	           d }n-|>s+| j        j        A                    d|	 d|= d| d           d }|d         d         s;|d         d         }@| j        '                    d|@ d|@ d|	 d| d	dd&d'(           n@| j        r#| j        j        A                    d|	 d           t          jW        X                    t          jY        jZ                  [                    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        7                    |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jN        |Cz  c_N        `#  | xjN        dz  c_N        |                    d          r#| j        '                    d|	 ddd&d'(           n!| j        '                    d| dd&d'(           Y xY w| j        7                    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>  s2    !l!l!lCPUJ!l[^_j[k!l#e*!l!l!lr%   r  r  Tr  P   r   r   r   r5   u   Дампим "rW  r  r  )r  )r  timeZoner
  rf  rk  	dump_dater`  u   Дампим права/permissions.jsonr{  permissionsholderro  r  	parameteru0   Не удалось сдампить права r  r  r~   r>  )r8  r  workflowSchemerb  jira_screen_schemerX  u/   Дампим типы задач проектаr  r  rz  )r   r  r  ra  rt  
fieldsUsedr  u1   Ищем руководителя проекта r"   )absoluteu*   Дампим статусы проектаr  u$   Дампим роли проектаr  )r   r+  r&  	actorUserrP   )r  r  r  i  u&   Пользователь к роли "u   " не найден. u+   . Возможно он был удаленu&   Дампим доски проектаz/boards/z	/sprints/r0  r   r%  r&  c                     g | ]}|S r/   r/   )r  qfs     r#   r  z0JiraAPIImport._dump_projects.<locals>.<listcomp>m  s%     5& 5& 5&/15& 5& 5&r%   r   rn  r  rv   )r  simpleu&   Дампим спринты доскиoriginBoardIdu   Спринт u    уже скачанrq  r   r  r   )r   r   r   )r   r   r   r4  i  z"The board does not support sprintsuD   Данная доска не поддерживает спринтыu4   Не удалось сдампить спринты zERR-0057rN  u   Не удалось сдампить доски, возможно проект не поддерживает доски или у вас нет прав project_info=u(   Дампим версии проектаr'  u!   Дампим компонентыr)  u$   Дамп ссылок проектаz/shortcuts.jsonr_  r	  F)r   r  r   NO_CACHErx  1r  u&   Дамп данных проекта "u   " выполнен за r  ru  r  u$   В каталоге проекта "r  u5   ), отсутствует каталог задач (u@   ). Дата последнего успешного дампа (u   ) будет сброшена.u/   В каталоге задач проекта "ud   ) отсутствуют задачи. Дата последнего успешного дампа (r  havePermissionu   Не удалось выполнить дамп задач проекта. Пользователь не имеет разрешения 'uA   '. Предоставьте пользователю право 'u0   ' в схеме прав для проекта 'r}  r  zERR-0128u/   Дамп всех задача проекта 'u   ' будет обновленr  )r  r  u$   Дамп задач проекта 'r)  u    (в периодu    с u    по u4    включительно, часовой пояс: zproject = 'rf  z AND updated >= 'z AND updated <= 'z ORDER BY updatedc                 8    g | ]}t          |d                    S r   r  )r  r  s     r#   r  z0JiraAPIImport._dump_projects.<locals>.<listcomp>-  s2     - - - $  T
OO- - -r%   rS  u$   Дамп задач проекта "u   В проекте 'u5   ' нет новых/обновленных задачrK  u   Проект "u   " является приватным и не может быть импортирован, отключите приватность в Jira или предоставьте пользователю праваzERR-0058u2   Не удалось получить проект u0   Закончили дампить проекты)arequestsr-  r<   rh   r8   rw   rx   rA  r   r  r:   r  rk   r  rM   r\   user_find_by_user_stringr  get_permissionsrefresh_dumpry   rz   r{   r|   r_   r  r   r   r   makedirsr  r  r  r-   r	  r   r"  get_project_permission_schemer  r?   r~   r  get_project_schemeget_project_screen_schemerk  rO  r   r  r  get_project_workflow_schemer  get_workflow_schemerD  r<  r  r9   r[   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_filtersr0  get_agile_board_projectr   get_sprintsget_sprint_issuesr  r>   get_project_versions_paginatedget_project_componentsget_project_shortcutsenvironr  rO  r;   r  r  r  r  r  r  get_project_issues_count_duringjql_get_list_of_ticketsr  r  r  )Gr"   r2  rootr  r  rY  r   r  r   r  r`  project_tmp_dirr~  r  user_tzuser_permissionslast_dump_dater   current_dumplast_dump_date_utcr  r  r8  permission_fileperm_sch	perm_dict
types_filer  ra  r  statuses_filer  	role_filerole_uri	role_infounfound_actorsr.  rb  unfound_actor
boards_dirr$  rH  advanced_settingsquick_filtersboard_projectsr!  board_info_filer4  sprint_pathsprint_file_pathr.  r  r  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_msgr  sG                                                                          r#   _dump_projectszJiraAPIImport._dump_projects  s;!   }./8;K  	USTTT!l!lZ8H!l!l!l88::CCJOOD)))$())28}}- o	d o	dG J!%.K"6?Lk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  "&( `Y-=-=-?-? `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 K7&67H&I&&QOO--iZii iYhi i JVi i [fi i i #!-#) .     ( .66ylyyy   )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+  Ah3D+Ah0IAhI	Ah!I	"D8Ah!S<B7Q43S4$RS6AhS	Ah	S	
DAh"BY4(Ah4Y8	8Ah;Y8	<IAhA*e	=Ah	e	Ahe	A8Ah	Ap<Ah(Ap<Blp<m0Am+%p<*m++m00B?p<0Ah<q 	 Ahq 	C
Ah>AI?GAI?"}
>AI?
}AI?}AI?A'AG=AI?EAGDAI?DA*AGE26AF4	F(AGF4AF8F8AGF;AF8F<AGGAI?GAI;GA<AIIAI?I'AI;I;AI?I>AhI?3AJ4J2A5AhL'=AOM$AhM2AAON9AhOAO		O	AhOAO		OA3AhQ =AT1Q=AhRBAT1T%AhT1AT5	T5AhT8AT5	T9AAhVAWV7AhWAW	WAhW
AW	WB'AhY2AZZAhZAZ	ZAhZ!AZ	Z"L3AhgAg=g1Ahg=Ah	hAhhAh	hAhhA+Aj	c                    t          t          dd          r| j        j        sddlm}m} 	  || j        | j                  }| j        j        	                    d|j
                    || _        | j                                         d S # |$ r*}| j        j                            |           Y d }~d S d }~wt          $ r,}| j                            d| ddd	
           Y d }~d S d }~ww xY wd S d S )NIMPORT_JIRA_BIGGANTTFr   )BigGanttManagerPluginNotFoundErroru3   Дамп данных из плагина BigGantt u]   Не удалось произвести дамп данных из плагина BigGantt. zERR-0138BigGanttr~   r>  )r  r   rM   r\   modules.jira.managersrq  rr  r8   rk   r  plugin_versionr  	dump_datar!  r<   r?   )r"   rq  rr  r  rb  s        r#   _dump_bigganttzJiraAPIImport._dump_bigganttT  sn   61599 	$)/ 	RRRRRRRR*?4?DIFF&++c(Jacc   !)'')))))& 4 4 4&..s333333333   ))6036 6'% *         	 	 	 	s$   AB C.B55C.!C))C.c                 6	   t          t          dd          | _        | 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!tH          j%        d"<   d#| j        _&        | j        '                                 tQ                       d$tH          j%        d"<   | j        j        	                    d%           | )                                 | *                                 d&S )'u_   
        Загружаем все данные из апи, кроме аттачей
        IMPORT_REFRESH_DUMPFd   u   Свободно места: r  u$   Скачаем данные из APIu9   Дампим глобальные настройки JirarI  Tu'   Дампим пользователейr	  uA   Не дампим пользователей из-за опцийrJ  u   Дампим статусыrT  u    Дампим типы задачr  issue_security_schemesu*   Дампим бизнес процессыra  u7   Дампим схемы бизнес процессовrz  u   Дампим экраныr<  r9  u!   Дампим приоритетыr  r  u+   Дамп решений(резолюций)r  u   Дамп фильтровr  r   r.     r/  u   Дампим проектыN)+r  r   r5  r8   rw   r   
disk_usager9   rk   r  rM   r\   r  r  r  rb   rc   r   r   r_   r  r  ri   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   rK  r  rO  r;   rn  rw  )r"   download_pathr]  usedfreefree_percents         r#   download_datazJiraAPIImport.download_datal  s
   
 $F,A5II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.  )rE  r  r  r   r   rz  Trx  r/  )r   rK  r]   	CmfImportr_   r8   r   r  r  rE  r  rO  r;   )r"   r8   s     r#   rl  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  r`  r!  c                 V    i | ]&}|                     d           |d          |d         'S )r  rS   r   r  s     r#   rb  z6JiraAPIImport._process_permissions.<locals>.<dictcomp>  sE     
 
 
ww{##
c&k
 
 
r%   r  rk  r=  r   rW  TrE  rm  r8   r   rH  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  )rS   r  u4   Не нашли соответствия права rE  r  r  rt  )project_permissionr@  r   u*   Не найдено правило для zERR-0059rZ  r5   r#  ro  projectRole)applicationRoleanyoneprojectLeadrX   r   sd.customer.portal.onlyr  r   r$  u9   Не нашли пользователя для прав zERR-0060rA  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.coderh  r@  u   В схеме uR    не удалось скопировать разрешения из права 'u   ' в 'rf  zERR-0113CmfProjectPermSchemeRule)*r  r  r   rz   r{   r|   r8   rK  rL  r]   CmfProjectPermSchemer_   rm  r   rO  rk   r!  r  r   r  r)  r  r?   r>   rE  r  r  r   r  r  r  r  r  r  rM   r\   r\  r  r*  r   r  r;   ) r"   r  r  rU  r  map_permr   perm_scheme_dictrE  perm_schemerule_list_access_fieldsrule_bool_access_fieldsrule_access_fieldsrule_fieldsscheme_rule
list_field
bool_fieldrW  r  rQ  r  r  ra  rA  r  copy_access_rulesfrom_rule_codeto_rules	from_ruleto_rule_codeto_rulerule_access_fields                                    r#   rh  z"JiraAPIImport._process_permissions  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  r  r  r  r  r=  r5   u   [Задача ID: z] r   rf  r|  i   r  r  z MB)u   Скачивание re  r  u	   Файл u    сохранен в 'rg  u"   Ошибка скачивания r  zERR-0027r  r~   )r  r  r?  ext_href)r   r_   r8   r:   r]   r  r-   r   r  r  r  r   r   r  rk   r  rM   download_filer   IMPORT_DOWNLOAD_TIMEOUTr  rO  r;   r  r<   r=   r?   r  )r"   download_queueerror_queuer  download_job_iddownload_objr  file_urlr   ext_id_splittask_id_msg	file_sizefile_size_mbrb  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_hashrL  rh  )r  rh  F)r   rk  rm  r  r   r  r  r  r  r<  u3   Нет вложений для скачиванияu'   Скачивание вложений: _download_file_worker_)r  r  r  u    Запустили задачу ru  rt  r  uC   Закончили скачивание файлов, ошибок )r8   rk   r  r   r  r  rK  rL  rw   rx   rh   r-   rM  r]   r  r%  r   r  r   r   r  r  r  slistr  r   r;   r  r   r:   r_   )r"   r  r  r>   main_filterprojects_pathattachment_countr  r   r  project_pathpath_filterdownload_countr  r  r  r  r  s                     r#   download_fileszJiraAPIImport.download_files  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   r  r   r  r`  r  r=  r   rW  Tr,  r   rH  r  r  r  rN  r~  r$  ro  r   r  zvar:current_userrR   r  u0   Не найдена проектная роль r  zvar:project_ownerr   z
var:authorrX   zvar:responsiblerA  rE  r  r  rt  r$  r  u!   Не найдена группа Usersr  r  Fr  u+   Не найден пользователь )groupCustomFielduserCustomFieldu>   Не найдено пользовательское поле r  zsdesk-client:defaultu-   Неизвестный тип правила r5   uF   Не удалось создать правило для уровня rY  zERR-0070rZ  defaultSecurityLevelId)(r8   r:   rk   r  r   rz   r{   r|   rK  rL  r]   CmfSecurityLevelSchemer_   rm  r   r   r  rO  r`  CmfSecurityLevelRuler   r  r   access_memberr  r<   r*  rM   r\   rE  r  rB  r  r-   access_task_fieldsr;   r>   r?   r  default_task_security_level)r"   r  rQ  r  r   r  scheme_ext_idrn   	level_msglevel_ext_idr  
level_ruler  member_typemember_valuer  r  rE  rA  r  r  rb  ra  r  r  r  s                             r#   ri  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  rj  r  rc  F)r)  r   r  visible_filterrequiredrequiredChangedr   r   ri  r5   r  textarear   field_custom_type	textfieldr-   floatrn  )rP  radiobuttons
choice_strc                 ,    i | ]}|d          |d         S r   r   r/   r  opts     r#   rb  z,JiraAPIImport._map_field.<locals>.<dictcomp>  "    VVV#c$iWVVVr%   r_  r  )multiselectmulticheckboxeschoice_multic                 ,    i | ]}|d          |d         S r  r/   r  s     r#   rb  z,JiraAPIImport._map_field.<locals>.<dictcomp>  r  r%   r  r  cascadingselectchoice_cascade_multi
datepickerdater  r  r  r  r	  )r  r  r  r  r   r}  u6   ) имеет неподдерживаемый тип 'rf  zERR-0064r  r  )r  r8   rK  rL  r  r   r?   r>   )r"   r   r  rD   r   r  s         r#   
_map_fieldzJiraAPIImport._map_field  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   rr  u8   Экран проектов Jira по умолчаниюTr   rE  rm  r8   r  _customrA  )r   ro  r@  import_custom_fieldsFuI   Отключен импорт пользовательских полейu8   Импорт пользовательских полейc                      i | ]}|d          |S r   r/   rE  s     r#   rb  z8JiraAPIImport._process_custom_fields.<locals>.<dictcomp>      WWWaqWWWr%   r   u!   Поле не кастомное r  r  r  r  r   r  )r  r  r  r=  )widgetr  r)  disabled_choices)r)  r   r  dirtyrE  r8   rm  r	  u,   Неудалось смапить поле 'r}  u   ): widget поля 'u7   ' не совпадает с существующим 'rf  zERR-0065r  r  u   Поле с именем r  u4   ) есть в таблице, мапим в негоr   u(   Создаем поле с именем u   ), и мапим в негоr  rK  r  r_  r   rw      seplengthdisabledc                     h | ]}|v|	S r/   r/   )r  r   default_choicess     r#   	<setcomp>z7JiraAPIImport._process_custom_fields.<locals>.<setcomp>J  s.     , , ,$'"/99  999r%   rH  )r  r   r@  ui_form_groupz%Y%m%d%H%M%S)meta_version
model_namerm  r  c                      i | ]}|d          |S r	  r/   rE  s     r#   rb  z8JiraAPIImport._process_custom_fields.<locals>.<dictcomp>y  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	  Fr  )	r   r-   r_   r.  rO  r   
cmf_hiddenr   choice_parent_id)r  
parent_optr   childchoice_modelcreate_options       r#   r	  z;JiraAPIImport._process_custom_fields.<locals>.create_option}  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   )6rL   r   r-  r]   r  r  r8   r9   ri   r(  rK  rL  rA  r_   r  rO  CmfUiFormGroupr   r   rk   r!  r   r 	  r  r  r   r  r	  r?   rm  r)  r  rL  r		  r   translit_striprN  r0  r   r.  r
	  r;   CmfUiFormFieldinvalidate_cachecustom_fields_gen_metar  r  r  custom_field_sync_update_modelsr   varsr   r   rK  )r"   ext_field_namer   rE  ui_view_formr	  shop_fields
new_fields
m2m_fieldsui_fieldr   r  current_choicescurrent_disabled_choicesrK  default_disabled_choicesr  
option_keyr		  ui_form_fieldfield_classr-  rr  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   rg  r  rX   r  r  r  r   rU   r   r  r   r   rW   r  r@  z	Epic Link)Sprintr   c                      i | ]}|d          |S r	  r/   rE  s     r#   rb  z<JiraAPIImport._process_transition_screen.<locals>.<dictcomp>  r	  r%   Fr   r   u    [переход]r=  z::transitionr   r8   rr  r  rh  r<  NT   Создан экран 'r}  r  r  )r  rE  r8   rm  u   Экран переходаrH     Экран uv    был изменен пользователем. Новые данные из импорта не применены)r@  r  )r  rm  tabsr5   rm  )r  r  r  rE  r   r     На экран $    добавлена вкладка 'tab)ro  r@  rE  r8   rm     C экрана D    пользователем была удалена вкладка 'r  uF   ). Новые данные из импорта не применены   На экране F    пользователем была изменена вкладка 'r  r   r
  r  r  r  r)  r  r	  rt      поле 'm   ' было изменено или уже добавлено пользователем во вкладку 'uF   '. Новые данные из импорта не примененыrx  rj  r  uy   ' было удалено пользователем. Новые данные из импорта не примененыrx      добавлено поле 'u   ) во вкладку 'rf  )8r]   r  r   r  r  rV   r  r  r  r   rU   r   r  r   r   rT   r  rv  rT  r  r  r   r8   rK  rL  rA  r_   CmfUiFormSchemeRuler  rk   r  rm  rE  r  rO  r!  r	  r   r  r+  r  r   r  r  r  r  r  r  r 	  r)  r	  r   r  r.  r!	  r;   )r"   rG  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_namer  
tab_ext_idr  jira_field_idr  r   jira_field_namer  r/	  s                             r#   rC  z(JiraAPIImport._process_transition_screen  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/   rE  s     r#   rb  z1JiraAPIImport._process_screen.<locals>.<dictcomp>   r	  r%   r   r   r=  r   r8   rr  r5	  r}  r  r  T)r  rE  rm  r8   r   r   r6	  r  waiting_for)r@  r   r~  rm  )rW  r  i  i  i  r  i  ip  )hiddenr  iX  i@  i(#  )	_main   Участники   Даты   Планu   Разработкаu
   Связи_addonr	  _descrrN  rW  FrU	  rH  r@  rh  )rm  rh  T)r8   rh  Nz-cmf_created_at)r   order_by)rW	  rX	  rV	  rY	  r[	  ro  r[	  rA  r;	  rY	  )r%  rh  click)r   rW  r   rt  r   r>	  u6    не найдена системная группа 'u   '. Возможно она была удалена пользователем. Поля на экране могут отображаться некорректно. Создайте группу с названием 'u$   ' и повторите импортr7	  r5   rV	  r  r8	  r9	  r:	  )ro  r@  rE  rm  r8   r<	  r=	  r  uL   ). Изменения из импорта не будут примененыr?	  r   r
  r  r  r  c                 R    |                      d          o| d         d         k    S )Nr   r   r   )r   rP	  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@	  rA	  uL   '. Изменения из импорта не будут примененыrx  rj  r  u   ' было удалено пользователем. Изменения из импорта не будут применены)r  r   r@  r8   rm  )r  r	  r  r5  rW	  )r  r  rX	  rB	  r  u   во вкладкуu   в группуr  rf  ),r]   r  r   r8   rK  rL  rA  r_   rk   r  r  rm  r   r   r  rO  r!  r 	  r   r  rM   r\   r	  rW  rU	  r  r   r;   r   r  r  r  r  r   r   r-  r  r  r)  r	  r  r.  ro  r!	  ) r"   r:  r'	  r;  rF	  rG	  rI	  ui_form_is_newform_fields
form_fielddefault_groupsrK	  r	  group_configcurrent_ui_form_fieldsui_form_fieldsr/	  r  r  r  num_tabsr;	  rM	  rN	  rO	  
jira_fieldr   r   r  r  
group_typerP	  s                                   @r#   _process_screenzJiraAPIImport._process_screen   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   r=  r   rr  Tr,  c                      i | ]}|d          |S r   r/   )r  rr  s     r#   rb  z8JiraAPIImport._process_screen_scheme.<locals>.<dictcomp>!  s    JJJ1T71JJJr%   r<  )rO  r   rH  r  r5  re  rE  r  r  r  r<  ;   Не удалось найти логический тип ro  CmfUiFormSchemer  r6  u8   Не удалось найти в дампе экран u    для zERR-0069u:   Не удалось импортировать экран zERR-0068r/  r0  r  )re  r/  r  r  r3  r4  r2  r  )rO  r  r  crud_choicer8   r   logic_typesr   u+   : Схема экранов проекта r  r  r/   )r_   r8   rK  rL  r]   rm	  rm  r  r  rC	  r   r  r   rO  r  r?   r   ri	  r:   ro	  r   rA  rO  r  r  r;   )r"   r  screen_scheme_datascreen_scheme_idrE  rO  r<  r  issue_type_datar  rT   r  r%  r;  r:  rI	  action_mappingr  r&	  s                      r#   rg  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    Импорт конфигураций полейrX  c                      i | ]}|d          |S r	  r/   rE  s     r#   rb  z5JiraAPIImport._process_field_conf.<locals>.<dictcomp>l"  r	  r%   r   r
  r  r  r  r   r   rK  r^  r
  Nr=  r   5   : Конфигурация полей проекта r   rE  r  r  r<  rl	  ro  CmfCustFieldConfSchemer  u    для типа     по умолчаниюr   rr  Tr	  rH  )r  r  r		  )r  r@  )r  r@  r8   rM  FrL  r  r_  r   rw  r	  r	  r	  )$rL  r_   r]   r  r   r   r  r  r8   rK  rL  r  r-  r  r   r  r  r  r?   r  rO  rN  r  r  r  visibler  r  r   r		  r   r	  r0  r   r.  r;   )r"   r  logic_type_fieldslogic_type_field_confr'	  rZ  r   r  r  rK  r   r   rT   r  r   r  r  field_idfield_ext_idr  r  r	  r-	  r  r		  r  r.	  s                              r#   _process_field_confz!JiraAPIImport._process_field_confc"  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 )Nr=  r   r   rr  r   u@   : Схема конфигурации полей проекта r   Tr  rH  rv	  rx	  r	  rN  r~  )r@  r  ro	  rm  r8   r5   r  r/   )r8   rK  rL  r]   rw	  r_   rO  r  r~	  rN  rm  CmfCustFieldConfSchemeRuler   r  rL  
calc_cacher!	  rR  )r"   r  rE  rR  r  r{	  r  field_confsrT   
field_confr  s              r#   rj  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           	         |d         }d| d| d}t           j                            ddd| dg          }	|	sdS |d         }
t           j                            |
	          sdt                               ||	|
||||
          }|                                 | j        j                            d|j	         d|
 d|	            dS | j        j        
                    d|j	         d|
 d           dS )u   Добавляет предыдущий код задачи в историю кодов при изменении проектаr4  r=  rE  r  r  r<  Nr%  rR   )r  r   rS   r   r   r   r   r  uE   ] В историю кодов задачи добавлен код 'u   ' из проекта u
   ] Код 'u6   ' уже добавлен в историю кодов)r]   r  r_   CmfTaskCodeHistoryr  rO  r8   rk   r  rS   r  )r"   r  project_datakey_datar   r   rL  project_from_idproject_from_ext_idproject_fromkey_fromcode_historys               r#   _add_code_historyzJiraAPIImport._add_code_history"#  s]   &v.E;EE/EEE(,,XvGaK^GaGaGa4b,cc 	FL)(--8-<< 	!44$! & ' 5  L O"''6DI 6 6dl 6 6'36 6    
 O"((iDIiiiii    r%   c           	         t          |j                                      dd          \  }}|j        j        }|                    di                               dg           }|D ]}t          d |d         D             d           }t          d |d         D             d           }|r|sG|                     |d         | j                 |	          }	| 	                    ||||	|d
         |           d S )Nr=  r5   r"  r#  c              3   2   K   | ]}|d          dk    |V  dS )r   r   Nr/   r  r  s     r#   r   z;JiraAPIImport._process_task_code_history.<locals>.<genexpr>F#  s0      QQ$d7my6P6P6P6P6P6PQQr%   r   c              3   2   K   | ]}|d          dk    |V  dS )r   KeyNr/   r	  s     r#   r   z;JiraAPIImport._process_task_code_history.<locals>.<genexpr>J#  s0      MM$d7mu6L6L6L6L6L6LMMr%   r   rZ  r   )
r-   rE  r   r  r   r_   r   r\  r[   r	  )
r"   r  rL  r  	task_datar#  r  project_itemkey_itemr   s
             r#   _process_task_code_historyz(JiraAPIImport._process_task_code_history?#  s*   T[))//a88Q(.	MM+r2266{BGG	  	 	GQQ''"2QQQ L MM''"2MMM H
   x %%gh&7&FD%QQF""	"   	 	r%   c                 "   t          d          5  	 | j                                        rn|                                }||                    |           n	 t
          j                            |g d          }|j        j        sx| 	                    |           t                       nH# t          $ r;}t                       | j                            d| d| dd	
           Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )NFr  T)ru  rS   r  rE  r  r  uS   ] Не удалось обработать историю кодов задачи: zERR-0140r  r  )r   r8   r:   r_   r  r]   r  r  r   r	  r;   r<   r=   r?   )r"   
task_queuer.  r  rb  s        r#   _code_history_workerz"JiraAPIImport._code_history_worker\#  s   5111 	 	?,,.. $..**?NN7+++!>--"      .  D  /5 ! 33D999LLLL     NNNO--}G}}x{}}"!* .        1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   AD/B.	D
#B.-D.
C381C.)D.C33DDDu$   История кодов задачc           	         |s!| j         j                            d           dS d}|T|}t          j                            ddd|gdd|gdd|gd	d|ggg d
g          }|s|                     d| d           dS g d
g}|r|                    dd|g           d| }t          j        	                    |          }t                       |sdS | j         j                            d| d|            t          j                    }| j                                        }g }	t!          | j                  D ]R}
| j                            | j        d|
 d|i          }|	                    |           |                                 Sd}t!          d||          D ]Z}t-          ||z   |          }t          j                            |dd	g||g          }|D ]}|                    |j                   [|                    d           t                       |	D ]}|                                 t          j                    }||z
  }| j         j                            d|dd           dS )u  
        Обрабатывает историю кодов задач.
        Добавляет в историю кодов старые коды задачи при перемещинии в другой проект.

        Args:
            project (str, optional): Префикс кода задач, код, название или id проекта. Defaults to None.
            is_process (bool, optional): Отключение запуска обработки. Defaults to True.
        uJ   Отключена обработка истории кодов задачNr   r  r  rh  rS   r   r   rj  r<  u    Не найден проект 'rf  r@  r%  u-   Обработка истории кодов r  _code_history_worker_r	  r  i  r   ru  )r   r   sliceuL   Обработка истории кодов задач завершена: r  ru  )r8   rk   r!  r]   r  r_   r?   r   r  r%  r;   r  r  r  r   r  r  r   r   r  r	  r  r#  r  r  r   r   )r"   r   r  log_projectproject_identr  r  
perf_startr	  treadsr  treadrY  r  r  r!  r  perf_enddurations                      r#   _process_code_historyz#JiraAPIImport._process_code_history~#  s*     	O"**+wxxxF#M'++ +S-@m4m4sM2 /..	 ,  G  G}GGG   ---. 	7NNHc734446W66K^)))99
 	F##$xT^$x$xkv$x$xyyy&((
Z%%''
t/00 		 		AN))00Q00 * *  E MM%   KKMMMM1j$// 	( 	(EedlJ//CN((d|cl )  E
  ( (tw''''(t 	 	EJJLLLL$&&j(##  %Js{  %J  %J  %J  %J  	K  	K  	K  	K  	Kr%   c                    |                                   | xj        |                                 z  c_        | j                                         |                                  |                                  |                                  |                                  |                                  |                                  |                                  | 	                                 |                                  | 
                                 |                                  |                                  | j        j        rP|                                  |                                  |                                  |                                  |                                  |                     t#          t$          dd                     |                     | 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                                         tA                       | j        !                    d
           | "                                D ]}|d         d | j#        D             vr| j        j        $                    d|d          d           t$          j%        sR	 d| j        j&        j&        j'         d|d          d}| j        (                    || j        j                   # tR          $ r,}| j        j        *                    d|            Y d }~d }~ww xY w| j        !                    d| j        j+                    | j         S )NIMPORT_JIRA_CODE_HISTORYF)r  process_task_linksTimport_filtersprocess_linksu2   Отключена обработка ссылокrz  r  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   rf  r=  )rk   uC   Не удалось создать отчет по проекту. u-   Импортировано объектов: ),r  r>   r  rM   r  rl  rG  rR  r]  r  r1	  r  r\   r  r  r  r	  r  r   r  r8   r   r   r_   r  r  process_cross_linksrk   r!  r:   r  rO  r;   r9   r  rh   r  IMPORT_COLLECT_STATSrK  rL  project_statsr<   r  rE  )r"   r   r  rb  s       r#   process_importzJiraAPIImport.process_import#  s@   4..000	     """##%%%!!###9? 	"""$$$!!!))+++!!!    	""v'A5II 	# 	
 	
 	
 	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)r4  r5  )TTNr  )r  rm  )NFr   )r   rm  F)Nr
  r  )NT)r)   r*   r+   r,   r  r.   r   r-   r   r   rZ   propertyr   r   rp   r   r   staticmethodr  r	   r
   r   ro   r   r   r   r   r   r#  r0  r3  rT  rI   rc  r  r  r  r   r  rB  rG  rR  r]  r]   r  r  r  r  r,  rH  r  r  r  r  r  r  r   r  r"  r2  r6  rH  rx  r  r  r  ro  r  r  r  r  rp  rq  r  r\  r   r  r  r  r  r  r  r  r  r  r  r  r   r-  r<  rL  rP  r  rq  r  rn  rm  r  r  r  r  r  r  rk  r  r  r  r  r  r  r  r|  r4  r<  rw  r  r  r  r  r<  rD  r[  rk  r  r  r  r  r[  rb   r  r  r  r  r  r  r  r   r  r  r  r  r	  r  rn  rw  r  rl  rh  r  r  ri  r 	  r1	  rC  ri	  rg  r~	  rj  r	  r	  r	  r	  r	  __classcell__)rs   s   @r#   rK   rK   L   s         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*" _:;;I I <;IV _YZZT3 T T T T [ZTlw w w& _:;;;X ;XY ;X ;X ;X <;;Xz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<OHZ O O O Ob5 5 5nT T T TlY Y Y Yv: : :xf f fP  *' ' '* _455  65> _@AA/= /= BA/=b _LMM7 7 NM7> _455A' A'4 A' A' A' 65A'F9 9 9vu
 u
 u
n _GHHQ Q IHQ _233,2 ,2 43,2\`t `4 ` ` ` `D  0 "4 4 4 4l+ + +@B_ B_ B_H _:;;,M ,M <;,M\E E EN _RSS  TS.Q  Q  Q f _455JG JG 65JGX _:;;@J @J <;@JD9 9 9' ' ' 'RT    V V V V V* _CDD/$ / / / ED/4@ @ @&   _OPP7B4 7B 7B 7B QP7Br{) {) {)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P P P 87Pd _=>>' ' ?>' _JKKN. N.T N. N. N. LKN.` _@AAo4 o4 o4 o4 BAo4b _677g2 g2 87g2R _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]7 ]7 KJ]7~ _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    \zP zP zPx  07 7 7r	% 	% 	%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  :  :     D _;<<QK QKS QKT QK QK QK =<QKf<# <# <# <# <# <# <#r%   rK   )9cmf.appr   cmf.includecmf.utilr   r   dataclassesr  r  r  r  r  r  r  pathlibr   r   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   localr7   r]   r  r   r  r  	dataclassr   rI   rK   r/   r%   r#   <module>r	     s]             ) ) ) ) ) ) ) )          				                 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Y_
$v~&V-=(>VEV@WWX	 
% 
% 
% 
% 
% 
% 
% 
%  8BO# BO# BO# BO# BO#N BO# BO# BO# BO# BO#r%   