
    i                    "   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  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l0m1Z1  ej2                    Z3eee4j5                 ee4j6                 ee4j7                 f         Z8 G d de9          Z:ej;         G d d                      Z<d Z= G d de/          Z>dS )    )cmf_context)*)cmf_hashlibcmfutilN)Path)DictOptionalListCallableUnionTypeIterator)BeautifulSoup)contextmanager)tz)permutations)dedentindent)	normalize)	BaseModel)CmfPluginImportMixin)JiraApi)JiraBaseImport)JQLNormalizerc                   (     e Zd Zdedef fdZ xZS )	DumpErrorcodemessagec                     || _         || _        || _        t                                          d| d|            d S )N[] )r   msgdetailssuper__init__)selfr   r   kwargs	__class__s       ./modules/jira/api_import.pyr%   zDumpError.__init__%   sG    	.T..W../////    )__name__
__module____qualname__strr%   __classcell__r(   s   @r)   r   r   $   sK        0S 03 0 0 0 0 0 0 0 0 0 0r*   r   c                   >    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)hashr4   r&   s    r)   __hash__zEpicData.__hash__3   s    DH~~r*   c                 "    | j         |j         k    S r7   )r4   )r&   others     r)   __eq__zEpicData.__eq__6   s    x59$$r*   N)r+   r,   r-   __doc__r.   __annotations__r:   r=    r*   r)   r2   r2   ,   sX         NN
III	HHH  % % % % %r*   r2   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_ctxrD   
cmf_importlog	is_cancel
cmf_commit	Exceptioncmf_rollback
has_errors	log_error)objargsr'   log_msgres	error_msgfuncr3   s         r)   wrapperz3catch_exception.<locals>.decorator.<locals>.wrapper<   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@   )rV   rW   r3   s   ` r)   	decoratorz"catch_exception.<locals>.decorator;   s)    	 	 	 	 	 	* r*   r@   )r3   rX   s   ` r)   catch_exceptionrY   :   s$        0 r*   c                       e Zd ZU dZeed<   eeef         ed<   dZ	de
ddf fdZd	 Z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d d            Zdee         fdZdee         fdZ dee         defdZ!	 	 dd 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)dd,Z* e#d-          d.             Z+ e#d/          d0             Z, e#d1          d2             Z-de.j/        fd3Z0d4 Z1dd5Z2dd6Z3d7 Z4d8 Z5d9 Z6d: Z7 e#d;          d<             Z8 e#d=          d>             Z9 e#d?          d@             Z: e#dA          d dBe;fdC            Z<dD Z=dE Z> e#dF          dG             Z? e#dH          dI             Z@dJ ZAdKedLefdMZBdN ZC	 	 ddQZDdR ZEdS ZF e#dT          dU             ZGdV ZH e#dW          dX             ZIdY ZJ e#dZ          d[             ZK e#d\          d]             ZLd^ ZMdd`ZNdaeOfdbZPdaeOfdcZQ e#dd          deefdf            ZRdg ZSdh ZT e#di          deefdj            ZUdk ZV e#dl          dm             ZWdn ZXdo ZYdp ZZdq Z[ e#dr          ds             Z\ e#dt          du             Z]dv Z^dw Z_ e#dx          ddy            Z` e#dz          d{             Za e#d|          d dBe;fd}            Zb e#d~          dLefd            Zc e#d          d             Zd e#d          d             Ze e#d          d             Zfd Zg e#d          d             Zh e#d          d             Zi e#d          d             Zjd ZkddZldefdZm e#d          defd            ZndefdZod Zpd Zqd Zrd Zsd Ztd Zud Zvd Zwd Zxd Zyd ZzddZ{d Z|d Z}d Z~d Zd Zd ZdeefdZdeefdZdeefdZdeefdZdeefdZd Zd Zd Zd Zd Zd Zd Zd ZdedefdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZedÄ             ZdĄ Zdń ZddƄZdǄ Ze	 	 	 	 ddededededef
d΄            Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zdd܄Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zed             Zd 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          d	dedBe;fd            Zd ZΈ xZS (
  JiraAPIImportu;   Класс загрузки объектов через APIrO   _JiraAPIImport__jira_fields).meta.dirty.deleted	.archived.moved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 )Nr4   	accountIdsoftdevr   r   zatlassian.rest_clientF
logic_typepriorityresponsible)	issuetyperi   assignee) r$   r%   rb   user_keycloudmodelsCmfActivitygetdefault_activitycloud_id_get_jira_global_settingsjira_global_settingsepicsissue_relationssubtasksboardsselected_projectsrO   logging	getLoggerrI   loggerhandlerssetLevellevel_prepare_multiprocessing_set_fallback_personr\   update_fields_board_card_colors_mapping_init_projects_dir	configure)r&   rb   rR   r'   r}   r(   s        r)   r%   zJiraAPIImport.__init__b   sX   $)&)))!	9? 	('DM & 2 6 6I 6 F F$($B$B$D$D!
!!#""#:;;/09.4555%%'''!!###!" &"%+
 +
' 	!!!r*   c                     | j                                                             d          | _        | j                            d           d S )NprojectsTexist_ok)rI   get_download_pathjoinpathprojects_dirmkdirr9   s    r)   r   z JiraAPIImport._init_projects_dir   sF     O==??HHTT.....r*   c                 n   t          t          dd          | j        j        j                            dd          | j        j        j                            dd          | j        j        j                            dd          t          t          dd          | j        j        j                            dd          | j        j        j                            d	d          t          t          d
d          | j        j        j                            dd          t          t          dd          d
| _        d S )NIMPORT_JIRA_BIGGANTTFimport_custom_fieldsimport_filtersT
load_usersIMPORT_JIRA_CODE_HISTORYprocess_linksprocess_task_linksIMPORT_REFRESH_DUMPsend_invitesIMPORT_SYNC_MISSING_TASKS)
biggantt_pluginr   r   r   process_code_historyr   process_relationsrefresh_dumpr   sync_missing_tasks)getattrconfigrI   json_settingsvaluerq   r9   s    r)   r   zJiraAPIImport.configure   s     'v/EuMM$(O$A$G$K$KLbdi$j$j"o;AEEFVX\]]/7=AA,PTUU$+F4NPU$V$V!_:@DD_VZ[[!%!>!D!H!HI]_c!d!d#F,A5II O9?CCNTXYY")&2Mu"U"U
 
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)r\   rI   r   r   existsr   openjsonloadrb   
get_fieldsdump)r&   	file_pathfs      r)   jira_fieldszJiraAPIImport.jira_fields   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   r   zfields.json.r   )shutilr\   rI   r   r   osgetpidr   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)rI   r   r   rq   bool_is_default_userro   	CmfPerson_fallback_persongsystem_user)r&   r   s     r)   r   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 )Nr3   )r   values)r&   r3   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rq   )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   rT   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queuer   IMPORT_THREADSthreading_max_forksIMPORT_DOWNLOAD_THREADSdownload_threading_max_forksrI   get_max_processesmax_processes)r&   r   r   s      r)   r   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.CmfTaskr3   text	cmf_ownerrj   ri   status
alarm_datedeadlinecmf_modified_atcmf_created_atstatus_closed_at
resolution)summarydescriptionreporterrl   ri   r   customfield_10015duedateupdatedcreatedresolutiondater   z.namez.watchCountz.votes)ri   watchesvoteszfields. N)model_field	json_path	ext_field)r   itemsrq   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 )Nr3   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	  bodyr4   .rF   r   r3   )splitlenr   rq   )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  )r3   r   r4   r   inwardIssuer4   outwardIssue,)r  
isinstancedictrq   listr   r.   join)rQ   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                     g dt           t          t          t                   f         dt          g t          t                   f         dt
          dt          f fd} j                            dg           d}d}                                 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   rc   c                 <   | D ]} |            }|D ]h}                     ||d                   |d<                       ||d                   |d<                       |d                   |d<   |j        |d<   i                    |j        |d           |c S d S )Nr   file_valr   titleicon)r3   r   )r&  r   r  r-  r   verbose_name)r(  r)  r   rQ   obj_settingssettingr$  r&   s         r)   _get_settingsz:JiraAPIImport.tmplt_import_settings.<locals>._get_settingsM  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.*Nr   usersc                     g | ]}|S r@   r@   .0rQ   s     r)   
<listcomp>z7JiraAPIImport.tmplt_import_settings.<locals>.<listcomp>g  s    BBBSSBBBr*   rF   limitr   c                     g | ]}|S r@   r@   r4  s     r)   r6  z7JiraAPIImport.tmplt_import_settings.<locals>.<listcomp>k  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)r3   r   )r   r
   r   r   r   	TypeModelrI   load_fields_get_projectsget_project_tasks_simple_getrb   
get_issues	get_usersr:  rM   r   r   ro   CmfTaskr  r   r  
CmfCommentr   )	r&   r1  taskuserprojecttasksr2  comment_exampler$  s	   `       @r)   tmplt_import_settingsz#JiraAPIImport.tmplt_import_settingsI  s`   :<
	dHTN&: ; 
	)1"d4j.)A
	JS
	X\
	 
	 
	 
	 
	 
	 
	 	##%6$7888))++ 	 	G..wt}==   $$W-- 	 	D 	 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   r7  r   r   r   r   r   rN  captionrO  )_normalize_settingsrI   r   rb   rB  	enumeratero   rD  r.  r&  _normalize_jira_valuer   )r&   settingsr$  issuenumr0  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*   rU  c                     i }|D ]p}|d         s|                      ||d         d          }|                     |d         d         ||                    d                    }|||d         d         <   q|S )uC    Преобразование настроек для модели r   r   F)r!  r   r   )r&  rT  rq   )r&   rQ   rU  normalized_objr0  r   s         r)   _normalize_objzJiraAPIImport._normalize_obj  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_typer`  archiverb  r   ::r   r3   	startDateendDate)r3   parenttree_parent	list_typeplan_start_dateplan_end_dateext_idrm  
filter_objTsave_import)r   rq   r   ro   	CmfFolderrI   pluginsource_hashr   process_any_table_fieldsCmfListr3   save)
r&   rh  r\  parent_sys_typerj  _filterri  rm  list_objnews
             r)   _process_listzJiraAPIImport._process_list  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$   Наблюдатели задачи r4   : "r   r   "re   T)rQ   raise_on_erroruC   Не удалось найти наблюдателя задачи . zERR-0135rQ   N)	_get_issue_watchersrb   rn   _get_personr   rM   rI   rP   
spectators)	r&   	issue_objrV  rQ   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   Вложения задачи r4   : 'r   r   '
attachmentr   re  rh  =rm  NOT INrI   !=Nrd  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   filenamere  rm  r   r3   r  rh  rm  r  Nr   r   rF   --r3   rh  r   -Tr3   rh  rI   r  rp  r	  r  r   rbF)smart_backup
mark_dirtysizeu   Размер файла '' (u@   ) не соответствует размеру из меты: z	 bytes / z bytesERR-0034u;   Не удалось обработать вложение ')zERR-0035)rq   rI   rs  rt  ro   CmfAttachmentr   pathsplitextsgetrw  r  rm  embeddedrh  rH  r  rm   r  r   r   import_raw_jsonr   upload_filereadst_sizerL   AssertionErrorrP   rM   rN   )	file_namer   errorattachment_fieldsr  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   rI   rs  rt  ro   r  r  delete_get_issue_attachmentsinc_stat)r&   r  
jira_issueerrorsattachment_ext_idsatt_dataatt_idattachments_to_deleter  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rE  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hrefr3   u[   Не найдены атрибуты для определения пользователя)	person_idperson_loginperson_hrefperson_namezhtml.parserrF   uR   Ошибка конвертации упоминания пользователя : zERR-0036r  N)urllib.parser  r  
class_namefind_allr  rq   r  query_get_user_info_from_dumplowerrm   rM   r   formatr.   r   loginr  r3   replace_with
currentTagrO   rI   rP   )r&   r  rQ   r  r  TMPLtagr  
parsed_urlr  	user_infonew_tages                r)   _process_mentionszJiraAPIImport._process_mentionsY  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:r2  r3   r   r:  r  r   uQ   Не нашли информацию по пользователю в дампе )APPREDIS_DBredisrq   rI   r   pickleloadsrA  rm   r  rM   )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#   Конвертация ссылокrh  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>  $    #,,v2F2F2]#,,W\J]J] r*   cmf_convertedu   Уже обработали r  #u   Это якорь u&   Обрабатываем ссылку r  /?r   r3   r  rh  (/attachment(?:/content)?/(\d+)(?:/)?(.*)rF   r   r  c                 6    |                      d          k    S Nr   r   )item	attach_ids    r)   r   z.JiraAPIImport._process_links.<locals>.<lambda>  s    $((4..I2M r*   r  re  rm  r  r  src_origTvideocontrolsz100%widthheight	href_origu   Заменили на z/people/r   )r  rh  r  r  rq   rI   r}   infor  
startswithurllibparseunquoter  researchr   r   rs  rt  ro   r  r  r  	mimetypes
guess_typer3   r  r  )r&   r  rh  r  r  r  r  r  	url_matchattachmentsattachr  
attach_obj	mime_type
account_idr  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 |rt          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          pi }|                    dH          pg }|s#| j         j                            dI| dJ           |D ]1}| j        j        rd|dK          d}
nd|d	          d}
d| j         j        j        j         |
 }
t          j+                            d!d"d#|
 d#gdg$          } | s+t          j+                            d	dL|d	         gdg$          } | s*t          +                    |
| j         d(|d	         |M          } | j)        r|d	         | _0        | j        s|
| _        n|
| j        vr| j         |
 | _        |                     d()           |j.        !                    |            3|j1        r|                    d()           ||fS )NN(r  r   u0   Импортируем пользователя accountType	atlassianu   Неизвестный тип r   r3   z[,;\s]+r  c                 ^    g | ]*}|                                 |                                 +S r@   stripr5  r  s     r)   r6  z1JiraAPIImport._process_person.<locals>.<listcomp>  -    III5;;==IekkmmIIIr*   rF   c                 N    g | ]!}|                     d           d         v |"S @r   r  r5  r  
user_logins     r)   r6  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)   r6  z1JiraAPIImport._process_person.<locals>.<listcomp>  s6    !a!a!aEu{{3?O?OPQ?RV`?`?`%?`?`?`r*   r   email_2re  rE      	last_name
first_namesecond_name   u?   Часть полного имени пользователя "u   " длиннее u_    символов. Фамилия, Имя и Отчество не были заполнены.zERR-0110r   obj_typer   rg_member_ofrm  LIKE%r  u    ext_id пользователя N    содержит несколько ID из одного источника: z::.+?::Trp  uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0004rG  
error_coder6  ORzNOT LIKE%::::%rm  r`  Nr  ILIKEu+   Пользователей с почтой z > zERR-0037uH   Не удалось найти пользователя с почтой u+   Пользователей с именем  (z) > uM   Не нашли пользователя среди существующих ) FuQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифруr*  +)rm  r  rI   r  c                 ^    g | ]*}|                                 |                                 +S r@   r$  r&  s     r)   r6  z1JiraAPIImport._process_person.<locals>.<listcomp>  r'  r*   groupsr   u   Пользователь u0    не входит ни в одну группуgroupIdr`  )rm  rI   r  r3   r  )2rI   r}   r  rb   rn   warningr[  rU  ro   r   r.  r  r  r  removers  rt  rm   minr2  
max_lengthr1  r3  rO   rP   rq   rm  r   countsubrw  r  r   r   rJ   r{   INFOr  WARNINGr.   r  r  setattrCmfPersonGroup
jira_group
user_groupr7  
user_localr3   
is_changed)"r&   rG  createupdaterQ   obj_msg	user_dictemailsemails_by_loginemails_by_namerm  	full_namecurrent_length_namer3   max_length_namer   r  not_source_hash_filterpersonsry  
name_combo
is_creatednr  prefix_emaildomainr4   rR  rS  user_groupsgroup_items
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'' 3	. 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((8,,2K%//'228bK E&..  0D6  0D  0D  0D  E  E  E) 2 2
9? 9;*Y"7;;;FF8*V"4888F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 )NrF  re  r3   rm  r8  r9  r   r  rA  T)r3   rm  rI   r  r  rp  rF   u4   Не удалось загрузить группу ERR-0038rQ  r5  )rA  rI   rK   rs  rt  ro   rQ  rq   r  r3   rm  rw  rL   imported_object_countrN   rO   rP   )r&   
group_datarm  rj  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                             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|rJ| j                             d          r2t)          t*          j        j        t1          |          g           d S d S d S )Nr   uA   Не грузим пользователей из-за опцийr   r2  rF   z.evateam.ruu@   Не удалось загрузить пользователя rm  r   r5  r   )rR   )r   rq   rI   rJ   r{   rO  setrA  rK   rk  rL   rn  r  r  endswithaddr   rN   rO   rP   schedule_deferred_jobro   r   register_personsr  )r&   new_user_emailsrG  r  rc  s        r)   _process_userszJiraAPIImport._process_users  s   {|,, 	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{~>> 	c!&"2"C4P_K`K`Jabbbbbb	c 	c 	c 	cs   )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statusCategoryr3   re  r   untranslatedNamerm  r`  r@  rd  )r3   rI   Trp  rF   )rA  rI   rK   rb   rn   rs  rt  rq   ro   CmfStatusCoderm  r   get_status_typestatus_typer3   rw  rL   rn  )r&   r   r  rm  status_namecmf_status_codery  s          r)   _process_statuseszJiraAPIImport._process_statuses9  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@   r5  
issue_types     r)   
<dictcomp>zEJiraAPIImport._create_schemewf_for_simple_project.<locals>.<dictcomp>^  s/     
 
 
 tZ
 
 
r*   default.system:defaultrg   re  rm  r  rd  Ttemplaterm  rI   r  r4   r  r3   r   r   rp  associatedWithr   
issueTypeshierarchyLevelr  :r{  workflowr`  r@  r  r  rm  r  Nforcetransitionstype)r  rm  )r  rm  rI   c                 T    g | ]$}|                     d            d|d           %S )fromStatusReferencere  r   )r5  sworkflow_hash_ids     r)   r6  zEJiraAPIImport._create_schemewf_for_simple_project.<locals>.<listcomp>  sP     + + +uu233+'EE1-B+CEE+ + +r*   linksINtoStatusReferencer~  global	only_datajira_workflow_scheme
::SIMPLE::softdev:default)r  rm  rI   )	scheme_wfTEXKOM_db_deleter8  r9  rD  )r  rh   target_workflowrI   cmf_model_namer@   ) _get_issue_types_for_projectro   CmfWorkflowrq   !_get_simplified_project_workflowsrI   rs  rt  r  r3   r   r  rw  _create_status	CmfStatusr  r  r  create_create_transr   r  CmfTransstatus_fromallow_empty_transition	status_toCmfSchemeWfdefault_task_workflowdefault_subtask_workflowCmfSchemeWfRuler   rK   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_idr  issue_type_idsissue_type_idr  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_idrh   	rule_dictr  s!                                   @r)   #_create_schemewf_for_simple_projectz1JiraAPIImport._create_schemewf_for_simple_projectX  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  11GH"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 )Nre  r   r~  r|  r}  r3   )rm  r3   rI   Trp  rm  r`  rd  r  status_coder@  )r  rI   r  r   F#a0a0a0z#3f82d8z#e36b51z#23a055)OPENIN_PROGRESS	IN_REVIEWCLOSED)rI   rs  rt  r   ro   r  rq   r   r  r  rw  r  rm  r3   r   r  r  color)
r&   jira_status_datar  status_ext_idrm  r  r  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 )Nre  r=  rm  rA  r9  r3   rd  u   Группа '   ' не найденаu8               # Пользователь в Группе 'zU'
            try:
                return g.current_user.in_person_group(group_code='@')
            except:
                return False
            )	rI   rs  rt  ro   rQ  rq   rM   r3   r   )rj  r'   group_ext_idperson_group	eval_coder&   s        r)   user_in_group_conditionzMJiraAPIImport._process_transition_conditions.<locals>.user_in_group_condition%  s    V 6 = IVVUVVVL!044w(;L(;(;(;<We, 5  L   O M M M MNNN9E9J  DPCT  I r*   c                     j         j        j        j         d|  }t          j                            |          }|st          d|  d          d|j         d|j         d}|S )Nre  r~  u
   Роль 'r  uG               # Пользователь в проектной роли 'zb'
            try:
                return g.current_user.in_project_role(self.project, role_code='r  )	rI   rs  rt  ro   CmfProjectRolerq   rM   r3   r   )jira_projectrole_idr'   role_ext_idroler  r&   s        r)   in_project_role_conditionzOJiraAPIImport._process_transition_conditions.<locals>.in_project_role_condition:  s    !_3:F__J]__K(,,K,@@D Y W-@ W W WXXXHL	  QUPY  I r*   c                 h    ddl m}  |            }i } r(t          t           fd|d                   i           }n)r't          t          fd|d                   i           }|                    d          }|                    d          }|st          d p d	          d
| d| d}|S )u   
            Условие прав
            Args:
                permission_key (str): ключ права
                permission (str): название или ключ права
            r   get_datac                 6    |                      d          k    S )N	jira_coder   )permpermission_keys    r)   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>X  s    TXXk%:%:n%L r*   project_perm_permissionc                     |                      dd                                                                          k    p|                      d          k    S )N	jira_namer   r  )rq   r  )r  
permissions    r)   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>a  sP     HH["55;;==AQAQASASS C#xx44
B r*   r3   r   u   Право 'u   ' не найденоu.               # Только с правами 'zR'
            try:
                return self.project.check_project_role_access('zJ', obj=self)
            except:
                return False
            )cmf.system_datar  r   r   rq   rM   )	r  r  r'   r  system_datapermission_datapermission_namepermission_coder  s	   ``       r)   permission_conditionzJJiraAPIImport._process_transition_conditions.<locals>.permission_conditionI  s4    100000"(**K O "&LLLL#$=>  # #  "&    $$=>  	# 	# .11&99O-11&99O" d b~/K b b bccc/>  AP  I r*   c                  
    d}|S )Nut               # Только Исполнитель
            return self.responsible == g.current_user
            r@   r'   r  s     r)   allow_only_assigneezIJiraAPIImport._process_transition_conditions.<locals>.allow_only_assigneex      I r*   c                  
    d}|S )Nur               # Только Постановщик
            return self.cmf_owner == g.current_user
            r@   r  s     r)   allow_only_reporterzIJiraAPIImport._process_transition_conditions.<locals>.allow_only_reporter  r  r*   u(   Пользователь в Группе)r  r  u3   Пользователь в Роли Проектаu   Условие Правu2   Условие Только Исполнителяu(   Условие Только Автора)z:com.atlassian.jira.workflow.condition.UserInGroupConditionz<com.atlassian.jira.workflow.condition.InProjectRoleConditionz9com.atlassian.jira.workflow.condition.PermissionConditionz7com.atlassian.jira.workflow.condition.AllowOnlyAssigneez7com.atlassian.jira.workflow.condition.AllowOnlyReporter   переход 'r  r  r  re  Tcmf_deletedrm  include_deletedr   rD  z6 eval)	r  rh   r  eval_unsafer  r  rI   r  rm     Бизнес-процесс , u7   . Пользователь удалил условие K   . Изменения из импорта не будут примененыu9   . Пользователь изменил условие Fu$   . Добавлено условие r  r  u   Условие '' Jira: ' bzPython: u5   . Не удалось создать условие ''. zERR-0127CmfTransFilterr5  #   ' не поддерживаетсяr  r  r   r  r  r   r  r  r7   NNr@   )r3   rS  rq   r   rm  ro   r  rI   r  r}   rH  r  r  rU  rw  rL   r  r   r   r.   rM   rP   debugr  r  )r&   
conditionsr  r  r  r  r  r  r  condition_maptransition_namefilter_codesrW  condition_datacondition_name	conditionr  filter_ext_idtrans_filterr  trans_filterss   `                    r)   _process_transition_conditionsz,JiraAPIImport._process_transition_conditions   s6   
	 	 	 	 	 	*	 	 	 	 	 	-	 -	 -	 -	^	 	 		 	 	 H4K K
 S6M M
 71J J
 R0H H
 H0H H#
 
. @Z_???#,Z#8#8 E	 E	C+L9N%)).99I B= &'=y'='O'O'O'O P PI'1'8$A$AC$A$AM#)#8#<#<,(,)  $= $ $L ( '-'<'<+4'/&/(,%-'1'+,0#0 (= 
( 
( $/ .66i8 i i i iT`i i i   
 *9 .66i8 i i i iVbi i i    ?D0;$))+++".33q8 q q q qAMARq qW`alWmq q q   !''L,=(>(>???O*//[9[+A[[>[[   O*//Z9[+AZZyZZ    !   O--ox o o? o oNWXcNdo oilo o"!1	 .         &,,Z~ZZZ   
 -22sJ/<0***
 ! 3 
 
 * 	7 	7L6666s   2F8H,,
I06/I++I0c                     dE fd	}d }dF fd	}d|dd|dd|dd	}|d
k    rd}t           j        j                                        }	|j         d}
t           j                            |
ddg          }|sAt                               d|j         dd|j         d|j         dddd j        d|
	  	        }|j	        r. j        j
                            d| d| d|	 d| d	           dS |j        s. j        j
                            d| d| d|	 d| d	           dS t                      }g }nJt          |t           j                  r0d|j         d}t           j        j                                        }	g }t#          |d           D ]\  }}|d!         }|                    |          }|ra	  |d"         dGi |\  }}t%          |          }|d
k    r,|                    |           |                    |           nqt          |t           j                  rV|j         d#| }t           j                            |ddg          }|s't                               dd$d|| j        d|%          }|j	        r- j        j
                            d| d| d|	 d| d	           n|j        s- j        j
                            d| d| d|	 d| d	           nod&|j        _        ||_        |                                 t3                        j        j
                            d| d| d'|	 d|j         d(|d)          d           |                    t7          |j                              j        j
                            d*|d)          d+|             j        j
                            d*|d)          d,|            B# t8          $ r8} j                            d| d| d-|d)          d.| d/           Y d}~d}~ww xY w j        j
                            d0| d1           |d
k    rC|s^|j        sU|                     d2           t3                        j        j
                            d| d| d3|	 d4|j         d5	           dS t7          |j                  !                    dd6          }d7|j         d8}d9d"                    |           d:| d;}|d<z   tG          d<"                    |          d=          z   d<z   tG          |d=          z   |_        d&|j        _        |                                  j        j
                            d| d| d>|	 d4|j         d	           nat          |t           j                  rGt           j        $                    d?d@|gdAdB|gg dCgdD          }|D ]}|                     d2           t3                       dS )Hu  
        Обработка пост-функций (действий) перехода
        Конвертация в bzPython код

        Действия для начального перехода создаются при помощи
        триггера автоматизации crud (CmfAutomationCrudTrigger),
        так как на текущий момент в бизнес-процессах нет возможности
        настраивать начальный переход.
        Nc                 .   ddddddddddd	dd
ddd}|                     |           }|st          d|  d          |d         }|d         } d| }d}| dk    rq|r|dk    r	|dz  }d}n                    |          }                    |dd          \  }	}
|	st          d| d|           |d|	j         z  }d|	j         d}n| dk    r+|s|dz  }d}n                    |          \  }}|d| z  }n| d	k    ry|r|dk    r|dz  }d}noj        j        j        j	         d| }t          j                             |          }|st          d| d          |d|j         z  }d|j         d}nd| d}d | d!|  d"| d#}||fS )$uZ   
            Пост-функция "Обновить Поле Задачи"
               Исполнительrj   )r,  r3   u   Описаниеr      Приоритетri      Решениеr   u   Темаr3   )rl   r   ri   r   r   
   Поле 'r  r,  u   # Поле Nz-1u    будет очищеноFrV  rW     Пользователь '   ' не найден: u    в r  u    в Обычныйr   re  r~  u   Резолюция 'r  z            z
            self.z = z
            )rq   rM   r  rk  r3   r   _get_cached_priorityrI   rs  rt  ro   CmfResolution)r   field_valuer'   	field_map
field_datafield_titlecode_commentr   	user_datar  _priority_nameresolution_ext_idr   r  r&   s                  r)   update_issue_fieldzLJiraAPIImport._process_transition_post_functions.<locals>.update_issue_field   s   
 '?VV);VLL&:JOO(8,OO%/@@ I #z22J ^ \Z \ \ \]]]$W-K#F+J666LE]**" 	/kT&9&9 $@@L EE $ = =k J JI $ 4 4YuUZ 4 [ [IFA! t'(r[(r(rgp(r(rsss $86;$8$88L....EEz))" ; $88LEE+/+D+D[+Q+Q(E= $:=$:$::LL|++" 	3kT&9&9 $@@L EE+/?+A+H+T(e(eXc(e(e%!'!5!9!9AR!9!S!SJ% c'(a{(a(a(abbb $<:?$<$<<L2
222EE*K***  !&  I k))r*   c                      d}d}||fS )Nr  uh               # Назначить автора
            self.responsible = self.cmf_owner
            r@   )r'   r+  r  s      r)   assign_to_reporterzLJiraAPIImport._process_transition_post_functions.<locals>.assign_to_reporter<  s    2KI k))r*   c                                          |           }                    |dd          \  }}|st          d|  d|           d}d|j         d|j         d}||fS )	NFr#  r$  r%  u   НаблюдателиuR               # Добавить в наблюдатели пользователя z1
            person = models.CmfPerson.get(code='z:')
            self.spectators.append(person)
            )r  rk  rM   r3   r   )r:  r'   r-  r  r.  r+  r  r&   s          r)   add_to_watcherszIJiraAPIImport._process_transition_post_functions.<locals>.add_to_watchersD  s    55h??I,,YuU,SSIFA i gX g g\e g ghhh2KSYS^ 17  I
 k))r*   u&   Обновить Поле Задачи)r3   r  u   Назначить автораuC   Добавить в наблюдатели пользователя)zCcom.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunctionzCcom.atlassian.jira.workflow.function.issue.AssignToReporterFunctionzGcom.aeroflot.jira.agreement.workflow.function.AddToWatchersPostFunctioninitialu!   начальный переходz	::initialTr  r  uA   Начальный переход бизнес-процесса 'r  uX   Действия начального перехода в бизнес-процессе r  rD  rV  
after_save)	r3   r   r  crud_action	eval_typer  rI   r  rm  r  r  u(   . Пользователь удалил rE   r	  u*   . Пользователь изменил r  rF   )startr  r  re  eval)r  rh   r  r  r  rI   r  rm  Fu   . Добавлено r  r3   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  r  r   r  r  r  r  r7   r@   )%ro   CmfAutomationCrudTriggerr.  r  rm  rq   r3   r   rI   r  r}   rH  r  rs  r  r  CmfTransActionrS  r   ru  r   r  rU  r  rw  rL   r  r.   rM   rP   r  is_newr  replacer   r   r  )r&   post_functionsr  r  r1  r3  r5  post_function_mapr  action_verbose_nametrigger_ext_idtriggerfield_titlesaction_eval_codesaction_codesrW  post_function_datapost_function_nameactionr  r+  action_ext_idtrans_actionr  trigger_nametrigger_condition_codetrigger_alert_codetrans_actionss   `                           r)   "_process_transition_post_functionsz0JiraAPIImport._process_transition_post_functions  sw	   :	* :	* :	* :	* :	* :	*x	* 	* 	*	* 	* 	* 	* 	* 	*" A/T T
 :/T T
 ^,X X
 
 ""AO"("A"N"T"T"V"V (:::N599% $! :  G   99m]e]jmmmZ9AZ ZJR-Z Z $- (* $#$() :   " &..a8 a a a a=Pa aSZa a a  
 , &..a8 a a a a?Ra aU\a a a  
 55L "
FO44 	CCCCO"("7"D"J"J"L"LL'0q'I'I'I J	 J	#C#!3L!A&**+=>>F GB-@VK-@-V-VCU-V-V*I{ &y 1 1I!Y..$((555)00;;;;#J@@ .D+5+<(E(E(E(E'-'<'@'@#0,0 -$ (A ( (  , 
+1+@+@/8+1,0)1+5+/?04'4 ,A 	, 	,L (3  O2::!mx !m !m? !m !mI\!m !m_k!m !m !m   
 ".!=  O2::!mx !m !m? !m !mK^!m !mam!m !m !m    CHL4?5>L2(--///&LLL O277!Kx !K !K? !K !K6I!K !K#/#4!K !K9?!K !K !K  
 %++C0A,B,BCCCO*//YVF^YYEWYY   O*//TVF^TTTT    !   O--ix i i? i iPVW]P^i icfi i"        &,,g0Bggg    ""$ 	~ NNDN999LLLO*22rx r r? r r(;r r?F|r r r  
 w|,,44S%@@L%S(-%S%S%S"i$))T`JaJa i iVbi i i 
 '#455w??@  +W55	6  .3G*LLNNNO"''Kx K K? K K$7K K;B<K K K    
FO44 	;"166!3
3X|4...
 !% 7  M !. ; ;##T#::::s   9HO
P-PPc           
      z   | j         j        j        j         d|j         }| d|d          }t          j                            ||ddg          }|s#t                              ||| j         d          }|j        s2| j         j        	                    d|j
         d	|j
         d
           n	|d         |_
        |d         |_        fd|d         D             |_        |d                  |_        |                    d          r|d         t          t          fd|                     d                    d          }	 |                     |          |_        d|_        n9#  | j                             d d|j
         d|j
         ddd|           Y nxY w|                    d           |S )uS   
        Обработка перехода бизнес-процесса
        re  r   r  rm  )rm  r  r   Tr  rm  rI   r     Переход '$   ' в бизнес-процессе ';   ' был изменен и не будет обновленr3   r   c                      g | ]
}|         S r@   r@   )r5  r  stepss     r)   r6  z5JiraAPIImport._process_transition.<locals>.<listcomp>0  s.     & & & k"& & &r*   fromtofieldscreenc                 j    t          |                     d                    t                    k    S r  r.   rq   screen	screen_ids    r)   r   z3JiraAPIImport._process_transition.<locals>.<lambda>9  s&    s6::d+;+;'<'<I'N r*   screensN7   Не удалось установить экран ID     для перехода '!   ' бизнес-процесса 'r  ERR-0122	CmfUiFormr6  rQ   rp  )rI   rs  rt  r   ro   r  rq   r  r}   rH  r3   r   r  r  r   r   rA  _process_transition_screencmf_ui_formtrans_form_showrP   rw  )	r&   transition_datarZ  r  r  r  r  screen_datarb  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  rM  r  )arg_names    r)   to_snake_casez7JiraAPIImport._process_wf_scheme.<locals>.to_snake_caseN  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argr3   selectr  get_textr   )rL  r  r  r  ru  rr  rs  s         r)   _get_action_conditionsz@JiraAPIImport._process_wf_scheme.<locals>._get_action_conditionsW  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 > functionru  r3   rv  )rL  rB  functionfunction_dataru  rr  rs  s         r)   _get_action_post_functionszDJiraAPIImport._process_wf_scheme.<locals>._get_action_post_functionse  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   stepr3   zjira.descriptionr  zjira.fieldscreen.idr   Tr$  r   N)	r   r  r3   r   r[  r\  r]  r  rB  )rw  findrx  )
step_idrL  action_type
from_stepsto_stepr   rb  rm  ry  r}  s
           r)   _get_transitionz9JiraAPIImport._process_wf_scheme.<locals>._get_transitions  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	workflowsr  rg   r  mappingsr3   r  rm  r  r  rm  r  rI   r   r   Trp  defaultr  re  r   r  r{  r|  r4   r  r`  r@  r  r  rd  r  	workflow_.xmlreplace_spacesu,   XML файл бизнес-процесса 'u   ' не найденrxmlur   Не удалось получить список переходов между статусами в виде XMLzsteps > steprF   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)r6  r  commonr  r  rL  r6  r   r  zactions > common-actionr  u7   В XML разметке бизнес-процесса 'u%   ' не найден common-action ID zERR-0121r  r[  u   Из XML получено u    статусов и u'    переходов между нимиu   Настраиваем u1    переходов между статусамиr  r  )r  r  rB  u   Не удалось импортировать переходы между статусами для бизнес-процесса «u   »: ERR-0067r  r8  r?  r~  r  r  )r  rI   r  r9  defaultIssueTypesubTask*   Схема бизнес-процесса '[   ' была изменена после импорта и не будет обновленаrh   r  -   В схеме бизнес-процесса '   ' правило )    для логического типа 'j   ' было изменено или добавлено вручную и не будет обновленоr  r  Tr  V   ' было удалено вручную и не будет восстановленоrD  r  rh   r  rI   r   r  r  )Ar   r   ro   r  rq   r   short_str_encrI   rs  rt  r3   r   rw  _get_statuses_for_projectr  r  r  r  r  r  r   safe_filenamer   FileNotFoundErrorr   r  r   rM   r  rS  rw  r  rx  ordernor   find_parentr  
setdefaultr   rP   r  rJ   r{   rN  r   ro  r  rS  r  r  r  r  default_epic_workflowr  default_task_logic_typedefault_subtask_logic_typestrict_task_logic_typerm  r  r}   rH  r  r   r  rL   );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  r  r  r  r  r  r  jira_statusr   workflow_filenameworkflow_filer   workflow_xmlr  
jira_stepsjira_transitionscommon_transitionsorderr  r  jira_status_idaction_typesr  step_actionsstep_actionrL  r  	action_idrm  jira_transitionr  r  wf_scheme_namewf_scheme_ext_id	wf_schemewf_scheme_infor  r  rh   current_rulesr  r  rules_for_deletionry  r}  rs  s;                                                           @@@r)   _process_wf_schemez JiraAPIImport._process_wf_schemeM  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
simplifiedre  r  r   default_release_workflowr  )
rb   rn   r  rI   rs  rt  ro   r  rq   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.jsonr  r   r4   u   [Задача rB  )])r   rI   rK   rq   r   r   r   r   r   rH   rD   _process_issueput)r&   issue_queueissue_queue_errorsrH  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   r7  r   labelsrE   r.  r   r   ruTlanguage_codereversedr=  aliasrA  r  "%r3   rd  r3   rp  u*   Не удалось создать тег r  zERR-0134CmfTagr;  )transliterater  rs  _count_project_tasksr@  rI   rK   rq   unionrA  ro   r  rw  rL   rM   rN   rP   )r&   r  r  tagstotal_tasksr.  rV  tag_name
name_aliasry  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 )Nre  r   rm  rA  r9  rd  priority_schemesr4   projectKeysdefaultOptionId
prioritiesr3   ri   choicesr  r  r   T)rQ  r3   orig_captionrh  rI   r  u"   Конфигурация поля ue    была изменена. Изменения из импорта не будут примененыr   _NONE_rp  )rI   rs  rt  ro   CmfCustFieldConfr  rA  rq   CmfCustFieldConfFieldr  r}   rH  r  r  rU  rw  )r&   r  cust_field_conf_ext_idcust_field_confsr  
default_idpriority_schemeri   r/  priority_idcust_field_confcust_field_conf_fields               r)   _process_prioritiesz!JiraAPIImport._process_priorities  s   $(O$:$A$M!e!eQ]^bQc!e!e!277'VlSoSoSo?p7qq
  $//0BCC 	 	OE"/-*HHH(,,->??J+L9 5 5 ( 0&tn'4$$  0 	= 	=O$*$@$D$D& %E % %! ) (.(D(D0#!5*#$( )E ) )% )8 &..a9N a a a   ,3!)-4j6LH,M!)$/ =%**t*<<<7	= 	=r*   u5   Обработка решений(резолюций)c           
      j   |                      d          D ]}| j                                        r d S |d         }|                    d          p|d         }| j        j        j        j         d| }t          j                            |          }|s#t                              || j        |d          }|j        r2||_	        |d	         |_
        ||_        |                    d
           n)| j        j                            d| d| d| d           | j        xj        dz  c_        d S )Nresolutionsr   r}  r3   re  r~  T)rm  rI   r  r  r   rp  u   Резолюция 
 (Jira ID r  ug   ') была изменена. Изменения из импорта не будут примененыrF   )rA  rI   rK   rq   rs  rt  ro   r'  r  r3   r   r  rw  r}   rH  rn  )r&   r   resolution_idresolution_namer0  resolution_objs         r)   _process_resolutionsz"JiraAPIImport._process_resolutions1	  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_
            Nr  rj  r3   re  r=  rm  rA  r9  rd  u"   Не найдена группа 'r  rH  r   r4   r8  r>  r?  u~   Не удалось добавить разрешение на доступ к фильтру. Не найден проект r  u=   '. Возможно он еще не импортированrG  r   H   . Возможно пользователь был удален в Jira.Fr#  u,   Не найден пользователь 'r  r  loggedinrF   u_   Не удалось добавить разрешение на доступ к фильтру 'r  zERR-0129r<  rQ   )rI   rs  rt  ro   rQ  rq   rM   
CmfProjectr}   rH  rm   r  rk  rO   rP   r3   )share_permissiontask_filtershareeshare_permission_type
group_namer  r  r5   project_nameproject_ext_idrm   	user_nameuser_display_namer  r  r.  r&   s                   r)   _get_shareez3JiraAPIImport._process_filters.<locals>._get_shareeW	  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   r3   re  r3   r  r  r  TrI   rm  r  r   ownerr  privatesharePermissionsr  readonlyr  editvieweditPermissionsc              3   J   K   | ]}t          |t          j                  V  d S r7   )r  ro   r  r4  s     r)   	<genexpr>z1JiraAPIImport._process_filters.<locals>.<genexpr>	  sC       & & #3(9::& & & & & &r*   fullrp  rF   u0   Ошибка обработки фильтра 'z' (ID: z). zERR-0130CmfBqlFilterr;     Фильтр r  r  uc   ') был изменен. Изменения из импорта не будут примененыu4   Импорт фильтров выполнен за .3fu
    сек.: rB  .2fu   /с | ~<   u   /мин))&rI   r}   rH  time	monotonicrA  rK   rs  rt  ro   r)  rq   r  r3   r   rm   r  r   rs  rb   rn   ru  r  r  	executorsanyperm_policy
view_scoper  rw  rL   rM   rN   rO   rP   r  int_process_jql_in_filters)r&   r  r  t1filter_countfilter_data	filter_idfilter_namer  r  r2  r3  r  r0  r  r  edit_permissionhas_projectr  t2
proc_speeds   `                    r)   _process_filterszJiraAPIImport._process_filtersQ	  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: проектная роль
        r3   r   u0   Обработка проектной роли 'r  r  T	anonymousre  rm  rI   r  rA  r  r  r3   rm  rI   r  u7   Создана новая проектная роль 'r  r   rp  u   Проектная роль u_    была изменена. Новые данные из импорта не примененыr   rB  )rI   rJ   rs  rt  ro   r  rq   r  r3   r   rw  r{   rO  rm  )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)rH  rh  r   Tr  u+   Состав участников роли u    в проекте u[    был изменен. Новые данные из импорта не примененыrD  Nu6   Добавление участников к роли     проекта r   r  u)   Добавление участника 'z	' (type: u   ) к роли atlassian-user-role-actorr  re   r3   r  u?   Не удалось добавить пользователя 'r  r  zERR-0039r  rF   zatlassian-group-role-actor
actorGrouprG  re  rm  r8  r9  r  rA  rp  u3   Не удалось добавить группу 'u"   . Группа не найденаu<   Неподдерживаемый тип участника '': zERR-0040)rH  rh  rI   r  u   К роли u*    добавлено участников: rA  )ro   CmfProjectRoleAssignrq   r  r  rL   rI   rJ   r{   rO  rb   rn   r  r   rM   rP   rO   rs  rt  rQ  rm  rw  rK  r  )r&   actorsrH  project_objrole_assignrK  actoractor_display_name
actor_typer  rG  r  group_idr  r  rj  s                   r)   _process_project_role_assignz*JiraAPIImport._process_project_role_assignP
  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 )NrR  )_get_project_rolesrI  rq   rY  )r&   r  rS  rolesrE  rH  rR  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          }|                                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): объект проекта
        shortcuts.jsonNr  r  r3   z<p><a href="z5" class="plugin_link" target="_blank" rel="noopener">z</a></p>re  z::shourtcutsr~  r   )r_  r   r  r^  Ti'  )r3   rh  ri  rm  rI   r  r  r   rp  )r   r   r   r   r   r   r   rI   rs  rt  ro   CmfDocumentrq   CmfMenuTreeget_treer   r  r   r   rw  )r&   r  rS  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    +44ZAQRR%%'' 	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))A-0A-c           
      .   | j                             |          }|                    d          }|                    d          }|                                sd S |                    d          5 }t                              |          }d d d            n# 1 swxY w Y   |                                D ]\  }}|d         }	|d         }
d|
 d| d}|                    |          }|d	         }|d
k    r|| j        j        	                    | d           t          j                            |	          }|r"|                                 t                       |                    d          }n|dk    r| j        j        	                    | d           t          j                            |	          }|r+d|_        |                    d           t                       |                    d          }nk|dk    rc|d         }d|d          d|d          d}| j        j        	                    | d| d|d          d|            |                    d          }n|                                r|                    |           d S )NrI  missing_tasks.jsonr  rm  r4   r    rB  r  statedeletedu$    Задача удалена в Jirar~  r_   archivedu    Задача в архивеTr  r`   movedrH  r  r3   r  r  u;    Задача перемещена в Jira в проект u    с новым кодом new_keyuF   . Необходимо повторить импорт проекта ra   )r   r   r   r   r   r   r   rI   r}   rH  ro   rD  rq   r  rL   with_suffixcmf_archivedrw  rA  )r&   r  r  	tasks_dirmissing_tasks_filer   missing_taskstask_id	task_datatask_ext_idtask_keylog_tasktask_dir
task_staterF  new_task_dirrH  log_projects                     r)   _process_missing_tasksz$JiraAPIImport._process_missing_tasks
  s   '00<<((11	(112FGG!((** 	F$$S)) 	)Q IIaLLM	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) #0"5"5"7"7 #	/ #	/GY#H-K 'H2822w222H ))'22H"7+JY&&&..(/`/`/`aaa~)))== !KKMMMLLL'33J??z))&..(/Y/Y/YZZZ~)))== !(,D%III---LLL'33K@@w&&#I.G'&/GGgenGGG&.. i i"i i>G	>Ri i[fi i  
  (33H==   /  ...G#	/ #	/s   0B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_                       | j0                            d#          r| 1                    |d                    | 2                    |           | j        3                                rd S t_                       | 4                    ||           | )                                 | 5                    ||           t           j.        6                    d$d%|gg d&g'          }|r+d|_7        |
                    d(           t_                       | j        j8        9                    |           | j        j8        :                    |           | j        xj;        d)z  c_;        | )                                 |S )*Nr3   r`  rh   rm  r  rB  r  u   Проект с именем u8    уже существует! Переименуем в r8  r9  T)rI   rm  r3   r  	isPrivater   Fproject.baseproject.servicedeskrp  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыrh  r  r   ui_form_schemeproject_perm_schemesecurity_level_schemecust_field_conf_schemer  )r  epic)ri  rb  include_systemEpics)r3   ri  rb  systemr   ri  r  )has_children_archivedr  Trd  r  rF   )<ro   r  rq   rh   r   rm  rI   r}   rH  r3   rw  keysr@  r  rP  r2  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_componentsrD  r  r  r]  _process_screen_scheme_process_permissions_process_security_levels_process_field_conf_schemer  _cache_prioritiesr  r   _calc_progressr  _process_versions_process_componentsrp  rr  rL   r   r  _process_tasksrK   _process_boards_process_sprintsrL  r  rs  _hack_replace_creation_date_hack_create_fake_taskrn  )r&   r  r  rS  r@  r4   rF  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 $///;??/00 	<''T(:;;;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PopenrI   rs  r   r   rJ   pid
log_detail)r&   r  offsetr8  r  procs         r)   _execute_taskzJiraAPIImport._execute_task  s    "K9O9R  * 0: ?E IN   "<dCC@$GG   
 
 	nDHnnV\nnfknnnooo""$$$r*      r  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   rF   )mathceilmaxfloorrJ  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  ir8  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                 2   d}d}| j                             t          |          d          }|                                r|                                D ]}|                                s|j                            | j                  r7|                    d                                          r5dD ]-}|                    |          }|	                    d           .|dz  }|                    d                                          r|dz  }||fS )	u  
        Получает количество успешно и неуспешно обработанных задач.
        Неуспешно - были ошибки при обрабоке саймой задачи или
        связанных объектов(комментарии, чек-листы, журнал работ и т.д.).

        Для успешно обработанных задач удаляет файл-флаги.
        r   rI  .success).processingr  T
missing_okrF   r  )
r   r   r.   r   iterdiris_dirr3   rt  excluded_task_dir_endingsunlink)r&   r  success_countfailed_countrz  r  file_flag_name	flag_files           r)   _get_processed_countz"JiraAPIImport._get_processed_count  s0    %..s:HH	 	&%--// & &(( =))$*HII $$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   Проект 'r3   r  r  r4   r  u   Будет выполнена обработка только новых или обновленных задач. Для обработки всех задач измените значение параметра 'IMPORT_ONLY_NEW_OR_UPDATED'uU   . Нет новых/обновленных задач для обработки из     задачTrA  u   . Обработка u    из u(    задач с ограничением u,    одновременных процессаc                     i | ]}|d S )r   r@   )r5  
task_chunks     r)   r  z0JiraAPIImport._process_tasks.<locals>.<dictcomp>d  s    LLLz1LLLr*   r   rF   r    u   ] Попытка: r  u3   ] Повторный запуск, попытка: u4   . Ошибка предыдущей попытки: z] [PID uC   ] Процесс завершился с ошибкой после u    попыток. Ошибка: r  )r<  g      ?uF   ] Процесс завершился успешно. Попытка: u?   . Код возврата предыдущей попытки: u*    попыток. Код возврата: rP    r-  u8   . Обработка задач завершена за 02dr  z06.3fuE   Обработано задач (успешно/неуспешно): u%   Скорость обработки: r+  u    задач/секu)   Всего задач в проекте: )r   IMPORT_ONLY_NEW_OR_UPDATEDrI   r}   rH  r  rJ   r   r  r  r   IMPORT_OBJ_CNTIMPORT_PROCESS_RETRYcopyr.  perf_counterr  popr  rM   r   rP   r  sleepr   polldivmodr  r4  )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  r8  processr  processes_to_removereturn_codeenddiffhoursr  minutessecondssuccess_tasksfailed_taskss                                  r)   r  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 )Nrf   rg   r   c                     g | ]
}|d          S r   r@   r4  s     r)   r6  z3JiraAPIImport._process_projects.<locals>.<listcomp>  s    -Z-Z-ZCc$i-Z-Z-Zr*   leadzdefault_import_jira@evateam.comdefault_import_jira)r  r3   projectTypeKeybusinesszproject.base:defaultsoftwarezproject.agile:defaultservice_deskzproject.servicedesk:defaultu$   ERROR! Проекты с типом u3    временно не поддерживаютсяre  rm  r3   r   r4   )r3   rh   r   activitytask_code_prefixr   rm  r  rF   u<   Не удалось импортировать проект zERR-0041r  r5  )ro   rp   rq   r   r   r?  rz   rI   rK   r  rm   r  rM   rs  rt  r  rN   rO   rP   )r&   r  r  project_leadr   rh   r  s          r)   _process_projectszJiraAPIImport._process_projects  s   %))y)99<B ..00 *	M *	ML)M%-Z-Z4CY-Z-Z-ZZZ?,,.. FF+//;; @ $ 0 0dm1L M MII*K)>!@ !@I 01Z??!'!4!8!8>T!8!U!UJJ!"23zAA!'!4!8!8>U!8!V!VJJ!"23~EE!'!4!8!8>[!8!\!\JJ# S|L\?]  S  S  ST T T)qdo.D.K.W)q)q[ghl[m)q)q)qX&(0",-"5(7 ((4U(;!**84'3	" 	" %%nlCCCC M M M1$))*wiu*w*w*4| * M M M M MMM*	M *	Ms    GG9EGAHHc                 F   |d         }|d         }|d         }d}d}d}	d}
|dk    r_d| j         j        j        j         d| d}t          j                            ddd	| d	g
          }|st          d| d| d          |}n5|dk    r |dk    rdS |                     |d          }n|dk    r	|}	| d| }
| j         j        j        j         d| }t          j                            |g d          }|s#t                              ||| j         d          }|j	        r@|d         |_
        ||_        ||_        |	|_        |
|_        |                    d           n.| j                             d| d| dt"          j        d           t'                       dS )uG  
        Присваивает цвет карточке

        Args:
            card_color_data (dict): сырые данные настройки цвета карточки
            card_color_scheme (str): стратегия присвоения цвета
            board_obj (CmfKanbanBoard): доска
        r   displayValuer   Nrh   re  rm  r8  r9  rd  u'   Не найден тип задачи 'r  r  rj   
unassignedTrN  ri   r  )r  rh   rj   ri   r3   r  rh  rm  rI   r  r  rp  u&   Цвет карточки задач 'u\   ) был изменен. Новые данные из импорта не примененыrD  )rI   rs  rt  ro   r  rq   rM   r  CmfKanbanBoardCardColorRuler  r  rh   rj   ri   r3   rw  rJ   r{   rO  rL   )r&   card_color_datacard_color_scheme	board_objr   display_valuecard_color_idlogic_type_ruleresponsible_rulepriority_rule	name_ruler  rh   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  r5  )rq   r   r   r"  rM   rN   rI   rP   )r&   card_color_configr  card_colors_strategiesstrategy_typecard_colors_datar  card_colorsr  r  r  s              r)    _process_board_card_color_schemez.JiraAPIImport._process_board_card_color_scheme4  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_versionsrl   rj   fixVersionsfix_versions
componentsr  r  r   r  r   r   r   r   ri   rH  rh  r   r   r   creatorr  r   r   r   rh   perm_security_levelr  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)rk   securityrh  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workModer3   fieldIdcustomfield_r   r   re  r  r  u5   Не удалось сопоставить поле 'r  r  zop_gantt_task.r  rF   )rQ  	classNameua   Не удалось добавить поле в раскладке карточек доски: r  zERR-0139r  )rq   r  r   rI   rs  rt  ro   CmfCustFieldr  r3   r}   rH  r   CmfGanttTaskr  rD  r   rQ  rM   rP   )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_fieldr  s                    r)   _get_card_task_fieldsz#JiraAPIImport._get_card_task_fieldsL  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)scrumr]  z	1 queriesz2 userstoryz
3 assigneez4 epicz	5 projectz7 none)r   parentChildrl   r  rH  nonez1 -1wz2 -2wz3 -4wz6 none)z-1wz-2wz-4wNONEu
   Доскиtree_node_is_branchr  N)r3   rh  ri  rb  rI   Tr   r3   u!   Обработка доски ID r  r  r   cardColorConfigcardLayoutConfigr   re  )r3   r  r  r  r  r  r(  r  rp  u   Основной фильтр z (ID u;   ) был изменен и не будет обновленswimlanesConfig	swimlanesr  r  r  u   Дорожка uA   ) была изменена и не будет обновленаquickFilterConfigquickFiltersu   Быстрый фильтр rm  r  rh  )	rh  ri  kanban_bql_filterswimlane_bql_filtersquick_bql_filters
limit_dayskanban_board_columnsrI  r  r  rm  rI   r  r  swimlaneStrategyoldDoneIssuesCutoffcardColorStrategyrW     Доска 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 rk  r@   rn  s    r)   r   z/JiraAPIImport._process_boards.<locals>.<lambda>  rp  r*   z#00875ar  z#42526e)rI   r  r  rh  r   r  u.   Порядок колонок на доске up    был изменен и не будет обновлен. Упорядочите колонки вручнуюFr  r  r  )r   r   r  r  u   Колонка uG   ) была удалена и не будет восстановленаrJ  r  rl  r~  u   Для колонки u!   ) не найден статус zERR-0124r  rm  r  z#6b778cz#0052ccu5   Не удалось создать колонку ID zERR-0042r   r  r  r  r  uC   Удалены колонки, отсутствующие в Jira: rF   u:   Не удалось импортировать доску zERR-0043)8ro   rr  rq   rI   rY  rw  _get_project_boardsrK   r}   r  rs  rt  r)  r  r3   r2  r3  r  r   r  rH  CmfKanbanBoardrh  ri  rh   r`  rb  ra  swimlane_typerc  r   r  rS  rI  "kanban_board_quick_filters_visiblerL   r+  r   r   CmfKanbanBoardColumnr  r   r  r   r  min_sizemax_sizer  rP   mapped_status_codesr  rW  rM   rN   r  rn  )3r&   r  rS  
board_typeswimlane_type_mappinglimit_days_mappingboard_folderr  boardboard_id
board_nameboard_configr&  rH  r`  board_filterboard_filter_idboard_filter_namekanban_filter_ext_idra  swimlanes_configswimlaneswimlane_idswimlane_nameswimlane_ext_idswimlane_filterrb  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_columnsro  	column_idcolumn_namecolumn_ext_idr|  r   r  status_globalr  columns_for_deletions3                                                      r)   r  zJiraAPIImport._process_boards  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 )CNri  r`  )rb  r`  r\  rY  r  r  Sprintsr\  Ti  r3   rb  r  rh  ri  r  )r  r  rp  zlist.agile_sprint:defaultrg   r   rs  re  rm  r  rh  )rm  r3   rh   r  rK  r  rk  rl  ri  r   ry  )r   r   include_archived)rh   rm  rI   r  r3   multiprojectFrB  r  rf  rg  futurer  r  r  closedr  r   u0   Добавляем задачи в спринт r  issuesr4   rH  )zlists.cmf_archivedrm  cache_status_typer5  zop_gantt_task.sched_durationr7  r6  ry  )rm  r   r  r  u   В спринт 'u5   ' не удалось добавить задачу 'r  u   ) проекта 'u\   ). Возможно проект или задача еще не импортированы.rr  rF   u$   ). Задача не найдена.zERR-0044r  uX   ' не удалось добавить задачи из других проектов: u]   . Возможно проекты или задачи еще не импортированы.zERR-0133)	task_listu   Запуск спринта "r  r  ry  r  Tr  )list_ids);ro   rr  rq   r  tree_hiddenrw  r  rs  _get_all_sprintsrI   rK   rs  rt  rv  r@  r  rh   ri  r3   rb   rn   r  rk  rl  r  rU  r  get_default_statusr   ry  rL   r}   r  r  r   rD  rK  r   r  r4  rJ   r{   rO  rO   rP   CmfListHistoryOTRrL  do_startru  r.   r   rn  r  r   r  r  rY  recalculate_count_cacher  )r&   r  rS  sprint_foldersprint_logic_type
sprint_idsr\  sprint_staterm  
sprint_objsprint_is_newexternal_tasks_countr  r  r  issue_projectissue_ext_idrF  r  s                      r)   r  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&   rQ  	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: Объект пользователя.
        unknownNFr  ue   Пользователь с указанными данными не найден в системе:    по умолчанию    'Система';   . Будет установлен пользователь zERR-0045r   r5  rF   )r  rk  rM   r   r   rI   rP   rO   )	r&   r  rQ   r  rG  r  r.  r  
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.jsonr  r3   r  r=  )r   r   r   r   r  writedumps)r&   rj  r  groups_pathr   rowrQ   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d S 	 |                      |           d S # t          $ r< 	 |                    d          }|                    dd          5 }|                    d           |D ]E}	 t
                              |          }||| j                 k    r nd1# t
          j        $ r Y Bw xY w| j	        
                    |          }|r2|                    t
                              |d          dz              d d d            n# 1 swxY w Y   Y d S Y d S # t          $ r8}| j                            d	| d
| t          j                   Y d }~Y d S d }~ww xY ww xY w)N
users.jsonr  zutf-8)encodingr   Fensure_asciir=  uI   Неудалось выполнить дамп пользователя 'r  rr  )r  rM   r   r   seekr   r  rm   JSONDecodeErrorrb   get_user_infor  r  rI   rJ   r{   rO  )r&   r  r  
users_filer   r  r  r  s           r)   
_dump_userzJiraAPIImport._dump_user,  s6    	F	))'22222 	 	 	&//==
__TG_<< VFF1III  
V 
V%(,

3I&)DM*BBB %  C#3 % % %$H% %)I$;$;G$D$D	$ VGGDJJyuJ$M$MPT$TUUUV V V V V V V V V V V V V V V V V V V V V    ##q`gqqloqq!/ $          !	su    E$,DD0+BDB0	-D/B0	0ADDD	DD	D
E (,EE$E  E$u,   Обработка журнала работrV  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%   Журнал работ задачи r4   r~  r   r   r  r  r   rI   r	  r  r  r   updateAuthorcmf_modified_byrh  started
start_datetimeSpentSecondsr-  
time_spentcommentr   r   re  r   rm  r  r   remaining_estimater~  )r  Trp  r@   )rI   r}   r  _get_issue_worklogsr  rq   rm   r  rs  rt  ro   CmfTimeTrackerHistoryr  r   datetime	timedeltar  end_daterw  )r&   rF  rV  rQ   worklogtimetracker_historyhistorys          r)   _process_issue_worklogz$JiraAPIImport._process_issue_worklogH  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   
        Конвертирует "Фрагмент кода"
        prer   r  c                 <    g | ]}|                     d           |S )zcode-)r  )r5  class_s     r)   r6  z/JiraAPIImport._convert_code.<locals>.<listcomp>o  s+    WWWVF<M<Mg<V<VW&WWWr*   zlanguage-noner   r  rF   z	language-N)r  r  extendcontentsclearr   rq   r  )r&   r  r  code_tag	class_tag
code_classr   s          r)   _convert_codezJiraAPIImport._convert_codec  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.   )r5  cs     r)   r6  z/JiraAPIImport._convert_text.<locals>.<listcomp>  s    @@@1A@@@r*   )r   r  r  r  r   r  children)r&   r   rQ   datar  s        r)   _convert_textzJiraAPIImport._convert_textv  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$   Комментарий задачи r4   r~  r   r   r  r   rF   re  r   r~  uN   Комментарий уже есть, и правился в системе zERR-0046r  Tr  z**r	  r  r   r   r
  
visibilityr  r  r   r  uL   Ошибка обработки приватного комментария zERR-0047
propertiesc                 4    |                      d          dk    S )Nr4   zsd.public.commentr   )ps    r)   r   z7JiraAPIImport._process_issue_comments.<locals>.<lambda>  s    !%%,,2E"E r*   internalFrp  r  r  u   Обработано u:    комментариев, из них приватных )!_get_issue_commentsrI   rs  rt  ro   rE  rq   r  rP   r>  rm   r  r  r   r  r   r   rh  rH  r  r   r  r  r  r   r   rO   r   r   rU  rw  r  rJ   )r&   rF  rV  rQ   cntprivate_cntr  rm  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 )(Nrh  r  r  Tr  )r   r  r   u   Удаленu   Изменен   Задача u   . Чек-лист r  uf    пользователем. Изменения из импорта не будут применены)rh  rI   r  rp  r=  )r  r  Fr  r  u   . Пункты изменены пользователем. Изменения из импорта не будут примененыr  r  r   r  r  r  CANCEL)r  ~rD  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 r7   r$  r5  lines     r)   r'  z3JiraAPIImport._process_checklist.<locals>.<genexpr>  sD       ( ((JJLL( ( ( ( ( (r*   z
>rE   )r   	mandatorycustom_statusr3   r   rF   rD  )
cache_taskrh  r3   r   r   rI   r  r  z6#\s*(?P<header>[^\n]*)(?P<description>(?:\n>[^\n]*)+)?c              3   B   K   | ]}||                                 V  d S r7   r$  r  s     r)   r'  z3JiraAPIImport._process_checklist.<locals>.<genexpr>.  sD       ' ''JJLL' ' ' ' ' 'r*   )ro   CmfChecklistrq   r  r  rI   r}   rH  rw  CmfChecklistItemr  r  r  r  compileMfinditerrF  r%  r   r  rA  r   r  r3   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  r3   r   r   	item_dataheader_patternheaders                         r)   _process_checklistz JiraAPIImport._process_checklist  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 )Nr4   z&com.railsware.SmartChecklist.checklistr   )_get_issue_propertiesr)  )r&   rV  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 )Nr0  r/  )attrr   r.  r-  )FixAffectedr   r   
::version:r   r~  u   Не найдена 'u   ' версия zERR-0050rv  r5  rF   r/  )r   rq   rI   rs  rt  ro   rv  r   rP   rO   rP  )
r&   rV  r  version_typesversion_typeversionr-  version_datarm  version_objs
             r)   _process_issue_versionsz%JiraAPIImport._process_issue_versionsA  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   r1  re  r   r~  u%   Не найден компонент zERR-0051CmfComponentr5  rF   )
rq   rI   rs  rt  ro   r:  rP   rO   r   r1  )r&   rV  r  issue_componentsr1  	componentrm  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  rE   r.  r   r   r  Tr  r=  r  rA  r  r  r3   rd  r  u+   Не удалось создать тег 'r  zERR-0125r  )r  r  rq   rA  ro   r  rw  r   rM   rI   rP   r  )r&   rV  r  r  r  r  labelr  filter_r  r  s              r)   _process_issue_tagsz!JiraAPIImport._process_issue_tagsl  s   ******x$$Xr22 	 	EMM#s++33C<<EHU$FFFEg}5}}}5We,g}5}}}5	 m''w'77  --U-33CHHJJJC       ))Q%QQCQQ)! *         	s   "A=C  
D*#DDc           
      l   ddl m} g d}d||r|j        j        pd |t	          |j                  t	          |j                  d}d }	d }
|d         }|d         }|dv r4|r|                     ||	          }	|r|                     ||	          }
n|d
k    ry|r:t          j        	                    | j
        j        j        j         d| |          }	|r:t          j        	                    | j
        j        j        j         d| |          }
n|dk    r|}	|}
n|dk    r| j
        j        j        j         d|j        j         }|r-t          j        	                    dd| d| g|dgz             }	|r-t          j        	                    dd| d| g|dgz             }
nd S t          j        j        	                    |          }t!          ||j                  rs|	r|	j        j        pd |d<   |
r|
j        j        pd |d<   |	r|	j        j        pd |d<   |
r|
j        j        pd |d<   |	r|	j        j        pd |d<   |
r|
j        j        pd |d<   n
|	|d<   |
|d<   t          j                            |d         |d         |d         |d         |d         |d         |d         dg          }|s|nd S ) Nr   r   )r  r   r3   rD  )r  r   cmf_author_idr   obj_idobj_coder[  r\  )r   rj   r  r   re  r  ri   r   rm  r  r  r  
from_valueto_valuefrom_value_codeto_value_codefrom_value_nameto_value_namer   r  rE  r   rF  r  )r   r  rE  r   rF  from_value_idto_value_idr   )cmfr   r   r   r.   r   r  ro   r'  rq   rI   rs  rt  r  r  rD  
issubclassCmfRelationBaser3   CmfOrmColumnHistoryr  )r&   r   history_itemr	  
created_atr  r   fields_history_datarH  rI  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   rl   ri   r   r   u   История задачи r4   r~  r   r   r  	changelog	historiesz	::historyr   r	  r  u   Аудит без автора r   rF   )r   r  	log_levelrh  r   r   r   rQ  r[  r   
fromStringtoStringr   z<br>)r   r  r`  rh  r   r  T)rI   r  rm  rp  )r   )rI   rs  rt  rq   r  rm   r}   rH  jira_map_fieldsr\  r   r  ro   rE  rP  rU  rw  rS  bulk_insert)r&   rV  r  field_title_maprQ   history_fieldsr  rm  r  r  r  rQ  r   history_fieldr   history_commentr4   s                    r)   _process_historyzJiraAPIImport._process_history  s    %0,*$
 
 ^U5\]]uXy?Y]]][)+6 ,	7 ,	7G.5A[[GTXM[[FJ{{8$$ \!--gh.?.NTW-XX

&../ZQX/Z/Z[[[)0);:deqz{{G( 0 0)--d7mT']KK,0099 AU=1 A#M29=G]+,<= 	A(,(?(?!-0> &#I.%) ) ) A*11-@@@--gtL7I4PZK[\\((&*GFOO)0 '0 '0)-'0 '0GFOO$/33   4 	 	O # u"("3"3t`dms"3"t"t < <gcl;;;;) 7$$$666 	J&22.2IIIII	J 	Jr*   u]   Обработка связей с документами Wiki и веб-страницамиc                    g }|                     dg           D ]U}| j        j        j        j         d|d          }|d         }|d         }|st          j                             |          }|s#t                              ||| j        d          }|j        r7|d	         |_        |d
         |_        ||_	        |
                    d           |d         dk    r|                     d          dk    rvt          j        d|d
                   }	|	rY|	                    d          }
t          j                             ddd|
 g          }|s;|                    |           d|d<   W||_        d S )Nremotelinksre  r   objectapplicationr~  Tr  r,  r  rp  r  zcom.atlassian.confluencerelationshipz	Wiki Pagez$/pages/viewpage.action\?pageId=(\d+)rF   rm  r8  r>  rd  r  )rq   rI   rs  rt  ro   CmfLinkr  r3   r  r  rw  r  r  rj  ra  r   local_links)r&   rV  r  rp  
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@   r5  r   s     r)   r6  z0JiraAPIImport._process_gantt.<locals>.<listcomp>Z  s    HZHZHZqHZHZHZr*   )rF  r   Trp  u8   Не удалось импортировать Гант u    для задачи 'r  zERR-0112rG  r5  rF   )rq   r   ro   rG  rP  rU  rw  rM   rI   rP   rO   )
r&   rV  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   r  r0  T)rh  r`  rm  rI   r  z/browse/r4   u<   Задача импортирована из Jira: <a href="z" target="_blank">z</a>rp  )rI   rs  rt  ro   rE  rq   rb   
url_joinerr  r   rU  rw  )r&   r  rV  comment_ext_idr  r  s         r)   _add_comment_link_to_issuez(JiraAPIImport._add_comment_link_to_issueh  s    O29E^^QVW[Q\^^#''!8 ( 
 
  	'' %? $ (  G y##DIM3LeEl3L3LMM;; ;04; ; ; 	  	+LLTL*****	+ 	+r*   u   Обработка задачиc           	        , d}|d         }|d         }d| d| d|d         d          d	}|                      || j        t          j        j                 d                   }||d
<   | j        |d<   d|d<   | j        j        j        j         d| |d<   ||d<   t          |
                    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         d0         
                    d1          }|r|d         d0         d          d2, }n,}d| j        j        j        j         d| d}t          j        
                    dd3d4| d4g5          |d6<   |j        j        
                    d7          }| j        j        r|r|j        j        
                    d          }|                     |          }t=          t?          ,fd8|          d.          }| j        j        j        j         d|d          }t          j         
                    dd9|g5          }n|d:         }|d;         }|
                    ,|          }| j        j        j        j         d| }t          j         
                    dd3| d<g5          }nt=          t?          ,fd=|d>                   d.          }|r	|d?         }n|d@         d:         }tC          j"        |          }| j        j        j        j         dA| }t          j         
                    dd9|g5          }||dB<   |d         dC         d         }| j        j        j        j         d|j#         d| }t          j$        
                    dd9|gdDgE          } | s|d         dC         d?         }!|d         dC         dF         d         }"tK          j&        |"          }#|'                    |#G          } | j                            t$          j         dH|! dI| dJdKd           | |dC<   |dC         j(        |dL<   |d         
                    dM          r| j        j        j        j         d|d         dM         d          }$t          j)        
                    |$          |dM<   |dM         sI| j                            dN|d         
                    dM           dOd           | xj        dz  c_        |*                    dPd.          }%|%r|dQ         dR         }%| j        j+        ,                    dS| dT|            tK          j-        | j        t          j        |ddU|d         gV          \  }&}'|| .                    |&|          z  }|&j/        r|&0                    g dW           | 1                    |%|&|          |&_2        |pg }|D ]}(|&j3        4                    |(           | 5                    ||&           | 6                    ||&           | 7                    ||&           | 8                    ||&           |&j9        dXk    rOt          j:        
                    |dYddZg[          })|)|&_;        |)j<        sd|)_<        |)=                    d\           |d         d]         |&_>        | ?                    |&|           ||&_        |&j@        r|&=                    d\           t                       | B                    ||&           | C                    ||&           | D                    |&|           n#| j        j+        E                    d|& d^           | F                    ||&           |d         d_         d`         r| G                    |&|           | jH        
                    da          r| I                    |&|           t                       | j        J                    dbdc           t          |dd                   L                    de          }*t          |*df          5 }+|+N                    dg           d.d.d.           n# 1 swxY w Y   |S )hu   
        Общая логика обработки которая потом разделяется на задачи и эпики
        r   r   r4   r
  rB  z): 'r   r   r  rh  r  Tapprovedre  rm  r   archiveddatery  r8  r~  r3  u:   Не найден уровень безопасности zERR-0048rD  r5  rF   r:  r5  r2  r  u;    Не указан создатель(creator) задачиr  r  r  zERR-0049)rB  exc_infor  r   u    Не указан автор(reporter) задачи. Будет установлен тот же пользователь, что и создательr   r  r   rl   rj   u6   Не найден исполнитель задачи Nrk   rH  r  r  r8  r9  rd  rh   r  c                 0    | d         d         d         v S )Nr  r   r  r@   wfissuetype_ids    r)   r   z.JiraAPIImport._process_issue.<locals>.<lambda>  s    <26F3G3J<3X#X r*   r  defaultWorkflowissueTypeMappingsr?  c                     | d         v S )Nr  r@   r  s    r)   r   z.JiraAPIImport._process_issue.<locals>.<lambda>  s    |r,/?? r*   r  r3   r  r  r  r   r  r  r|  )r  u!    Не найден статус 'r  u  ). Необходимо проверить схему бизнес-процессов проекта и бизнес-процесс задачи в Jira. У задачи установлен статус по умолчанию аналогичного типа.zERR-0071r  r   u'   Не найдена резолюция zERR-0116r   renderedFieldsr   u4   Создание/обновление задачи 'rP  r`  rn  )
r   r0  r1  r  rp  r  ri  r   r  r  z	task.epicr  rY  ri  rb  r  r   rp  r   u[    была изменена пользователем и не будет обновленаr  totaltimeTrackingEnabledrF  r  r  r  wr   )Or[  rU  ro   rD  r.  rr   rI   rs  rt  r   rq   CmfSecurityLevelrP   rO   r   r  rm   r   rH   rD   r   rJ   r{   ERRORr  r  r   rb   rn   r  r   r   r  r   r  r   r  r   r  r  r  r'  r  r}   r  ru  r  r  r>  r  r   r4  r   r8  r>  rB  rx  r  rr  ri  rY  rw  r   r  rU  rL   r  ri  r  rH  r-  r  ru   r  r  r   r   r   r  )-r&   rV  rH  sprintsr  r  r  rQ   normalized_issuerm  story_p_fieldissue_creatorr  rU   r  issue_reporterr   simplified_projectissuetype_ext_idr  r  r  r  r  r  r  default_workflowissue_type_mappingsworkflow_namer  	status_idr  
status_objr     status_сategoryr  r0  
issue_textr  r.  r\  r  r  r   r  s-                                               @r)   r  zJiraAPIImport._process_issue~  sC   
 ;%L	ViVV8VVx9SVVV  ..udmFND_6`ai6jkk%,"'+'<$'+$(,(>(E(Q%_%_U]%_%_"#, +/		.0I0I+J+J(?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   n<<o o u&   Обработка всех задачc                     | j                                         }|D ]3}| j                                        r d S |                     |           4d S r7   )rb   rB  rI   rK   r  )r&   r  rV  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   r9  r   )r   s    r)   r   z2JiraAPIImport._process_relations.<locals>.<lambda>  s(    !%%"--11(;;?hh r*   r   r7  r   rh  re  
issuelinksr  r4   rm  r4   r  rm  uD   Анализ связей всех задач выполнен за r+      сек.u   Подзадачи: zsystem.additional_parentrg   zsystem.linkr=  r`  r   rH  r  uP   Не удалось связать задачи, возможно задача 'u#   ' не попала в импортparent_taskr  )relation_type.coder  system.finish:finishin_linkr  out_linkrd  Trp  u,   Тип связи родительской 'u$   ' и дочерней задачи 'ud   ' изменен с 'Блокируется/Блокирует (ОО)' на 'Относится к'.u   У задачи 'u3   ' эпик(родительская задача) 'uo   ' из другого проекта. Создана связь 'Дополнительный родитель'z:additional_parent:r~  )r  r  relation_typerm  rI   u<   Не удалось создать связь задачи 'u&   ' с дочерней задачей 'r  zERR-0114rD  r5  rF   uG   Создание связей подзадач выполнено за r  zsystem.duplicatezsystem.clone)Blocks	DuplicateRelatesClonersu   Связи: r  r3   )rm  rI   r3   inwardoutwardu=   Не удалось найти входящую задачу rB  u   ). Возможно задача не попала в импорт или находится в проекте, который еще не импортирован.u?   Не удалось найти исходящую задачу r  )r  rm  rI   u.   Не удалось создать связь z. in_link: z), out_link: r  zERR-0052uA   Создание связей задач выполнено за uL   Обработка связей всех задач выполнена за bigganttuB   Обработка связей задач плагина BigGantt).rI   r}   rH  r   r   r   r   r.  r/  r?  r  r@  rK   rq   rs  rt  rx   r   rw   r  rJ   r  ro   CmfRelationTyperD  rH  CmfRelationOptionr  r  rw  r  rm  rM   rP   rO   rL   r  r   in_type_nameout_type_namer   r  r  rG   r  r   )&r&   r  epic_link_fieldtotal_t1rH  r  r.  rV  issue_parentissue_epic_keyrm  parent_ext_id	sub_tasksissue_links
issue_linklink_ext_idanalysis_t2subtasks_t1additional_parent_relationlink_relationr  child_ext_id
child_task	relationsrelation_optionrelation_ext_idr  subtasks_t2	map_namesrelations_t1issue_relationrelation_coder  r  r  
rel_ext_idrelations_t2total_t2s&                                         r)   _process_relationsz JiraAPIImport._process_relations  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): проект из джиры как есть
        r1  TrY  r  r  u   КомпонентыiI r  r  rp  r   Nre  )descr_documentdefault_ownerdefault_responsibler  ri  rh  ry  r  re  r3   ru  Fr  u   Компонент r  assigneeTypePROJECT_DEFAULTPROJECT_LEADCOMPONENT_LEAD
UNASSIGNEDr   r   rF   u3   Ошибка загрузки компонента ERR-0053r:  r5  ri  r  r  r   r  rd  )%ro   rr  rq   r  r  rw  _get_project_componentsrI   rK   rs  rt  r:  rh  r3   ri  ry  r  rm   r  rj   r  r   r  rU  r  create_descr_document
text_draftr   rL   rn  rN   rO   rP   r   rL  r  rY  )r&   r  rS  component_folderr<  rm  components_lists          r)   r  z!JiraAPIImport._process_components  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releaserY  r  )rb  ri  r   ReleasesTi0 r  r  rp  r   r  r2  )rm  r3   rh  rh   r   rk  rl  r  ri  r   ry  r  re  zlist.release:defaultrg   r3   r   r   rf  releaseDateru  Freleasedr  r  u   Релиз |    был изменен пользователем. Изменения из импорта не будут примененыrF   u+   Ошибка загрузки версии r  rv  r5  ri  r  r  r  rd  )'ro   rr  rq   r  r  rw  _get_project_versionsrI   rK   rs  rt  rv  r  r  rh   rh  ri  r3   r   rk  rl  r  r  r  r  rU  ry  set_default_statusr}   rH  rL   rn  rN   rO   rP   r   rL  r  rY  )r&   r  rS  release_folderr5  rm  version_lists          r)   r  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 в фильтрах задач
        r  )r  r`  T)r  ubqlbqlr3   r  r  " (r  jqlr  jqlQueryapplinkrpcUrlr   2--------------------------------------------------u   ФИЛЬТР: Fr  Trp  zJQL:	zUBQL:	zBQL:	r*  u0   : ошибка преобразования JQL r  zERR-0066r)  r5  NuC   Обработка JQL в фильтрах выполнена за r+  r  )#r   r.   rI   rs  rt  r.  r  ro   r)  r  r3   r   r  r   rq   r  r  r  ext_urlnetlocrJ   get_modifiedr  r   r  r  rw  rL   r  r}   rH  rM   rN   rP   r  )r&   r  rt  r6  task_filtersr  
filter_msgr  r  r  rpc_urlr  r  rU   r  r=  s                   r)   r5  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@   r9   s    r)   _process_auditzJiraAPIImport._process_audit  s	     	r*   c           
      :	   |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           t/                       d S | j         j                            d| d            | j                            |                                          }|s-| j                            |	                                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                              ||d*         d+|t          |j                  d| d| j         ,          }||	k    r|	g|_        |                                 t/                       d S )-Nr   re  rm  r8  r>  r?  scoperH  r  r=  r  r  r   z::\d+)::rF   u   ext_id типа задачи r:  r   Tr  r}  r3   u2   Поиск типа задачи по имени 'r  rA  uW   Ошибка объединения одноименных типов с именем 'u*   ': одинаковый источник 'zERR-0118r  )rQ   r6  u   Тип задачи 'u2   ' не найден. Создание новогоtask.agile:defaultr  r  task.sub:defaulttask.epic:defaultsubtaskr   r`  ui_colorr   rD  )r3   r   r  r  r  rm  rI   )rI   rs  rt  rq   ro   r  r  r  findallrm  r   r}   rH  rM  r.   rw  r%  r  rA  rP   rO   r  r   rL   	name2coder  rb   rn   r  )r&   r  r  r  rA  issue_type_scope_idrh   ext_id_patternissue_type_nameissue_type_aliaslogic_type_ext_id_oldlogic_type_ext_id_mergedtemplate_coder  s                 r)   _process_issue_typez!JiraAPIImport._process_issue_type  s   "4(#5<H[[M[[V%A+<%A%A%AB>>'"" 		 &0%8%CD%I"["[M"["[#'?#9#@#L e ePc e e6#?):#?#?#?@G (,,g& - 
 


 Rdo4;GQQQ	BJ~z/@/FGGHH1LL O"**c
 c cOYO`c c   !#~r3z?P;Q;Q R RJOOdO+++J$..);Z=OPPVVXX%f-3355 	O"''W_WWW    ,009 '* 1  J
   	$ A$>):$>$>$>
!!+'+++3z7H3I3III>>'** ,r1G1N1Z,r,r^him^n,r,r,r)(2(9(?(G(G-) )J%
 ,W0A+V:CT+V+V(rz.2JKKLLqPPO--o  sB o oBF/BXB_Bko o o"&!/ .    OOq(OOO(@J% !O33$J,<<< ''(8999OOdO+++LLLF##gOggg	
 	
 	
 **?+@+@+B+BCC 	_ N../?/E/E/G/GI]^^M9? 	3*+r11 2,-22 3)$ 3 2&**D-0< + 
 
 (( M*$*++-)--- ) 
 

 ... 01Jr*   u2   Обработка логических типовc                 r   dddddddddddddddd| _         |                     d          D ]}| j                                        r dS |                    d	|d
                                                   }|d
                                         }d| d| d}| j        j                            d| d|            	 |                     |           | j        xj	        dz  c_	        # t          $ r<}t                       | j                            d| d| dd           Y d}~d}~ww xY wdS )u$   Маппим issueType в logic_typer  ztask.userstory:defaultr  ztask.bug:defaultr  )zsub-taskr  u   подзадачаz
user story	userstorystoryu   историяrF  u   задачаbugu   багu   ошибкаdefectu   эпикr  r  Nr}  r3   r  r  r  u   Обработка типа r  rF   u)   Ошибка обработки типа zERR-0141r  r5  )r  rA  rI   rK   rq   r%  r}   r  r  rn  rM   rN   rP   )r&   r  r  r  log_issue_typer  s         r)   _process_issue_typesz"JiraAPIImport._process_issue_typesF  s   
 +)"421-6(0%(.(+'
 
$ **=99 	 	J((** (nn-?FASTTZZ\\O)&17799HHH5EHHHNO"''(e~(e(eYc(e(efff	((44455:555   ))WWWRUWW+ *        	 	s   *C..
D481D//D4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   Импортируем workflowr{  r   r  Nr3   re  entityIdr~  r  rg   r  r   Trp  r  r`  r@  r  r  r  rd  r  r  )rm  r  rU  rV  rW  rX  c                 V    g | ]%}j         j        j        j         d j         d | &S )re  )rI   rs  rt  r   )r5  str&   r  s     r)   r6  z3JiraAPIImport._process_workflow.<locals>.<listcomp>  sR      +R  +R  +Rsudo.D.K.W+n+n[c[f+n+njl+n+n  +R  +R  +Rr*   r[  rm  r  uN   DEV: Fatal Вероятно, сломали создание статусов!r\  r  r  r  ra  c                 j    t          |                     d                    t                    k    S r  r_  r`  s    r)   r   z1JiraAPIImport._process_workflow.<locals>.<lambda>  s&    3vzz$/?/?+@+@C	NN+R r*   rc  rd  re  rf  r  rg  rh  ri  rF   )$rA  rI   rK   r}   r  rs  rt  ro   r  rq   r   r3   rw  r  r  r  r  r  r  r   r  r  rH  r  r  r  r  r  r   r   rj  rk  rl  rP   rL   rn  )r&   jira_statusesr  jira_workflowworkflow_idtemplate_workflowr   r  r  r  r  r  r  r  rn  rb  r  s   `              @@r)   _process_workflowzJiraAPIImport._process_workflowq  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 )(Nworkflow_schemere  r  rm  r8  r?  rd  u+   Не импортировался workflow r   r~  r  rg   Tr  r3   r   r   rp  r  r  r  r>  rh   r  r  r  r  r  r  r  r  r  r  rD  r  r   r  r  rF   )rA  rI   rK   rs  rt  ro   r  rq   r  r  r3   r   r  r  r  rw  r}   rH  r   r  r  r   r   r  r  r  rL   rn  )r&   r/  default_task_workflow_ext_idr  r  r  r  r  logic_type_idr  r  rh   r  r  r  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 )Nr2  r  )r  r  r  rA  rq   rm   rs  rI   r   r  r  )r&   r  r  r4   s       r)   _cache_all_userszJiraAPIImport._cache_all_users4  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.
        )r3   r  ri   r  cache_schemesr  rd  rh  r  r  N)rs  priorities_cachero   r  r  r   r  r  r   r   ru  r.   )r&   field_config_schemerA  r  field_configsfield_configkvs           r)   r  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 )rF   Nr@   r5  ri   r   s     r)   r'  z5JiraAPIImport._get_cached_priority.<locals>.<genexpr>f  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>n  r@  r*   u   Приоритет 'uP   ' не найден. Возможно он еще не импортирован.)r   r7  rM   )r&   r   priority_tuples    ` r)   r&  z"JiraAPIImport._get_cached_priorityZ  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   Простой дампr3   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  rF   r=  Tr  u
   Дамп 'u   ' выполнен за r+  r  )r.  r/  rI   r   r   r   r   rI  r   json_object_countr  r   r  r   r   rw  r}   r  r+   )	r&   api_funcr3   r6  r   r   r   r  r=  s	            r)   _simple_dumpzJiraAPIImport._simple_dumpv  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 )NrD  r+)rI   r   r   r   r   r   r  )r&   r3   r   r   r  s        r)   rA  zJiraAPIImport._simple_get  s      O5577@@DPP	 	*i&& *! * *C**S//))))** * * * * * * * * * * * * * * ts   "BB	B	c              #     K   | j                                         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 )N)r^   r]   r  uN   Отсутствует файл info.json в каталоге проекта 'r  r  )r   r  r3   rt  r   r   rI   r}   rH  r   r   r   )r&   r  r  r   s       r)   r?  zJiraAPIImport._get_projects  s     ,4466 	# 	#K(()<== #,,[99I##%% &..sepsss   i%% #iill"""# # # # # # # # # # # # # # #	# 	#s   B??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          }t          |d          5 }t                              |          cd d d            S # 1 swxY w Y   d S )Nworkflows.jsonr  )r   r   r   r   r   )r&   r  workflows_filer   s       r)   r  z/JiraAPIImport._get_simplified_project_workflows  s    *33J@PQQ.#&& 	 !99Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   AAAc              #      K   | j                             |d          }|                    d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nissue_types.jsonr  r   r   r   r   r  )r&   r  issue_types_filer   r  s        r)   r  z*JiraAPIImport._get_issue_types_for_project  s      ,55jBTUU""3'' 	&1 & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&   "A##A'*A'c              #      K   | j                             |d          }|                    d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nstatuses.jsonr  rS  r&   r  statuses_filer   r  s        r)   r  z'JiraAPIImport._get_statuses_for_project        )22:OO$$ 	& & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&rU  c              #      K   | j                             |d          }|                    d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )N
roles.jsonr  rS  )r&   r  
roles_filer   r  s        r)   r[  z JiraAPIImport._get_project_roles  s      &//
LII
__S!! 	&Q & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&rU  c              #     K   | j                             |d          }t                              |          D ]L}t	          | d| dd          5 }t
                              |          V  d d d            n# 1 swxY w Y   Md S )Nry   r  
/info.jsonrI  r   r   r   listdirr   r   r   )r&   r  	board_dirr  r   s        r)   ru  z!JiraAPIImport._get_project_boards  s      %..z8DD	

9-- 	# 	#H99X9994@@ #Aiill"""# # # # # # # # # # # # # # #	# 	#   A99A=	 A=	c              #     K   | j                             |d          }t                              |          D ]L}t	          | d| dd          5 }t
                              |          V  d d d            n# 1 swxY w Y   Md S )Nr  r  r_  rI  r`  )r&   r  sprints_dir	sprint_idr   s        r)   r  zJiraAPIImport._get_all_sprints  s      '00YGGK00 	# 	#I<<y<<<dCC #qiill"""# # # # # # # # # # # # # # #	# 	#rc  c              #      K   | j                             |d          }|                    d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nversions.jsonr  rS  )r&   r  versions_filer   r  s        r)   r  z#JiraAPIImport._get_project_versions  rZ  rU  c              #      K   | j                             |d          }|                    d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Ncomponents.jsonr  rS  )r&   r  components_filer   r  s        r)   r  z%JiraAPIImport._get_project_components  s      +44ZARSS!!#&& 	&! & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&rU  c                 j   d}d}| j                             |d          }|                                r}|                                D ]h}|                                s|j                            | j                  r7|                    d                                          r|dz  }|dz  }i||fS )Nr   rI  r  rF   )r   r   r   r  r  r3   rt  r  )r&   r  r  unprocessedrz  r  s         r)   r  z"JiraAPIImport._count_project_tasks  s    %..z7CC	 	%--//  (( =))$*HII $$]33::<< %1$K
k!!r*   r   c              #     K   | j                             |d          }|                                s'| j        j                            d| d|            d S d}|                                D ]}|                                s|j        }|	                    | j
                  r9|r(|                    d                                          sc||k     r|dz  }o|||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 )	NrI  u   Каталог u    отсутствует. Возможно он был удален или еще не создан. Необходимо повторно запустить импорт проекта r   r  rF   r  rI  )r   r   r   rI   r}   rH  r  r  r3   rt  r  r   r   r   )
r&   r  r:  r8  only_processingrz  rL  r  r}  r   s
             r)   r@  zJiraAPIImport.get_project_tasks  s     %..z7CC	!! 	O"**u) u uhru u   F!))++ 	 	H??$$ mG >??  x'8'8'G'G'N'N'P'P u}}
%%h''44d;; #qiill"""# # # # # # # # # # # # # # #QJEE#	 	s   D66D:	=D:	c                 L   |                     d          sdS |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"
        r  NissueTypeScreenSchemeglobalActionsr   )BROWSEPROJECTSCREATEISSUES
EDITISSUESrc  issueTypeIdactionsra  rF   r  c                     g | ]}|S r@   r@   )r5  r<  s     r)   r6  zFJiraAPIImport._get_screen_scheme_from_smart_config.<locals>.<listcomp>"  s    'H'H'Ha'H'H'Hr*   r  )rq   r   r  r4  r   rs  ru  r  )r&   smart_configscreen_schemer  rL  r  r   r  rx  issue_type_screensrb  ra  issue_type_screens                r)   $_get_screen_scheme_from_smart_configz2JiraAPIImport._get_screen_scheme_from_smart_config   s    	** 	4$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                     | j         j        r|s| j                             |          S d S |                     |          S r7   )rb   rn   get_project_screen_schemer~  )r&   r  r  rz  s       r)   _get_project_screen_schemez(JiraAPIImport._get_project_screen_scheme&  sP    9? 	K Gy:::FFFG G <<\JJJr*   c                    | j                             d          }|                                rt          j        |           |                                 |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  r  r3   u(   Дамп бизнес-процесса 'u   ' как XMLr  r  Tr  zwb+uB   Не удалось получить бизнес-процесс 'u   ' как XML: r  r  r   r6  
error_type)r  r   r   r   rmtreer   rI   r}   r  rb   get_workflow_as_xmlr  r  quoter   r  r   r  rM   rP   )r&   r/  r  r  r  r  r  r  r  r   r  s              r)   _get_project_workflows_as_xmlz+JiraAPIImport._get_project_workflows_as_xml-  s   (11+>>!! 	)M-((((4+ 	 	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D4D(D4(D,	,D4/D,	0D44
E->$E((E-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)   r6  z>JiraAPIImport._get_field_config_issue_type.<locals>.<listcomp>K  s5     
 
 
 
4 !!
 
 
r*   r  T)
is_defaultr  r   )rw  fieldConfigurationIdc                 P    g | ]#}|d          dk    t          |d                    $S )rw  r  r  )r5  field_configurations     r)   r6  z>JiraAPIImport._get_field_config_issue_type.<locals>.<listcomp>^  s@     
 
 
#"=1Y>> #M233>>>r*   rw  r  )r   contextisHidden
isRequired)issuetypeIdr  r  r  )rb   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_usedr  r  field_configuration_idr   
field_usedr  s                 r)   _get_field_config_issue_typez*JiraAPIImport._get_field_config_issue_typeI  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   rD  rF   u9   Не удалось получить опции поля u    в контексте r  responsez HTTP: Response text -> zERR-0109r  r   r  NisAnyIssueTyper  options)rb   &get_project_field_configuration_schemer  r   r  !get_field_context_project_mappingget_field_contextget_field_context_optionrM   rO   rG   r  r   rI   rP   #get_field_context_issuetype_mappingrq   r   rW  )r&   r  r  r  r  field_used_id
context_idr  context_optionr  
error_textcontext_issuetypesr  context_issue_types                 r)   _get_cloud_project_fields_usedz,JiraAPIImport._get_cloud_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                     | j         j        r|s|                     |          S d S |                    di           }|                     |           |S )N
fieldsUsed)rb   rn   r  rq   _get_field_contexts)r&   r  r  rz  r  s        r)   _get_project_fields_usedz&JiraAPIImport._get_project_fields_used  sh    9? 	 G:::FFFG G '**<<<K$$[111r*   c              #      K   |d          d}t                               |          D ]}|dk    r	|| d| dV  d S )Nr  z/attachmentsall_attachments.zipr  )r  r   )r   ra  )r&   rV  attachments_pathr  s       r)   r  z$JiraAPIImport._get_issue_attachments  sy      #L1???$455 	[ 	[I111 );K8Y8Yi8Y8YZZZZZZ	[ 	[r*   c              #      K   |d          d}t          |d          5 }|D ]}t                              |          V  	 d d d            d S # 1 swxY w Y   d S )Nr  z/comments.jsonrI  )r   r   r  )r&   rV  comments_file_pathr   r  s        r)   r  z!JiraAPIImport._get_issue_comments  s       %l 3CCC$d++ 	&q & &jjoo%%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   "AAAc                     |d          d}t          |d          5 }t                              |          }d d d            n# 1 swxY w Y   |pg S )Nr  z/worklog.jsonrI  r   r   r   )r&   rV  r  r   rT   s        r)   r  z!JiraAPIImport._get_issue_worklogs  s     %l 3BBB$d++ 	q))A,,C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ybs   AA
Ac                     |d          d}t          |d          5 }t                              |          cd d d            S # 1 swxY w Y   d S )Nr  z/properties.jsonrI  r  )r&   rV  properties_file_pathr   s       r)   r+  z#JiraAPIImport._get_issue_properties  s    "'"5GGG&-- 	 99Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    AA
Ac                     |d          d}t          |d          5 }t                              |          cd d d            S # 1 swxY w Y   d S )Nr  z/watchers.jsonrI  r  )r&   rV  watchers_file_pathr   s       r)   r  z!JiraAPIImport._get_issue_watchers  s     %l 3CCC$d++ 	 q99Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 r  c                 
   | j                                                             d          }|                                rBt	          |d          5 }t
                              |          cd d d            S # 1 swxY w Y   i S )Nglobal_settings.jsonrI  )rI   r   r   r   r   r   r   )r&   global_settings_file_pathr   s      r)   rt   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.jsonr   cloudId)	rb   get_cloud_idrI   r   r   r   r   r   rs   )r&   r  	data_filer   s       r)   _get_cloud_idzJiraAPIImport._get_cloud_id  s    y%%''O5577@@QQ	)T"" 	aIIdA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Ys   A>>BBc                    | j         j                            d           | j                                        D ]}|d         s	 | j                            |d                   |d<   |d         D ]Q}	 | j                            |d         |d                   }||d<   |d                             |           K#  Y OxY w#  Y xY w| 	                    | j                   d S )Nu0   Получение контекста полейr   r   r  r  )
rI   r}   r  r   r   rb   _get_field_context_get_field_optionsr  r   )r&   r   r  r  s       r)   _get_fields_contextz!JiraAPIImport._get_fields_context  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 ]}| 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]   
        Собирает пользователей и группы из задач
        r7  Nr  r  zusers.json.newr  r  r  r  zgroups.json.newa)r  r  r  r  r@  rI   rK   r   r   r   r   r   r  r   r  r   r  rq   rm   rs  r   r  r  r  r   close)r&   r  r  r  r.  rV  issue_users_pathall_users_pathall_users_path_newf1f2f3r  r  r4   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+G,<BG		G,GG,GG, H,G00H3G04HH	
H	N#M74M 	M7 M$$M7'M$(M7+N7M;;N>M;?NN	N	c                    | j                                         }| j                                                            d          }t          |d          5 }t                              ||           d d d            d S # 1 swxY w Y   d S )Nr  r   )rb   get_configurations_of_jirarI   r   r   r   r   r   )r&   global_settings_datar  r   s       r)   _dump_jira_global_settingsz(JiraAPIImport._dump_jira_global_settings5  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c                 b   | j         D ]}| j         |         d         s|                    |          s-||                             di           }|                                D ]}|                    d          s|d         |d         |d         |d         d}|                    d          r'd	 |d                                         D             |d<   | j         |                             dg           }||vr|                    |            |                     | j                    d
S )u   
        В box версии, контексты полей получаем из плагина "Smart Jira Configuration"
        r   r  r   r3   isGlobalContextr  )r   r3   r  r  r  c                     g | ]}|S r@   r@   )r5  options     r)   r6  z5JiraAPIImport._get_field_contexts.<locals>.<listcomp>O  s    .`.`.`&v.`.`.`r*   N)r   rq   r   r  r   r   )r&   r  r   contextsr  context_datafield_contexts          r)   r  z!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                    | 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    r3|d         |         }	|	r!|                     |	| j                 |           |dk    r8|d         |         pg }
|
D ]#}	|                     |	| j                 |           $|dk    r4|d         |         }|r"|                     |d         |         |           |dk    r-|d         |         pg }|D ]}|                     ||           N|dk    rp|d         |         }| j        |                             dg           }|r?|                    |           t          t!          |                    | j        |         d<   |                     | j                   dS )u   На коробке только через мету задачи можно получить варианты выбора полей

        Args:
            issue (dict): задача
        r4   r   r   allowedValuesr   u   Выбор без id: r  r  r   r  rF   r  
userpickermultiuserpickergrouppickermultigrouppickerr  N)rb   get_issue_metar   rq   rI   rJ   r{   rO  rn   r   r  r  rm   r  r  r  rs  r   )r&   rV  r  metar   r  r  cur_optcustom_field_typesrG  r2  rj  rF  r   s                 r)   r  z JiraAPIImport._get_field_optionsW  sf    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 COOD$7BBB#'888h
39r! C CDOOD$7BBBBC#}44h
3 M%%eHoj&A8LLL#'999x4:# 7 7E%%eX66667#x//x4*:6::9bII QNN6***>B3w<<>P>PD$Z0; 011111r*   c                 
   i }|r~| j                             | j         d|            | j                            |d         d          }|                     || j                 | j                                                    |S )Nu4    Поиск руководителя проекта r&   Tabsolute)rI   rJ   r  rb   rq   r  rm   r   )r&   r  	lead_datas      r)   _get_project_leadzJiraAPIImport._get_project_lead  s    	 	[O4#3 o oim o oppp	d6lTBBIOOIdm4do6W6W6Y6YZZZr*   r  r  c                    | j                             | j        ||          }| j                            d          }|                    d          5 }t                              ||d           d d d            d S # 1 swxY w Y   d S )NrO  r  Fr  )rb    get_simplified_project_workflowsrs   r  r   r   r   r   )r&   r  r  r  rP  r   s         r)   "_dump_simplified_project_workflowsz0JiraAPIImport._dump_simplified_project_workflows  s    
 I>>M
 
	 )223CDD  %% 	8IIiI777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   A<<B B c                    | j         j                            t          j         d           | j         j        j        j         d|d          }|d         d         }|D ]}|d         }| d| }t          j        	                    || j         j        j        j        g d          }|s7t                              || j         j        j        j        | j         d	          }|d
         |_
        |d         |_        t          |                    t          |                              |_        t          j                            dt          |                    }	|j        s|	                                s"d|_        ||_        |                                 |	                    d          r1|                     |d         | j                 t          j                   t/                       d S )Nu    Дамп вложенийre  r   r   r  )r3   r  r  )
obj_ext_idrt  r   T)r  rt  rI   r  r  contentr  Fr	  )rI   r}   r  rH   r  rs  rt  ro   CmfImportDownloadrq   r3   r  r.   r   r  r  rU  r   
downloadedr  rw  r  rm   rL   )
r&   rV  attachments_dirr  r  attr  
att_ext_iddownload_jobatt_paths
             r)   _dump_issue_attachmentsz%JiraAPIImport._dump_issue_attachments  s   ##z':$V$V$VWWW/6BSSeDkSSHol3 	S 	SCYF'33633J!377% O29E/// 8  L
   %77) $ 6 = I#$(	  8     !$JL #IL #O$<$<S[[$I$I J JL!*33M3v;;OOH& $hoo.?.? $*/'/2,!!###wwx   SHdm <j>QRRRr*   c                 "   | j                             d          rs| j        j                            t
          j         d           t
          j                            d          }|	                    d          5 }| j
                            |          }|D ]}|                    di                               | j                  r1|                     |d         | j                 t
          j                   |                    di                               | j                  r1|                     |d         | j                 t
          j                   t                              ||           d d d            d S # 1 swxY w Y   d S d S )Nr  u#    Дамп журнала работzworklog.jsonr  r	  r  )ru   rq   rI   r}   r  rH   r  r  r   r   rb   issue_get_worklogrm   r  r   r   )r&   r  worklog_filer   worklogsr  s         r)   _dump_issue_worklogz!JiraAPIImport._dump_issue_worklog  s   $(()>?? 	'O"'':+>(c(c(cddd%.77GGL""3'' '1966x@@' e eG{{8R0044T]CC _(9$-(H*J]^^^{{>266::4=II e(?(NPZPcddd		(A&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '		' 	's   <C9FF	Fc                 ~   | j         j        r_|d         dk    rS| j        j                            t
          j         d           d | j                             |          D             |d<   |d         D ]H}|                    d          r1| 	                    |d         | j
                 t
          j                   I|S )Nr  (   u+    Дамп истории измененийc                     g | ]}|S r@   r@   )r5  r  s     r)   r6  z7JiraAPIImport._dump_issue_changelog.<locals>.<listcomp>  s    %_%_%_'g%_%_%_r*   r_  r	  )rb   rn   rI   r}   r  rH   r  get_changelogrq   r  rm   r  )r&   r  r^  r  s       r)   _dump_issue_changelogz#JiraAPIImport._dump_issue_changelog  s     9? 	`y1B66O"'':+>(k(k(klll%_%_TY=T=TU]=^=^%_%_%_Ik" - 	W 	WG{{8$$ W 1$- @*BUVVVr*   c                     | j         j                            t          j         d           | j                            |          S )Nug    Дамп связей задачи со страницами Confluence и веб-страницами)rI   r}   r  rH   r  rb   get_issue_remotelinks)r&   r  s     r)   _dump_issue_remotelinksz%JiraAPIImport._dump_issue_remotelinks  sO    ##"  L  L  L	
 	
 	
 y..x888r*   c                 X   | j         j                            t          j         d           t          j                            d          }|                    d           |                    d          5 }| j	        
                    |d                   D ]w}|                    t                              |          dz              |                    di                               | j                  r1|                     |d         | j                 t          j                   |                    d	i                               | j                  r1|                     |d	         | j                 t          j                   |                    d
          rBt#          |d
         d          }|                     |||           |                     |           | j         xj        dz  c_        | j                             d           y	 d d d            d S # 1 swxY w Y   d S )Nu"    Дамп комментариевzcomments.jsonTr  r  r   r=  r	  r  r
  r  rF   r  )rI   r}   r  rH   r  r  r   r  r   rb   get_commentsr  r   r  rq   rm   r  r   _dump_attachments_from_text_dump_users_from_textrE  r  )r&   rV  r  comments_filer   r  r  s          r)   _dump_issue_commentsz"JiraAPIImport._dump_issue_comments  s=   ##z':$^$^$^___"+44_EE---$$ 	4911%+>> 4 4

7++d2333;;x,,00?? OO)$-8"+   ;;~r2266t}EE OO/>"+   ;;~.. : -gn.Ev N NI44YWWW..y99911Q611((3333%4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   7FHH#&H#c                 b   | j         j                            t          j         d           | j                            |          }t          j                            d          }|	                    d          5 }t                              ||           d d d            d S # 1 swxY w Y   d S )Nu)    Дамп свойств плагиновzproperties.jsonr  )rI   r}   r  rH   r  rb   get_issue_propertiesr  r   r   r   r   )r&   r  r  properties_filer   s        r)   _dump_issue_propertiesz$JiraAPIImport._dump_issue_properties	  s    ##z':$e$e$efffY33H==
$-667HII!!#&& 	%!IIj!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   ;B$$B(+B(c                    | j         j                            t          j         d           | j                            |          }t          j                            d          }|	                    d          5 }t                              ||           d d d            n# 1 swxY w Y   |D ]-}|                     || j                 t          j                   .d S )Nu"    Дамп наблюдателейzwatchers.jsonr  )rI   r}   r  rH   r  rb   get_watchersr  r   r   r   r   r  rm   )r&   r  watcherswatchers_filer   r  s         r)   _dump_issue_watchersz"JiraAPIImport._dump_issue_watchers  s   ##z':$^$^$^___9))(33"+44_EE$$ 	#IIh"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#   	I 	IGOOGDM2J4GHHHH	I 	Is   ;B##B'*B'c                    | j         j                            t          j         d           |d         d         }| j         j        j        j         d|d          }|                    d           D ][}|                    d          rdnd}|j	        |         }	 |
                    d	          r@|
                    d
          s*t          j                            | j        j        |          }|
                    | j        j                  st!          j        |                    d          d                   \  }	}
|	s$| j         j                            d| d           t)          j        dt          j                            |                    }|rr|d         |d                             dd          }|d         k    rBt/          fd|D             d           }|r$| j         j                            d|            t          j                            |                    d          d                             d          d                   }t0          j                            |          }t0          j                            ||| j         j        j        j        ddg          }|s8t0                              ||| j         j        j        j        | j         d          }||_        t=          |                    |                    |_         t          j!                            d|          }|j"        s|#                                sd|_$        |%                                 tM                       # tN          $ r>}tQ                       | j         j        )                    d| d|            Y d }~Ud }~ww xY wd S ) Nu,    Дамп вложений из текстаr   r  re  r   c                 V    |                      d          p|                      d          S r  r  r  s    r)   r   z;JiraAPIImport._dump_attachments_from_text.<locals>.<lambda>"  r  r*   r  r  zmailto:httpr  r   u"   Ссылка не на файл: 'r  r  rF   r0  r.  c              3   N   K   | ]}|                     d           k    |V   dS )r   Nr   )r5  r  r  s     r)   r'  z<JiraAPIImport._dump_attachments_from_text.<locals>.<genexpr>:  s8      &]&]sSWWT]]V\E\E\sE\E\E\E\&]&]r*   u<   Файл уже обработан во вложениях: r  r  r3   r  )r  r  rt  r   T)r  r  rt  rI   r  r  Fu5   Не удалось обработат ссылку 'rP  )*rI   r}   r  rH   r  rs  rt  r  r  r  r  r  r  urljoinrb   r  r  r  r  r  r  r  r  r   ro   ra  _get_filenamer  rq   r3   r.   r   r  r  rU  r   r  rw  rL   rM   rN   rH  )r&   r  rV  r  r  r  r  r4   r  r  r  r  att_filenamer  r3   r  r  r  r  r  s                      @r)   r  z)JiraAPIImport._dump_attachments_from_text  s   ##z':$h$h$hiiiHol3/6BSSeDkSS%%&]&]^^ 6	t 6	tCLL00;&&eC)C.C3t>>),, ~~f-- C ,..ty}cBBC~~dim44 &/&:399S>>!;L&M&M#	8  O*001\VY1\1\1\]]]I?L((-- 	  %&q\F#,Q<#5#5c1#=#=La00!%&]&]&]&]k&]&]&]_c!d!d! % O2889}x{9}9}~~~$|++CIIcNN2,>,D,DS,I,I!,LMM".<<TBB	%7;;* $ 6 = I"F+	  <     $ #)#;#; #.$(O$:$A$M#'?(, $< $ $L %)!$'(@(@(K(K$L$L!%.77yQQ* ((//2C2C (.3L+ %%''' t t t&../rgj/r/rop/r/rssssssssti6	t 6	ts4   N3ANAN(B$NE5N
O3OOc                 P   | j         j                            t          j         d           |                    ddi          D ]}|j                            d          r|j        d         }n|j                            d          r|j        d         }nnt          j	        
                    |j        d                   }t          j	                            |j                  }|d         d	                                         }|                     |t          j                   d S )
Nu6    Дамп пользователей из текстаr  r  r  r  r  r  r3   r   )rI   r}   r  rH   r  r  r  rq   r  r  r  r  r  r  r  r  )r&   r  r  
user_identr  r  s         r)   r  z#JiraAPIImport._dump_users_from_textZ  s   ##z':$r$r$rsss%%Wl,C%DD 
	= 
	=Cy}}.// 6 Y'89

// 6 Y7

#\2239V3DEE
--j.>??"6]1-3355
OOJ
(;<<<<
	= 
	=r*   c                     d}|D ]a}|d                              |          rD|                     |d         |                              | j                  t          j                   bd S )N)r   r2  rl   r   )rq   r  rm   rH   r  )r&   rV  user_fields
user_fields       r)   _dump_users_from_issue_fieldsz+JiraAPIImport._dump_users_from_issue_fieldsi  sw    

 & 	 	JX"":.. (OJ/33DMBB'  	 	r*   c                 F   |                     d          }|d         }|                     |t          j                   |                     |           |                     ||           |                     ||           |                     |           |                     |           | 	                    |           | 
                    ||d                   |d<   |                     |          |d<   t          |          |d<   |d         d         rHt          |d         d         d          }|                     |||           |                     |           t          j                             d	          }|                    d
          5 }t"                              ||           d d d            n# 1 swxY w Y   t          j                             d          }t!          |d
          5 }|                    d           d d d            d S # 1 swxY w Y   d S )Nr  r   r^  rk  r  r  r   r  r  r  r  r   )r   r  rH   r  r)  r   r  r  r  r  r
  r  r.   r   r  r  r   r   r   r  )	r&   rV  r  r  r  r  r  r   r  s	            r)   _dump_issue_detailsz!JiraAPIImport._dump_issue_detailsv  sy   "++M::;z':;;;**5111$$UO<<<!!%999  ***!!(+++##H---!77%BTUUk#;;HEEm!(mml!"=1 	2%e,<&=m&LfUUI,,YOOO&&y111'00==	^^C   	 AIIeQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  '00??	)S!! 	QGGBKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   F99F= F=3HHHc              #     K   | j                             |          }|                    d          }|                    d          }|                    d          }	 |                                r|                    |           n|                                r|                    |           nk|                                r|                    |           nA|                    d           |                    d          }|                    d           |t          _        |V  |                    |           |t          _        d S # t          $ r  w xY w)Nr`   ra   r^   Tr   r  )	rz  r   rx  r   rA  r   rH   r  rM   )r&   	base_pathr  task_archived_dirtask_moved_dirtask_dirty_dirr  s          r)   issue_directoryzJiraAPIImport.issue_directory  sk     >**955$00==!--h77!--h77	   	5  0000"))++ 5!)).9999&&(( 5&&~6666$$d$333"0"9"9-"H"H%%t%444"0JNNN""8,,,"*J 	 	 		s   C0E Ec           
      R   t          d          5  d}	 |                                }||                    |           nL	 dd                    d |D                        d}| j                            |t          |          d	
          }|d         }|D ]}| j                                        r d d d            dS t          |d                   }	|d         }
d|
 d|	 dt          _        	 | j        j                            t          j         d           |                     |	          5 }|                     ||           d d d            n# 1 swxY w Y   | j        j                            t          j         d           | j        xj        dz  c_        | j                            d           nL# t$          $ r?}|dz  }| j                            t          j         d| d| ddd           Y d }~nd }~ww xY wt)                       # t)                       w xY wnG# t$          $ r:}| j                            | j         d| d| ddd           |dz  }Y d }~nd }~ww xY w|                    |           y	 d d d            d S # 1 swxY w Y   d S )NFr  r   Tzid in (r  c                     g | ]}|S r@   r@   )r5  r}  s     r)   r6  z1JiraAPIImport._dump_task_part.<locals>.<listcomp>  s    .Q.Q.Q7w.Q.Q.Qr*   r  zchangelog,renderedFields)r8  expandr  rF   r   r4   r    rB  r  u    Дамп задачиu'    Выполнен дамп задачиrF  u>    Не удалось выполнить дамп задачи r  zERR-0111rD  r   r  uC    Не удалось получить задачи проекта: )r   rq   r  r   rb   r  r  rI   rK   r.   rH   r  r}   r  r1  r+  rE  r  rM   rP   rL   r  )r&   task_chunk_queuetasks_that_are_doner  r  r  r  r  rV  r  r  r  r  s                r)   _dump_task_partzJiraAPIImport._dump_task_part  s   5111 :	0 :	0F70-1133
%$((444/ UDII.Q.Qj.Q.Q.Q$R$RUUUC#y}}!*oo9  -    H
 &h/F!' ) )?4466 %#$':	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0* $'uT{#3#3$)%L	.K).K.Kx.K.K.K
+) O277:;N8f8f8fggg!%!5!5h!?!? J8 $ 8 8 I I IJ J J J J J J J J J J J J J J !O277#-#6 _ _ _   !O==B== O44V<<<<(   "aKF O55#-#6 !) !)v{ !) !)#&!) !) *)2+1 6         'LLLLJLLLL=)> !      O--+ / /%/ /),/ /"!*#) .    aKFFFFFF  $''///o70 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0 :	0s   1JA4H00H05AG 6EG EG  E!AG ?H 
H	
5H?HH		HH0H,,H0/J0
I4:0I/*J/I44JJ #J c           	          d} j                                         }t           j                  }d|k    r| fdt	          dt           j                            D             } j                                         }|D ]}|                    |           |                    d            g }t	           j                  D ]x} j                             j	        d|dz    ||d          }	|
                    |	           |	                                  j        j                            d|	            yd	}
|
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   2   c                 4    g | ]}j         ||z            S r@   )task_id_list)r5  r  r&   task_chunk_sizes     r)   r6  z-JiraAPIImport._dump_tasks.<locals>.<listcomp>  s;     
 
 
 aO 334
 
 
r*   _dump_task_part_rF   )r5  r6  targetr3   r'   u   Запущен r-  u&   Тайм-аут дампа задач r  u   ч u   м u   сtimeoutu$   Возможно завис дампzERR-0055rD  r   r  u"   Ошибка дампа задачuK   Закончили параллельное скачивание задачu   Ошибок: )r   Queuer  r;  r  r  r   r   Threadr7  r   r:  rI   r}   r  r   is_aliverP   TimeoutErroremptyrq   )r&   r  r6  r  task_chunksr5  r  threadsr  threadtime_per_tasktime_per_chunkchunks_per_threadtotal_time_per_threadr<  s   `             @r)   _dump_taskszJiraAPIImport._dump_tasks  s&   "j..00
 $+,,/)))O
 
 
 
 
1c$"344oFF
 
 

  :++--% 	- 	-J  ,,,,T"""t899 	D 	DA^**+/A//(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                            | j         d           | j                            |          }|r
|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                                                    ]| j                            d          }
|
                    d           |
                    d          5 }t                               ||           d d d            d S # 1 swxY w Y   d S )Nu8    Дамп схемы безопасности задачr   rs  r4   BROWSE_PROJECTSr8  rK  levelsr  rG  r   zissue_security_scheme.jsonTr  r  )rI   r}   r  r  rb   !get_project_issue_security_schemern    get_issue_security_level_membersrq   r   r  r   r  r   r  r   r   r   )r&   r  r  rz  security_schemesecurity_level_membersrL  security_levelr   memberissue_security_scheme_filer   s               r)   #_dump_project_issue_security_schemez1JiraAPIImport._dump_project_issue_security_scheme3  sE   ##t'7$q$q$qrrr)EEjQQ 	^: 	^%'"y e)-)S)S#D)* *&& +..CC e eFe}(999.4Z.@ e eNKYZcKd2>$3GHH(,,Xr:: ^ ^#%i 488tbII ^ ^F)$++F333f~//w9Z9Z9\9\]]]^
 &*%5%>%>?[%\%\""))T):::',,S11 	*QIIoq)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   F==GGc                 N   | j         j        rd S | j        j                            | j         d           i }| j                            d          }|                    d           |	                    d          5 }	 d}| j         
                    |d                    |                    }nB# t          $ r5}| j                            t          |          d	d
d           Y d }~nd }~ww xY wt                              ||           d d d            n# 1 swxY w Y   |S )Nud    Дамп конфигурации проекта через плагин 'Smart Jira Configuration'zsmart_config.jsonTr  r  )	projectInformationprojectSchemesprojectIssuetypesprojectVersionsprojectComponentsprojectMembersprojectCustomfieldsprojectGlobalActionsprojectWorkflowActionsr  )r  ERR-0056r  r   r  )rb   rn   rI   r}   r  r  r  r   r  r   get_project_smart_configr   rM   rP   r.   r   r   )r&   r5   rz  smart_config_filer   r  r  s          r)   _dump_project_smart_configz(JiraAPIImport._dump_project_smart_configO  s   9? 	4
 	##  F  F  F	G 	G 	G  ,556IJJ  D 111##C(( 	'A
  $yAAHHW--  B        ))HH)%	 *         IIlA&&&1	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'4 s<   =D?1B10D1
C0;+C+&D+C00DD!DEtc/UTC%Y-%m-%d %H:%Mdtfrom_tzto_tzr  c                    | pCt           j                             t          j        |                                        |          } t           j                             | |          }|                    t          j        |                                        t          j        |                    }|                    |          S )u0  
        Преобразует дату из одного часового пояса в другой

        Args:
            dt: строка с датой (если None, используется текущее время)
            from_tz: исходный часовой пояс (по умолчанию UTC)
            to_tz: целевой часовой пояс (по умолчанию UTC)
            format: формат даты

        Returns:
            строка с датой в целевом часовом поясе
        )tzinfo)r  nowr   gettzstrftimestrptimerA  
astimezone)rj  rk  rl  r  naive_dtconverted_dts         r)   _datetime_convertzJiraAPIImport._datetime_converty  s    & L8$(('):):;;DDVLL$--b&99''rx/@/@'AALLRXV[__]]$$V,,,r*   c                     | j                             |          }|d         d         s%|d         d         }t          dd| d| d          d	S )
uj   Проверяет права текущего поьзователя в контексте проектаr  rP  havePermissionr3   zERR-0128u   Не удалось выполнить дамп задач проекта. Пользователь не имеет разрешения 'uA   '. Предоставьте пользователю право 'u.   ' в схеме прав для проектаN)rb   get_permissionsr   )r&   r  user_permissionsr  s       r)   _check_project_permissionsz(JiraAPIImport._check_project_permissions  s    944
4KK 123CD 	./@A&IO@Ra@ @Q`@ @ @  	 	r*   c                    | j         j                            | j         d           g }| j                            d          }|                    d           |                    d          5 }| j        	                    |          D ]b}|
                    |d                    | j         xj        dz  c_        |                    t                              |          d	z              c	 d d d            n# 1 swxY w Y   |S )
Nu.    Дамп типов задач проектаrR  Tr  r  r  r   rF   r=  )rI   r}   r  r  r  r   r  r   rb   r  r   rE  r  r   r  )r&   r  r  rT  r   r  s         r)   _dump_project_issue_typesz'JiraAPIImport._dump_project_issue_types  sE   ##t'7$g$g$ghhh+445GHH4000""4(( 	7A"i===TT 7 7
%%j&677711Q611

:..566667	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 s   /A?C;;C?C?c                    | j         j        ro|s'| j                             |          d         d         }n|                     |          }|                     ||           | j                             |          }n{| j                             |          }d|vr|d         |d}n#| j                             |d                   |d<   |                    di           |d<   |                     |           |S )Nr   workflowSchemer   r3   )r   r  r  r  )	rb   rn   get_project_schemer}  r  get_project_workflow_schemeget_workflow_schemerq   r  )r&   r  r5   r  rz  r/  r  s          r)   _dump_project_workflow_schemez+JiraAPIImport._dump_project_workflow_scheme  s	   9? 	@ U"&)">">z"J"J1"MN^"_!%!?!?
!K!K77
NSSS"&)"G"G"T"T"iCCKPPO?**)&1+# #
 +/)*G*GX\H]*^*^'+7+;+;K+L+LOK(..???r*   c                 6   | j         j                            | j         d           | j                            d          }|                    d           |                    d          5 }	 | j        	                    |          }|d         D ]}|d         d         d	k    r| j        j
        rU|d                             d
          r9|                     |d         d
         | j                                                    u|                     |d         d         | j                                                    n%# t          $ r}t          dd|           d }~ww xY wt                               ||           d d d            d S # 1 swxY w Y   d S )Nu0    Дамп схемы проектных правzpermissions.jsonTr  r  permissionsholderr  rG  r   	parameterrd  uX   Не удалось выполнить дамп схемы проектных прав. )rI   r}   r  r  r  r   r  r   rb   get_project_permission_schemern   rq   r  r   rM   r   r   r   )r&   r  permissions_filer   permission_scheme	perm_dictr  s          r)   _dump_project_permission_schemez-JiraAPIImport._dump_project_permission_scheme  s    ##t'7$i$i$ijjj+445GHH4000""3'' 	,1$(I$K$KJ$W$W!!2=!A  I *62f<<9? 
(266w?? " $$-h$7$@$(O$E$E$G$G!" !" !"
 !OO )( 3K @ $ A A C C      tortt   II'+++-	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s7   -F/CE F
E#EE##FFFc                    | j         j                            | j         d           | j                            d          }|                    d           |                    d          5 }| j        	                    |          D ]G}| j         xj
        dz  c_
        |                    t                              |          dz              H	 d d d            d S # 1 swxY w Y   d S )	Nu)    Дамп статусов проектаrW  Tr  r  r  rF   r=  )rI   r}   r  r  r  r   r  r   rb   get_statusesrE  r  r   r  rX  s        r)   _dump_project_statusesz$JiraAPIImport._dump_project_statuses  s*   ##t'7$b$b$bccc(11/BB---%% 	0y---DD 0 011Q611

3$.////0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   -A$CC#&C#c                    | j         j                            | j         d           | j                            d          }|                    d           |                    d          5 }| j        	                    |          }|
                                D ]4}| j                                         r d d d            d S | j         xj        dz  c_        g }| j                            |d          }|                    d	g           D ]Z}|d
         dk    rJ	 | j        j        rR| j                            |d                             d          |d                             d                    |d<   n$| j                            |d                   |d<   ns# t           j        j        $ r\}	|	j        j        dk    rF|                    |           | j         j                            d|d          d|	 d           Y d }	~	 d }	~	ww xY w|                    d          r>|                     |d         | j                 | j                                                    \|                    d	          r |D ]}
|d	                             |
           |                    t8                              |          dz              6	 d d d            d S # 1 swxY w Y   d S )Nu#    Дамп ролей проектаr\  Tr  r  r5   rF   r  rR  r  rM  	actorUserr3   re   )r:  r  r  r:    u&   Пользователь к роли 'u   ' не найден. u+   . Возможно он был удаленr=  )rI   r}   r  r  r  r   r  r   rb   get_project_rolesr   rK   rE  rq   rn   rG  requests
exceptions	HTTPErrorr  r  r   rH  r  rm   r   rI  r  r   r  )r&   r5   r]  r   r\  role_urlunfound_actors	role_inforU  r  unfound_actors              r)   _dump_project_rolesz!JiraAPIImport._dump_project_roles  s   ##t'7$\$\$\]]]%..|<<
T***__T"" *	6aI//K/HHE!LLNN (6 (6?,,.. 	*	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 11Q611!# IMM(TMBB	&]]8R88  EV}(CCC&#y \59Y^^-2;-?-C-CF-K-K/4[/A/E/Ek/R/R 6D 6T 6Tk 2 2 6:Y^^USY]^5[5[k 2'2< & & &"|73>> !/ 5 5e < < < $ 6 > >%XYW]M^ %X %X'*%X %X %X!" !" !" !) %& !99[11  OO %k 24= A $ A A C C  
 ==** B)7 B B!(+22=AAAA

9--45555Q(6*	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6 *	6sM   -AK!AK!!BF$#K!$H	8AH		K!H	H	B?K!!K%(K%c                 ^   | j         j                            d           	 |d         }| j                            |          D ]}| j                                         r d S |d         |k    r,| j         xj        dz  c_        t          |d                   }|                    |          }|	                    d           |                    d          }|
                                r*| j         j                            d|d	          d
           | j        j        s|d         d         |d<   i |d<   | j         j                            d|d	                     | j                            |dg          }|D ]x}	| j                                         r  d S |	d         }
|
|	d         |	d         d         d         |	d         d         d         |	d         d         d	         dd}||d         |
<   y|                    d          5 }t                              ||           d d d            n# 1 swxY w Y   | j                             d           d S # t"          j        j        $ r}|j        j        dk    rJdt          |          v sdt          |          v r(| j                             t          |                     n"| j                             d| ddd            Y d }~d S d }~wt0          $ r*}| j                             d| d| ddd            d }~ww xY w)Nu&   Дампим спринты доскиr   originBoardIdrF   Tr   r  u   Спринт r3   u    уже скачанr  r  r  rH  rD  r4   r   )r   r4   r3   )r   r4   rH  r  r\  i  z"The board does not support sprintsuD   Данная доска не поддерживает спринтыuA   Не удалось выполнить дамп спринтов ERR-0057rv  r   r  r  )rI   r}   r  rb   get_sprintsrK   rE  r.   r   r   r   rn   get_sprint_issuesr   r   r   r  r  r  r  r  r  rJ   rP   rM   )r&   r  re  r  r\  rf  sprint_pathsprint_info_filesprint_issuesrV  r  r  r   r  r  s                  r)   _dump_board_sprintsz!JiraAPIImport._dump_board_sprints  s   ##$LMMMD	T{H)//99 (3 (3?,,.. FF/*h6611Q611t--	)229==!!4!000#.#7#7#D#D #**,, O*//0dv0d0d0deeey K-26]>-JF>*#%x &++,LF6N,L,LMMM $	 ; ;%; !< ! ! + < <E0022 $T{H&$U|"'/)"<T"B#(?9#=e#D$)(OI$>v$F$ $" "J 2<F8$X..%**3// )1IIfa((() ) ) ) ) ) ) ) ) ) ) ) ) ) )((2222Q(3 (3R ", 	 	 	
&#--8CFFBB]adefagaggg ##CFF++++))_X]__&%	 *     ,+++++  	 	 	O%%bTYbb]`bb"!	 &    	sV   ?I "D;I A/I H6*I 6H:	:I =H:	>I L,3A<K55L,%L''L,c                    | j         j                            d|d                     t          |d                   }| j                            |          |d<   | j                            |d         d         d                   |d         d<   | j                            |          }| j        j        r=ddd | j        	                    |          D             ii}|
                    |           ||d         d	<   | j        j        sC| j                            |          }t          t          |          d
k              |d         d<   ||d<   |                    |          }|                    d           |                    d          }	|	                    d          5 }
t"                              ||
           d d d            n# 1 swxY w Y   |S )Nri  r3   r   r  r   r^  r_  c                     g | ]}|S r@   r@   )r5  qfs     r)   r6  z-JiraAPIImport._dump_board.<locals>.<listcomp>t  s%     % % %!% % %r*   r   rF   r  r  Tr   r  r  )rI   r}   r  r.   rb   get_agile_board_configuration
get_filterget_advanced_board_settingsrn   get_board_quick_filtersrW  get_agile_board_projectr   r  r   r   r   r   r   )r&   r  r  
boards_dirr  advanced_settingsquick_filtersboard_projectsrb  board_info_filer   s              r)   _dump_boardzJiraAPIImport._dump_boardf  s   ##$A%-$A$ABBBuT{##	??IIf"&)"6"6uV}X7Nt7T"U"Ufh !IAA(KK9? 	4#" % %%)Y%F%Fx%P%P% % %&M $$]333"3fhy 	J "Y>>xHHN,0^1D1Dq1H,I,IE&M.)(l''11	&&&#,,[99!!#&& 	 !IIeQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  s   'GGGc                 Z   | j         j                            | j         d           | j                            d          }|                                rt          j        |           |	                                 | j                            d          }|                                rt          j        |           |	                                 	 | j
                            |          D ]j}| j                                         r d S | j         xj        dz  c_        |                     |||          }|d         dv r|                     ||           kd S # t           $ rC}| xj        dz  c_        | j                             | j         d| d	d
d           Y d }~d S d }~ww xY w)Nu#    Дамп досок проектаry   r  r  rF   r  )rU  simpleu    Не удалось выполнить дамп досок, возможно проект не поддерживает доски или у вас нет прав. r  rv  r   r  )rI   r}   r  r  r  r   r   r   r  r   rb   get_all_agile_boardsrK   rE  r  r  rM   rO   rP   )r&   r  r  re  r  r  s         r)   _dump_project_boardsz"JiraAPIImport._dump_project_boards  s   ##t'7$\$\$\]]]%..x88
 	&M*%%%&//	:: 	'M+&&&	77J7OO 	A 	A?,,.. FF11Q611((UJGG=$777,,UK@@@	A 	A  	 	 	OOq OOO%%# B B|B B"! &         	s   7E AE 
F*'8F%%F*c                    | j                             | j         d           | j                            d          }|                    d           |                    d          5 }| j                            |          D ]n}| j         	                                r d d d            d S | j         xj
        dz  c_
        |                    t                              |          dz              o	 d d d            d S # 1 swxY w Y   d S )Nu%    Дамп версий проектаrh  Tr  r  rF   r=  )rI   rJ   r  r  r   r  r   rb   get_project_versions_paginatedrK   rE  r  r   r  )r&   r5   ri  r   r5  s        r)   _dump_project_versionsz$JiraAPIImport._dump_project_versions  si   t/VVVWWW(11/BB---%% 	49CCKPP 4 4?,,.. 	4 	4 	4 	4 	4 	4 	4 	4
 11Q611

7++d233334	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   (7D ,AD  DDc                    | j                             | j         d           | j                            d          }|                    d           |                    d          5 }| j                            |          D ]}| j         	                                r d d d            d S |
                    d          r>|                     |d         | j                 | j                                                    | j         xj        dz  c_        |                    t                               |          dz              	 d d d            d S # 1 swxY w Y   d S )	Nu/    Дамп компонентов проектаrk  Tr  r  r  rF   r=  )rI   rJ   r  r  r   r  r   rb   get_project_componentsrK   rq   r  rm   r   rE  r  r   r  )r&   r5   rl  r   r<  s        r)   _dump_project_componentsz&JiraAPIImport._dump_project_components  s   t/```aaa*334EFF$///!!$'' 	61!Y==kJJ 
6 
6	?,,.. 	6 	6 	6 	6 	6 	6 	6 	6
 ==(( OO!&)$-899;;   11Q611

9--45555
6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   (7E,BEEEc                 J   | j                             | j         d           | j                            |          }| j                            d          }|                    d          5 }t          	                    ||dd           d d d            d S # 1 swxY w Y   d S )Nu%    Дамп ссылок проектаr`  r  r0  F)r   r  )
rI   rJ   r  rb   get_project_shortcutsr  r   r   r   r   )r&   r5   project_shortcutsshortcuts_filer   s        r)   _dump_project_shortcutsz%JiraAPIImport._dump_project_shortcuts  s    t/VVVWWW I;;KHH)223CDD  %% 	JII'15IIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   ,BBBc                     | j         j        r&| j                             | j         j                  }n%| j                             | j         j                  }|r|d         d         ndS )N)r  r  r   timeZonerh  )rb   rn   user_find_by_user_stringr:  )r&   r  s     r)   _get_user_tzzJiraAPIImport._get_user_tz  sd    9? 	X	::AS:TTII	::DIDV:WWI+4Cy|J'')Cr*   c                 Z   d}| j                             d          }|                                rz|                    d          5 }t                              |          }|                    d          }ddd           n# 1 swxY w Y   |r|r|                     ||          }n|}|S )ut  
        Возвращает дату последнего успешного дампа.
        Если указан парамет user_tz, то возвращает дату с учетом часового пояса.

        Args:
            user_tz (str, optional): Часовой пояс. Defaults to None.

        Returns:
            str: Дата
        Nr  r  	dump_daterl  )r  r   r   r   r   r   rq   rv  )r&   user_tzlast_dump_dater  r   current_dumplast_dump_date_utcs          r)   _get_last_dump_datez!JiraAPIImport._get_last_dump_date  s    $--k::	 	4$$ C#yy||%1%5%5k%B%B"C C C C C C C C C C C C C C C " 4g 4!%!7!78JRY!7!Z!Z!3s   0BB	Bc                 .    |                      |          S )Nr  )rv  )r&   r  s     r)   _get_new_dump_datez JiraAPIImport._get_new_dump_date  s    %%G%444r*   c                 V   | j                             d          }|                     |          \  }}|                                s4| j        j                            | j         d| j          d| d           dS |s,| j        j                            | j         d| d           dS dS )	uq   Проверяет условия для сброса даты последнего успешного дампаrI  u%    В каталоге проекта 'u5   ', отсутствует каталог задач 'u[   '. Дата последнего успешного дампа будет сброшена.Tu0    В каталоге задач проекта 'u   ' отсутствуют задачи. Дата последнего успешного дампа будет сброшена.F)r  r   r  r   rI   r}   rH  r  )r&   r  rz  r  r.  s        r)   _reset_last_dump_datez#JiraAPIImport._reset_last_dump_date  s     $--g66	22:>>Q!! 	O"**# l l$JZ l lENl l l  
 4 	O"**# l lU^ l l l  
 4ur*   c                     |                                  }| j                            d          s|                     |          rd }n|                     |          }|                     |          }|||fS )Nr   )r  r   rq   r  r  r  )r&   r  r  r  new_dump_dates        r)   _get_dump_date_rangez"JiraAPIImport._get_dump_date_range  s|     ##%% ;??>** 	?d.H.H.T.T 	?!NN!55g>>N//88}g55r*   c                 \   | j                             d          }|                    d          5 }t                              |          }||d<   |                    d           t                              ||           |                                 d d d            d S # 1 swxY w Y   d S )Nr  rI  r  r   )r  r   r   r   r   r  r   truncate)r&   r  r  r   r  s        r)   _save_dump_datezJiraAPIImport._save_dump_date$  s    $--k::	^^D!! 	Q99Q<<L(1L%FF1IIIIIlA&&&JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A$B!!B%(B%c                    i }d| j         j        j        j         d| d}t          j                            ddd| dg          }|rdd|gg dg d	g}d
}d}	 ||z   }t          j                            |g d||g          }	|	snH|	D ]?}
t          |
j	                  
                    dd          \  }}|
j        |
j	        d||<   @||z  }v|S )Nre  rm  r8  r9  rd  rh  r  r  r  r  Tr     T)r  r   rm  r   r   slicerF   )r4   rm  )rI   rs  rt  ro   r  rq   rD  slistr.   rm  r  r   )r&   r  current_tasksr  rH  r  r:  r  r  rI  rF  r.  r}  s                r)   _get_current_tasksz JiraAPIImport._get_current_tasks-  s?   Ydo4;GYY:YYY#''&BWnBWBWBW/X'YY 	3(***...K EDdl,,&333 #, -  
  !  D!$T[!1!1!7!7a!@!@JAw#y"&+. .M'** " r*   c                 ^    d| d}d | j                             |d          D             }|S )Nproject = 'r  c                 8    h | ]}t          |d                    S r   r  )r5  rV  s     r)   	<setcomp>z6JiraAPIImport._get_active_issue_ids.<locals>.<setcomp>P  s4     
 
 
 d
 
 
r*   r   rD  )rb   jql_get_list_of_tickets)r&   r  r  	issue_idss       r)   _get_active_issue_idsz#JiraAPIImport._get_active_issue_idsN  sM    )J)))
 
::3t:LL
 
 
	 r*   c                    |                      |          }d |                                D             }|                     |          }||z
  }i }|D ]?}||         }|d         }	|d         }
|	|
d||<   	 | j                            |ddg          }|d         }|                    d          r%||                             d	|d         d
           n+||                             d|d         |d         d           # t          j        j	        $ r9}|j
        j        dk    r||                             ddi           n Y d }~d }~wt          $ r9}| j                            | j         d|
 d| d| ddd           Y d }~9d }~ww xY w| j                            |d          }|                    d          5 }t&                              ||d           d d d            d S # 1 swxY w Y   d S )Nc                     h | ]}|S r@   r@   )r5  current_tasks     r)   r  z3JiraAPIImport._get_missing_tasks.<locals>.<setcomp>X  s    RRR\LRRRr*   rm  r4   r  rH  r  rD  r   ru  )rs  r  rv  )rs  rw  rH  r  rs  rt  uG    Ошибка проверки отсутствующей задачи rB  z): zERR-0000r  r   r  rr  r  Fr  )r  r  r  rb   	get_issuerq   rW  r  r  r  r  r  rM   rI   rP   r  r   r   r   r   r   )r&   r  r  current_task_idsactive_issue_idsmissing_task_idsr|  r}  rF  r  r  rV  r  r  r{  r   s                   r)   _get_missing_tasksz JiraAPIImport._get_missing_tasksV  s   //
;;RR]=O=O=Q=QRRR55jAA+.>>' $	 $	G )Dx.KE{H && &M'"
	++GY<W+XX$X##N33 
!'*11!+(4^(D3 3    
 "'*11!(#(<#/	#:3 3   
 &0   <+s22!'*117I2FGGGG HGGGG    ))' 5 55 5#*5 5/25 5)% *         ".77
DXYY$$S)) 	<QIImQUI;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s7   6BDF/E

F.FFG..G25G2c                    d}| j                             d          | _        | j                            d           |                     |          \  }}}| j         d}|s|r"|dz  }|r|d| z  }|r|d| z  }|d	| d
z  }| j                            |           | j        	                    |||          }|r?| j
                            d          r+| j        j                            | j         d| d           n*| j        j                            | j         d| d           t          j                    }d| d}	|r	|	d| dz  }	|r	|	d| dz  }	|	dz  }	d | j                            |	d          D             | _        ||                                 z  }t          j                    |z
  }
| j        j                            | j         d| d|
dd           |                     |           n'| j        j                            | j         d           |s,|                     ||          }|                     |           |S )Nr   rI  Tr   u#    Дамп задач проектаu    за периодu    с u    по u4    включительно (часовой пояс: r  )r  r  r   u    Дамп всех u6    задач проекта будет обновленu
    Дамп u<    новых/обновленных задач проектаr  r  z AND updated >= 'z AND updated <= 'z ORDER BY updatedc                 8    g | ]}t          |d                    S r   r  )r5  rF  s     r)   r6  z6JiraAPIImport._dump_project_issues.<locals>.<listcomp>  s2     ! ! ! DJ! ! !r*   r   rD  u1    задач проекта выполнен за r+  r  uF    В проекте нет новых/обновленных задач)rk  )r  r   rz  r   r  r  rI   rJ   rb   get_project_issues_count_duringr   rq   r}   rH  r  r.  r  r  r;  rN  r  rv  r  )r&   r  task_errorsr  r  r  info_msgr  r6  r  r=  r  s               r)   _dump_project_issuesz"JiraAPIImport._dump_project_issues  s    )227;;d+++151J1J:1V1V.w&KKK 	Z] 	Z,,H 43>333 54]444YwYYYYHH%%%Y>>%" ? 
 


  &	{~.. &..'~~J~~~    &++'{{:{{{   "$$B .
---C =<><<<< <;=;;;;&&C! ! I==c$=OO! ! !D 4++---K"$$r)BO"''#||z||ln||||  
 **:6666O"''#kkk  
  	,..}g.NNI  +++r*   c              #   V  K   | j                             |          }|                    d          }	 |                                r|                    |           n|                    d           || _        |V  |                    |           || _        d S # t          $ r  w xY w)Nr^   Tr   )r   r   rx  r   rA  r   r  rM   )r&   r-  r  project_dirty_dirs       r)   project_directoryzJiraAPIImport.project_directory  s      '00;;'33H==	!!## 7##$56666!'''6660D%%k222*D 	 	 		s   A'B B(c                    t          j                    }| j                            |          }|                    d          }|                                 |d<   t          |          |d<   |                     |                    d                    |d<   |                     |          }| 	                    |||          |d<   | 
                    |||          |d<   |                     ||||          |d<   |                     |||           |                     |           |                     |           |                     |           |                     |           |                     |           |                     |           |                     |           | j                            d          }|                    d	          5 }	t.                              ||	           d d d            n# 1 swxY w Y   t          j                    |z
  }
| j        j                            | j         d
|
dd           d S )Nr  r  r  r  jira_screen_schemer  r  r  r  u<    Дамп данных проекта выполнен за r+  r  )r.  r  rb   rM  rq   r  r.   r  rg  r  r  r  rY  r  r  r  r  r  r  r  r  r   r   r   r   rI   r}   r  r  )r&   r  r5   r  r6  r  r  rz  r  r   r=  s              r)   _dump_projectzJiraAPIImport._dump_project  s     y,,[99!%%l33
$($<$<$>$>[!&)+&6&6]##55l6F6Fv6N6NOOV66{CC-1-L-L.
 .
)*
 '+&C&C'
 '
]#
 04/Q/Q	0
 0
+, 	00	
 	
 	

 	,,Z888##J///  ---!!*---##K000%%k222$$[111$--k::	^^C   	'AIIlA&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'   2%##mm]_mmmm	
 	
 	
 	
 	
s   G<<H H c                    | j         d         d         d         }|d         st          d          d |d         D             | _        t          | j                  }t	          d|z            }| j        D ]l}| j                                        r d S | j        xj        d	z  c_        |d
         }|d         }|d         }d| d| d| _        | j        j	        
                    | j         d           	 |                     |           |                     |          5 }|                     |||           d d d            n# 1 swxY w Y   dt          j        d<   | j        xj        |z  c_        | j                            d           t%                       dt          j        d<   |                     |          }	| xj        |	z  c_        | j                            d          r|                     |           # t0          $ rM}
| xj        d	z  c_        | j                            | j         d|
j         |
j        dd           Y d }
~
d }
~
wt          $ r}
| xj        d	z  c_        |                    d          r'| j                            | j         dddd           n(| j                            | j         d|
 ddd           Y d }
~
fd }
~
ww xY w| j                            d           d S ) Nr<  r   r   	isCheckedu5   Не выбрали ни одного проекта!c                 >    g | ]}|d          
|d         |d          S )rQ   r  r@   )r5  vals     r)   r6  z0JiraAPIImport._dump_projects.<locals>.<listcomp>  sC     "
 "
 "
5z"
!+."
J"
 "
 "
r*   r  P   rF   r   r4   r3   r    rB  r  u    Дамп проектаr   NO_CACHETr  1r   u)    Ошибка дампа проекта: r  r   r  r  u    Приватный проект не может быть импортирован. Отключите приватность в Jira или предоставьте пользователю праваzERR-0058uA    Не удалось выполнить дамп проекта. u0   Закончили дампить проекты)rU  rM   rz   r  r4  rI   rK   rE  r  r}   r  r{  r  r  r   environr=  rw  rL   r  rO   r   rq   r  r   rP   r"   r   rJ   )r&   rootr  r  rH  r  r5   r  r  r  r  s              r)   _dump_projectszJiraAPIImport._dump_projects  s   }./8;K  	USTTT"
 "
"&z"2"
 "
 "
 $())28}}- 7	 7	G((** O--2-- J!%.K"6?LB<BB;BBBDO"''4+;(U(U(UVVV*//
;;;++J77 M;&&z;LLLM M M M M M M M M M M M M M M *,
:&((D0(($$t$444),
:&"77
CC;.;??#788 8++J777   1$))'[[RURY[[H)%	 *            1$;;{++ O--+ Q Q Q"!-#) .     O--+ssnqss"!-#)	 .   $ 	NOOOOOsK   7*H!E9HE			HE		B3H
K AIK !A4KK c                    | j                             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 )
Nr   r   )BigGanttManagerPluginNotFoundErroru3   Дамп данных из плагина BigGantt u]   Не удалось произвести дамп данных из плагина BigGantt. zERR-0138BigGanttr   r  )r   rq   rb   rn   modules.jira.managersr	  r		  rI   r}   r  plugin_versionr  	dump_datarH  rM   rP   )r&   r	  r		  r  r  s        r)   _dump_bigganttzJiraAPIImport._dump_bigganttZ  sp   ;??,-- 	dio 	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 C2B99C2!C--C2c                    | j                                         }t          j        |          \  }}}||z  dz  }| j                             d| d           | j         j                            d           | j        j        r(| 	                                 | 
                                 | j         j                            d           |                                  |                                 | _        | j                            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t@          j!        d<   d | j         _"        | j         #                                 tI                       d!t@          j!        d<   | j         j                            d"           | %                                 | &                                 d#S )$u_   
        Загружаем все данные из апи, кроме аттачей
        d   u   Свободно места: r9  u$   Скачаем данные из APIu9   Дампим глобальные настройки Jirar   u'   Дампим пользователейr2  uA   Не дампим пользователей из-за опцийrr  u   Дампим статусыr{  u    Дампим типы задачr  issue_security_schemesu*   Дампим бизнес процессыr  u7   Дампим схемы бизнес процессовr/  u   Дампим экраныrc  r{  u!   Дампим приоритетыr  r  u+   Дамп решений(резолюций)r  u   Дамп фильтровr  r   r	     r	  u   Дампим проектыN)'rI   r   r   
disk_usagerJ   r}   r  rb   rn   r  r  r  rt   ru   r   rq   rG  rC  r{   rO  r4  r  get_issue_typesget_issue_security_schemesget_workflowsget_all_workflow_schemesget_all_screensget_screen_schemeget_all_prioritiesget_priority_schemesget_all_resolutionsget_all_filtersr   r	  r=  rw  rL   r	  r	  )r&   download_pathr  usedfreefree_percents         r)   download_datazJiraAPIImport.download_datar  s    99;;"-m<<tTe|c)KLKKKLLL##$JKKK9? 	'   $$&&&##$_```'')))$($B$B$D$D!;??<(( 	|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	  )rn  rE  r=  r   r   r	  Tr  r	  )r   r	  ro   	CmfImportrq   rI   r   rE  r4  rn  r=  rw  rL   )r&   rI   s     r)   r  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  z/permissions.jsonc                 V    i | ]&}|                     d           |d          |d         'S )r  r   r   r4  s     r)   r  z6JiraAPIImport._process_permissions.<locals>.<dictcomp>  sE     
 
 
ww{##
c&k
 
 
r*   r  r  re  r   r~  Trm  r  rI   r3   rp  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   rt  u&   В схеме прав доступа u+    было изменено правило 'u,   ', оно не будет обновленоFr  r  )r   r  u4   Не нашли соответствия права rm  r8  r9  r  )project_permissionrh  r   u*   Не найдено правило для zERR-0059r  rF   r  r  projectRole)applicationRoleanyoneprojectLeadrl   r   sd.customer.portal.onlyrG  r   r  u9   Не нашли пользователя для прав zERR-0060rj  rA  u-   Не нашли группу для прав zERR-0061u'   Неизвестный тип прав zERR-0062u6   Не удалось загрузить правило zERR-0063CmfProjectPermPermissionr5  )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.coder  rh  u   В схеме uR    не удалось скопировать разрешения из права 'u   ' в 'r  zERR-0113CmfProjectPermSchemeRule)*r  r  r   r   r   r   rI   rs  rt  ro   CmfProjectPermSchemerq   r  r3   rw  r}   rH  rB	  r  r;	  rP  rA	  rP   rO   rm  r  r)	  r   r+	  r3	  r1	  r,	  r.	  r7	  rb   rn   r  r*	  rQ  r   r   rL   ) r&   r  r  permission_filer  map_permr   perm_scheme_dictrm  perm_schemerule_list_access_fieldsrule_bool_access_fieldsrule_access_fieldsrule_fieldsscheme_rule
list_field
bool_fieldr  r  ry  r  r  r  rj  r  copy_access_rulesfrom_rule_codeto_rules	from_ruleto_rule_codeto_rulerule_access_fields                                    r)   r  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  )r3   r  r  r  r  r$	  re  rF   u   [Задача ID: r!   r   r  r  i   rB  r,  z MB)u   Скачивание r  r@  u	   Файл u    сохранен в 'r  u"   Ошибка скачивания r  zERR-0027r  r   )r<  r6  r  ext_href)r   rq   rI   rK   ro   r  r.   r3   r  r  r  r  r  r  r}   r  rb   download_filer   IMPORT_DOWNLOAD_TIMEOUTr  rw  rL   r  rM   rN   rP   r  )r&   download_queueerror_queuer  download_job_iddownload_objr  file_urlr   ext_id_splittask_id_msg	file_sizefile_size_mbr  s                 r)   _download_file_workerz#JiraAPIImport._download_file_worker  s7   5111 ;	$ ;	$F6 "0"4"4"6"6"f,,?,,.. %7;;&    < 	  	    122	|011 122	"<#:;;AA$GGJMlJ[J[^_J_J_F<?FFFFeg,	,,,	/ G , <V DI#,#8L#, F F F F F FI&++{,j,jQZ,j,j_g,j,j,jkkk I++ ! & > ,   
 O*//&^^^^R[^^^   /3L+ %%'''LLLO,,\::::  	  	  	  NNNO--&jj)jjX`jjehjj#-!4#)!) .    aKFFFFFF	 [6 p OOF###w;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$ ;	$s=   D2IBGI
H(!=H#I#H((IIIc                 L   | j         j                            d           | j                                        }| j                                        }d}| j                             dg           dd| j         j        j        j        gg dg dg}d}g }| j        D ]}|d         }| j	        
                    |          }	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_hashrt  r  )r  r  F)r3   r  r  r   r  r  r8  r9  rd  u3   Нет вложений для скачиванияu'   Скачивание вложений: _download_file_worker_)rZ	  r[	  r>  u    Запустили задачу r  r  r  uC   Закончили скачивание файлов, ошибок )rI   r}   r  r   rB  r>  rs  rt  rz   r   r   r.   rt  ro   r  rL  r   r  r   r   rC  rc	  r:  r  r  r   rL   rF  r   rK   rq   )r&   rZ	  r[	  rO   main_filterattachment_countr  rH  r  project_pathpath_filterdownload_countrH  r  rI  rA  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	
  - 		: 		:G J,55jAAL|$$--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   Импортируем схему безопасности задач проекта "r3   r  r4   r  r  z/issue_security_scheme.jsonre  r   r~  Tre  r   rp  rQ  rB  r  r  r  rK  r  r   r=	  zvar:current_userrg   r<	  u0   Не найдена проектная роль r?	  zvar:project_ownerr   z
var:authorrl   zvar:responsiblerj  rm  r8  r9  r  r  rA  u!   Не найдена группа UsersrG  r  Fr#  u+   Не найден пользователь )groupCustomFielduserCustomFieldu>   Не найдено пользовательское поле r@	  zsdesk-client:defaultu-   Неизвестный тип правила rF   uF   Не удалось создать правило для уровня r  zERR-0070r  defaultSecurityLevelId)(rI   rK   r}   r  r   r   r   r   rs  rt  ro   CmfSecurityLevelSchemerq   r  r3   r   r  rw  r  CmfSecurityLevelRuler  r  r   access_memberr  rM   rQ  rb   rn   rm  r  rk  rF  r.   access_task_fieldsrL   rO   rP   r4  default_task_security_level)r&   r  r  	dump_filer   r  scheme_ext_idr   	level_msglevel_ext_idrV  
level_rulerW  member_typemember_valuer  r  rm  rj  r  r  r  r  r.  rP  rQ  s                             r)   r  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  r  r  r  F)rQ  r   r  visible_filterrequiredrequiredChangedr   r   r  rF   r  textarear   field_custom_type	textfieldr.   floatr  )rw  radiobuttons
choice_strc                 ,    i | ]}|d          |d         S r   r   r@   r5  opts     r)   r  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)   r  z,JiraAPIImport._map_field.<locals>.<dictcomp>   r	  r*   r  r  cascadingselectchoice_cascade_multi
datepickerdater  r  rG  r  r2  )r  r  rF  r"  r3   r  u6   ) имеет неподдерживаемый тип 'r  zERR-0064rF  r5  )rA  rI   rs  rt  r  r  rP   rO   )r&   r   r  rT   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                            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 ]}|d/         si tA                      }|                    d0g           D ]G}tE          j#        |d1         d2d34          }|d1         |<   |d5         r|$                    |           Hfd6|D             }|%                    |           |%                                n|}||_        tM          |          |_!        |j'        rd|_(        |                    |           |                    d7           tS                       t          j*                            ||
||8          }|s2t          *                    ||
||8                              d7           tS                       |+                                 |rt          j        ,                    tZ          j-        .                                /                    d9          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         d0         D ]} |           a| j        j4        j        }|d@         D ]B}|d         t          j        j        k    r%| j        t          j        j                 d         |d<   C|| j        _4        dAtj          j6        dB<   d| j        j4        _'        | j                                         tS                       dCtj          j6        dB<   d S )ENr   r   uj   Текущая настройка не поддерживает импорт кастомных полейr   r   r  u8   Экран проектов Jira по умолчаниюTr3   rm  r  rI   rD  _customrj  )r3   r  rh  r   uI   Отключен импорт пользовательских полейu8   Импорт пользовательских полейc                      i | ]}|d          |S r   r@   r  s     r)   r  z8JiraAPIImport._process_custom_fields.<locals>.<dictcomp>!      WWWaqWWWr*   r   u!   Поле не кастомное r,  r~	  r	  r.  r3   r	  )r	  r  r	  re  )widgetr  rQ  disabled_choices)rQ  r3   r	  dirtyrm  rI   r  r	  u,   Неудалось смапить поле 'r  u   ): widget поля 'u7   ' не совпадает с существующим 'r  zERR-0065rF  r5  u   Поле с именем rB  u4   ) есть в таблице, мапим в негоr   u(   Создаем поле с именем u   ), и мапим в негоr	  r  r  r  r   r      seplengthdisabledc                     h | ]}|v|	S r@   r@   )r5  r4   default_choicess     r)   r  z7JiraAPIImport._process_custom_fields.<locals>.<setcomp>M!  s.     , , ,$'"/99  999r*   rp  )rQ  r3   rh  ui_form_groupz%Y%m%d%H%M%SF)meta_version
model_namer  r  c                      i | ]}|d          |S r	  r@   r  s     r)   r  z8JiraAPIImport._process_custom_fields.<locals>.<dictcomp>|!  s    [[[!1\?A[[[r*   c                    t          | t                    rC                    |           }|s |           }|j        r|                                 d S d S t          | t
                    r                    | d                   }|s | d                   }|                     dd          |_        |r|j        |_        |j        r|                                 |                     dg           D ]} ||           d S d S )Nr  r   r	  Fr  )	r  r.   rq   rU  rw  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   rM  r   r	  r	  r7   )7r\   r   rU  ro   rD  r.  rI   rJ   r{   rO  rs  rt  rh  rq   r  rw  CmfUiFormGroupr   r}   rH  r   r	  rA  r  r   rF  r	  r   rP   r  rQ  r  rs  r	  r   translit_stripru  rW  r  rU  r	  rL   CmfUiFormFieldinvalidate_cachecustom_fields_gen_metar  ro  rq  custom_field_sync_update_modelsr   varsr   r   r   r	  )r&   ext_field_namer   rm  ui_view_formr	  shop_fields
new_fields
m2m_fieldsui_fieldr3   rQ  current_choicescurrent_disabled_choicesr  default_disabled_choicesr  
option_keyr	  ui_form_fieldfield_classrU  r  r	  r	  r	  s                          @@@r)   _process_custom_fieldsz$JiraAPIImport._process_custom_fields   s&	   !". 	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{566 	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   r  r-  rl   r/  r1  r  r   ri   r   r  r   r   rk   r8  rh  z	Epic Link)Sprintr:  c                      i | ]}|d          |S r	  r@   r  s     r)   r  z<JiraAPIImport._process_transition_screen.<locals>.<dictcomp>!  r	  r*   Fr   r3   u    [переход]re  z::transitionr   rI   r  r?  r  rd  NT   Создан экран 'r  r  rD  )r  rm  rI   r  u   Экран переходаrp     Экран uv    был изменен пользователем. Новые данные из импорта не применены)rh  r  )r  r  tabsrF   r  )r  r  r  rm  r   r     На экран $    добавлена вкладка 'tab)r  rh  rm  rI   r     C экрана D    пользователем была удалена вкладка 'r  uF   ). Новые данные из импорта не применены   На экране F    пользователем была изменена вкладка 'r  r   rD  r~	  r	  r.  rQ  r	  r	  r      поле 'm   ' было изменено или уже добавлено пользователем во вкладку 'uF   '. Новые данные из импорта не примененыr  r  r  uy   ' было удалено пользователем. Новые данные из импорта не примененыr      добавлено поле 'u   ) во вкладку 'r  )8ro   rD  r   r  r.  rj   r0  r1  r  r   ri   r   r  r   r3   rh   r3  r  r  r4  r5  r   rI   rs  rt  rh  rq   CmfUiFormSchemeRuler  r}   r  r  rm  r  rw  rH  r	  r  r  rS  r  r   r  r  r  rA  r  rF  r	  rQ  r	  r  rQ  rU  r	  rL   )r&   rn  task_field_mapr	  purge_groupsrb  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_idrR  r   jira_field_namerP  r	  s                             r)   rj  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@   r  s     r)   r  z1JiraAPIImport._process_screen.<locals>.<dictcomp>"  r	  r*   r   r3   re  r   rI   r  r	  r  r  rD  T)r  rm  r  rI   r   r   r	  r  waiting_for)rh  r3   r  r  )r  r  i  i  i  r  i  ip  )hiddenr  iX  i@  i(#  )	_main   Участники   Даты   Планu   Разработкаu
   Связи_addonr	  _descrr  r  Fr	  rp  rh  r  r  )rI   r  Nz-cmf_created_at)r   order_by)r	  r	  r	  r	  r	  r  r	  rj  r	  r	  )rL  r  click)r   r  r   r  r   r	  u6    не найдена системная группа 'u   '. Возможно она была удалена пользователем. Поля на экране могут отображаться некорректно. Создайте группу с названием 'u$   ' и повторите импортr	  rF   r	  r  r	  r	  r	  )r  rh  rm  r  rI   r	  r	  r  uL   ). Изменения из импорта не будут примененыr	  r   rD  r~	  r	  r.  c                 R    |                      d          o| d         d         k    S )Nr   r   r   )r   r	  s    r)   r   z/JiraAPIImport._process_screen.<locals>.<lambda>#  s/    !IIk22 J %k 24 8M I r*   r   rQ  r	  rQ  zui_form_group.typer	  r	  uL   '. Изменения из импорта не будут примененыr  r  r  u   ' было удалено пользователем. Изменения из импорта не будут применены)rQ  r3   rh  rI   r  )rG  r2  rF  r\  r	  )r	  r  r	  r	  rC  u   во вкладкуu   в группуr<  r  ),ro   rD  r   rI   rs  rt  rh  rq   r}   r  r@  r  r3   r   r  rw  rH  r	  r  r  rb   rn   r	  r  r	  r  r   rL   r  r  r  rA  r  r   r   rU  r.  rF  rQ  r	  r	  rU  r  r	  ) r&   ra  r	  rb  r	  r	  r	  ui_form_is_newform_fields
form_fielddefault_groupsr	  r	  group_configcurrent_ui_form_fieldsui_form_fieldsr	  r  rA  rF  num_tabsr	  r	  r	  r	  
jira_fieldr3   r   rP  rQ  
group_typer	  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   re  r   r  Tre  c                      i | ]}|d          |S r   r@   )r5  r  s     r)   r  z8JiraAPIImport._process_screen_scheme.<locals>.<dictcomp>#  s    JJJ1T71JJJr*   rc  )r  r3   rp  r  rw  r  rm  r8  r>  r?  rd  ;   Не удалось найти логический тип r  CmfUiFormSchemer5  rx  u8   Не удалось найти в дампе экран u    для zERR-0069u:   Не удалось импортировать экран zERR-0068rV  rW  r  )r  rV  r#  r$  ru  rv  rt  rD  )r  r?  r  crud_choicerI   r   logic_typesr4   u+   : Схема экранов проекта rC  r(	  r@   )rq   rI   rs  rt  ro   r
  r  rA  r@  r	  r  r  r3   rw  r  rP   r   r	  rK   r
  r   rh  r  r?  r  rL   )r&   r  screen_scheme_datascreen_scheme_idrm  r  rc  r  issue_type_datar  rh   r  rL  rb  ra  r	  action_mappingr  r	  s                      r)   r  z$JiraAPIImport._process_screen_scheme#  s+   011 r	0!-.B!C1$7.5AWWEUWWF#377vse7TTN! !'!7!7!#$( "8 " " - H4JJd.>.>y.I.IJJJ%, & & : ? ?~ ? ^ ^ & &&8&@####555'9-'H >4 >4O$3M$BM!%J$	11/3/E/L/X,k,k\i,k,k)%+%8%<%<XvWs]nWsWsWsDt%<%u%u
) % O55 m^k m m *): 6   
 %-<Y-G-M-M-O-O /4 /4)	!(Y!7!7% % O55 v[d v vnt v v *): 6   
 %%&*&:&:6&B&BGG% O55 x]f x xpv x x *): 6   
 %H (1&.$,$*,4*2.4* *  ?4466 #"FFF /=&-.7+9+=+=fi+P+P*./% %	  &9=bb	bbS`Rabbb# K#)#=#J#J	#J#JD% @ ,33J???		d	3333_/4b .5AYY\RVEWYYF#377vse7TTN! 6!'!7!7(/rr\hio\prr!#$(	 "8 " " ###555!+//t7M7T7`jmin/ooL- 0155VSE5RR !55%(,#'? 6  D
 ' 0*8D'".DK*3D'II$I///s   ,H%H)c                 
   i }t                      }|                    d          s|S d t          j                                        D             }|d                                         D ]Z}|d                             d          s|d                             dd          }|d| j        j	        j	        j
                                         z  }||vrn| j        t          j        j                 d         D ]}|                    d	          s|d         |d	         d         k    r|d
                                         D ]~\  }}	|	                    d          s|                                }
|	|
d
<   |                    |i           }|
||
d         <   |	d         r!|                    di           }|
||
d         <   ʐ\|                                D ]{\  }}d}| j        j	        j	        j
         d|d          }|d          d|d          }|dk    r~d| j        j	        j	        j
         d| d}t          j                            ddd| dg          }|s!| j                            d| dd           |d| z  }|d|d          z  }n|dz  }t          j                            |dg          }|s9t                              ||d| j                  }|                    d            |                    ||f           |                                D ],\  }}
|
d
         }	| j        j	        j	        j
         d| }t          j                            |g d!          }t          j                            ||"          }|s"t                              ||| j        #          }|	                    d$d%          |_        |	                    d&d%           |_        |j        d'k    r|j        j        pi }t          |j        j                  pt                      }i }t                      }|	                    d(i                                           D ]`}t=          j        |d)         d*d+,          }|d)         ||<   |d-         r|                    |           ||vr|                    |           a|                     |           ||_        tC          |          |_        ||_        tC          |          |_        |                                 |j"        r|                    d            tG                       .}|S ).u1    Импорт конфигураций полейr  c                      i | ]}|d          |S r	  r@   r  s     r)   r  z5JiraAPIImport._process_field_conf.<locals>.<dictcomp>o$  r	  r*   r   rD  r~	  r	  r.  r   r   r  r  r1  Nre  r4   5   : Конфигурация полей проекта r3   rm  r8  r9  rd  r 
  r  CmfCustFieldConfSchemer5  u    для типа     по умолчаниюr   r  Tr	  rp  )r	  r  r	  )rQ  rh  )rQ  rh  rI   r  Fr  r	  r  r   r  r	  r	  r	  )$rs  rq   ro   rD  r   r   r  rA  rI   rs  rt  r  rU  r.  r   r  r  r  rP   r  rw  ru  rF  r  r	  visibler	  r  r   r	  r   r	  rW  r  rU  rL   )r&   r  logic_type_fieldslogic_type_field_confr	  r  r   rR  r1  r  r   r   rh   r  r3   r  r  field_idfield_ext_idrQ  r  r	  r	  r  r	  r  r	  s                              r)   _process_field_confz!JiraAPIImport._process_field_conff$  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 )Nre  r   r   r  r4   u@   : Схема конфигурации полей проекта r3   TrC  rp  r

  r
  r	  r  r  )rh  r  r
  r  rI   rF   r  r@   )rI   rs  rt  ro   r
  rq   rw  r  r
  ru  r  CmfCustFieldConfSchemeRuler  r  rs  
calc_cacher	  r  )r&   r  rm  r  r  r
  r  field_confsrh   
field_confr  s              r)   r  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   Добавляет предыдущий код задачи в историю кодов при изменении проектаr[  re  rm  r8  r9  rd  Nra  rg   )rF  rH  r   r  r   r   r   r    uE   ] В историю кодов задачи добавлен код 'u   ' из проекта u
   ] Код 'u6   ' уже добавлен в историю кодов)ro   r  rq   CmfTaskCodeHistoryr  rw  rI   r}   r  r   r  )r&   rF  project_datakey_datar	  r   rt  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 )Nre  rF   r^  r_  c              3   2   K   | ]}|d          dk    |V  dS )r   rH  Nr@   r5  r  s     r)   r'  z;JiraAPIImport._process_task_code_history.<locals>.<genexpr>I%  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>M%  s0      MM$d7mu6L6L6L6L6L6LMMr*   r	  r  r   )
r.   rm  r  r  r   rq   r   r  rm   r!
  )
r&   rF  rt  r.  r~  r_  r  project_itemkey_itemr	  s
             r)   _process_task_code_historyz(JiraAPIImport._process_task_code_historyB%  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)r  r   r  rm  r$	  r    uS   ] Не удалось обработать историю кодов задачи: zERR-0140rD  r5  )r   rI   rK   rq   r  ro   rD  r  r   r)
  rL   rM   rN   rP   )r&   
task_queuer}  rF  r  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$   История кодов задачrH  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  r  r   r3   r   r  rd  u    Не найден проект 'r  rh  rL  u-   Обработка истории кодов r  _code_history_worker_r+
  r>  r  r   r  r  uL   Обработка истории кодов задач завершена: r+  r  )rI   r}   rH  ro   r  rq   rP   r   rD  rL  rL   r  r.  r  r   rB  r  r   r   rC  r,
  r:  rJ  r  r  r   r   )r&   rH  r  r  project_identrA  r  
perf_startr+
  treadsr  treadr  r:  r  rI  rF  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|                                  |                                  |                                  |                                  |                                  |                     | j                            d                     |                     | j                            d                     |                     | j                            d                     |                                  | j                            d          r(| xj        | j                                        z  c_        n| j        j                            d           | j                                        rd S d| j        _        | j                                         t;                       | j                            d           |                                 D ]}|d	         d
 | j         D             vr| j        j        !                    d|d          d           t"          j"        sR	 d| j        j#        j#        j$         d|d	          d}| j        %                    || j        j                   # tL          $ r,}| j        j        '                    d|            Y d }~d }~ww xY w| j                            d| j        j(                    | j         S )Nr   )r  r   r   r   u2   Отключена обработка ссылокr	  r  r   c                     g | ]
}|d          S r   r@   r4  s     r)   r6  z0JiraAPIImport.process_import.<locals>.<listcomp>%  s    $Q$Q$Q3SY$Q$Q$Qr*   u'   Импортирован проект 'r3   r  re  )r}   uC   Не удалось создать отчет по проекту. u-   Импортировано объектов: ))r"	  rO   rk	  rb   r  r  rp  ry  r  r#  r	  r
  rn   r-  r2  r  r5
  r   rq   r  r?  r  rI   process_cross_linksr}   rH  rK   r=  rw  rL   rJ   r?  rz   r  IMPORT_COLLECT_STATSrs  rt  project_statsrM   r  rn  )r&   rH  r  r  s       r)   process_importzJiraAPIImport.process_import%  s   4..000	   !!#####%%%!!###9? 	"""$$$!!!))+++!!!   ""dkoo>T.U.U"VVV4;??;N+O+OPPP9I)J)JKKK;???++ 	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
O>"O99O>)T)r\  r]  )TTNr  )r  r  )NFr7   )r   r  F)Nrh  rh  ri  )NT)r+   r,   r-   r>   r4  r?   r   r.   r  r  r   r%   r   r   propertyr   r   r   r   r   staticmethodr=  r	   r
   r   r   r   r  r  r  r&  rK  rX  r[  r|  rY   r  r  r  r  r   r  rk  rp  ry  r  ro   r  r  r  r  rS  ro  r  r  r  r  r  r
  r   r?  rI  rY  r]  rp  r  r  r  r  r  r  r  r"  r+  rS  r  r  r  r  r   r  r  r  r  r  r  r)  r-  r8  r>  rB  r\  ri  rx  r  r  r  r  r  r  r  r5  r  r  r#  r-  r2  r4  r  r&  rG  rA  r?  rM  r  r  r  r[  ru  r  r  r  r  r@  r~  r  r  r  r  r  r  r  r  r+  r  rt   r  r  r  r  r  r  r  r  r  r   r  r
  r  r  r  r  r  r  r)  r+  r   r1  r7  rN  rY  rg  rv  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  r  rc	  rk	  r  r	  r	  rj  r	  r  r
  r  r!
  r)
  r,
  r5
  r;
  r/   r0   s   @r)   r[   r[   V   s        EEOOOT	?"""!"W "$ " " " " " "H/ / /
 
 
" "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v" v" v" v"p _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*2X./ ./ ./`ct c4 c c c cJ  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    T    8 _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Q Q Q 87Qf _=>>' ' ?>' _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w w wr _IJJ( ( KJ(T _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$ $ $LK K K  8: : :x5 5 5n  [D [ [ [ [& & & & &     4        
         
  ( ( (2 2 2.,B ,B ,B\/ / /2 2 2892 92 92v  88 8 8 8 8" " "H' ' '  9 9 94 4 44% % %	I 	I 	I<t <t <t|= = =    @   ^4;0 ;0 ;0zC C CJ* * * *8( ( (T  &	- --- - 	-
 
- - - \-.      ., , ,<0 0 0/6 /6 /6bG G GR% % %N     D4 4 46 6 6$J J JD D D   25 5 5  ,6 6 6*    B  0< 0< 0<dD D DL   ^$0
 0
 0
dEP EP EPN  04 4 4l	% 	% 	%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5# 5# 5# 5# 5# 5# 5#r*   r[   )?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   
contextlibr   dateutilr   	itertoolsr   textwrapr   r   unicodedatar   
cmf.modelsr   %common.models.cmf_plugin_import_mixinr   modules.jira.apir   modules.jira.base_importr   modules.jira.jql.parserr   localrH   ro   rD  r   rE  r=  rM   r   	dataclassr2   rY   r[   r@   r*   r)   <module>rQ
     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	0 0 0 0 0	 0 0 0 
% 
% 
% 
% 
% 
% 
% 
%  8tV# tV# tV# tV# tV#N tV# tV# tV# tV# tV#r*   