
    otki+                       d dl mZ d dl d dlmZmZ d dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlZd dlZd dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d d	lmZm Z  d d
l!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, eee-j\                     ee-j^                     ee-j`                     f   Z1ejd                   G d d             Z3d Z4 G d de*      Z5y)    )cmf_context)*)cmf_hashlibcmfutilN)Path)DictOptionalListCallableUnionTypeIterator)BeautifulSoup)permutations)dedentindent)	normalize)	BaseModel)CmfPluginImportMixin)JiraApi)JiraBaseImport)JQLNormalizerc                   <    e Zd ZU dZeed<   eed<   eed<   d Zd Zy)EpicDatauD    Данные используемые при создании epic namekeyproject_keyc                 ,    t        | j                        S N)hashr   selfs    ./modules/jira/api_import.py__hash__zEpicData.__hash__&   s    DHH~    c                 4    | j                   |j                   k(  S r   )r   )r"   others     r#   __eq__zEpicData.__eq__)   s    xx599$$r%   N)__name__
__module____qualname____doc__str__annotations__r$   r(    r%   r#   r   r      s    N
I	H%r%   r   c                       fd}|S )Nc                       fd}|S )Nc                 @   	 | j                   j                  d        | j                   j                         ry | g|i |}t                |S # t        $ r@ t                | xj                  dz  c_        | j                   j                  d        Y yw xY w)Nz================== r      u   Ошибка )
cmf_importlog	is_cancel
cmf_commit	Exceptioncmf_rollback
has_errors	log_error)objargskwargsresfuncr   s       r#   wrapperz3catch_exception.<locals>.decorator.<locals>.wrapper/   s    ""%8#?@>>++-3000
 !#((=)?@	s   8A A ABBr/   )r@   rA   r   s   ` r#   	decoratorz"catch_exception.<locals>.decorator.   s    	 r%   r/   )r   rB   s   ` r#   catch_exceptionrC   -   s    " r%   c            
           e Zd ZU dZeed<   eeef   ed<   de	ddf fdZ
edeeef   fd       Zd	 Zd
 Zd Zd Zedededeee      fd       Zd Zdeeeef      fdZed        Zed        Zd Zedd       Zdee   fdZdee   fdZdee   defdZ	 	 ddZ e d      d        Z! e d      d        Z" e d      d edefd!       Z#d" Z$ e d#      d ed$e%fd%       Z&dd&Z' e d'      d(        Z( e d)      d*        Z) e d+      d,        Z*de+jX                  fd-Z-d. Z.dd/Z/dd0Z0d1 Z1d2 Z2d3 Z3 e d4      d5        Z4 e d6      d7        Z5 e d8      d9        Z6 e d:      dd;e7fd<       Z8d= Z9d> Z: e d?      d@        Z;dAedBefdCZ<dD Z=	 	 ddEZ>dF Z?dG Z@ e dH      dI        ZAdJ ZB e dK      dL        ZC e dM      dN        ZD e dO      dP        ZEdQ ZFddRZGdSeHfdTZIdSeHfdUZJ e dV      dWefdX       ZKdY ZLdZ ZM e d[      dWefd\       ZNd] ZO e d^      d_        ZPd` ZQda ZRdb ZSdc ZT e dd      de        ZU e df      dg        ZVdh ZWdi ZX e dj      ddk       ZY e dl      dm        ZZ e dn      dd;e7fdo       Z[ e dp      dBefdq       Z\ e dr      ds        Z] e dt      du        Z^ e dv      dw        Z_ e dx      dy        Z` e dz      d{        Za e d|      d}        Zbd~ ZcddZddefdZe e d      defd       ZfdefdZgd Zhd Zid Zjd Zkd Zld Zmd Znd Zod Zpd Zqd ZrddZsd Ztd Zud Zvd ZwdWefdZxdWefdZydWefdZzdWefdZ{dWefdZ|d Z}d Z~d Zd Zd Z e d      dedeHdWefd       Zd Zd ZdedefdZd ZdBefdZddZd Zeddedededefd       Zd Zd Zd Zd Zd Zd Zd ZdefdZd Zd Zd Z e d      d        Zd Z e d      d        Zd Z xZS )JiraAPIImportu;   Класс загрузки объектов через APIr:   _JiraAPIImport__jira_fieldsjirareturnNc                    t        |   |i | || _        d| _        | j                  j                  rd| _        t
        j                  j                  d      | _        d | _	        | j                         | _        i | _        i | _        i | _        g | _        g | _        d| _        t$        j'                  d      }| j(                  j*                  j,                  |_        |j/                  | j(                  j*                  j0                         | j3                          | j5                          d | _        d| _        dd	d
d| _        y )Nr   	accountIdsoftdevcoder   zatlassian.rest_clientF
logic_typepriorityresponsible)	issuetyperO   assignee)super__init__rG   user_keycloudmodelsCmfActivitygetdefault_activitycloud_id_get_jira_global_settingsjira_global_settingsepicsissue_relationssubtasksboardsselected_projectsr:   logging	getLoggerr4   loggerhandlerssetLevellevel_prepare_multiprocessing_set_fallback_personrF   update_fields_board_card_colors_mapping)r"   rG   r=   r>   re   	__class__s        r#   rT   zJiraAPIImport.__init__G   s   $)&)!	99??'DM & 2 2 6 6I 6 F$($B$B$D!
!!#""#:;//0099..445%%'!!#!" &"%+
'r%   c                 D   | j                   r| j                   S | j                  j                         j                  d      }|j	                         rF| j
                  s:t        |      5 }t        j                  |      | _         d d d        | j                   S | j                  j                         | _         t        |d      5 }t        j                  | j                   |       d d d        d| _        | j                   S # 1 sw Y   | j                   S xY w# 1 sw Y   3xY w)Nfields.jsonw+F)rF   r4   get_download_pathjoinpathexistsrk   openjsonloadrG   
get_fieldsdump)r"   	file_pathfs      r#   jira_fieldszJiraAPIImport.jira_fieldsh   s    %%%OO557@@O	d&8&8i 2A%)YYq\"2 !!! "&!5!5!7Di& 1!		$,,a01!&D!!!2 !!!	1 1s   )C?!D?DDc                    dd l }|| _        | j                  j                         j	                  d      }| j                  j                         j	                  dt
        j                                }t        |d      5 }t        j                  | j                  |       d d d         |j                  ||       y # 1 sw Y   xY w)Nr   ro   zfields.json.rp   )shutilrF   r4   rq   rr   osgetpidrt   ru   rx   move)r"   fieldsr}   ry   file_path_tmprz   s         r#   update_jira_fieldsz JiraAPIImport.update_jira_fieldsx   s    #OO557@@O	99;DD|TVT]T]T_S`Eab-& 	-!IId((!,	-M9-	- 	-s   ?!B<<Cc                    | j                   j                  j                  j                  d      }t	        |      | _        | j
                  r&t        j                  j                  |      | _        yt        j                  | _        y)u   
        Устанавливает резервного пользователя,
        если пользователь не будет найден в методе _get_person()
        default_user_id)idN)r4   json_settingsvaluerY   bool_is_default_userrW   	CmfPerson_fallback_persongsystem_user)r"   r   s     r#   rj   z"JiraAPIImport._set_fallback_person   sc    
 //77==AABST $_ 5  $*$4$4$8$8O$8$LD!$%MMD!r%   c                 Z    | j                   j                         D ]  }|d   |k(  s|c S  y )Nr   )r{   values)r"   r   fields      r#   _get_field_by_namez JiraAPIImport._get_field_by_name   s1    %%,,. 	EV}$	r%   c                 j    t        t        fd| j                  j                               d       }|S )Nc                 L    | j                  di       j                  d      k(  S )NschemacustomrY   )rz   
field_types    r#   <lambda>z2JiraAPIImport._get_field_by_type.<locals>.<lambda>   s"    !%%"-11(;zI r%   )nextfilterr{   r   )r"   r   r   s    ` r#   _get_field_by_typez JiraAPIImport._get_field_by_type   s6    I  '') 
 r%   model
field_namec                 @    |sy | j                  |g      }|r|d   S d S )N)fields_namer   )import_shop_fields)r   r   r?   s      r#   _get_field_namezJiraAPIImport._get_field_name   s.    &&J<&@s1v&$&r%   c                     dd l }dd l}|| _         || _        t        j                  | _        t        j
                  | _        | j                  j                         | _	        y )Nr   )
	threadingqueueconfigIMPORT_THREADSthreading_max_forksIMPORT_DOWNLOAD_THREADSdownload_threading_max_forksr4   get_max_processesmax_processes)r"   r   r   s      r#   ri   z&JiraAPIImport._prepare_multiprocessing   sD    "
#)#8#8 ,2,J,J)!__>>@r%   c                     g }ddddddddd	d
ddd}dddd}| j                   j                         D ]A  \  }}d| |j                  |d       }|j                  |j                  |d      ||d       C |S )uO    Сопоставление настроек для модели models.CmfTaskr   text	cmf_ownerrP   rO   status
alarm_datedeadlinecmf_modified_atcmf_created_atstatus_closed_at
resolution)summarydescriptionreporterrR   rO   r   customfield_10015duedateupdatedcreatedresolutiondater   z.namez.watchCountz.votes)rO   watchesvoteszfields. N)model_field	json_path	ext_field)r{   itemsrY   append)r"   issue_settingsdefault_local_attrs_mappingadditional_json_pathcustom_field_keycustom_fieldr   s          r#   _get_issue_import_settingsz(JiraAPIImport._get_issue_import_settings   s    !#%"!-!('0&'
#$  $ 

 /3.>.>.D.D.F 	*l!"2!34H4L4LM]_a4b3cdI!!:>>?OQUV&)# 	 r%   c                  "    dddddddddg} | S )Nr   displayNamer   r   emailemailAddressdoes_not_workactiver/   )user_settingss    r#   _get_user_import_settingsz'JiraAPIImport._get_user_import_settings   s+     #?#.A+(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   s,     -9E(x@"@	
  r%   c                     dddddddd}||v r||   S |j                  d	      }t        |      d
k(  ry| j                  j                  |d
   i       j                  dd      S )N   ИмяEmailu   Активныйu   Создано
   Автор
   Текстu   Ключ)r   r   r   r   r   bodyr   .r3   r   r   )splitlenr{   rY   )r"   jsonpathmappings      r#    _get_setting_title_from_jsonpathz.JiraAPIImport._get_setting_title_from_jsonpath   sz    ##('" 
 w8$$>>#&x=A##HQK488DDr%   c                    |sy |j                  d      D ])  }t        | t              s y | j                  |      } | r) y  |r't        | t              rg d}|D ]  }|| v s| |   c S  y|rt        | t              rg }| D ]p  }d|v r|j                  |d   d          d|v r|j                  |d   d          ;d|v r|j                  |d          T|sW|j                  t        |             r dj                  |      S | S )Nr   )r   r   r   r   inwardIssuer   outwardIssue,)r   
isinstancedictrY   listr   r-   join)r<   r   to_strr   
str_fields	str_fieldresultrelated_objs           r#   _get_file_valzJiraAPIImport._get_file_val   s   
 #//#. 	Jc4(''*%C	 jd+7J' *	#y>)* jd+F" 4 K/MM+m"<U"CD#{2MM+n"=e"DEk)MM+e"45 MM#k"234 88F##
r%   c                 *   
 g 
dt         t        t        t           f   dt        g t        t           f   dt
        dt        f
 fd} j                  j                  dg        j                  j                         j                  d      }d}d}|j                         rJ j                         D ]   } j                  |d	         D ]  } n |s  n  j                  d
      D ]  } n |s0 j                  j                  d      D cg c]  }| }}|r|d   }|sE j                  j!                   j                  j"                  d      D cg c]  }| }}|r|d   }|st%        d      d _         || j(                  t*        j,                         |st%        d       || j.                  t*        j0                         ddddddg}	 ||	 j2                  t*        j4                         
j7                  dg d       
S c c}w c c}w )u-    Инициализация настроек objssettings_funcr   rH   c                    | D ]  } |       }|D ]X  }j                  ||d         |d<   j                  ||d         |d<   j                  |d         |d<   |j                  |d<   Z j	                  |j
                  |d       |c S  y )Nr   file_valr   titleicon)r   r   )r   r   r   r   r   verbose_name)r   r   r   r<   obj_settingssettingr   r"   s         r#   _get_settingsz:JiraAPIImport.tmplt_import_settings.<locals>._get_settings  s     ,+ 1G*.*<*<S'+BV*WGJ'-1-A-A%Q^I_-`GM*'+'L'LWU`Ma'bGG$&+jjGFO	1
 u'9'9\RS
r%   zplugin.plugin.*projectsNr   usersr3   limitr   )username	limit_enduS   Не найдено ни одной задачи, импорт невозможенTua   Не найдено ни одного пользователя, импорт невозможенz2022-05-22T15:22:22.593+0300r   u!   Электронная почта)r   r   r   )r   r   r   selectedObjects)r   r   )r   r
   r   r   r   	TypeModelr4   load_fieldsrq   rr   rs   _get_projectsget_project_tasks_simple_getrG   
get_issues	get_usersr  r8   rk   r   rW   CmfTaskr   r   r   
CmfCommentr   )r"   r   dump_dirtaskuserprojectr<   tasksr  comment_exampler   s   `         @r#   tmplt_import_settingsz#JiraAPIImport.tmplt_import_settings  s   :<
	dHTN&: ; 
	)1"d4j.)A
	JS
	X\
	 	##%6$78??446??
K??--/  2274=A D	
 ((1 $(II$8$8q$8$ABSSBEBQx$(II$7$7ASAS_`$7$abSSbEbQxqrr "dD;;V^^L  A  AdD::F<L<LM'E6>4W'Y$02 3
 	ot'H'H&J[J[\ 	02>?= C cs   	H	Hc                    | j                  | j                  j                  d         }ddg g gdg}| j                  j	                  d      D ]  }t        |t        j                  j                     d         D ]o  \  }}|d   s| j                  ||d	         }| j                  |d   d
   |      }|d   d   j                  |d   d          |d   d   d   j                  |       q  |S )Nimport_settingsu   Задачиzcalendar-today)r   r   titlesrows   r  r   r   r   r   r   r  captionr  )_normalize_settingsr4   r   rG   r  	enumeraterW   r  r   r   _normalize_jira_valuer   )r"   settingsr   issuenumr   r   s          r#   previewzJiraAPIImport.previewT  s
   ++DOO,I,IJ[,\]*4DPR]_\`abYY)))2 	3E )(6>>3N3N*OPX*Y Z 3W}-**5'+2FG227=3I,3WY^_q	(#**7=+A)+LMq	&!!$++E23	3 r%   r!  c                     i }|D ]R  }|d   s	| j                  ||d   d      }| j                  |d   d   ||j                  d            }|||d   d   <   T |S )uC    Преобразование настроек для модели r   r   F)r   r   r   )r   r   rY   )r"   r<   r!  normalized_objr   r   s         r#   _normalize_objzJiraAPIImport._normalize_objc  s     	IG=)&&sGK,@&OE..w}/El/SUZ\c\g\ghs\tuECHN7=1,?@	I r%   c                 8   dd|j                   gg}|j                  d      r|j                  g d       n|j                  dd|g       t        j                  j                  |      }| j
                  j                  j                  j                   d|d    }t        j                  | j
                  t        j                  |d	   ||||j                  d
      |j                  d      |ddd|g      \  }}	|	r|d	   |_        |j                  d       |S )Ntree_parent_id==completeDate)sys_typer*  archiver,  r   ::r   r   	startDateendDate)r   parenttree_parent	list_typeplan_start_dateplan_end_dateext_idr7  
filter_objTsave_import)r   rY   r   rW   	CmfFolderr4   pluginsource_hashr   process_any_table_fieldsCmfListr   save)
r"   r2  sprintparent_sys_typer4  _filterr3  r7  list_objnews
             r#   _process_listzJiraAPIImport._process_listo  s   $dFII67::n%NN89NNJo>?&&**'*:OO**11==>bO,EEdooW]WeWeOUV\~QWVaT]Z`ZdZdepZqX^XbXbclXmQWGI W_`dflUm	o# "6NHMMMdM+r%   u8   Обработка наблюдателей задачиc                    d|d    d|d   d    d}g }| j                  |      D ]  }| j                  j                  r| j                  |d   |      }n| j                  |d   |      }|st	        d	|       ||j
                  k(  s||j                  k(  s||j                  k(  r|j                  |        ||_	        y
)u;   Добавляем наблюдателей в задачуu$   Наблюдатели задачи r   : "r   r   "rJ   r<   uI   _process_watchers: Не найден наблюдатель задачи N)
_get_issue_watchersrG   rV   _get_personCmfErrorrP   r   r   r   
spectators)r"   	issue_objr"  r<   rO  watcherpersons          r#   _process_watcherszJiraAPIImport._process_watchers  s     5U5\N$uXW`GaFbbde
//6 
	&Gyy))'+*>C)H))'%.c)B!jkrjstuu...&I<P<P2PTZ^g^q^qTqf%
	&  *	r%   u#   Обработка вложенийc                     d}d|d    d|d   d    d|d   d   D ci c]  }t        |d	         | c} fd
} j                  |      D ]0  }| ||d   |d         z  } j                  j                  dd       2 |S c c}w )Nr   u   Вложения задачи r   : 'r   r   '
attachmentr   c                    d}	 	j                  |       }|r|d   nd}|r|d   n| }t        j                  j                  |g d      }|s5t        j                  |j                  d      }|j	                  d	       |j
                  r|r[|j                  d
      r9j                  |d
   j                     
      |_        |j                  |_	        |d   |_
        ||_        t        |d      5 }|j                  |j                         dd       d|_        |j	                  d	       |r|d   }|j                  |k(  sJ d d d        t!                |S # 1 sw Y   xY w# t"        $ rE t!                j                  j%                  d d dj                   d d	d       d}Y |S t&        $ r5 t)                j                  j%                  d d dd       d}Y |S w xY w# |c cY S xY w)Nr   r   r   filename)import_originalurlurl_preview_imgurl_previewr   r2  r   Tr   r2  r4   rZ  r:  r   rK  r   rbF)smart_backup
mark_dirtysizeu   Размер файла '' (u@   ) не соответствует размеру из меты: z	 bytes / z bytesERR-0034r3   u;   Не удалось обработать вложение ')zERR-0035)rY   rW   CmfAttachmentr4   rA  rZ  rM  rU   r   r   r   import_raw_jsonrt   upload_filereadst_sizer7   AssertionErrorr;   r8   r9   )	file_namery   errorattachment_metaattachment_idattachment_namerW  rz   attachment_sizeattachments	issue_msgrP  r"   s            r#   _process_attachmentz?JiraAPIImport._process_attachments.<locals>._process_attachment  s]    E>"-//)"<9H 5bAP/*"=V_#1155($ 6 	
 "!'!5!5,(#'??(,	 "6 "J OOO5--&*..x8484D4D / 9$-- H$- 5E 5J1 4>3H3HJ04CI4N
15D
2i. 
I!"..FFH)-', / 
 6:
2"D9*.=f.EO#-#5#5#HH#H
I & =
I 
I " ))//@M? S55?5G5G4H	RaQbbhj!	 *     ))QRaQbbefsettuv! * 
  sJ   C3E, 8AE E,  E)%E, ,A
G66G9 99G62G9 5G66G9 9H rm  ry   	processed)r-   _get_issue_attachmentsr4   inc_stat)	r"   rP  
jira_issueerrorsatt_dataru  attachment_datars  rt  s	   ``     @@r#   _process_attachmentsz"JiraAPIImport._process_attachments  s    4Z5F4Gs:V^K_`iKjJkklm	 'x0>
 )

C	J  $:::F 	@O),, F OO$$\;?	@ c
s   B
uB   Обработка упоминаний пользователей	text_soupc                    ddl m}m} |j                  dv rd}nd}|j	                  ddi      D ]  }	 |j
                  j                  d	      r| j                  |j
                  d	         }n|j
                  j                  d
      r| j                  |j
                  d
         }n ||j
                  d         } ||j                        }	|	j                  d      rD| j                  |	d   d   j                               }
| j                  |
| j                           }nt        d      t        |j                  t        |j                         t        |j"                        t        |j$                        t        |j&                              d      }|j)                  |j*                          y# t        $ rD}| xj,                  dz  c_        | j.                  j1                  d| d| d|       Y d}~d}~ww xY w)u]   
        Упоминания пользователей
        confluence-userlink
        r   )urlparseparse_qsr  a  
                <a
                    class="external"
                    href="{person_href}"
                    rel="noopener"
                    target="_blank"
                    data-macros="mentions"
                    data-mention-type="person"
                    data-object-id="{person_id}"
                    data-title="{person_login}"
                    cmf_converted="true"
                >
                    @{person_name}
                </a>
            u	  
                <span class="macros-panel mentions-macros" contenteditable="false" data-id>
                    <span class="extension-container" data-layout="default" data-id>
                        <span class="extension-title" data-id>
                            @Упоминания <span class="excerpt-title" data-id>| {person_login}</span>
                        </span>
                        <span class="macros-actions" data-id>
                            <span class="macros-delete" data-id>
                                <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                    <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                </svg>
                            </span>
                        </span>
                    </span>
                    <span class="ak-renderer-wrapper" data-id>
                        <a class="external" data-macros="mentions" data-mention-type="person" data-object-id="{person_id}" data-title="{person_login}" rel="noopener" data-id cmf_converted="true">
                            <span class="lds-ring" data-id>
                                <span data-id></span>
                                <span data-id></span>
                                <span data-id></span>
                                <span data-id></span>
                            </span>
                        </a>
                    </span>
                </span>
            class
user-hoverattrsdata-account-iddata-usernamehrefr   u[   Не найдены атрибуты для определения пользователя)	person_idperson_loginperson_hrefperson_namehtml.parserr3   uR   Ошибка конвертации упоминания пользователя : zERR-0036rK  N)urllib.parser  r  
class_namefind_allr  rY   rM  query_get_user_info_from_dumplowerrU   r8   r   formatr-   r   loginr  r   replace_with
currentTagr:   r4   r;   )r"   r~  r<   r  r  TMPLtagrR  
parsed_urlr  	user_infonew_tages                r#   _process_mentionszJiraAPIImport._process_mentions  s    	4>>l+D D: %%Wl,C%D 	C99==!23!--cii8I.JKFYY]]?3!--cii.HIF!)#))F*;!<J$Z%5%56Eyy($($A$A%-PQBRBXBXBZ$[	!%!1!1)DMM2J!K'  )F  G  G'KK"%fii.%(%6$'$4$'$4	    "   !3!341	2  1$))hilhmmopqors *  s   FF::	H9HHc                    t         j                  j                  }|j                  | j                  j
                   d|       }|t        j                  |      S | j                  d      D ]  }|j                  | j                        |k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  s|c S  t        d|       )	N:user:r  r   r   r  r   r   uQ   Не нашли информацию по пользователю в дампе )APPREDIS_DBredisrY   r4   r   pickleloadsr  rU   r  r8   )r"   user_idredis_dbr  s       r#   r  z&JiraAPIImport._get_user_info_from_dumpI  s6   <<%%LLDOO$6$6#7vgY!GH	 <<	**))'2 
	!I}}T]]+w6  }}VR(..0GMMOC  }}Z,224G  }}^R0668GMMOK  }}]B/5577==?J  
	! klsktuvvr%   u#   Конвертация ссылокr2  c                 h   |j                   dv r|j                  }|j                  d       D ]  }|j                  j	                  d      r)| j
                  j                  j                  d|        H|j                  d      rG|j                  d   j                  d      r)| j
                  j                  j                  d|        | j
                  j                  j                  d|        |j                  d      r|j                  d   }n|j                  d	   }t        j                  j                  |      j                  d
      d   j                  d      d   }t        j                  dt        j                  j                  |      j                  d      d         }|r-|d   |d   d   }t!        t#        fd|      d       }	|	r|	d   }t$        j&                  j)                  |dg|      }
|
rO|j                  d	      r|j                  d	   |j                  d<   |
j*                  |j                  d	<   d|j                  d<   t-        j.                  |j                  d	         }|rM|d   rH|d   j                  d      r4d|_        d|j                  d<   d|j                  d<   d|j                  d<   |j                  d      rD|j                  d   |j                  d<   |
j*                  |j                  d<   d|j                  d<   | j
                  j                  j                  d|
j*                          $d|j                  j	                  dd       v sD|j                  d   j                  d
      d   j                  d      d   }| j3                  |      }|s|j                  d   |j                  d<   |j4                  |j                  d<   d|j                  d<   | j
                  j                  j                  d|j4                           y )!Nr  c                 J    | j                  d      xs | j                  d      S Nr  srchas_attrr  s    r#   r   z.JiraAPIImport._process_links.<locals>.<lambda>a  s    #,,v2F2]#,,W\J] r%   cmf_convertedu   Уже обработали r  #u   Это якорь u&   Обрабатываем ссылку r  /?r   (/attachment(?:/content)?/(\d+)(?:/)?(.*)r3   r   rW  c                 ,    | j                  d      k(  S Nr   r   item	attach_ids    r#   r   z.JiraAPIImport._process_links.<locals>.<lambda>t  s    $((4.I2M r%   rY  r[  )r   r   r2  src_origTvideocontrolsz100%widthheight	href_origu   Заменили на z/people/r   )r  r2  r  r  rY   r4   re   infor  
startswithurllibparseunquoter   researchr   r   rW   rg  sgetr[  	mimetypes
guess_typer   rM  r  )r"   r~  r2  ry  r  r[  rm  	url_matchrs  attach
attach_obj	mime_type
account_idrR  r  s                 @r#   _process_linkszJiraAPIImport._process_links\  s   .]]F%%&]^ 1	XCyy}}_-&&++.J3%,PQ||F#		&(9(D(DS(I&&++.@,FGOO""''*PQTPU(VW||F#ii'ii&,,S177<R@FFsKANI		"Mv||OcOcdgOhOnOnorOstuOvwI%aL	(2<@f%M{[]ab &z 2I--22	5'Z`2aJ<<&,/IIe,<CIIj)'1~~CIIe$15CIIo. ) 4 4SYYu5E FI Yq\il6M6Mg6V#*0:		*--3		'*.4		(+<<'-0YYv->CIIk*(2CIIf%15CIIo.&&++.DZ^^DT,UVSYY]]6266 YYv.44S9"=CCCHK
))*5-0YYv->CIIk*(.CIIf%15CIIo.OO**//2H0VWc1	Xr%   c           
      2   |rd| dnd}|s|r(| j                   j                  j                  d|        | j                  j                  r3|d   dk7  r+| j                   j                  j                  d|d           | j                  || j                  t        j                  j                     d         }| j                  j                  s|d	   }t        j                  d
|d         }|D 	cg c]#  }	|	j                         s|	j                         % }}	t        |      dkD  r|D 	cg c]  }	||	j                  d      d   v s|	 }
}	|D 	cg c]  }	|	j                  d      d   |v s|	 }}	|
r	|
d   |d<   n|r	|d   |d<   n|d   |d<   |j                  |d          |d   |d<   d| j                   j                   j                   j"                   d|| j$                      d}|d	   j                  dd      }d}|D ]  }t        |      |kD  st        |      } t'        t        j                  j(                  j*                  t        j                  j,                  j*                  t        j                  j.                  j*                        }||k  rlt        |      dk(  r|d   |d<   d|d<   d|d<   nt        |      dk(  r|d   |d<   |d   |d<   d|d<   ndt        |      dk\  rV|d   |d<   |d   |d<   |d   |d<   n=| xj0                  dz  c_        | j                   j3                  d|d	    d| ddd       ddg}t        j                  j5                  dd d!| d!g|"      }|r@|j6                  j8                  j;                  d| j                   j                   j                   j"                   d      dkD  r|r| j                   j                  j                  d#| d$|j6                          t        j<                  d| j                   j                   j                   j"                   d%d|j6                  j8                        |_        |j?                  d&'       d }nD| xj0                  dz  c_        | j                   j3                  d(| d)|j6                   d*d+d,-       |sd.dd/d0| j                   j                   j                   j"                   d1gg d2g}t        j                  j5                  d3d4|d   g|g|"      }|s8t        j                  jA                  dd4|d   g|g|"      }t        |      dkD  rJ| j                   j3                  d5|d    d6t        |       d| d7d       | xj0                  dz  c_        g }|s| j                   j                  j                  d8|d    d|        d	d4|d	   g|g}t        j                  jA                  ||"      }|sd.g}tC        |t        |            D ]|  }t        |      dk(  r	dd4|d   g}t        |      dk(  r |jE                  dd4|d   gdd4|d   gg       Ht        |      dk(  sW|jE                  dd4|d   gdd4|d   gdd4|d   gg       ~ ||g}t        j                  jA                  ||"      }t        |      dkD  rN| xj0                  dz  c_        | j                   j3                  d9|d	    d:|d    d;t        |       d| d7d       |r|d   }n9| j                   jG                  d<|d	    d:|d    d=| tH        jJ                         d>}|s|rd&}d}|d   }t        j                  j5                  d3d4|jM                         g|"      r| j                   jG                  d?| d@tH        jN                         |d   j                  d      \  }}| dA| d| }|dz  }t        j                  j5                  d3d4|jM                         g|"      rt        j                  ||| j                   d&B      }nd |fS |rt        j                  d
tQ        |jR                              }|D 	cg c]#  }	|	j                         s|	j                         % }}	t        |      dkD  r|d   |d3<   |jT                  r|D ]  }tW        ||||           |j6                  r$||j6                  vr|j6                   | |_        n||_        t        jX                  j[                         }t        jX                  j]                         }|j^                  jE                  |       |j^                  jE                  |       d&|_0        |dC   dD   D ]Q  }| j                  j                  r
d|dE    d}n	d|d	    d}d| j                   j                   j                   j"                   | }t        jX                  j5                  dd d!| d!gdg"      } | s(t        jX                  j5                  d	dF|d	   gdg"      } | s't        jY                  || j                   d&|d	   |G      } | jT                  r
|d	   | _1        | j6                  s|| _        n#|| j6                  vr| j6                   | | _        | j?                  d&'       |j^                  jE                  |        T |jd                  r|j?                  d&'       ||fS c c}	w c c}	w c c}	w c c}	w )HN(rf  r   u0   Импортируем пользователя accountType	atlassianu   Неизвестный тип r   r   z[,;\s]+r   r3   @r   email_2r/      	last_name
first_namesecond_name   u?   Часть полного имени пользователя "u   " длиннее u_    символов. Фамилия, Имя и Отчество не были заполнены.zERR-0110r   obj_typer   rg_member_ofr7  LIKE%r   r   u    ext_id пользователя N    содержит несколько ID из одного источника: z::.+?::Tr:  uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0004r  
error_coder  ORzNOT LIKE%::::%r7  r*  Nr  ILIKEu+   Пользователей с почтой z > zERR-0037uH   Не удалось найти пользователя с почтой u+   Пользователей с именем  (z) > uM   Не нашли пользователя среди существующих ) FuQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифру+)r7  r  r4   rZ  groupsr   groupIdr*  )r7  r4   rZ  r   rh  )3r4   re   r  rG   rV   warningr'  r!  rW   r   r   r  r   stripr   remover=  r>  rU   minr  
max_lengthr  r  r:   r;   rY   r7  r   countsubrA  r   r   r   r5   rc   INFOr  WARNINGr-   r  rZ  setattrCmfPersonGroup
jira_group
user_groupr  
user_localr   
is_changed)!r"   r  createupdater<   obj_msg	user_dict
user_loginemailsr   emails_by_loginemails_by_namer7  	full_namecurrent_length_namer   max_length_namer   rR  not_source_hash_filterpersonsrD  
name_combo
is_creatednr  prefix_emaildomainr   r  r  
group_infogroups!                                    r#   _process_personzJiraAPIImport._process_person  s1    #AcU!*VOO""''*Z[_Z`(ab99??tM2kAOO""**-KDQ^L_K`+ab''dmmF<L<L<Y<Y.Z[c.de	yy fJXXj)G*<=F17I5;;=ekkmIFI6{Q6<"bU
ekkZ]N^_`Na@a5"b"b5;!aEu{{3?OPQ?RV`?`%!a!a")8);Ig&#)7):Ig&)/Ig&i01'-ay	)$ doo,,33??@4CVBWWYZf%++C3	   	0D4y..&)$i#	0 ''22&&11((33

 /19~")21	+&*,	,'+-	-(Y1$)21	+&*3A,	,'+-	-(Y1$)21	+&*3A,	,'+4Q<	-(
 OOq OOO%%QR[\bRcQddu  wF  vG G_ `$	 &  ^$!!%%f&m4 & 
 fmm))//"T__5K5K5R5R5^5^4__a0bcfgg &&..6vh ?SSYS`S`Rac !#$//0077CCDGLMM''!
 -1$))fgmfn oz {A  {H  {H  zI IFG  *# *   :T__-C-C-J-J-V-V,WWZ'[\&&"
 %%))gy'9:*  * F  **// '9W+=>. " 0  w<!#OO--0[\efm\n[oorsvw~s  sA  AB  CJ  BK  /L.8; . POOq(O GOO**22bclmtcubvvwx  xA  B  )F*;<.G %..33763RG"#'&*6y#i.*Q #J"9~2+6A*O!$Y1!4 '%17JqM$J%0':a=$I0" !# "%Y1!4 '%0':a=$I%17JqM$J%2GZ]$K0" !## $2# #)"2"2"7"7wv"7"Vw<!#OOq(OOO--EiPVFWEXXZ[del[mZnnrsvw~s  sA  AB  CJ  BK  L"!, . 
 $QZFOO''ghqrxhygzz|  ~G  HO  ~P  }Q  QS  T[  S\  ] 
!
(&&**77EKKM2R[a*bOO''*{  }B  |C  Cb  )c  el  et  et  u+4W+=+C+CC+H(L&+nAaS&:EFA	 &&**77EKKM2R[a*b
  ))27DOO<@ * B Z'' XXj#fll*;<F17I5;;=ekkmIFI6{Q%.w%7	'" %%$ 9CFC389 }}.'-}}ofX$>FM &..99;J..99;J&&z2&&z2 $F"8nW5 2
99??!*Y"7!8;F
6 2326Fdoo44;;GGHQ--11(FaPVxWXM9Zdgch1i"1155fdJW]L^=_ilhm5nE"11?C`d9CF9K]g 2 iE ((!+F!3EJ||#)EL5<</&+ll^F8#<EL

t
,##**51+2,   -z!!C J"b!ad Js0   2ll.l

l
l0l3l	lu   Обработка группc                 n   | j                  d      D ]X  }	 | j                  j                         r y d| j                  j                  j                  j                   d|d    d}t
        j                  j                  ddd| dgdg      }|s(t
        j                  j                  dd	|d   gdg      }|s't
        j                  |d   || j                  d
|      }|j                  r
|d   |_	        |j                  s||_
        n#||j                  vr|j                   | |_
        |j                  d
       t                | j                  xj                  dz  c_        [ y #  t                | xj                  dz  c_        | j                  j!                  d| dd       Y xY w)Nr  r/  r   r7  r  r  r   r  r  T)r   r7  r4   rZ  rh  r:  r3   u4   Не удалось загрузить группу ERR-0038r  r  )r  r4   r6   r=  r>  rW   r  rY   rZ  r   r7  rA  r7   imported_object_countr9   r:   r;   )r"   
group_datar7  r  s       r#   _process_groupszJiraAPIImport._process_groups  s   **84  	QJQ??,,.doo44;;GGH:V\K]J^^`a--11(FaPVxWXM9Zdgch1i"1155fgzZ`Oa=blokp5qE"11'/%#'??(,(2 2 E ((!+F!3EJ||#)EL5<</&+ll^F8#<EL

t
,55:57 	Q8Q1$)),`ak`l*m*4?O * Qs   E/D8E//AF4u-   Обработка пользователейc                    | j                   j                  j                  j                  dd      s,| j                   j	                  dt
        j                         y t               }| j                  d      D ]  }	 | j                   j                         r y | j                  |      \  }}t                | j                   xj                  dz  c_        |j                  rN|j                  sB|j                  j                  d      s'|r%|j!                  |j                  j                          |ra| j                   j                  j                  j                  dd      r0t)        t*        j,                  j.                  t1        |      g       y y y #  t#                | xj$                  dz  c_        | j                   j'                  d| d	d
       Y bxY w)N
load_usersTuA   Не грузим пользователей из-за опцийrh   r  r3   z.evateam.ruu@   Не удалось загрузить пользователя r  r   r  send_invites)r=   )r4   r   r   rY   r5   rc   r  setr  r6   r  r7   r  r   r   endswithaddr9   r:   r;   schedule_deferred_jobrW   r   register_personsr   )r"   new_user_emailsr  rR  r  s        r#   _process_userszJiraAPIImport._process_users  s~   ,,2266|TJOO ckrkzkz{%$$W- 	LDL??,,.%)%9%9$%?"
55:5 <<(<(<V\\EZEZ[hEi&#''(:(:;	L$ t<<BBFF~W[\!&"2"2"C"C4P_K`Jab  ]?L1$)),lmqlr*s*4{ * Ls   <FBFAGu#   Обработка статусовc                    | j                  d      D ]^  }| j                  j                         r y| j                  j                  r|d   }n|d   d   }| j                  j
                  j
                  j                   d|d    }|j                  d      xs |d   }t        j                  j                  |      }|s)dd	|gg d
g}t        j                  j                  |      }|s!t        j                  || j                        }||_
        t        j                  |      |_        ||_        |j                  d       t!                | j                  xj"                  dz  c_        a y)uc   
        Грузим статусы из Jira и сопостовляем с нашими
        statusesNstatusCategoryr   r/  r   untranslatedNamer7  r*  r  r.  )r   r4   Tr:  r3   )r  r4   r6   rG   rV   r=  r>  rY   rW   CmfStatusCoder7  r   get_status_typestatus_typer   rA  r7   r  )r"   r   r+  r7  status_namecmf_status_coderD  s          r#   _process_statuseszJiraAPIImport._process_statuses  sS    &&z2 	7F((*yy$%56$%56v>..55AAB"VD\NSF **%78JF6NK$2266f6EO""D+68NO"("6"6":":'":"J""("6"6$# #7 # &,O"*>*N*N{*[O'#.O   T 2LOO11Q61/	7r%   c           	      
   i }d }d }|d   }| j                  |      D ci c]  }|d   |
 }}t        j                  j                  d      }| j	                  |      }	|	D ]R  }
| j
                  j                  j                  j                   d|
d    }t        j                  j                  dd|g      }|s#t        j                  ||| j
                  d	      }|j                  rB|d
    d|
d    |_	        |
j                  dd      |_
        |
|_        |j                  d       |
d   d   d   }|D ]d  }|j                  |      }|s
|d   dk(  r|}|s
|d   dk(  r|}d| j
                  j                  j                  j                   d| d| d}|||<   f |
d   D ]  }| j                  ||        t        j                  j                  dd|gg dgdg      D ]J  }t        j                  j                  dd|j                   gdd|gg dg      s9|j#                  d       L |j%                          | j
                  j                  j                  j                   d|j&                   }|
d   D ]/  }| d|d    }|d   j)                         }t        j*                  j                  ||       }|s"t        j+                  ||| j
                  !      }|d   |_	        |d   |_
        |d"   D cg c]  }|j                  d#      r
| d|d#     }}t        j                  j                  dd$|g      |_        | d|d%    }t        j                  j                  |&      }|d'k(  r|rd|_        |j                  d(       ||_        |j                  d       2 U |d)   }| j
                  j                  j                  j                   d*|d    }t        j2                  j                  |&      }|sBt        j2                  j                  d+      }t        j3                  ||| j
                  ,      }|d   |_	        ||_        ||_        |j                  d       t        j8                  j                  |-      D ]  }|j#                  d.        |j;                         D ]  \  }}| j
                  j=                         r |S t        j>                  j                  dd/d0| d0g      } || || j
                  d1d2}!t        j8                  d3i |!}|j                  d        |S c c}w c c}w )4Nr   default.system:defaultrL   r/  r7  =r.  Ttemplater7  r4   rZ  r   r  r   r   r   r:  associatedWithr   
issueTypeshierarchyLevelr  :r%  workflowr*  r  r+  r  r7  !=Nforcetransitionstype)r8  r7  )r8  r7  r4   linksfromStatusReferenceINtoStatusReferencer(  global	only_dataworkflow_scheme
::SIMPLE::softdev:default)r3  r7  r4   )	scheme_wfTEXKOM_db_deleter  r  r  )rI  rN   target_workflowr4   cmf_model_namer/   ) _get_issue_types_for_projectrW   CmfWorkflowrY   !_get_simplified_project_workflowsr4   r=  r>  rZ  r   r   rh  rA  _create_status	CmfStatusr   r+  deletecreate_create_transr   r  CmfTransstatus_fromallow_empty_transition	status_toCmfSchemeWfdefault_task_workflowdefault_subtask_workflowCmfSchemeWfRuler   r6   CmfLogicType)"r"   jira_project_info	issue_mapdefault_workflow_for_taskdefault_workflow_for_subtask
project_id
issue_typeissue_typeswf_templateworkflows_dataworkflow_dataworkflow_ext_idr8  issue_type_idsissue_type_idissue_type_ext_idr   workflow_hash_idworkflow_transitiontransition_ext_idtransition_type
transitionsstatus_from_ext_id_liststatus_to_ext_idrX  workflow_scheme_datascheme_wf_ext_idrI  template_wfrulelogic_type_ext_idrN   	rule_dicts"                                     r#   #_create_schemewf_for_simple_projectz1JiraAPIImport._create_schemewf_for_simple_project  s"   	$(!'+$&t,
 #??
K
 tZ'
 

 ((,,2J,K??
K+ \	2M!%!7!7!>!>!J!J K2m\`NaMbcO))--h_5U-VH!--(*#$(	 .  ''#4U#;"<B}V?T>U V - 1 1- D+8($/ ++;<Q?MN!/ 8(__];
 2"#34908- 5"#34:3;0&()?)?)F)F)R)R(SSUV`Uaabcpbqqs$t!/7	+,!8& (
3 6##FH56 !**//x0* & 0  * ''++&f.@.@A#T84. ,  D)*$ ((*"&//"8"8"?"?"K"K!LBx{{m\'4]'C 2#'7&8;Nt;T:U$V!"5f"="C"C"E#__00%, 1 
 "!'!)0#'?? "1 "J
 #6f"=
"5m"D
 19+uu23 ((1-B+C*DE+' +
 *0)9)9)>)>$d,CD *? *
& '7%7r:MNa:b9c#d ",,008H0I	"h.97;I4NNTN2'0
$D1=2}\	2~  11BC"oo44;;GGH
SghlSmRno&&**2B*C	 ,,006G0HK**$'?? + I
 .f5	*C	'-I	*4( **//)/D 	/DKKK.	/ ,5??+< 	('x((*   ,,00 &A.?-@*BC 1 J '(#+"oo"+I ))6I6DII$I'	(  S
j+s   U
"Uc                    | j                   j                  j                  j                   d|j                   d|d    }| j                   j                  j                  j                   d|d    }t        j
                  j                  |      }t        j                  |d         }|j                  d      xs |d   }|s"t        j                  ||| j                         }||_	        |j                  d	       t        j                  j                  d
d|g      }|s+t        j                  j                  dd|gdd|gg dg      }|s.t        j                  j                  dd|d   gdd|gg dg      }|s"t        j                  || j                   |      }||_        |d   |_        |d   |_        d|_        ||_        ddddd}	|	j                  |d      |_        |j                  d	       |S )Nr/  r   r(  r&  r'  r   )r7  r   r4   Tr:  r7  r*  r.  r8  status_coder  )r8  r4   r|  r   F#a0a0a0z#3f82d8z#e36b51z#23a055)OPENIN_PROGRESS	IN_REVIEWCLOSED)r4   r=  r>  r   rW   r)  rY   r   r*  r+  rA  rR  r7  r   r   rW  r|  color)
r"   jira_status_datar8  status_ext_idr7  r|  r+  r,  r   status_type_colors
             r#   rQ  zJiraAPIImport._create_statusx  s!   
  ??1188DDER}TVWghlWmVno
 OO**11==>bAQRVAW@XY**..f.=*::;KL\;]^&**+=>ZBRSYBZ .. ?? / K
 #.T*!!%%hm-L%M%%))T8,k2&2) F %%))/78T8,&2) F
 %%xDOOal%mF%&v.&}5(-%($"	
 ),,[)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 ]  \  }}|d   }|	j                  |      }|r	 t         |d   d4i |      }|j                   d| }t
        j                  j                  |ddg      }|s(t
        j                  dd|d|| j                  d|	      }|j                  r0 j                  j                  j                  d| d|
 d| d       n|j                  s0 j                  j                  j                  d| d|
 d| d       njd|j                  _        |j                          t                 j                  j                  j!                  d| d|
 d|j"                   d |d!    d	       |j%                  t'        |j"                                j                  j                  j!                  d"|d!    d#|         j                  j                  j!                  d"|d!    d$|         j                  j                  j-                  d"| d*       " t
        j                  j/                  d+d,|gd-d.|gg d/gd0      }|D ]  }|j1                  d1        t                y# t(        $ r8} j                  j+                  d| d|
 d%|d!    d&| d'd()       Y d}~d}~ww xY w)5uv   
        Обработка условий перехода
        Конвертация в bzPython код
        Nc                     dj                   j                  j                  j                   d|  d}t        j                  j                  dddd| dgdd| gg      }|st        d|  d	      d
|j                   d|j                   d}|S )Nr/  r  r7  r  r  r   r.  u   Группа '   ' не найденаu8               # Пользователь в Группе 'zU'
            try:
                return g.current_user.in_person_group(group_code='@')
            except:
                return False
            )	r4   r=  r>  rW   r  rY   r8   r   rM   )r  r>   group_ext_idperson_group	eval_coder"   s        r#   user_in_group_conditionzMJiraAPIImport._process_transition_conditions.<locals>.user_in_group_condition  s     6 6 = = I IJ"UGSUVL!0044w!L>(;<We, 5 L  .7L MNN99E9J9J8K LCCOCTCTBU VI r%   c                    j                   j                  j                  j                   d|  }t        j                  j                  |      }|st        d|  d      d|j                   d|j                   d}|S )Nr/  r(  u
   Роль 'r  uG               # Пользователь в проектной роли 'zb'
            try:
                return g.current_user.in_project_role(self.project, role_code='r  )	r4   r=  r>  rW   CmfProjectRolerY   r8   r   rM   )jira_projectrole_idr>   role_ext_idroler  r"   s        r#   in_project_role_conditionzOJiraAPIImport._process_transition_conditions.<locals>.in_project_role_condition  s    !__33::FFGrJ]I^_K((,,K,@D*-@,AAV WXXHHL		{ SPPTPYPY{ [I r%   c                 "    ddl m}  |       }i } rt        t         fd|d         i       }nrt        t        fd|d         i       }|j	                  d      }|j	                  d      }|st        d xs  d	      d
| d| d}|S )u   
            Условие прав
            Args:
                permission_key (str): ключ права
                permission (str): название или ключ права
            r   get_datac                 ,    | j                  d      k(  S )N	jira_coder   )permpermission_keys    r#   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>  s    TXXk%:n%L r%   project_perm_permissionc                     | j                  dd      j                         j                         k(  xs | j                  d      k(  S )N	jira_namer   r  )rY   r  )r  
permissions    r#   r   z\JiraAPIImport._process_transition_conditions.<locals>.permission_condition.<locals>.<lambda>  sD     HH["5;;=AQAQASS C#xx4
B r%   r   rM   u   Право 'u   ' не найденоu.               # Только с правами 'zR'
            try:
                return self.project.check_project_role_access('zJ', obj=self)
            except:
                return False
            )cmf.system_datar  r   r   rY   r8   )	r  r  r>   r  system_datapermission_datapermission_namepermission_coder  s	   ``       r#   permission_conditionzJJiraAPIImport._process_transition_conditions.<locals>.permission_condition  s     1"*K O"&L#$=> # "& $$=> 	# .11&9O-11&9O",~/K.LLa bcc//>.? @@@O?P QI r%   c                  
    d}|S )Nut               # Только Исполнитель
            return self.responsible == g.current_user
            r/   r>   r  s     r#   allow_only_assigneezIJiraAPIImport._process_transition_conditions.<locals>.allow_only_assignee      I r%   c                  
    d}|S )Nur               # Только Постановщик
            return self.cmf_owner == g.current_user
            r/   r  s     r#   allow_only_reporterzIJiraAPIImport._process_transition_conditions.<locals>.allow_only_reporter  r  r%   u(   Пользователь в Группе)r  r  u3   Пользователь в Роли Проектаu   Условие Правu2   Условие Только Исполнителяu(   Условие Только Автора)z:com.atlassian.jira.workflow.condition.UserInGroupConditionz<com.atlassian.jira.workflow.condition.InProjectRoleConditionz9com.atlassian.jira.workflow.condition.PermissionConditionz7com.atlassian.jira.workflow.condition.AllowOnlyAssigneez7com.atlassian.jira.workflow.condition.AllowOnlyReporter   переход 'rV  r  r  r/  Tcmf_deletedr7  include_deletedr   r  z6 eval)	rM  rN   r  eval_unsafer8  rp  r4   rZ  r7     Бизнес-процесс , u7   . Пользователь удалил условие K   . Изменения из импорта не будут примененыu9   . Пользователь изменил условие Fu$   . Добавлено условие rU  r  u   Условие '' Jira: ' bzPython: u5   . Не удалось создать условие ''. zERR-0127CmfTransFilterr  #   ' не поддерживаетсяrp  r1  rM   NOT INr4   r:  Nr   r  rJ  r   NNr/   )r   r  rY   r   r7  rW   r  r4   r  re   r  rZ  r  r  rA  r7   r  rM   r   r-   r8   r;   debugr   rS  )r"   
conditionsrp  r8  r  r  r  r  r  condition_maptransition_namefilter_codesr#  condition_datacondition_name	conditionr  filter_ext_idtrans_filterexctrans_filterss   `                    r#   _process_transition_conditionsz,JiraAPIImport._process_transition_conditions  s   
	*	-	^		 H4K
 S6M
 71J
 R0H
 H0H#
. -Z__,=Q?#,Z#8 E	C+L9N%)).9I= &'=y'='O'O PI'1'8'8&9C5$AM#)#8#8#<#<,(,)  $= $L ('-'<'<+4'/&/(,%-'1'+,0#0 (= 
( $//..66:8*BFW XTT`Sa bhi
 *99..66:8*BFW XVVbUc dhi ?D00;$))+"..33:8*BFW XAAMARAR@SSVW`alWmVnnoq !''L,=,=(>?OO**//*9[+A*B(>JZ[ OO**//*9[+A*B,ykZ &&,,&~&66YZGE	P --22sJ/<0*
 ! 3 
 * 	7L6	7 	1 ! OO--6xj?BS TNNWXcNdMeehilhmo"!1	 .  s   -GJ??	L -K;;L c                 ~    dE fd	}d }dF fd	}d|dd|dd|dd	}|d
k(  r9d}t         j                  j                  j                         }	|j                   d}
t         j                  j                  |
ddg      }|sPt         j                  d|j                   dd|j                   d|j                   dddd j                  d|
	      }|j                  r3 j                  j                  j                  d| d| d|	 d| d	       y|j                  s3 j                  j                  j                  d| d| d|	 d| d	       yt               }g }nTt        |t         j                        r:d|j                   d}t         j                   j                  j                         }	g }t#        |d       D ]w  \  }}|d!   }|j                  |      }|r/	  |d"   dGi |\  }}t%        |      }|d
k(  r$j'                  |       j)                  |       nt        |t         j                        rs|j                   d#| }t         j                   j                  |ddg      }|s't         j!                  dd$d|| j                  d|%      }|j                  r3 j                  j                  j                  d| d d	 d| d	       n|j                  s3 j                  j                  j                  d| d d	 d| d	       ntd&|j*                  _        ||_        |j1                          t3                 j                  j                  j5                  d| d d'	 d|j                   d(|d)    d       j)                  t7        |j                                j                  j                  j5                  d*|d)    d+|         j                  j                  j5                  d*|d)    d,|        O j                  j                  j=                  d0| d1       z |d
k(  rRsej>                  sX|jA                  d2       t3                 j                  j                  j                  d| d d3	 d4|j                   d5	       yt7        j                        jC                  dd6      }d7|j                   d8}d9djE                         d:| d;}|d<z   tG        d<jE                  |      d=      z   d<z   tG        |d=      z   |_        d&|j*                  _        |j1                           j                  j                  j5                  d| d d>	 d4|j                   d	       t3                yt        |t         j                        rEt         j                   jI                  d?d@|gdAdBgg dCgdD      }|D ]  }|jA                  d2        t3                y# t8        $ r6} j                  j;                  d| d d-|d)    d.| d/       Y d}~wd}~ww xY w)Hu  
        Обработка пост-функций (действий) перехода
        Конвертация в bzPython код

        Действия для начального перехода создаются при помощи
        триггера автоматизации crud (CmfAutomationCrudTrigger),
        так как на текущий момент в бизнес-процессах нет возможности
        настраивать начальный переход.
        Nc                 0   ddddddddddd	dd
ddd}|j                  |       }|st        d|  d      |d   }|d   } d| }d}| dk(  rn|r|dk(  r	|dz  }d}n'j                  |      }j                  |dd      \  }	}
|	st        d| d|       |d|	j                   z  }d|	j
                   d}n| dk(  r'|s|dz  }d}nj                  |      \  }}|d| z  }n| d	k(  r|r|dk(  r|dz  }d}nj                  j                  j                  j                   d| }t        j                  j                  |      }|st        d| d      |d|j                   z  }d|j
                   d}nd| d}d | d!|  d"| d#}||fS )$uZ   
            Пост-функция "Обновить Поле Задачи"
               ИсполнительrP   )r   r   u   Описаниеr      ПриоритетrO      Решениеr   u   Темаr   )rR   r   rO   r   r   
   Поле 'r  r   u   # Поле Nz-1u    будет очищеноFr  r      Пользователь '   ' не найден: u    в rV  u    в Обычныйr   r/  r(  u   Резолюция 'r  z            z
            self.z = z
            )rY   r8   r  r  r   rM   _get_cached_priorityr4   r=  r>  rW   CmfResolution)r   field_valuer>   	field_map
field_datafield_titlecode_commentr   	user_datarR  _priority_nameresolution_ext_idr   r  r"   s                  r#   update_issue_fieldzLJiraAPIImport._process_transition_post_functions.<locals>.update_issue_field  s@   
 '?V);VL&:JO(8,O%/@I #z2J*ZL8[ \]]$W-K#F+J(6LE]*"kT&9 $@@L E $ = =k JI $ 4 4YuUZ 4 [IFA!'*D[MQfgpfq(rss d6;;-$88L}A.Ez)" $88LE+/+D+D[+Q(E= d=/$::L|+"kT&9 $@@L E+/??+A+A+H+H+T+T*UUWXcWd(e%!'!5!5!9!9AR!9!SJ%'*>{mK`(abb d:??*;$<<L
02EK=*N S (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                     j                  |       }j                  |dd      \  }}|st        d|  d|       d}d|j                   d|j                   d}||fS )	NFr  r  r  u   НаблюдателиuR               # Добавить в наблюдатели пользователя z1
            person = models.CmfPerson.get(code='z:')
            self.spectators.append(person)
            )r  r  r8   r   rM   )r  r>   r  rR  r  r  r  r"   s          r#   add_to_watcherszIJiraAPIImport._process_transition_post_functions.<locals>.add_to_watchers  s    55h?I,,YuU,SIFA"<XJF[\e[f ghh2KSSYS^S^R_ `117 >I
 k))r%   u&   Обновить Поле Задачи)r   r  u   Назначить автораuC   Добавить в наблюдатели пользователя)zCcom.atlassian.jira.workflow.function.issue.UpdateIssueFieldFunctionzCcom.atlassian.jira.workflow.function.issue.AssignToReporterFunctionzGcom.aeroflot.jira.agreement.workflow.function.AddToWatchersPostFunctioninitialu!   начальный переходz	::initialTr  r  uA   Начальный переход бизнес-процесса 'rV  uX   Действия начального перехода в бизнес-процессе r  r  r  
after_save)	r   r   rM  crud_action	eval_typer  r4   rZ  r7  r  r  u(   . Пользователь удалил r  r  u*   . Пользователь изменил r  r3   )startr  r  r/  eval)rM  rN   r  r8  rp  r4   rZ  r7  Fu   . Добавлено rU  r   u   Действие 'r  r  u7   . Не удалось создать действие 'r  zERR-0126u   Пост-функция 'r  rJ  u   . Удален  'uY   ', так как начальный переход не содержит действийz\'zif self.workflow.code == 'z':u3   cmf_alert(f'В задаче "{self.code}" поля uC    заполнены автоматически триггером "z"')
z    u   . Добавлен rp  r1  rM   r  r  r  r  r   r/   )%rW   CmfAutomationCrudTriggerr   r  r7  rY   r   rM   r4   r  re   r  rZ  r  r   rU  CmfTransActionr  r   r  r   r  r  r  rA  r7   r  r-   r8   r;   r  is_newrS  replacer   r   r   )r"   post_functionsrp  r8  r  r  r  post_function_mapr  action_verbose_nametrigger_ext_idtriggerfield_titlesaction_eval_codesaction_codesr#  post_function_datapost_function_nameactionr  r  action_ext_idtrans_actionr  trigger_nametrigger_condition_codetrigger_alert_codetrans_actionss   `                           r#   "_process_transition_post_functionsz0JiraAPIImport._process_transition_post_functions  s<   :	*x	*	*" A/T
 :/T
 ^,X
 "AO"("A"A"N"N"T"T"V (0	:N5599% $! : G  99\]e]j]j\kklm99Ar(--Z $- (* $#$() :  ""&&..28*B>O P==P<QQRSZR[ \`a
 ,,&&..28*B>O P??R>SSTU\T] ^`a
 5L "
FOO4 00ACO"("7"7"D"D"J"J"LL'0q'I J	#C#!3L!A&**+=>FB-@VK-@-VCU-V*I{ &y 1I!Y.$((5)00;#J@+5+<+<*=Ru(E'-'<'<'@'@#0,0 -$ (A (  ,+1+@+@/8+1,0)1+5+/??04'4 ,A 	,L (33 OO22::">xj?J[ \II\H]]^_k^l ml!m
 ".!=!= OO22::">xj?J[ \KK^J__`am`n ol!m CHL44?5>L2(--/&L OO2277">xj?J[ \66I5J!#/#4#4"5S8H!K
 %++C0A0A,BCOO**//,VF^,<HEWDXY OO**//,VF^,<LT &&,,/0B/CCfgQJ	X "$~~NNDN9LOO**226xj?BS T((;'<Bw||n Mqr
 w||,44S%@L'A(--PR%S"I$))T`JaIb cVVbUccgi 
 '#45w?@  +W5	6  .3G*LLNOO""''.xj?:K L$$7#87<<.K" 	 
FOO4"1166!3
3X|4.
 !% 7 M !. ;##T#:; 	y ! OO--6xj?BS TPPVW]P^O__bcfbgi" s   !H,W==	X<+X77X<c           
        	 | j                   j                  j                  j                   d|j                   }| d|d    }t        j
                  j                  ||ddg      }|s#t        j                  ||| j                   d      }|j                  sB| j                   j                  j                  d|j                   d	|j                   d
       |S |d   |_
        |d   |_        |d   D cg c]  }||   	 c}|_        ||d      |_        |j                  d      rK|d   	t        t        	fd| j!                  d            d      }	 | j#                  |      |_        d|_        |j+                  d       |S c c}w #  | j                   j)                  d	 d|j                   d|j                   ddd|       Y ZxY w)uS   
        Обработка перехода бизнес-процесса
        r/  r   r8  r7  )r7  r8  r   Tr8  r7  r4   rZ     Переход '$   ' в бизнес-процессе ';   ' был изменен и не будет обновленr   r   fromtofieldscreenc                 P    t        | j                  d            t              k(  S r  r-   rY   screen	screen_ids    r#   r   z3JiraAPIImport._process_transition.<locals>.<lambda>  s    s6::d+;'<I'N r%   screensN7   Не удалось установить экран ID     для перехода '!   ' бизнес-процесса 'rV  ERR-0122	CmfUiFormr  r<   r:  )r4   r=  r>  r   rW   rU  rY   rZ  re   r  r   r   rV  rX  r   r   r  _process_transition_screencmf_ui_formtrans_form_showr;   rA  )
r"   transition_datastepsr8  rl  rn  rp  rV  screen_datar  s
            @r#   _process_transitionz!JiraAPIImport._process_transition  s    #oo44;;GGH8;;-X/0?43H2IJ__(($ ) 

 !(?? $	 ) J ))OO""**":??"33WX`XeXeWf gL MD ; .f5JO-m<JO $36#:& k"&J" $))>#?J ""=1+M:	"N((3 
-1-L-L[-YJ*15J. OOO-7&"OO--QR[Q\ ]44>OO3DDefnfsfsettuw"!,$ . s   7FF ?Gc           
      t  89: d ::fd8:fd989fd}i }d }d }d }i }t        |d         j                  d      }t        j                  j	                  d      }	|d	   d
   }
|
D ]$  }t        j                  |d         }| j                  j                  j                  j                   d| }t        j                  j	                  dd|gdg      }|s,t        j                  ||	| j                        }|d   |_
        |j	                  dd      |_        |j                  d       |j	                  d      r|}|}|}nB|d   }|D ]8  }d| j                  j                  j                  j                   d| d}|||<   : |d   }| j                  |d         D ]7  }|d   |vr|d   D ]%  }|d   d   |d<   | j                  ||      ||d   <   ' 9 t        j                  j!                  dd|gg dgd g      D ]J  }t        j                  j	                  d d|j"                  gdd|gg d!g"      s9|j%                  d#       L |j'                          	 t)        j*                  d$|j                   d%d&      }|j                  |      }|j-                         st/        d'|j                   d(      t1        |d)      5 }|j3                         }d d d        t5        d*      }|st7        d+      t9               }i }i }t;        |j=                  d,      d-      D ]B  \  }}|d   } |j?                  dd.i/      jA                  d0      }!||!   }|d1z  |_!        |j=                  d2|  d3      |j=                  d4|  d3      |j=                  d5|  d3      |j=                  d6      d7}"|"jE                         D ]O  \  }#}$|$D ]E  }%|#d8k(  r|%}&n|%jG                  d9      }& || |&|#      ||&d   <   |#d:k(  rd;|_!        9|#d<k(  s?d|_$        G Q |j=                  d=      D ](  }&|jK                  |&d   g       }'|'jM                  |        * |j                  d>       ||| <   E |jE                         D ]L  \  }(}'|j	                  |(      })|)s/| j                  jO                  d?|j                   d@|( dA|B       H|'|)dC<   N |s$t7        dDtQ        |       dEtQ        |       dF      | j                  jS                  dGtQ        |       dHtT        jV                         |jY                         D ]N  }*|*dI   d:k(  rd:}+n*| j[                  |*||      }+| j]                  |*dJ   |+|K       | j_                  |*dL   |+|K       P ' |d	   d   }-| j                  j                  j                  j                   d|d	   d    }.t        j`                  j	                  dd|-gg dPddQ| j                  j                  j                  j                   dRgg"      }/|/s t        j`                  j	                  |.S      }/|d	   dT   }0|/sBt        j`                  j	                  dU      }1t        ja                  |1| j                  dV      }/|/jb                  r|-|/_
        |0j	                  dd      |/_        ||/_2        ||/_3        ||/_4        g }2|d	   d   }|D ]  }d| j                  j                  j                  j                   d|d    d}t        jj                  j	                  ddQdW| dWg"      }3|2jM                  |3       |dX   r|3|/_6        |dY   s|3|/_7         |2|/_8        |.|/_9        |0|/_:        |/j                  d       n3| j                  jv                  jy                  dZ|/j                   d[       g }4|jE                         D ]  \  }5}t        jj                  j	                  ddQdW|5 dWg"      }3t        jz                  j	                  d\d|3gd]d|/gg"      }6|6ru|6jb                  si| j                  jv                  jy                  d^|/j                   d_|6j|                   d`|3j                   da       |4jM                  |6j|                         |6st        jz                  j	                  d\d|3gd]d|/gg dbg dPgdc      }6|6rj| j                  jv                  jy                  d^|/j                   d_|6j|                   d`|3j                   dd       |4jM                  |6j|                         jt        j{                  de|3|/| j                  f      }6||6_?        |6j                  d       |4jM                  |6j|                          t        jz                  j!                  dgdh|4gd]d|/gg dPgdc      }7|7D ]  }6|6j%                  di        t                |/S # 1 sw Y   
xY w# t6        $ r9},| j                  jO                  dM|j                   dN|, dO|B       Y d },~,	d },~,ww xY w)jNc                     t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } | j                         S )ul   
            Преобразует строку в snake_case из любого формата
            z[\.\-\s]r  z([a-z0-9])([A-Z])z\1_\2z([A-Z])([A-Z][a-z]))r  r  r  )arg_names    r#   to_snake_casez7JiraAPIImport._process_wf_scheme.<locals>.to_snake_case  sI     vvk39Hvv2HhGHvv4hIH>>##r%   c                     g }| j                  d      D ]I  }i }|j                  d      D ]   } |d         }|j                         ||<   " |j                  |       K |S )Nz$restrict-to > conditions > conditionargr   selectr  get_textr   )r  r  r  r  r   r  r  s         r#   _get_action_conditionsz@JiraAPIImport._process_wf_scheme.<locals>._get_action_conditions  sz    J#]]6 2	 "$$--e4 >C,S[9H/2||~N8,> !!.12 r%   c                     g }| j                  d      D ]I  }i }|j                  d      D ]   } |d         }|j                         ||<   " |j                  |       K |S )Nz:results > unconditional-result > post-functions > functionr   r   r!  )r  r  functionfunction_datar   r  r  s         r#   _get_action_post_functionszDJiraAPIImport._process_wf_scheme.<locals>._get_action_post_functions  sz    N"MML 5 !##,,U3 =C,S[9H.1llnM(+= %%m45 "!r%   c                 ,   |dk(  r| g}|j                  d      d   d   }ng }| }|j                  ddi      }|j                  ddi      }|d	   ||d   |r|j                  d
      nd|||r|j                  d
      nd |       	|      d	}|S )u  
            Формирует данные перехода для дальнейшей обработки

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

            Returns:
                dict: данные перехода
            ordinaryzresults > unconditional-resultr   stepr   zjira.descriptionr  zjira.fieldscreen.idr   Tr  r   N)	r   r>  r   r   r  r  r  r  r  )r"  findr#  )
step_idr  action_type
from_stepsto_stepr   r  r  r$  r(  s
           r#   _get_transitionz9JiraAPIImport._process_wf_scheme.<locals>._get_transition  s     j(%Y
 --(HI!LVT
! ++V5G,H+IK63H*IJITl#vCN{33$3?TV"AJy111=PT4V<"<V"D
O #"r%   project_dir	workflowsr0  rL   jira_workflow_schememappingsr   rG  r7  r1  r  r7  r3  r4   r   r   Tr:  defaultr5  r/  r   rb  r%  r&  r   r8  r*  r  r+  r9  r.  r;  	workflow_.xmlreplace_spacesu,   XML файл бизнес-процесса 'u   ' не найденrxmlur   Не удалось получить список переходов между статусами в виде XMLzsteps > stepr3   zjira.status.idr  r,    z4initial-actions > action unconditional-result[step="z"]z3global-actions > action unconditional-result[step="z3common-actions > action unconditional-result[step="zactions > action)r  rC  commonr*  r*  r  r  r   rC  zactions > common-actionrD  u7   В XML разметке бизнес-процесса 'u%   ' не найден common-action ID zERR-0121rK  r  u   Из XML получено u    статусов и u'    переходов между нимиu   Настраиваем u1    переходов между статусамиr>  r  )rp  r8  r  u   Не удалось импортировать переходы между статусами для бизнес-процесса «u   »: ERR-0067r  r  r  r(  r  rH  )r3  r4   rZ  r  defaultIssueTypesubTask*   Схема бизнес-процесса '[   ' была изменена после импорта и не будет обновленаrN   rI  -   В схеме бизнес-процесса '   ' правило )    для логического типа 'j   ' было изменено или добавлено вручную и не будет обновленоr  r1  Tr  V   ' было удалено вручную и не будет восстановленоr  rM  rN   rI  r4   rM   r  rJ  )Ar   rr   rW   rO  rY   r   short_str_encr4   r=  r>  r   r   rA  _get_statuses_for_projectrQ  rR  r   r+  rS  rT  r   safe_filenamers   FileNotFoundErrorrt   rj  r   r8   r   r  r"  r-  r#  ordernor   find_parentrW  
setdefaultr   r;   r   r5   rc   r  r   r  r  r  rY  rZ  rZ  r[  default_epic_workflowr]  default_task_logic_typedefault_subtask_logic_typestrict_task_logic_typer7  rh  re   r  r\  rM   rL  r7   );r"   project_infor2  r_  default_wf_for_taskdefault_wf_for_subtaskdefault_wf_for_epicall_statusesworkflows_dirre  rf  rg  workflow_name_hashrh  r8  ri  rj  rk  rd  rc  jira_statusr   workflow_filenameworkflow_filerz   workflow_xmlr?  
jira_stepsjira_transitionscommon_transitionsorderr+  r.  jira_status_idaction_typesr/  step_actionsstep_actionr  r0  	action_idr  jira_transitionrp  r  wf_scheme_namewf_scheme_ext_id	wf_schemewf_scheme_infor3  rX  rN   current_rulesrx  rw  rules_for_deletionr$  r(  r  s;                                                           @@@r#   _process_wf_schemez JiraAPIImport._process_wf_scheme  s)   	$		" 	#D 	"!%" \-89BB;O((,,2J,K%&<=jI+ \	DM!,!:!:=;P!Q!%!7!7!>!>!J!J K:VhUijO))-- #7 z . H !--_{gkgvgv-w -f 5)--mR@HMMMdM+  +&.#&.#)1&!.|!<%3 <M*,T__-C-C-J-J-V-V,WWYZgYhhj(k%3;I/0<
 (5K"<<UYHZ<[ a
d#;6#-j#9 aK4?@P4QRW4XK 016:6I6I+W_6`LT!23a	a !**//T88TVl7m8E 0 H * ''++]D&J\J\4]5?x4PRh4j+ kD)* ((*mD$+$9$9d3#'%! !. 6 67H I$++-+.Z[c[h[hZii|,}~~-- ,#$668L, $L%8#  %Y  Z  Z!V
#% %'"#,SZZ-G#K 11KE4"4jG%)YYf>N5OY%P%Y%Y`d%Y%eN).9F%*T\FN
 $'::RSZR[[]^$ #&**QRYQZZ\]# #&**QRYQZZ\]# %)KK0B$C$L  6B5G5G5I E1\+7 EK*j8)4)4)@)@)J=L ' & +>,VD\:  +i712!,!8@D =#EE* #'++.G"H 3%7%B%B6$<QS%T
"))'23 KK$K/*0Jw'c11h .@-E-E-G 
9)Iz&6&:&:9&EO*11UV^VcVcUd eBBKN& (	 2  !.8OF+
9 "#&@Z@QQfgjk{g|f}  ~e  %f  g  g##&=cBR>S=T  UF  %G  IP  IU  IU  V'7'>'>'@ O&v.);%.
%)%=%=+&$&
 ;;+L9'1%- <  ;;'(89#-!) < !K\	D~ &&<=fE"oo44;;GGH<XnKoptKuJvw
 &&**n-*6doo&<&<&C&C&O&O%PPS#TU + 
	 **..6F.GI%&<=fE))--3D-EH**!?? $ + I $$+IN+//rBIN.AI+1GI..AI+%'"&'=>|LK) 	F
&()?)?)F)F)R)R(SSUV`aeVfUggi$j!#0044$f2C1DA.FG 5 
 '--j9018BI5i(;EI8	F 0FI,/I(6I%NNtN,OO""**<Y^^<L M8 9 +4??+< ,	,'x,,006QO`NaabKc8d0eJ))--!3
3 #y1 . D D00&&..CINNCS T&&*ii[0YZdZiZiYj k@
 $$TYY/--11%sJ7$c9522	 %) 2  OO**22G	GW X**.))4]^h^m^m]n oop
 "((3--#,)'#	 .  $,D II$I'  +Y,	,^ $3388=1c9-*
 ! 9 
 ' 	/DKKK.	/ 	{, ,F  D))  -r  s{  s@  s@  rA  AE  FG  EH  +I*4( * D DDs9   $A+g5g( D.g5E>g5(g2	-g55	h7>.h22h7c                     d}t        d      5  	 | j                  j                         rn,|j                         }|dk(  rn|| j	                  ||      z  }Gd d d        |j                  |       y # 1 sw Y   xY w)Nr   Finit_views_and_dsDONE)r   r4   r6   rY   _process_issueput)r"   issue_queueissue_queue_errorsr  rz  r"  s         r#   _process_issue_threadz#JiraAPIImport._process_issue_threadD  s|    51 	>??,,.#)F?$--eW== 	> 	v&	> 	>s   A	A22A;u   Обработка теговc           	         ddl m} t               }| j                  |d         \  }}| j	                  |d   |      D ]J  }| j
                  j                         r y |d   j                  d      s4|j                  |d   d         }L |D ]  }|j                  dd      j                  d	d
      } ||dd      }	 dddd| dgdd|gddd| dgg}	t        j                  j                  |	      }
|
s(t        j                  |      }
|
j                  d       t                 y # t        $ r8}t                | j
                  j!                  d| d| dd       Y d }~d }~ww xY w)Nr   translitr   r  r   labelsr  r  r  r   ruTlanguage_codereversedr  aliasr  rJ  "%r   r.  r   r:  u*   Не удалось создать тег r  zERR-0134CmfTagr  )transliterater  r  _count_project_tasksr  r4   r6   rY   unionr  rW   r  rA  r7   r8   r9   r;   )r"   rY  r  tagstotal_tasksr  r"  tag_name
name_aliasrD  tag_objr  s               r#   _process_tagszJiraAPIImport._process_tagsP  s   *u22<3EFQ++L,>k+R 	=E((*X""8,zz%/(";<		=  	H''S199#rBH!($NJ#W(2.>?"GX6#W*R.@AC !--++7+;$mmm:GLLTL2	  ))@
"QCP)% *  s   >A+D,,	E-5.E((E-u)   Обработка приоритетовc           	         | j                   j                  j                  j                   d|d    }t        j                  j                  dd| dg      }i }d }| j                  d      D ]8  }|d   |d	   vr|j                  d
      }|d   D ]  }|d   }|d   }	|||	<     n |D ]  }
t        j                  j                  d|
ddg      }|s%t        j                  ddd|
| j                   d      }|j                  s*| j                   j                  j                  d| d       ||_        d|xs di|_        |j                  s|j                  d        y )Nr/  r   r7  r  r  r.  priority_schemesr   projectKeysdefaultOptionId
prioritiesr   rO   choicesr8  r^  r  T)r  r   orig_captionr2  r4   rZ  u"   Конфигурация поля ue    была изменена. Изменения из импорта не будут примененыr   _NONE_r:  )r4   r=  r>  rW   CmfCustFieldConfr   r  rY   CmfCustFieldConfFieldrZ  re   r  r  r8  r  rA  )r"   rY  cust_field_conf_ext_idcust_field_confsr  
default_idpriority_schemerO   r  priority_idcust_field_confcust_field_conf_fields               r#   _process_prioritiesz!JiraAPIImport._process_prioritiesp  s   $(OO$:$:$A$A$M$M#NbQ]^bQcPd!e!2277'VlUmmnSo?p7q
  $//0BC 	OE"/-*HH(,,->?J+L9 5 ( 0&tn'4$5 	  0 	=O$*$@$@$D$D& %E %! )(.(D(D0#!5*#$( )E )% )88&&..89N8O P` a ,3!)-4j6LH,M!)$//%**t*<7	=r%   u5   Обработка решений(резолюций)c           
         | j                  d      D ]5  }| j                  j                         r y |d   }|j                  d      xs |d   }| j                  j                  j                  j
                   d| }t        j                  j                  |      }|s#t        j                  || j                  |d      }|j                  r+||_	        |d	   |_
        ||_        |j                  d
       n/| j                  j                  j                  d| d| d| d       | j                  xj                  dz  c_        8 y )Nresolutionsr   r'  r   r/  r(  T)r7  r4   rh  rZ  r   r:  u   Резолюция 
 (Jira ID rU  ug   ') была изменена. Изменения из импорта не будут примененыr3   )r  r4   r6   rY   r=  r>  rW   r  rZ  r   r   rh  rA  re   r  r  )r"   r   resolution_idresolution_namer  resolution_objs         r#   _process_resolutionsz"JiraAPIImport._process_resolutions  sK   **=9 	7J((*&t,M(nn-?@VJvDVO#'??#9#9#@#@#L#L"MRP] _#1155=N5ON!!'!5!5,#$.$(	 "6 " --&5#&0&?#1;.###5&&..).)9 :  -c/1B C`a OO11Q619	7r%   u   Импорт фильтров
is_processc                 &    |s& j                   j                  j                  d       y  fd}t        j                         }d} j                  d      D ]  } j                   j                         r y |d   }|d   } j                   j                  j                  j                   d| }t        j                  j                  |g d	      }	|	s"t        j                   j                   |d
      }	|	j                  r	 ||	_        |j                  d      |	_        |j                  di       j                   j                        r( j!                  |d    j                     |	      |	_        d}
d}t%               }t%               }|d   D ]n  } |||	      }|s|dk(  rd}
d} j&                  j(                  r|j+                  |       A|d   r|j+                  |       X|d   s^|j+                  |       p |j                  dg       D ]  } |||	      }|s|j+                  |       ! t-        |      |	_        t-        |      |	_        t3        d ||z  D              }|rd}
d}|
|	_        ||	_        ||	_        |	j;                  d
       t=                n/ j                   j                  j                  d!|	 d"| d#| d$       |dz  } t        j                         |z
  }||z  } j                   j                  jG                  d%|d&d'| d(|d)d*tI        |d+z         d,	       y # t>        $ rP}tA                 xjB                  dz  c_!         j                   jE                  d| d| d| dd        Y d }~d }~ww xY w)-Nu.   Импорт фильтров отключенc                    d}	 | d   }|dk(  rx| d   d   }dj                   j                  j                  j                   d| d}t        j                  j                  dddd	| d	gdd|gg
      }|set        d| d      |dk(  r| d   d   }| d   d   }| d   d   }j                   j                  j                  j                   d| }	t        j                  j                  ddd|	 dg
      }|sj                   j                  j                  d| d| d       	 |S |dk(  r| j                  di       j                  j                        r{| d   j                     }
| d   j                  d      }| d   j                  d      }	 j                  |
      }j                  |dd      \  }}|st        d|xs | d|
 d      |dk(  rd}|S # t        $ r}t        | d      d}~ww xY w# t        $ rN}xj                  dz  c_        j                   j                  d |j                   d!| d"|#       Y d}~|S d}~ww xY w)$u  
            Получает объект (группу, проект, пользователь), которому
            необходимо предоставить доступ к фильтру

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

            Returns:
                _type_: _description_
            Nr>  r  r   r/  r  r7  r  r  r.  u"   Не найдена группа 'rV  r  r   r   r  r  r  u~   Не удалось добавить разрешение на доступ к фильтру. Не найден проект rU  u=   '. Возможно он еще не импортированr  r   H   . Возможно пользователь был удален в Jira.Fr  u,   Не найден пользователь 'rd  rf  loggedinr3   u_   Не удалось добавить разрешение на доступ к фильтру 'r  zERR-0129r  r<   )r4   r=  r>  rW   r  rY   r8   
CmfProjectre   r  rU   r  r  r:   r;   r   )share_permissiontask_filtershareeshare_permission_type
group_namer  rb  r   project_nameproject_ext_idrU   	user_nameuser_display_namer  r  r  r"   s                   r#   _get_shareez3JiraAPIImport._process_filters.<locals>._get_sharee  s    F?(8(@%(G3!1'!:6!BJ%'(>(>(E(E(Q(Q'RRTU_T``b#cL#2266 %w!L>0CD#Wj9  7 F "'@AN  +i7!1)!<T!BJ"29"=e"DK#3I#>v#FL(,(>(>(E(E(Q(Q'RRTU_T`%aN#..22 (&C7Gs2KL 3 F "..66>>I]#l^ \YZP ME *V3(,,VR8<<T]]K/7FH 0 8 < <V DI(8(@(D(D](S%$($A$A($K	
 !% 4 4!$$ !5 !IFA
 "'  ) >->?s8*AO  +j8'F M5 % '"e#kl "  1$))**5*:*:);3seE)#	 *   MsD   D#G> +A*G> G '6G> 	G;(G66G;;G> >	IAIIr   filtersr   r   r/  r   rZ  rh  r7  r   Tr4   r7  rZ  r   ownerrK  privatesharePermissionsr  readonlyrA  editvieweditPermissionsc              3   P   K   | ]  }t        |t        j                           y wr   )r   rW   r  ).0r<   s     r#   	<genexpr>z1JiraAPIImport._process_filters.<locals>.<genexpr>_	  s%      & #3(9(9:&s   $&fullr:  r3   u0   Ошибка обработки фильтра 'z' (ID: z). zERR-0130CmfBqlFilterr     Фильтр r  rU  uc   ') был изменен. Изменения из импорта не будут примененыu4   Импорт фильтров выполнен за .3fu
    сек.: r  .2fu   /с | ~<   u   /мин))%r4   re   r  time	monotonicr  r6   r=  r>  rW   r  rY   rZ  r   r   rU   rM  r   r  rG   rV   r  r   rO  	executorsanyperm_policy
view_scoperh  rA  r7   r8   r9   r:   r;   r  int)r"   r  r  t1filter_countfilter_data	filter_idfilter_namer  r  r  r  rO  r  r  r  edit_permissionhas_projectr  t2
proc_speeds   `                    r#   _process_filterszJiraAPIImport._process_filters  s   OO""**+[\O	b ^^++I6 ^	K((*#D)I%f-K#55<<HHII;WM --11$ 2 K $11#($( 2 
 **B'2K$'2}'EK$"w377F040@0@'0? + 1A 1- #,K!*J!$J #I
 -88J,K 7(!,-={!K%$!Z/*4K)1J$99??&NN62/7 )f 5!1&!9 *v 67" ,7??;Lb+Q 2!,_k!J!%MM&12
 .2*-=K*,0OK)"% &#-	#9& #K #&,%-
.9K+-7K*2=K/$$$6L &&..#K=
9+S V` a AL}^	@ ^^"!B&
##B2c(*nBz#.gc*r/6J5K8U	
# !  NOOq(OOO--J;-W^_h^iilmplqr#-!/ .  s'   C*L7/3L7#A?L77	N ANNc                 *   |d   }|d   }| j                   j                  d| d| dd       | j                   j                  j                  j                   d| }t        j
                  j                  |d	d
g      }|s*t        j
                  j                  dd|gg dgd	d
g      }|sDt        j                  ||| j                   d      }| j                   j                  d| dd       |j                   ro|j                  r1||_        |j                  d      |_	        |j                  d       |S | j                   j                  d| dt        j                  d       |S |j                  s||_        |j                  d       |S )u   
        Обрабатывает проектную роль

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

        Returns:
            CmfProjectRole: проектная роль
        r   r   u0   Обработка проектной роли 'rd  rf  T	anonymousr/  r7  r4   r  r  )r7  r1  Nr  r   r7  r4   rZ  u7   Создана новая проектная роль 'rV  r   r:  u   Проектная роль u_    была изменена. Новые данные из импорта не примененыrh   r  )r4   r5   r=  r>  rW   r  rY   rZ  r   r   rA  rc   r  r7  )r"   	role_data	role_namerole_idr  project_roles         r#   _process_project_rolez#JiraAPIImport._process_project_role	  s    f%	D/>ykWIUVW 	 	
 //66BBC2gYO,,00l+ 1 
 !0044Wi0) !,/ 5 L !00"?? $	 1 L OOI)TUV   
 ""++$-!$-MM-$@!!!d!3  ##2<. AZ [!//"	 $  	 $$"-L$/r%   c                 ,   t         j                  j                  ||dg      }|r_|s]|j                  r|j	                  d       t                y	| j                  j                  d| d| dt        j                  d       y	|sy	| j                  j                  d
| d|        g }|D ]
  }|d   }|d   }| j                  j                  d| d| d|        |dk(  rI| j                  j                  r|d   d   n|d   }		 | j                  |	d      }
|j                  |
       |dk(  rL| j                  j                  r|d   d   }|d   d   }n|d   x}}d| j                  j"                  j"                  j$                   d| d}t         j&                  j                  d d!d"| d"gd g#      }|s%t         j&                  j                  dd$|gd g#      }|r\|j(                  s||_        n#||j(                  vr|j(                   | |_        |j+                  d%       |j                  |       | j                  j                  d&| d| d| d'd|       | xj                   dz  c_        | j                  j                  d(| d)| d*|       | xj                   dz  c_         |sy	|s#t         j                  ||| j                  d+      }||_        |j+                  d%       t                | j                  j                  d,| d| d-t/        |j,                         d.       y	# t        $ rJ}| j                  j                  d| d|	 d| d| d|       | xj                   dz  c_        Y d	}~d	}~ww xY w)/u   
        Добавляет участников в к роли в проекте

        Args:
            actors (list): список участников
            project_role (CmfProjectRole): проектная роль
            project_obj (CmfProject): проект
        members)r  r2  r   TrJ  u+   Состав участников роли u    в проекте u[    был изменен. Новые данные из импорта не примененыr  Nu6   Добавление участников к роли u    проекта r   r>  u)   Добавление участника 'z	' (type: u   ) к роли atlassian-user-role-actorr  rJ   r   raise_on_erroru?   Не удалось добавить пользователя 'rd  . zERR-0039rK  r3   zatlassian-group-role-actor
actorGroupr  r/  r7  r  r  r  r  r:  u3   Не удалось добавить группу 'u"   . Группа не найденаu<   Неподдерживаемый тип участника '': zERR-0040)r  r2  r4   rZ  u   К роли u*    добавлено участников: r  )rW   CmfProjectRoleAssignrY   rZ  rS  r7   r4   r5   rc   r  rG   rV   rM  r   r8   r;   r:   r=  r>  r  r7  rA  r  r   )r"   actorsr  project_objrole_assignr  actoractor_display_name
actor_typer  r  r  group_idr  r  r  s                   r#   _process_project_role_assignz*JiraAPIImport._process_project_role_assign	  s*    1155%; 6 

 v**""D"9  ##A, P))4 6Z[ "//" $   D\NRbcnbop	
  <	%E!&}!5vJOO;<N;O P$^L>C
 88=AYY__%,[9RWX^R_
)++GD+IDNN4( ;;99??$\29=H!&|!4V!<J,1&M9Hz!#DOO$:$:$A$A$M$M#NbQYPZZ\]--11$f,q.AB$: 2  "1155 &< (z 6 E  <<'3%U\\9*/,,~'FJJ4J0NN5)OO--./s8*N<. Y;< #' .  OOq(O))RS]R^^abgahi# * 
 1$y<	%~  55)"?? $	 6 K &T*<.(8 F88;K<O<O8P7QS 	 	
 ! )OO--./s7)>,WYZ]Y^`"'	 .  OOq(OO)s   $M  	N	?NNu0   Обработка проектных ролейc                     | j                  |      }|D ]8  }| j                  |      }|j                  dg       }| j                  |||       : y )Nr  )_get_project_rolesr  rY   r  )r"   rb  r  rolesr  r  r  s          r#   _process_project_rolesz$JiraAPIImport._process_project_roles5
  sU    ''
3 	QI55i@L]]8R0F--flKP		Qr%   project_structrY  c                 .
   t         j                  j                  dd|d   gddg      }|r|j                  j                  |d   k7  s|j
                  r[|d   |j
                  vrJ|d    d|d    d|d<   | j                  j                  j                  d|j                   d	|d           n&|j
                  s|d   |_        |j                          d
|d<   d|d<   d|d<   d|d<   | j                  |      |d<   t         j                  j                  ddd|d    dg|j                               }|s)t         j                  | j                  |d   |d   d
      }|j                  }|j                  rF|D ]  }|dk(  r	t        ||||           |j                  d      rd|_        |j                          n)| j                  j                  j                  d| d       |r7t         j"                  j%                  |      D ]  }|j'                  d
        | j)                  |d   |       | j+                          | j-                  |       | j/                  |      |_        | j3                  |      |_        | j7                  |      |_        | j;                  |       | j=                          | j>                  j@                  r{|d   }|r| jC                  |      |_"        ns| j                  jF                  jF                  jH                   d|d   d    }t         jJ                  j                  |dg       |_"        n| jM                  |      |_"        |j                  r5d|_'        d|_(        d|_)        d|_*        d|_+        |j                  d
!       | j+                          | jY                  ||       | j[                  ||       t         j\                  j                  |d"d
#      }	|	s+t         j]                  d$|d"d
%      }	|	j                  d
!       t_                | ja                  |       | j                  jc                         ry t_                | je                  ||       | j+                          | jg                  ||       t         j\                  ji                  d&d'|gg d(g)      }
|
r#d
|_5        |j                  d
*       t_                | j                  xjl                  d+z  c_6        | j+                          |S ),Nr   r*  rN   r7  r  r  rf  u   Проект с именем u8    уже существует! Переименуем в Ttask_allow_multiple_sprintsFsl_only_owner_approvesl_deny_no_approvesl_task_only_owner_closeui_form_schemer  r  )r4   r7  r   rZ  	isPrivater  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыr2  rJ  r   rY  
simplifiedr/  r5  default_release_workflowr  r:  epic)r3  r,  include_systemEpics)r   r3  r,  systemr3  r1  )has_children_archivedr1  Tr.  rD  r3   )7rW   r  rY   rN   r   r7  r4   re   r  r   rA  _process_screen_schemekeysr  rZ  r  r  r  r   rS  r   _calc_progressr  _process_permissionsproject_perm_scheme_process_security_levelssecurity_level_scheme_process_field_conf_schemecust_field_conf_schemer  _cache_prioritiesrG   rV   rz  rI  r=  r>  rY  rt  
show_lists	show_blog
show_pfeed	show_disk	show_chat_process_versions_process_componentsr<  r7   _process_tasksr6   _process_boards_process_sprintsr  r  r  )r"   r  rY  r  r  r   r  project_simplifiedru  epics_folderfolder_has_children_archiveds              r#   _process_projectzJiraAPIImport._process_project>
  sF   ''++FD.QWBX3Y4@(3K , M%%((N<,HH ''N8,DKL^L^,^,:6,B+C2nU]F^E__`)av&&&..1N{O_O_N` aLLZ[aLbKc0e f ''%3H%="  "8<45 38.//4+,5:12 ,0+F+F|+T'( ''++Hf.YaJbIccdFe3f3A3F3F3H , J ++t~^fOg1?1GY] , _K##&&% ?(?S.*=>? ,*3'OO""**4[M B\ ]
 ++;+? 3T23 	##L$6D5 +/*C*CL*Q' -1,I,I,,W) .2-L-L\-Z* 	  .  99??!-l!;!
 )-(P(PQ](^% '+oo&<&<&C&C&O&O%PPRS_`vSwx|S}R~# (.(:(:(>(>+67 )? )%
 %)$;$;L$IK!&&%*K"$)K!%*K"$)K!$)K!.|[9  {; ''++# , 

 !++'	 , L $/L)??$$& 	\;7lK8 (.'7'7'='=[14 (> (
$ (04K-t,L--2-r%   c                    dd l }|j                  dddd| j                  j                  j                   d| j                  j                   d| d| d	| d
gddt        dd      t        dd            }| j                  j                  d|j                   d| d| d       | j                  j                          |S )Nr   z/usr/bin/python3z	manage.pyshellz&plugin = models.CmfPluginJira.get(id='z(');retcode = plugin.process_issue_fork('z', 'z', r  z);Tz"/var/log/eva-import-subprocess.loga+z&/var/log/eva-import-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderr[PID u(   ] Запуск процесса (offset=z, limit=rf  )	
subprocessPopenr4   r=  r   rt   r5   pid
log_detail)r"   rb  offsetr  r2  procs         r#   _execute_taskzJiraAPIImport._execute_task
  s    "K89O9O9R9R8S T**+4
|3vhb "<dC@$G   
 	eDHH:-UV\U]]efkellmno""$r%   c                 n   ||k  rd|fgS t        j                  ||z        }t        dt        j                  ||z              }t	        |t        ||            }t        ||      }||z  }	||z  }
g }d}t        |      D ]2  }|	}||
k  r|dz  }t	        ||      }|j                  ||f       ||z  }4 |S )u  
        Рассчитывает распределение задач между процессами

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

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

        Для успешно обработанных задач удаляет файл-флаги.
        r   r  r  .dirty.meta.success).processingrN  T)
missing_okr3   rO  )r4   rq   rr   r-   rs   r   iterdiris_dirr   r  unlink)r"   rb  success_countfailed_count	tasks_dirtask_dirfile_flag_name	flag_files           r#   _get_processed_countz"JiraAPIImport._get_processed_count   s    OO557@@J
	  O335 &(==))*=>$$Z0779*E :$,$5$5n$E	!((D(9: "Q&M $$]3::< A%L& l**r%   c           
      `   |d   }d|d    d| d|d    d}t         j                  }|r%| j                  j                  j	                  d       | j                  |      \  }}|r|r&|s$| j                  j                  | d	| d
d       y |r|n|}| j                  j                         }| j                  j                  j                  | d| d| d| d       | j                  ||| j                  t         j                        }	i }
t        j                         }|	s|
r0t        |
      |k  rW|	rU|	j                  d      }|\  }}	 | j!                  |||      }||
|<   t        j(                  d       t        |
      |k  r|	rUg }|
j+                         D ]  \  }}|j-                         }||j/                  |       |dk(  r-| j                  j                  d|j&                   d| d       \| j                  j%                  d|j&                   d| d| d        |D ]  }|
|=  |
s|	rt        j(                  d       |	r,|
r0t        j                         }||z
  }t1        |d      \  }}t1        |d      \  }}| j3                  |      \  }}| j                  j                  j                  | dt5        |      ddt5        |      dd|d        | j                  j                  j                  d!| d"| d|        | j                  j                  j                  d#||z  d$d%       | j                  j                  j                  d&|        y # t"        $ r;}| j                  j%                  dj&                   d| d| d       Y d }~Dd }~ww xY w)'Nr   u   Проект 'r   rd  r  r   rf  u   Будет выполнена обработка только новых или обновленных задач. Для обработки всех задач измените значение параметра 'IMPORT_ONLY_NEW_OR_UPDATED'uU   . Нет новых/обновленных задач для обработки из u    задачTr  u   . Обработка u    из u(    задач с ограничением u,    одновременных процессаr   r1  r  uG   ] Процесс завершился с ошибкой. Ошибка: re  )r  g      ?u4   ] Процесс завершился успешноuR   ] Процесс завершился с ошибкой. Код возврата: r    r  u8   . Обработка задач завершена за 02dr7  z06.3fuE   Обработано задач (успешно/неуспешно): r  u%   Скорость обработки: r  u    задач/секu)   Всего задач в проекте: )r   IMPORT_ONLY_NEW_OR_UPDATEDr4   re   r  r  r5   r   r  rI  r   IMPORT_OBJ_CNTr  perf_counterr   popr8  r8   r;   r4  sleepr   pollr   divmodrZ  r  )r"   rY  rb  project_msgonly_new_or_updatedr  unprocessed_tasks
task_countr   pending_task_chunksactive_processesr  
task_chunkr6  r  processr  processes_to_removereturn_codeenddiffhoursrF  minutessecondssuccess_tasksfailed_taskss                              r#   r#  zJiraAPIImport._process_tasks@  s9   !$'
&|F';&<C
|2l[`NaMbbcd$??OO""**R
 *.)B)B:)N&&#,=OO-t  vA  uB  BM  N    *=&;
99;##m0F;- P++8/9eg	
 #::$$!!	
 !!#!%5&'-7<O044Q7
 !+"00VUKG0:$W- 

3 &'-7<O" #%'7'='='? #%lln*'..w7"a'++#GKK=*=qr 11#GKK=* >88C}F'1 2   / .$W-.  #6

1U "%5X !U{!$-y!)R0&*&?&?
&K#|##mS5z#aGS175/C	
 	##STaSbbcdpcqqw  yC  xD  E	
 	##&KZZ^M^`cKddv$wx##&OP[}$]^a ! OO--}Aj\ :)),/#- .  s   M) )	N-20N((N-u#   Обработка проектовc           
      6   t         j                  j                  d      j                  j                  }| j                         D ]|  }	 |d   | j                  D cg c]  }|d   	 c}vr(| j                  j                         r y |j                  di       }|r| j                  || j                           }nddd}|d   d	k(  r!t         j                  j                  d
      }nd|d   dk(  r!t         j                  j                  d      }n;|d   dk(  r!t         j                  j                  d      }nt        d|d    d      d| j                  j                  j                  j                   d|d    d|d<   |d   |j                  j                  |d   ||d   ||d   |d}| j                  ||        y c c}w # t        $ rD t!                | xj"                  dz  c_        | j                  j%                  d| dd       Y w xY w)NrK   rL   r   leadzdefault_import_jira@evateam.comdefault_import_jira)r   r   projectTypeKeybusinesszproject.base:defaultsoftwarezproject.agile:defaultservice_deskzproject.servicedesk:defaultu$   ERROR! Проекты с типом u3    временно не поддерживаютсяr/  r7  r   r   r   )r   rN   r   activitytask_code_prefixr   r7  rh  r3   u<   Не удалось импортировать проект zERR-0041r  r  )rW   rX   rY   r   r   r
  rb   r4   r6   rM  rU   r]  r8   r=  r>  r)  r9   r:   r;   )r"   r}  rY  r<   project_leadr   rN   r  s           r#   _process_projectszJiraAPIImport._process_projects  s:   %%))y)9<<BB ..0 *	ML)M%4CYCY-ZCc$i-ZZ??,,.+//; $ 0 0dmm1L MI*K)>!@I 01Z?!'!4!4!8!8>T!8!UJ!"23zA!'!4!4!8!8>U!8!VJ!"23~E!'!4!4!8!8>[!8!\J#>|L\?]>^  _R  ST T+-doo.D.D.K.K.W.W-XXZ[ghl[mZnnp)qX&(0",--"5"5(7 ((4U(;!**84'3	" %%nlCK*	M-ZH  M1$)),hiuhv*w*4| * MMs2   
GG(G-G	D9GGA	HHc                 z   |d   }|d   }|d   }d}d}d}	d}
|dk(  rod| j                   j                  j                  j                   d| d}t        j                  j                  ddd	| d	g
      }|st        d| d| d      |}n-|dk(  r|dk(  ry| j                  |d      }n|dk(  r	|}	| d| }
| j                   j                  j                  j                   d| }t        j                  j                  |g d      }|s#t        j                  ||| j                   d      }|j                  rC|d   |_
        ||_        ||_        |	|_        |
|_        |j                  d       t'                y| j                   j!                  d| d| dt"        j$                  d       t'                y)uG  
        Присваивает цвет карточке

        Args:
            card_color_data (dict): сырые данные настройки цвета карточки
            card_color_scheme (str): стратегия присвоения цвета
            board_obj (CmfKanbanBoard): доска
        r   displayValuer   NrN   r/  r7  r  r  r.  u'   Не найден тип задачи 'rd  rf  rP   
unassignedTr  rO   r  )r  rN   rP   rO   r   r  r2  r7  r4   rZ  r  r:  u&   Цвет карточки задач 'u\   ) был изменен. Новые данные из импорта не примененыr  )r4   r=  r>  rW   r]  rY   r8   rM  CmfKanbanBoardCardColorRulerZ  r  rN   rP   rO   r   rA  r5   rc   r  r7   )r"   card_color_datacard_color_scheme	board_objr   display_valuecard_color_idlogic_type_ruleresponsible_rulepriority_rule	name_rulerx  rN   card_color_rule_ext_idcard_color_rules                  r#   _process_board_card_color_rulez,JiraAPIImport._process_board_card_color_rule  s     ('7'-	,"$T__%;%;%B%B%N%N$OrRWQXXZ [,,00 &A.?-@*BC 1 J "I-X[\a[bbc dee(O-/$#//d/K*,!M 'M?3I$(OO$:$:$A$A$M$M#NbQ^P_!` <<@@) A 	
 $@@ -?? $	 A O **$3G$<O!)8O&*:O''4O$#,O   T 2 	 OO8s?J[ \V Woo	    	r%   u;   Обработка цветов карточек доскиc           	      l   |j                  d      xs i }|j                         D ]H  \  }}| j                  j                  |      }|s$|d   }|D ]  }|d   }		 | j                  |||        J y # t        $ r8}
t                | j                  j                  d|	 d|
 dd       Y d }
~
]d }
~
ww xY w)	N
strategies
cardColorsr  uI   Не удалось присвоить цвет карточки для 'r  zERR-0137r  r  )rY   r   rl   r  r8   r9   r4   r;   )r"   card_color_configr  card_colors_strategiesstrategy_typecard_colors_datar  card_colorsr  r  r  s              r#    _process_board_card_color_schemez.JiraAPIImport._process_board_card_color_scheme  s    !2!6!6|!D!J/E/K/K/M 	+M+ $ ? ? C CM R$*<8K#.  / ?77')!	 !  NOO--cdqcrruvyuz{"!> .  s   A22	B3;.B..B3u   Обработка досокc                    ddd}dddddd	d
}ddddd}t         j                  j                  d|dg      }|s$t         j                  d||d| j                        }|j                  sd|_        |j                          |d   }| j                  |      D 	]W  }	 | j                  j                         r y|d   }	|d   }
| j                  j                  j                  d|	 d|
        |d   d   }|d   }d}|d   d   }|r|d   }|d   }| j                  j                  j                  j                   d| }t         j                  j                  |g d       }|s"t         j                  | j                  |d!      }|j                  rJ||_        d"|_        d#|_        |j"                  j%                  |       ||_        |j                  d$       n/| j                  j                  j)                  d%| d&| d| d'       g }|d(   }|d)   ddd*   D ]  }|d   }|d   }| j                  j                  j                  j                   d| d| }t         j                  j                  |g d+       }|s"t         j                  | j                  |d!      }|j                  r(||_        d,|_        ||_        |j                  d$       n/| j                  j                  j)                  d-| d&| d| d.       |j%                  |        g }|d/   d0   ddd*   D ]  }|d   }|d   }| j                  j                  j                  j                   d| d| }t         j                  j                  |g d+       }|s"t         j                  | j                  |d!      }|j                  r+|d   |_        d,|_        ||_        |j                  d$       n/| j                  j                  j)                  d1| d&| d| d'       |j%                  |        | j                  j                  j                  j                   d|	 |d2<   t         j*                  j                  d2d3|d2   gd4d3|ggg d56      }|s%t         j+                  |d2   | j                  d7      }|j                  r|d   |_        ||_        ||_        |j                  |d8         |_        ||_        ||_        ||_        |j                  |d9   d	      |_        |j                  |d:   d      |_        | j<                  j                  |d;   d<      |_        d|_         |d   |_        |j                  d$       tC                n/| j                  j                  j)                  d=| d&|	 d|
 d.       | jE                  ||       tG        tI        d> |d?   d@         d      } tG        tI        dA |d?   d@   ddd*         d      }!|!rdB|!dC<   | rdD| dC<   d}"t         jJ                  jM                  |g dEF      }#|#D ]x  }$|$j&                  jN                  xs i }%|%j                  dG      }&|$j                  r|&s=|&|$jP                  k7  sM| j                  j                  j)                  dH| dI       dJ}" n g }'dK}&|d?   d@   D ]  }(	 |(d   })|(d   }*| j                  j                  j                  j                   d|) }+t         jJ                  j                  d2d3|+gd4d3|ggdLdMgdN      }$|$s5t         jK                  ||+| j                  dO      }$|$j                  d$       |'j%                  |$jR                         |$jT                  r0| j                  j                  j)                  dP|$ d&|) d|* dQ       |$j&                  jN                  xs i }%|$j                  r|*|$_        |(dR   |$_+        |(dS   |$_,        g },|(dT   D ]  }-| j                  j                  j                  j                   d|-d    }.t         jZ                  j                  |.U      }/|/s+| j                  j]                  dV|$ d&|) d|* dW|- dX|Y       |,j%                  |/        |,|$_/        |(dZ   rd[|$_0        n$|(dT   sd\|$_0        n|(j                  dCd]      |$_0        |%jc                  |(       n/| j                  j                  j)                  dP|$ d&|) d|* d.       |"r|&|$_(        |$jP                  |%dG<   |%|$_        |$j                  d$       tC                |&dKz  }& t         jJ                  jM                  d`da|'gd4d3|gg dbgdc      }1|1D ]  }(|(ji                  dd        |1r(| j                  j                  j)                  de|1        tC                | j                  xjj                  dfz  c_5        	Z y# td        $ r<}0tg                | j                  j]                  d^) d* d|0 d_|Y       Y d}0~0nd}0~0ww xY w#  tg                | j                  j]                  dg| dh|Y       Y 	xY w)iu  
        https://bcrm.carbonsoft.ru/desk/favorites/Document/DOC-007367#spec-006348-b
        https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-quickfilter-get

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

 "($"!
 	
 ''++)* , 

 !++!"'?? , L ///3L,!$'
--j9 Q	GEPG??,,. ;"6]
&&++7zJ<P  %V}X6$01B$C! %)!$V}X6&24&8O(4V(<%.2oo.D.D.K.K.W.W-XXZ[jZk+l((.(;(;(?(?3  )@ )% -,2,?,?'+#7,0 -@ -)
 )881B).8>)57?)4)44;;KH<H)9)..4.@..66<=N<O P##2"326G5H IXY (*$#/0A#B  0 =dd C AH"*4.K$,V$4M)-)?)?)F)F)R)R(SSUVaUbbdeodp&qO&,&9&9&=&=.  '> 'O +*0*=*='+#2,0 +> +
 '66/<,5?2:B7',,,>..66-o->eK=PRS`Ra b^ _ )//@9A> %'!#/0C#D^#TUYWYUY#Z ;K%0%6N'26':$-1__-C-C-J-J-V-V,WWYZhYiiklvkw*x'#)#6#6#:#:2  $; $L ('-':':'+#6,0 (; (
 $33,7,?)2</7B4$))d);..66:<. I##1"2"5E4F GXY
 &,,\:;;> &*__%;%;%B%B%N%N$OrRZQ["\h"1155!3h8!34	 6 	  ! & 5 5$X#'??(, !6 !I
 ,,%*6]IN'2I$,8I)+5>>%-+HI(2CI/2CI/5II2.C.G.G();< /I+ ,>+A+A$%:; ,I( 372Q2Q2U2U)*=>3I/ DHI@05fI-NNtN4LOO**22%i[hZr* NZ [ 556GS .2a$%67H .* -1a$%67H2N -) -9B-g6-:C.w7
 '+# & ; ; @ @$ !A ! %2 L".">">"D"D"JK%0__Y%?N(33)n@T@T.T..66LYK XS T
 /4+ #%!%*+<=oN ZFY$*4L	&,Vn+/??+A+A+H+H+T+T*UUWXaWb(c'-'B'B'F'F!)3 >!)3	 :$
 !2 -$ -1 (G 
(  ,+1+F+F'0'4+/??04	 ,G ,L )--$-?'..|/@/@A'33 OO22::"1,uYKrR]Q^ _h !i %&2&B&B&H&H&NB'770;L-4:5ML14:5ML124/*01A*B J37??3I3I3P3P3\3\2]]_`fgk`l_m0n060D0D0H0HP]0H0^'4$(OO$=$=*@eT]S^^`al`m nJJP)S(2,5	 %> %& %- 3 : := IJ @SL<  &&785> 2%+,<%=5> 2 6<ZZ5S 2'..v6 OO22::"1,uYKrR]Q^ _b !c
 /3AL0 6B5I5IK	27B4$))d);"&$.gZz (.'B'B'G'G?;!3	22
 %) (H ($ 3 9FMM4M89'OO**22]^r]st 55:5[
Q	Gh	 % $11ST]S^^`al`mmopsotu& ) 2  4G)),fglfm*n*4+ * GsX   h<9Wh<<h<>h<C2g4=h<>Fg4Bh<4	h9=1h4.h<4h99h<<-i,u#   Обработка спринтовc                    t         j                  j                  dd|gg dgddg      }t         j                  j                  d      }t	               }| j                  |d	         D ]A  }| j                  j                         r y |d
   }| j                  j                  j                  j                   d|d	    }t         j                  j                  dd|gdd|ggg dd      }	|	s#t         j                  ||| j                  d      }	|	j                  }
|	j                  rQ||	_        ||	_        |d   |	_        | j                   j"                  s5|j                  dd      r#|	xj                  d|j$                   dz  c_        |j                  d      |	_        |j                  d      |	_        ||	_        |	j,                  r|	j/                  d       |dk(  r!|	j0                  j3                  d      |	_        nK|dk(  r!|	j0                  j3                  d      |	_        n%|dk(  r |	j0                  j3                  d       |	_        |dk(  rdnd|	_        |	j,                  r|	j/                  d       t9                d!}| j                  j:                  j=                  d"|	j                   d#t?        |d$                 |d$   jA                         D ]r  \  }}|d%   }|d&   }| j                  j                  j                  j                   d| }t         jB                  j                  |g d'd(      }|rw|	jD                  jG                  |       |jH                  d k(  s|dk(  r-|jJ                  D ]  }||	k7  s	|j6                  r n d|_        nd|_        |j/                  d)       |d	   |d	   k7  rK| j                  jM                  d*|d    d+| d,| d-|d    d,|d%    d.tN        jP                  /       |d0z  }3| xjR                  d0z  c_)        | j                  jU                  d*|d    d+| d,| d1d2|	3       u |r(| j                  jU                  d*|d    d4| d5d6|	3       |	j/                  d       |dk(  r|
s t         jV                  jY                  |	7      s|	j0                  j3                  d      |	_        |	j/                  d       | j                  j:                  j=                  d8|	j                   d9       |	j[                          d|	_        |	j/                  d       t9                |j]                  t_        |	j`                               | j                  xjb                  d0z  c_1        | j                  je                  d:d;       D tg        t         j                  ji                  dd|gg d<gd=gd            |_5        |jj                  rd|_6        n4tg        t         j                  ji                  dd|gd=gd            |_6        |j/                  d       t         j                  jo                  tq        |      >       y )?Nr3  r*  )r,  r*  rB  r  r  r  zlist.agile_sprint:defaultrL   r   stater/  r7  r1  r2  )r7  r   rN   rZ  r  r8  r5  r6  r3  r   cmf_archivedT)r   r   include_archived)rN   r7  r4   rZ  r   multiprojectFr  rf  r0  r1  r:  futurer~  r   r  closedr  r   u0   Добавляем задачи в спринт r  issuesr   r  )zlists.cmf_archivedr7  cache_status_typeagile_story_pointszop_gantt_task.sched_durationzop_gantt_task.sched_workzop_gantt_task.actual_workr  )r7  r   r  rD  u   В спринт 'u5   ' не удалось добавить задачу 'rd  u   ) проекта 'u\   ). Возможно проект или задача еще не импортированы.r  r3   u$   ). Задача не найдена.zERR-0044r  uX   ' не удалось добавить задачи из других проектов: u]   . Возможно проекты или задачи еще не импортированы.zERR-0133)	task_listu   Запуск спринта "rJ  rB  rv  r  r1  T--)list_ids)9rW   r<  rY   r]  r  _get_all_sprintsr4   r6   r=  r>  r@  r  rZ  rN   r3  r   rG   rV   r~  r5  r6  rh  r  rA  r8  get_default_statusr   r  r7   re   r  r   r   r  r  r   r  listsr5   rc   r  r:   r;   CmfListHistoryOTRr  do_startr  r-   r   r  rx  r   r  r  r  recalculate_count_cacher   )r"   rY  r  sprint_foldersprint_logic_type
sprint_idsrB  sprint_stater7  
sprint_objsprint_is_newexternal_tasks_countissue_id
issue_data	issue_keyissue_projectissue_ext_idr  r  s                      r#   r%  zJiraAPIImport._process_sprints  s   ((,,k2,
 &' - 	
 #//339T3UU
++L,>? J	<F((*!'?L..55AAB"VD\NSF++sF+sK0 "&% , J( #^^0!#$(	 , 
 '--M))(9
%)6
&"(.
 yy6::ne+LOOK,H,H+I'KKO-3ZZ-D
*+1::i+@
(-3
*((OOO58+(2(;(;(N(Nv(VJ%!X-(2(;(;(N(N}(]J%!X-(2(;(;(N(Nx(XJ%2>(2J$PU
'((OOO5L#$ OO""''*Z[e[j[jZkkmnqrx  zB  sC  oD  nE  )F  G(.x(8(>(>(@ /$*&u-	 *9 5"&//"8"8"?"?"K"K!LBxjY~~))'	 &* *  &&--d3--9'83-1ZZ 9	#,
#:9CYCY$)9 59 105D-		D	1!$'=+>>OO''+F6N+; <NNW[X[\d[e f++8+@*A]SXEYDZ [tu &oo (  )A-(OOq(OOO--+F6N+; <NNW[X[\d[e f<= $.& . S/b $))'v'7 8HH\G] ^rs  *" *  OOO- ("&*B*B*H*HS]*H*^$.$7$7$J$J6$R
!D1&&++.KJOOK\\],^_##%-1
*D1LNN3z}}-.OO11Q61OO$$X{;UJ	<\ /3NN"C7/ v!%   	/
+ ..04M-04##)3> 6%) $ 1M- 	t, 	..Z8H.Ir%   c                 &    |sd}|sd}| d| d| S )Nu   Не указаноr  u    ➔ r/   )r"   r  	old_value	new_values       r#   _simple_html_diffzJiraAPIImport._simple_html_diffr  s)    -I-I"YKuYK88r%   c                 j   |dk(  ry	 | j                  |      }| j                  |dd|      \  }}|st        d|       	 |S # t        $ re}|r | j                  }| j                  rd| nd}| j
                  j                  | d| d	d
       | xj                  dz  c_        Y d}~|S d}~ww xY w)u  
        Возвращает пользователя по какому-либо идентификатору (id, имя, логин, email и др.).

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

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

        Returns:
            CmfPerson: Объект пользователя.
        unknownNFrK  ue   Пользователь с указанными данными не найден в системе: u   по умолчанию u   'Система'u;   . Будет установлен пользователь zERR-0045r   r  r3   )r  r  r8   r   r   r4   r;   r:   )	r"   r  r<   r  r  rR  r  r  
person_msgs	            r#   rM  zJiraAPIImport._get_persony  s    $ i	%009D,,T5%S,IIFA  #H  IM  HN  !O  P  P    	%..DHDYDY7x@_q
))eVWaVbc( * 
 1$	%s   9A 	B2AB--B2	dump_pathc                    |j                  d      }|j                         rJt        |d      5 }|D ]/  }t        j	                  |      }|d   |d   k(  s$|c cd d d        S  	 d d d        t        |d      5 }|j                  t        j                  |      dz          d d d        |S # 1 sw Y   GxY w# 1 sw Y   |S xY w)Ngroups.jsonr>  r   r,  r  )rr   rs   rt   ru   r  writedumps)r"   r  r  groups_pathrz   rowr<   s          r#   _dump_groupszJiraAPIImport._dump_groups  s    ((7k3' #1 #C**S/CV}F3"
	# ### +t$ 	-GGDJJu%t+,	-# #	-s#   &B*B*"B*8(B6*B36C c                    	 | j                  |      S # t        $ r% 	 |j                  d      }|j                         r`t	        |d      5 }|D ]8  }t
        j                  |      }||| j                     k(  s+|c cd d d        cY S  	 d d d        n# 1 sw Y   nxY w| j                  j                  |      }|rMt	        |d      5 }|j                  t
        j                  |      dz          d d d        n# 1 sw Y   nxY w|cY S Y y #  | j                  j                  d| t        j                         Y Y y xY ww xY w)N
users.jsonr>  r,  r  uM   Неудалось сдампить пользователя по ключу r  )r  r8   rr   rs   rt   ru   r  rU   rG   get_user_infor  r  r4   r5   rc   r  )r"   r  r  
users_pathrz   r  r<   r  s           r#   _get_user_infozJiraAPIImport._get_user_info  sG   	V0099 	VV&//=
$$&j#. +!#$ +C"&**S/C&#dmm*<<'*
	+ +++ + + !II33G<	j$/ =1

9 5t ;<= = =$$ V##&st{s|$}  FM  FU  FU#  V!	Vsn    
E-D-B9B<	DEB
	DB	0D(C90	D9D	>DE0D>;E>Eu,   Обработка журнала работr"  c                 2   | j                   j                  j                  d       d|d    d|d   d    d}| j                  |      D ]  }t	               }d|d	<   | j                   |d
<   |j                  di       j                  | j                        r.| j                  |d   | j                     |      |d<   |d   |d<   |j                  di       j                  | j                        r&| j                  |d   | j                     |      |d<   ||d<   |d   |d<   |d   dz  |d<   |j                  dd      |d<   | j                   j                  j                  j                   d|d    |d<   ||d<   d|d<   t        j                  j                  |d          }|r_t        j                  d$i |}|j                  j                  t        j                  |j                   j                  !      z   |_        |j%                  d"#        y )%Nu*   Загружаем журнал работu%   Журнал работ задачи r   rI  r   r   rJ  r  r   r4   r   rK  r   r   updateAuthorcmf_modified_byr2  started
start_datetimeSpentSecondsr  
time_spentcommentr   r   r/  r   r7  rh  r   remaining_estimater(  )rr  Tr:  r/   )r4   re   r  _get_issue_worklogsr   rY   rU   rM  r=  r>  rW   CmfTimeTrackerHistoryr!  r   datetime	timedeltar#  end_daterA  )r"   r  r"  r<   worklogtimetracker_historyhistorys          r#   _process_issue_worklogz$JiraAPIImport._process_issue_worklog  s0   ##$PQ5eEl^4hXaHbGccef//6 	/G"&&,4)04-{{8R(,,T]];484D4DWXEVW[WdWdEekn4D4o#L13F|3T#K0{{>2.224==A9=9I9I'R`JabfboboJpvy9I9z#$56,0)07	0B-078J0Kb0P-*1++i*D'/3/E/E/L/L/X/X.YY[\cdh\i[j,k)5< 1289 452266>QRZ>[6\G 66M9LM#*#5#5#;#;h>P>P$+$6$6$<$<?> $> .+	/r%   c                    |j                  d      D ]  }|j                  d      }|j                  |j                         |j	                          |j                  |       |j                  dg       }|D cg c]  }|j                  d      s| }}|s
|dgz   |d<   |d   j                  dd      d   }|d	| gz   |d<    y
c c}w )uF   
        Конвертирует "Фрагмент кода"
        prerM   r  zcode-zlanguage-noner   -r3   z	language-N)	r  r  extendcontentsclearr   rY   r  r   )r"   r~  r  code_tag	class_tagclass_
code_classrM   s           r#   _convert_codezJiraAPIImport._convert_code  s     %%e, 	@C ((0HOOCLL)IIKJJx ,I/8WVF<M<Mg<V&WJW(O+<<G!!}**3215(iv,>+??G	@ Xs   8CCc                    |s|S t        |d      }| j                  ||       | j                  |||       | j                  |       dj	                  |j
                  j                  D cg c]  }t        |       c}      }|S c c}w )Nlxmlr   )r   r  r  r9  r   r   childrenr-   )r"   r   r<   datar~  cs         r#   _convert_textzJiraAPIImport._convert_text  sx    K!$/	y#.IsD19%ww	(?(?@1A@A As   *Bu8   Обработка комментариев задачиc                 j   d|d    d|d   d    d}d}d}| j                  |      D ]  }|dz  }| j                  j                  j                  j                   d	|d
    }t        j
                  j                  |      }|r.|j                  s"| j                  j                  d| d|       |s$t        j                  ||| j                  d      }n|j                  dg       |j                  di       j                  | j                        r9| j                  |d   | j                     |      |_        |j                  |_        |j                  di       j                  | j                        r(| j                  |d   | j                     |      |_        |d   |_        |d   |_        ||_        | j%                  |d   ||      |_        ||_        |j                  d      r|dz  }|d   d   dk(  rIt        j*                  j                  |d   d         }	|j,                  j/                  |	       d|_        n;| j                  j                  d|d    d|       | xj2                  dz  c_        \|j                  d      rAt5        t7        d |d         i       }
|
j                  di       j                  d d!      |_        |j8                  r|j;                  d"       | j                  j=                  d#d$        | j                  j?                  d%| d&|        y )'Nu$   Комментарий задачи r   rI  r   r   rJ  r   r3   r/  r   r(  uN   Комментарий уже есть, и правился в системе zERR-0046rK  Tr  z**r   r  r   r   r   
visibilityr>  r  r   r  uL   Ошибка обработки приватного комментария zERR-0047
propertiesc                 *    | j                  d      dk(  S )Nr   zsd.public.commentr   )ps    r#   r   z7JiraAPIImport._process_issue_comments.<locals>.<lambda>,  s    !%%,2E"E r%   internalFr:  r$  rv  u   Обработано u:    комментариев, из них приватных ) _get_issue_commentsr4   r=  r>  rW   r  rY   rZ  r;   r	  rU   rM  r   r   r  r   r   r2  r?  r   rh  r  rO  r   r  r:   r   r   r  rA  rx  r5   )r"   r  r"  r<   cntprivate_cntr$  r7  cmf_commentr  sd_public_comments              r#   _process_issue_commentsz%JiraAPIImport._process_issue_comments  s[   4U5\N$uXW`GaFbbde//6 1	=G1HC..55AAB"WT]OTF ++//v/>K;#>#>)),z  |G  {H  +I*4$ * @$//tFW[WfWfx|/}''/{{8R(,,T]];)-)9)9'(:KDMM:Z`c)9)d&(3(>(>%{{>2.224==A.2.>.>w~?VW[WdWd?ekn.>.o+*1)*<K')0);K& "&K#11'.2I;X]^K*1K'{{<(q <(0F:!0044',:OPW:X4YD**11$7*.K'OO--0|  ~E  FR  ~S  }T  /U.8d . DOOq(O {{<($(E- %! '8&;&;GR&H&L&LZY^&_#%%  T 2OO$$Y<c1	=d 	3C58rs~r  A  	Br%   c                 p   t         j                  j                  dd|gg dgddg      }|rX|j                  r|j                  r@|j                  rdnd}| j
                  j                  j                  d	| d
| d| d       y |s4t         j                  || j
                  d      }|j                  d       t         j                  j                  dd|gdg dg dggd      }|r-| j
                  j                  j                  d	| d
| d       y t         j                  j                  |      D ]  }|j                  d        |d   }ddddd}d}	d}
t        j                  dt        j                        }|j!                  |      D ]  }|j#                         \  }}}}}|j%                         }|rHdj'                  d |j)                  d       D              j%                         }|j+                  dd!      }n|}|t-        |      |||d"}|	d#z  }	|d$k(  r|
d#z  }
t         j                  |||||j                  |d      | j
                  d|%      }|j                  d        t        j                  d&t        j                        }|j/                  |      }|rf|j#                         \  }}|j%                         |_        |r5d!j'                  d' |j)                  d       D              j%                         }||_        |	|_        |
|_        ||_        |j                  d       y )(Nr2  r1  r  Tr  )r   r  r   u   Удаленu   Изменен   Задача u   . Чек-лист r  uf    пользователем. Изменения из импорта не будут применены)r2  r4   rZ  r:  r  )rZ  r1  FrK  r  u   . Пункты изменены пользователем. Изменения из импорта не будут примененыr	  rJ  r   r~  r  rx  CANCEL)r1  ~r  xr   z{(?P<status>[x~+-])(?P<mandatory>!)?\s*(?:\[(?P<custom_status>[^\]]+)\]\s*)?(?P<name>[^\n]*)(?P<description>(?:\n>[^\n]*)+)?r  c              3   @   K   | ]  }|r|j                           y wr   r,  r  lines     r#   r  z3JiraAPIImport._process_checklist.<locals>.<genexpr>~  s!      ( JJL(   z
>r  )r   	mandatorycustom_statusr   r   r3   r  )
cache_taskr2  r   r   r   r4   rZ  rh  z6#\s*(?P<header>[^\n]*)(?P<description>(?:\n>[^\n]*)+)?c              3   @   K   | ]  }|r|j                           y wr   r,  rR  s     r#   r  z3JiraAPIImport._process_checklist.<locals>.<genexpr>  s!      ' JJL'rT  )rW   CmfChecklistrY   rZ  r  r4   re   r  rA  CmfChecklistItemr  r   rS  r  compileMfinditerr  r  r   r   r  r   r  r   r   checklist_items_countchecklist_items_done_countrh  )r"   checklist_datarP  	checklist
action_msgmodified_itemr  	items_strstatus_mappingitems_countitems_done_countitems_patternmatchr   rU  rV  r   r   r   	item_dataheader_patternheaders                         r#   _process_checklistz JiraAPIImport._process_checklist8  s   ''++3	** !!? , 
	 i779;P;P+4+@+@FVJOO""**	{*<YKr* V\ ] ++ ?? $ , I
 NNtN,//443	*3. ! 5 

 OO""**	{*<YK H\ ] ++00	0B 	/DKKK.	/ #7+	 	
 

0 DD
 #++I6 #	(EBG,,.?FI}dK::<D"ii ( + 1 1% 8(  %'	 
 #**45" !!)_!.*I 1K} A% **$ %))&&9?? $ ) + 	D II$I'G#	(J 0DD

 %%i0"',,.FK#\\^IN!hh ' + 1 1% 8'  %'	 
 )IN*5	'/?	,$2	!4(r%   u0   Обработка плагинов задачиc                 r    | j                  |      D ]#  }|d   dk(  s|d   s| j                  ||       % y )Nr   z&com.railsware.SmartChecklist.checklistr   )_get_issue_propertiesrm  )r"   r"  rP  issue_propertys       r#   _process_propertiesz!JiraAPIImport._process_properties  sE    "88? 	CNe$(PPUcdkUl''	B	Cr%   c                    ddddddd}|j                         D ]  \  }}g }|d   j                  |d   g       D ]  }| j                  j                  j                  j                   d	|d
    }t
        j                  j                  |      }	|	r|j                  |	       i| j                  j                  d| d| dd       | xj                  dz  c_	         t        ||d   |        y )Nfix_versionsfixVersions)attrr   affected_versionsversions)FixAffectedr   r   
::version:r   r(  u   Не найдена 'u   ' версия zERR-0050r@  r  r3   ru  )r   rY   r4   r=  r>  rW   r@  r   r;   r:   r  )
r"   r"  rP  version_typesversion_typeversionrw  version_datar7  version_objs
             r#   _process_issue_versionsz%JiraAPIImport._process_issue_versions  s    '&
 ,#	
 &3%8%8%: 	:!L'H %h 3 3GG4Db I ) OO2299EEFjQ]^bQcPde$nn000?OOK0OO--/~_\N["!* . 
 OOq(O) Iwv9	:r%   c                    g }|d   j                  dg       }|D ]  }| j                  j                  j                  j                   d|d    }t        j
                  j                  |      }|s6| j                  j                  d| dd	       | xj                  d
z  c_        |j                  |        ||_	        y )Nr   
componentsr/  r   r(  u%   Не найден компонент zERR-0051CmfComponentr  r3   )
rY   r4   r=  r>  rW   r  r;   r:   r   r  )r"   r"  rP  issue_componentsr  	componentr7  comp_objs           r#   _process_issue_componentsz'JiraAPIImport._process_issue_components  s    8_((r:
# 
	.I..55AAB"Yt_DUVF**..f.=H));I;G+ * 
 1$##H-
	.  0	r%   c           	      
   ddl m} g }|d   j                  dg       }|D ]  }|j                  dd      j                  dd      } ||d	d
      }	 dddd| dgdd|gddd| dgg}t        j
                  j                  |      }	|	s&t        j                  |      }	|	j                          |j                  |	        ||_        y # t        $ r.}
| j                  j                  d| d|
 d|       Y d }
~
d }
~
ww xY w)Nr   r  r   r  r  r  r  r   r  Tr  r  r  r  rJ  r  r   r.  r  u+   Не удалось создать тег 'r  zERR-0125r  )r  r  rY   r  rW   r  rA  r   r8   r4   r;   r  )r"   r"  rP  r  r  r  labelr  filter_r  r  s              r#   _process_issue_tagsz!JiraAPIImport._process_issue_tags  s%   *x$$Xr2 	EMM#s+33C<EU$FEg5'}5We,g5'}5	 mm''w'7 --U-3CHHJC 	* 	  ))A%C5Q)! *  s   A0C	D$C==Dc           
         ddl m} g d}d||xr |j                  j                  xs d |t	        |j                        t	        |j
                        d}d }	d }
|d   }|d   }|dv r-|r| j                  ||	      }	|rn| j                  ||	      }
nY|d
k(  r|rNt        j                  j                  | j                  j                  j                  j                   d| |      }	|rt        j                  j                  | j                  j                  j                  j                   d| |      }
n|dk(  r|}	|}
n|dk(  r| j                  j                  j                  j                   d|j                  j                   }|r-t        j                  j                  dd| d| g|dgz         }	|r/t        j                  j                  dd| d| g|dgz         }
ny t        j                  j                  j                  |      }t!        ||j"                        r|	xr |	j                  j                  xs d |d<   |
xr |
j                  j                  xs d |d<   |	xr |	j
                  j                  xs d |d<   |
xr |
j
                  j                  xs d |d<   |	xr |	j$                  j                  xs d |d<   |
xr |
j$                  j                  xs d |d<   n
|	|d<   |
|d<   t        j&                  j)                  |d   |d   |d   |d   |d   |d   |d   dg      }|s|S d S ) Nr   r   )r  rM   r   r  )rM  r   cmf_author_idr   obj_idobj_coder  r  )r   rP   rK  r   r/  r  rO   r   r7  r1  r+  r  
from_valueto_valuefrom_value_codeto_value_codefrom_value_nameto_value_namer   rM  r  r   r  r  )r   rM  r  r   r  from_value_idto_value_idr   )cmfr   r   r   r-   rM   rM  rW   r  rY   r4   r=  r>  r8  rR  r  
issubclassCmfRelationBaser   CmfOrmColumnHistoryr  )r"   r   history_itemr   
created_atrP  r   fields_history_datar  r  item_from_id
item_to_idrh  	field_clscolumn_historys                   r#   _get_history_fieldz JiraAPIImport._get_history_field  sn   ( ($#7		?4(),,'INN+
 
#F+!$'
55!--l	-J
++JI+F<'#1155"oo44;;GGH<.Y" 6 
 !//33"oo44;;GGH:,W" 4  :%%J!H8#!%!7!7!>!>!J!J K2iN`N`NcNcMdeO#--11$co->b+OP"m_4 2 
 !++//$co->b+MN"m_4 0 
 NN))--j9	i!7!78)3)K
8K8K)StL&'/'EHKK4E4E'ML$.8.RZ__=R=R.ZVZL*+,4,L9L9L,TPTL).8.RZ__=R=R.ZVZL*+,4,L9L9L,TPTL))3L&'/L$  3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 }|j                  d      r$| j	                  |d   | j
                     |      }n(| j                   j                  j                  d|        |d   |d|d}	|d   D ]  }
|j                  |
d   |
d         }| j                  j                  |      }|rF|d   rA|d   d   }|d   d   r1| j                  |d   d   |
||d   |      }|r|j                  |       | j                  ||
d   |
d         }d|	vr||	d<   |	d    d | |	d<    t        j                  j                  |g d!"      }|s"t        j                  | j                   d#|$      }|	D ]  }t        |||	|           |j                  s|j!                  d#%        |r!t        j"                  j%                  |&       y y )'Nr   r  r  r  u   Статус)r   rR   rO   r   r   u   История задачи r   rI  r   r   rJ  	changelog	historiesz	::historyr   r   rK  u   Аудит без автора r   r3   )r   r   	log_levelr2  r   r   r   r  r  r   
fromStringtoStringr   z<br>)r   r   r  r2  r   r  T)r4   rZ  r7  r:  )r   )r4   r=  r>  rY   rM  rU   re   r  jira_map_fieldsr  r   r  rW   r  r  r  rA  r  bulk_insert)r"   r"  rP  field_title_mapr<   history_fieldsr-  r7  r   r$  r  r  r   history_fieldrp  history_commentr   s                    r#   _process_historyzJiraAPIImport._process_historyR  s    %0,*$
 -U5\N$uXy?Y>ZZ\][)+6 ,	7G..55AAB)GTXM?[FJ{{8$!--gh.?.NTW-X
&&..1PQXPY/Z[)0);:deqz{G( 0)--d7mT']K,,009U=1#M29=G]+,<=(,(?(?!-0> &#I.%) )*11-@--gtL7I4PZK[\(&*GFO)0(9)-'0GFO'0* %//33 4 	O #"("3"3t`dms"3"t <gcl;<))$$$6Y,	7\ &&22.2I r%   u]   Обработка связей с документами Wiki и веб-страницамиc                    g }|j                  dg       D ]L  }| j                  j                  j                  j                   d|d    }|d   }|d   }|st        j
                  j                  |      }|s#t        j                  ||| j                  d      }|j                  s|d	   |_        |d
   |_        ||_	        |j                  d       |d   dk(  s|j                  d      dk(  st        j                  d|d
         }	|	s|	j                  d      }
t        j                  j                  ddd|
 g      }|s7|j                  |       d|d<   O ||_        y )Nremotelinksr/  r   objectapplicationr(  Tr  r   r[  r:  r>  zcom.atlassian.confluencerelationshipz	Wiki Pagez$/pages/viewpage.action\?pageId=(\d+)r3   r7  r  r  r.  rv  )rY   r4   r=  r>  rW   CmfLinkrZ  r   r[  rh  rA  r  r  r  CmfDocumentr   local_links)r"   r"  rP  r  
remotelinkremotelink_ext_idremotelink_objremotelink_applinkri  page_iddocs               r#   _process_remotelinksz"JiraAPIImport._process_remotelinks  sy   ))M26  	3J#'??#9#9#@#@#L#L"MRPZ[_P`Oa b'1N'6N!~~))1B)C!>>(0#'??(,	 * D '' .w 7DI-e4DH+5D(II$I/v&*DDNN>2kA 		"I>Z_K`a#kk!nG ,,006SQXPY?8[0\C &&s+.2J{+A 	3D !,	r%   c                    i }|d   }|j                  d      r(|d   j                  d      xs d}|dz  |d<   |d   |d<   | j                  d      }|r+|j                  |d	         r|j                  |d	         |d
<   | j                  d      }|r+|j                  |d	         r|j                  |d	         |d<   |sy 	 t        j                  j                  ||D cg c]  }| c}      }	|D ]  }
t	        |	|
||
           |	j
                  r|	j                  d       y y c c}w # t        $ r= | j                  j                  d| d| ddd       | xj                  dz  c_
        Y y w xY w)Nr   timetrackingoriginalEstimateSecondsr   r  
sched_worktimetracker_sched_workz1com.atlassian.jpo:jpo-custom-field-baseline-startr   sched_start_datez/com.atlassian.jpo:jpo-custom-field-baseline-endsched_finish_date)r  r   Tr:  u8   Не удалось импортировать Гант u    для задачи 'rV  zERR-0112CmfGanttTaskr  r3   )rY   r   rW   r  r  r  rA  r8   r4   r;   r:   )r"   r"  rP  ganttissue_fieldsestimate_secbaseline_start_fieldbaseline_end_fieldrz   
gantt_taskr   s              r#   _process_ganttzJiraAPIImport._process_gantt  s   X N+'7;;<UV[Z[L"."3E,.3L.AE*+  $66? 
  L$4$45I$5O$P(4(8(89Md9S(TE$% "44=
 ,"2"23Ed3K"L)5)9)9:LT:R)SE%&	!,,00iTYHZqHZ0[J 9
E5<89 $$D1 %	 I[  	!OO%%J5'Qghqgrrst' & 
 OOq O	!s%   D, 	D'
(=D, 'D, ,AE21E2c                    | j                   j                  j                  j                   d|d    }t        j                  j                  |dg      }|s$t        j	                  |d|| j                   d      }| j                  j                  | j                  j                  d|d	          }d
| d| d|_	        |j                  r|j                  d       y y )Nz
::comment:r   r   r  r  T)r2  r  r7  r4   rZ  z/browse/r   u<   Задача импортирована из Jira: <a href="z" target="_blank">z</a>r:  )r4   r=  r>  rW   r  rY   rG   
url_joinerr[  r   r  rA  )r"   rP  r"  comment_ext_idr$  r  s         r#   _add_comment_link_to_issuez(JiraAPIImport._add_comment_link_to_issue  s     OO2299EEFjQVW[Q\P]^##''!8 ( 
 '' %?? $ ( G yy##DIIMMXeEl^3LMv/vT; 	 LLTL* r%   u   Обработка задачиc           	          d}|d   }d| d|d   d    d}| j                  || j                  t        j                  j                     d         }||d<   | j
                  |d	<   d
|d<   | j                  j                  j                  j                   d|d    |d<   ||d<   |d   j                  d      r| j                  j                  j                  j                   d|d   j                  d      d    }t        j                  j                  |      |d<   |d   sH| j                  j                  d|d   j                  d       dd       | xj                  dz  c_        | j                  d      }	|	r|d   j                  |	d         |d<   |d   j                  d      r| j                  |d   j                  d      j                  | j                        |      |d<   |d   s| xj                  dz  c_        | j                  j                  d|d   j                  d       dd       | j                  j!                  d|d   j                  d      j                  | j                         t"        j$                  d
d
       |d   j                  d       r| j                  |d   j                  d       j                  | j                        |      |d!<   |d!   s| xj                  dz  c_        | j                  j                  d"|d   j                  d        dd       | j                  j!                  d"|d   j                  d       j                  | j                         t"        j$                  d
d
       |d   j                  d#      r| j                  |d   j                  d#      j                  | j                        |      |d$<   |d$   s| xj                  dz  c_        | j                  j                  d%|d   j                  d#       dd       | j                  j!                  d%|d   j                  d#      j                  | j                         t"        j$                  d
d
       nd&|d$<   |d   d'   d    |d   d(   j                  d)      }
|
r|d   d(   d    d*  }n }d| j                  j                  j                  j                   d| d}t        j&                  j                  dd+d,| d,g-      |d.<   |j(                  j*                  j                  d/      }| j,                  j.                  r|
r|j(                  j*                  j                  d      }| j1                  |      }t3        t5         fd0|      d&      }| j                  j                  j                  j                   d|d    }t        j6                  j                  dd1|g-      }n|d2   }|d3   }|j                   |      }| j                  j                  j                  j                   d| }t        j6                  j                  dd+| d4g-      }nt3        t5         fd5|d6         d&      }|r|d7   }n|d8   d2   }t9        j:                  |      }| j                  j                  j                  j                   d9| }t        j6                  j                  dd1|g-      }||d:<   | j                  j                  j                  j                   d|j<                   d|d   d;   d    }t        j>                  j                  dd1|gd<g=      |d;<   |d;   j@                  |d><   |d   j                  d?      r| j                  j                  j                  j                   d|d   d?   d    }t        jB                  j                  |      |d?<   |d?   sH| j                  j                  d@|d   j                  d?       dAd       | xj                  dz  c_        |jE                  dBd&      }|r|dC   dD   }| j                  jF                  jI                  dE| dF|        tK        jL                  | j                  t        j                  |ddG|d   gH      \  }}|| jO                  ||      z  }|jP                  r|jS                  g dI       | jU                  |||      |_+        |xs g }|D ]  }|jX                  j[                  |        | j]                  ||       | j_                  ||       | ja                  ||       | jc                  ||       |jd                  dJk(  rPt        jf                  j                  |dKd
dLgM      }||_4        |jj                  sd
|_5        |jm                  d
N       |d   dO   |_7        | jq                  ||       ||_        |jr                  r|jm                  d
N       tu                | jw                  ||       | jy                  ||       | j{                  ||       n)| j                  jF                  j}                  d| dP       | j                  ||       |d   dQ   dR   r| j                  ||       | j                  j                  dS      r| j                  ||       tu                | j                  j                  dTdU       t        |dV         j                  dW      }t        |dX      5 }|j                  dY       d&d&d&       |S # 1 sw Y   |S xY w)Zu   
        Общая логика обработки которая потом разделяется на задачи и эпики
        r   r   rM  rU  r   r   rV  r2  r}  Tapprovedr/  r   r7  rM   securityr(  perm_security_levelu:   Не найден уровень безопасности zERR-0048r  r  r3   Story Pointsr  r   rK  r   uB   Не найден автор(постановщик) задачи zERR-0049)r  exc_infocreatorr   u>   Не найден создатель(автор) задачи rR   rP   u6   Не найден исполнитель задачи NrQ   r  r  r7  r  r  r.  rN   r5  c                     | d   d   d   v S )Nr4  r   r5  r/   wfissuetype_ids    r#   r   z.JiraAPIImport._process_issue.<locals>.<lambda>J  s    <26F3G3J<3X#X r%   r1  defaultWorkflowissueTypeMappingsr  c                     | d   v S )Nr5  r/   r  s    r#   r   z.JiraAPIImport._process_issue.<locals>.<lambda>Z  s    |r,/?? r%   r6  r   r  rG  r8  r   r+  r  r  r   u'   Не найдена резолюция zERR-0116r   renderedFieldsr   u4   Создание/обновление задачи 'r  r*  r8  )
r   rs  r  r  r  logic_prefixr3  r   rO  rh  z	task.epicr  r  r3  r,  r  r   r:  r   u[    была изменена пользователем и не будет обновленаr$  totaltimeTrackingEnabledr  rv  
issue_pathrN  wr   )Hr'  r!  rW   r  r   rZ   r4   r=  r>  rY   CmfSecurityLevelr;   r:   r   rM  rU   r5   rc   ERRORr]  rh  r   rG   rV   rP  r   r   rO  r   rN  r   rR  r+  r  ra  re   r  r   r?  r}  rZ  r	  r?  r   r  r   r  r  r  r  r  r<  r3  r  rA  r   rS  r  r7   r  r  r  r  rq  rK  r]   r.  rx  r   rr   rt   r  )!r"   r"  r  sprintsrz  r  r<   normalized_issuer7  story_p_fieldsimplified_projectissuetype_ext_idrx  rt  rb  rf  rg  rh  r8  default_workflowissue_type_mappingsworkflow_namer_  r  r  
issue_textrP  r  rB  r'  rY  rz   r  s!                                   @r#   ry  zJiraAPIImport._process_issue  s   
 %L	i[E(OI,F+GqI  ..udmmFNND_D_6`ai6jk%,"'+'<'<$'+$(,(>(>(E(E(Q(Q'RRTUZ[_U`Ta%b"#, ?z*..55AAB"U8_EXEXYcEdeiEjDklF6<6M6M6Q6QY_6Q6`23#$9:)),fglmugvgzgz  |F  hG  gH  +I*4y * J1$//?5:8_5H5HW[I\5]12 ?z*,0,<,<U8_=P=PQ[=\=`=`aeanan=oux,<,y[)#K01$)),notu}o~  pC  pC  DN  pO  oP  +Q*4y * J##&hinowixi|i|  ~H  jI  jM  jM  NR  N[  N[  j\  i]  %^  `g  `m  `m  y}  HL#  M ?y)-1-=-=eHo>Q>QR[>\>`>`aeanan>oux-=-y\*#L11$)),jkpqykzk~k~  @I  lJ  kK  +L*4y * J##&dejksetexex  zC  fD  fH  fH  IM  IV  IV  fW  eX  %Y  [b  [h  [h  tx  CG#  H ?z*.2.>.>uX?R?RS]?^?b?bcgcpcp?qwz.>.{]+#M21$)),bchiqcrcvcv  xB  dC  cD  +E*4y * J##&\]bck]l]p]pq{]|  ^A  ^A  BF  BO  BO  ^P  ]Q  %R  T[  Ta  Ta  mq  |@#  A.2]+X{3D9"8_Y7;;LI"'/)"<T"B!C1\NS+ !7!7!>!>!J!J K2N^M__ab)/)<)<)@)@f*;)<A&>? *A *
&  '66<<@@AWX99??!$44::>>tD
!%!G!G
!S $X& ! &*__%;%;%B%B%N%N$OrR_`dReQf"g!--11(C9Y1Z#78I#J &:;N&O# 3 7 7FV W%)__%;%;%B%B%N%N$OrR_Q`"a!--11(FN__bLc9d1e ?(4 M  -f 5 4V <=N O!,!:!:=!I!%!7!7!>!>!J!J K:VhUijO))--h_5U-VH'/$??1188DDER}TVW\]eWfgoWpquWvVwx%+%5%5%9%9c=1!? &: &
" 1A0J0V0V,-?|,#'??#9#9#@#@#L#L"MRPUV^P_`lPmnrPsOt u-3-A-A-E-EM^-E-_\*#L1))=eHo>Q>QR^>_=`a& * 
 1$%))&$7
/0?J##&Z[dZeehiyhz${|+DDOOV^^ $(8(BC
	1 	$++Iu==$$!! #  "//
IuMIN mG! /&&v./ ((	: **5)< $$UI6 %%eY7 %%4%//33 '##'12	  4   )5	%#777;L4 %%$%7 */x9I)JI& ""9e4(-I%##40L y1 !!%3 ++Iu=OO""**	{  +F  G
 	  	2 ?9%g.((E: $$(()>?''	59  5 |,-66zB	)S! 	QGGBK	 	 s   m$$m.u&   Обработка всех задачc                     | j                   j                         }|D ]/  }| j                  j                         r y | j	                  |       1 y r   )rG   r  r4   r6   ry  )r"   r  r"  s      r#   _process_issueszJiraAPIImport._process_issues  sD    %%' 	'E((*&	'r%   u3   Обработка связей всех задачc                 n   |s&| j                   j                  j                  d       yt        t	        d | j
                  j                               d      }t        j                         }| j                         D ]f  }| j                  |d         \  }}| j                  |d   |      D ]2  }| j                   j                         r  y|d   j                  d      }|r|d   j                  |d         nd}	| j                   j                  j                  j                   d|d    }
|ro| j                   j                  j                  j                   d|d    }| j                   j                  |g       }|j#                  |
       || j                   |<   n>|	r<| j                   j                  |	g       }|j#                  |
       || j                   |	<   |d   j                  d	g       }|D ]  }| j                   j                  j                  j                   d|d    }d
|v rV|
|d   d|d<   | j                   j                  j                  j                   d|d
   d    |d
   d<   || j$                  |<   d|v s|
|d   d|d
<   | j                   j                  j                  j                   d|d   d    |d   d<   || j$                  |<    5 i t        j                         |z
  }| j                   j                  j'                  d|dd       | j                   j)                  dt+        | j                                 t        j                         }t,        j.                  j                  d      }t,        j.                  j                  d      }| j                   D ](  }| j                   j                         r yt,        j0                  j                  ddd|gdd|ggddg      }|s*| j                   j                  j                  d| d       x| j                   |   D ]  }t,        j0                  j                  |ddg      }|s*| j                   j                  j                  d| d       S	 |j2                  |j2                  k(  rt,        j4                  j7                  g ddd d!|gd"d!|ggd d!|gd"d!|gggg#      }|D ]G  }||_        |j;                  d$%       | j                   j                  j                  d&| d'| d(       I ||_        |j;                  d$%       n| j                   j                  j                  d)| d*| d+       |j>                   d,| }t,        j4                  j                  |-      }|s6t,        j5                  ||||| j                   .      }|j;                  d$%        + tG                t        j                         |z
  }| j                   j                  j'                  d6|dd       d7d8dd9d:}| j                   j                  j'                  d;t+        | j$                  jI                                       t        j                         }| j$                  jK                         D ]B  \  }}| j                   j                         r y	 | j                   j                  j                  j                   d|d<   d    }
|j                  |d<   d=         }|r!t,        j.                  j                  |      } n t,        j.                  j                  |
-      } | s)t,        j.                  j                  d=d|d<   d=   g#      } | sTt,        j/                  |
| j                   |d<   d=   >      } |d<   d?   | _&        |d<   d@   | _'        | j;                  d$%       t,        j0                  j                  |d   d   dg      }!|!s:| j                   j                  j                  dA|d   d    dB|d   d    dC       t,        j0                  j                  |d
   d   dg      }"|"s:| j                   j                  j                  dD|d
   d    dB|d
   d    dC       | j                   j                  j                  j                   d|d    }#t,        j4                  j                  |#dEg      }|s"t,        j5                  | |#| j                   F      }|j8                  jP                  d7k(  r|!j<                  |"k(  s|"j<                  |!k(  rxt,        j.                  j                  d      |_        |!j<                  |"k(  r|"}|!}n|"j<                  |!k(  r|!}|"}| j                   j                  j                  d& d' d(       |!|_)        |"|_*        |j;                  d$%       E tG                t        j                         |z
  }$| j                   j                  j'                  dL|$dd       t        j                         |z
  }%| j                   j                  j'                  dM|%dd       y# t@        $ rE}| j                   jC                  d/| d0| d1d2d34       | xjD                  d5z  c_"        Y d}~d}~ww xY w#  | xjD                  d5z  c_"        | j                   jC                  dG|d<    dH|d   d    dB|d   d    dI|d
   d    dB|d
   d    dJdKd34       Y xY w)NuD   
        Постобработка связей задач
        uF   Отключена обработка связей всех задачNc                 J    | j                  di       j                  d      dk(  S )Nr   r   z'com.pyxis.greenhopper.jira:gh-epic-linkr   )rz   s    r#   r   z2JiraAPIImport._process_relations.<locals>.<lambda>  s"    !%%"-11(;?hh r%   r   r  r   r2  r/  
issuelinksr   r   )r7  r   r   r7  uD   Анализ связей всех задач выполнен за r      сек.u   Подзадачи: zsystem.additional_parentrL   zsystem.linkr  r*  rM   r  r  uP   Не удалось связать задачи, возможно задача 'u#   ' не попала в импортparent_taskr  )relation_type.coder1  system.finish:finishin_linkr1  out_linkr.  Tr:  u,   Тип связи родительской 'u$   ' и дочерней задачи 'ud   ' изменен с 'Блокируется/Блокирует (ОО)' на 'Относится к'.u   У задачи 'u3   ' эпик(родительская задача) 'uo   ' из другого проекта. Создана связь 'Дополнительный родитель'z:additional_parent:r(  )r  r   relation_typer7  r4   u<   Не удалось создать связь задачи 'u&   ' с дочерней задачей 'rV  zERR-0114r  r  r3   uG   Создание связей подзадач выполнено за r  zsystem.duplicatezsystem.clone)Blocks	DuplicateRelatesClonersu   Связи: r>  r   )r7  r4   r   inwardoutwardu=   Не удалось найти входящую задачу r  u   ). Возможно задача не попала в импорт или находится в проекте, который еще не импортирован.u?   Не удалось найти исходящую задачу r  )r  r7  r4   u.   Не удалось создать связь z. in_link: z), out_link: rf  zERR-0052uA   Создание связей задач выполнено за uL   Обработка связей всех задач выполнена за )+r4   re   r  r   r   r{   r   r  r  r
  r  r  r6   rY   r=  r>  r`   r   r_   r  r5   r   rW   CmfRelationTyper  r  CmfRelationOptionr   r  rA  r  r7  r8   r;   r:   r7   r  r   in_type_nameout_type_namerM   r  r   )&r"   r  epic_link_fieldtotal_t1r  r  r  r"  issue_parentissue_epic_keyr7  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  s1   
 OO""**+st h  '') 
 >>#))+  	GG!66wt}ENK//[/Q G??,,.$X228<O^x!4!4_T5J!Kdh OO2299EEFbtV'+'='='D'D'P'P&QQST`aeTfSg$hM $ 1 1- DI$$V,3<DMM-0# $ 1 1." EI$$V,4=DMM.1 $Ho11,C"- 	GJ%)__%;%;%B%B%N%N$OrR\]aRbQc"dK$
2@FuUZ|5\
>2AEAWAWA^A^AjAj@kkmnx  zG  oH  IM  oN  nO  ?P
=1(;<F,,[9':5?EeTYl4[
=1BF//BXBXB_B_BkBkAllnoy  {I  pJ  KO  pP  oQ  @R
>28<<F,,[9	G+G 	GB nn&1##RS^_bRcckl	
 	23t}}3E2FGHnn&%+%;%;%?%?E_%?%`"..222F!]] W	)M((* ..,,t]3T=1
 !), - K &&..66C_Dgi  $m < D)#^^//')95 0 
 "OO**22::FGjl 8) #**j.@.@@$*$<$<$A$A S$(&/k%BZQTV`Da$b&/j%AJPSU`Ca$b!"$ %B 	%	 09 O<IO9+00T0B OO22::"N{m \EEOL QE!F 2=
."D9..66/
| <PP[} ]hi
 .9-?-?,@@ST`Sa*b*0*B*B*F*Fo*F*^..4.F.F(2)4.H'6+/?? /G /O ,00T0ByD)'W	)r 	nn&4##UVabeUffno	
  6"4 - .	
 	##l3t7K7K7P7P7R3S2T$UV~~'/3/C/C/I/I/K Y	+O^((*V OO2299EEFbX^I_`dIeHfg )nV.DV.L M $*$:$:$>$>M$>$RM$*$:$:$>$>f$>$MM$$*$:$:$>$>vtUcdjUklrUsFt$>$uM$$*$:$:&UYUdUd@Nv@VW]@^ %; %`M1?1G1QM.2@2H2SM/!&&4&8 ..,,).9(C)? -  OO**22W).9%@ANSaDbckDlCm n|}
 !>>--)-8B)? .   OO**22Y)-8?@>R_C`aiCjBk l|}
  $ 6 6 = = I IJ"^\`MaLbc
"(":":">">%01 #? # '&,&>&>&3)#'?? '? 'O $1166:PP ,,8H<P<PT[<[ 5;4J4J4N4NTa4N4bO1**h6&.%,
!--8&-%-
OO**22F{m T==GL I}~ +2'+3($$$6aY	v 	~~',6##OP\]`Oaaij	
 >>#h.##Z[cdgZhhpq	
q ! )OO--VWbVc d??Il!M"!*	 .  OOq(OO)N1$))D^TZE[D\ ]  .~ >u EFbXfIghpIqHr s!!/!>u!E FbXeIfgoIpHqqrt & * s5   Ej E2kA"k)Ek 	k	:k		kA l4u)   Обработка компонентовc                 "   t         j                  j                  |ddddg      }|s
J d|        | j                  |d         D ]d  }	 | j                  j                         r y| j                  j                  j                  j                   d	|d    }t         j                  j                  |g d
      }|s"t         j                  || j                  d      }||_	        |d   |_
        ||_        |j                  d      rd|_        nd|_        |j                  d      r/| j                  |d   | j                     d|d          |_        nd|_        |d   dk(  r|j                   |_        nC|d   dk(  r|j$                  |_        n)|d   dk(  r|j                  |_        n|d   dk(  rd|_        |j&                  r|j(                  r|j+                  d       |j                  dd      r|j,                  s!|j/                          d|j,                  _        |j,                  j&                  rG|j                  dd      |j,                  _        |j,                  j2                  j+                  d       t5                | j                  xj6                  dz  c_        g t?        t         j                  jA                  d d!|gg d"gd#            |_!        |jB                  rd|_"        n1t?        t         j                  jA                  d d!|g$            |_"        |j(                  r|j+                  d       yy#  t9                | xj:                  dz  c_        | j                  j=                  d| dd       Y HxY w)%uG  https://docs.atlassian.com/software/jira/docs/api/REST/1000.824.0/#api/2/project-getProjectComponents
        Пока грузим как списки, после доработки будут отдельные обекты

        Args:
            project_info (dict): проект из джиры как есть
        r  Tr  r  r  uV   Данный тип проекта не поддерживает компоненты r   Nr/  )descr_documentdefault_ownerdefault_responsiblerZ  r3  r2  r  r  r  r   archivedFrw  u   Компонент rK  assigneeTypePROJECT_DEFAULTPROJECT_LEADCOMPONENT_LEAD
UNASSIGNEDr:  r   r   r3   u3   Ошибка загрузки компонента ERR-0053r  r  r3  r1  r  r   r  r.  )#rW   r<  rY   _get_project_componentsr4   r6   r=  r>  r  r2  r   r3  r  rM  rU   r)  rP   r*  r   rZ  r  rA  r(  create_descr_document
text_draftr   r7   r  r9   r:   r;   r   r  r  r  )r"   rY  r  component_folderr  r7  components_lists          r#   r"  z!JiraAPIImport._process_components  s    "++//#!%'	 0 
    	I#y  {G  zH  "I  	I55l46HI >	OI=O??,,. OO2299EEFbSWHYZ"("5"5"9"9! #: # '&,&9&9TXTcTcuy&9&zO)4&'0'8$.>+==,37O038O0==(484D4D!&)$--81)F2C1DE 5E 5O1
 59O1^,0AA:E:Q:QO7~..@:E:O:OO7~.2BB:I:W:WO7~.,>:>O7"227Q7Q#((T(:==3*99'==?IM66F&55EEDMMMR_acDd66A'66<<AAdAS55:5s>	OD 26%%"C)9:/ "& & 2
. 1137037##))-FV1W)X40 &&!!d!3 '/O1$)),_`i_j*k*4~ * Os   M	'IM		ANu   Обработка версийc                    t         j                  j                  d|ddg      }| j                  |d         D ]$  }	 | j                  j                         r y | j                  j                  j                  j                   d|d    }t         j                  j                  |g d	      }|s"t         j                  || j                  d
      }|j                  r,t         j                  j                  d      |_        ||_        ||_        |d   |_        |j                  dd      |_        |j                  d      |_        |j                  d      |_        |j$                  j&                  |_        ||_        |j,                  r|j/                  d
       |d   rd
|_        nd|_        |j(                  r-|d   s|d   r|j3                  d       n|j3                  d       |j,                  r<|j/                  d
       n)| j                  j4                  j7                  d| d       t9                | j                  xj:                  dz  c_        ' tC        t         j                  jE                  d d!|gg d"gd
#            |_#        |jF                  rd
|_$        n1tC        t         j                  jE                  d d!|g$            |_$        |j,                  r|j/                  d
       y y #  t=                | xj>                  dz  c_        | j                  jA                  d| dd       Y xY w)%Nreleaser  r  )r,  r3  r   r   r9  rz  )r7  r   r2  rN   r   r5  r6  r8  r3  r   r  r  Tr  zlist.release:defaultrL   r   r   r   r0  releaseDater:  r+  Freleasedr  r~  u   Релиз |    был изменен пользователем. Изменения из импорта не будут примененыr3   u+   Ошибка загрузки версии r1  r@  r  r3  r1  r  r2  r.  )%rW   r<  rY   _get_project_versionsr4   r6   r=  r>  r@  rZ  r]  rN   r2  r3  r   r   r5  r6  rI  r  r8  rh  r  rA  r  set_default_statusre   r  r7   r  r9   r:   r;   r   r  r  r  )r"   rY  r  release_folderr}  r7  version_lists          r#   r!  zJiraAPIImport._process_versions_  s   ))--#%' . 
 11\$=O1P =	JG<J??,,. OO2299EEFjQXY]Q^P_`%~~11!  2    $#)>>DOOmq>#rL//.4.A.A.E.EKa.E.bL+*5L'/=L,(/L%(/M2(FL%3:;;{3KL018]1KL.,7,A,A,Z,ZL)3:L0#..$))d);z*481491#,,":.'*2E(;;HE(;;FC#..$))d);OO**22%l^ 4d e
 55:5q=	JB 04NN  "C8/ "& ! 0
, //15N.15$$]C,P$Q2N. $$D1 %/J1$)),WX_W`*a*4y * Js   K=HK==AMu*   Обработка JQL в фильтрахc           
         t               }t        | j                  j                  j                  j                        }t        j                         }t        j                  j                  g dg dgg d      }|D ]c  }d|j                   d|j                   d}|j                  s.|j                  j                  j                  d      }|s%|j                  j                  j                  d	      }|s|j                  j                  j                  d
      }t        j                   j#                  | j                  j                  j                  j$                  j                        }|j                  j                  j                  d      xs i }	|	j                  d      xs d}
|r|j&                  |
vrB|sF	 | j                  j)                  d       | j                  j)                  d|        |j+                  ||      \  }}||_        t.        j1                  |d      |_        |j5                  d       t7                | j                  j)                  d|        | j                  j)                  d|        | j                  j)                  d|        |j8                  D ]'  }| j                  j:                  j=                  |       ) f t        j                         |z
  }| j                  j:                  jE                  d|dd        y# t>        $ r<}tA                | j                  jC                  d| d| d| dd       Y d}~d}~ww xY w)!uP   
        Пост обработка JQL в фильтрах задач
        r  )rZ  r*  T)rh  ubqlbqlr   r  rJ  " (rf  jqlr  jqlQueryapplinkrpcUrlr   2--------------------------------------------------u   ФИЛЬТР: Fensure_asciiTr:  zJQL:	zUBQL:	zBQL:	r  u0   : ошибка преобразования JQL r  zERR-0066r  r  NuC   Обработка JQL в фильтрах выполнена за r  r  )#r   r-   r4   r=  r>  r  process_timerW   r  r   r   rM   rh  r   rY   r  r  r  ext_urlnetlocr5   get_modifiedrB  ru   r  rC  rA  r7   rz  re   r  r8   r9   r;   r  )r"   rE  r>  r  task_filtersr  
filter_msgr  r  rG  rpc_urlrB  rC  	error_msgr  r  s                   r#   _process_jql_in_filtersz%JiraAPIImport._process_jql_in_filters  s   
 o$//0077CCD **//*/ > 0 
 ( (	K[--.c+2B2B1C1EJ..//5599%@E#3399==gF#3399==jI#\\224??3I3I3P3P3X3X3^3^_
%55;;??	JPb!++h/52Z..g=##H-##nZL$AB,,UK@	c#' "&**Su*"E  T 2##fUG$45##gdV$45##fSEN3!$ >IOO**229=>A(	T  2%##&ijlmpiqqy$z{  ))#J</_`e_ffhilhmn+ *  s   DL&&	M+/1M&&M+u   Обработка аудитаc                      y)u)   
        Грузим аудит
        Nr/   r!   s    r#   _process_auditzJiraAPIImport._process_audit  s     	r%   u2   Обработка логических типовc                 
   dddddddddddddddd}| j                  d      D ]B  }| j                  j                  j                  d|        | j                  j	                         r y	|d
   }| j                  j
                  j
                  j                   d| }ddd| dg}|j                  d      rK|d   d   d
    d| }| j                  j
                  j
                  j                   d| }d|ddd| dgg}t        j                  j                  |ddg      }d| j                  j
                  j
                  j                   d}|rt        t        j                  ||j                  j                              dkD  rx| j                  j                  j                  d| d|j                          t        j                   |dt#        |j                              |_        |j%                  d       d	}|j                  d|d         j'                         }	|d   j'                         }
|sO| j                  j                  j                  d |	 d!       t        j                  j                  dd"|	gddg      }|r|j                  sd| d|_        n*d| dt#        |j                        vr|j                  d      r_d| j                  j
                  j
                  j                   d|d
    d}|j                  j                  j)                  |d      |_        d| |j                   }t        t        j                  ||            dkD  rd| j                  j+                  d#|	 d$| j                  j
                  j
                  j                   d!d%|d&'       | xj,                  dz  c_        n||_        |
|	k7  r)|
|j.                  vr|j.                  j1                  |
       |j%                  d       t3                | j                  j                  j                  d(|	 d)       |j                  |	j5                               }|s |j                  |
j5                         d      }| j6                  j8                  r|d*   d+k(  rd}n|d*   dk(  r
d}n|d,   rd}t        j                  j                  d-d.|gd/g      }t        j                  |	|d0   d1|t#        |j:                        d| d| j                  2      }|	|
k7  r|
g|_        |j%                          t3                | j                  xj<                  dz  c_        E y	)3u$   Маппим issueType в logic_typeztask.sub:defaultztask.userstory:defaulttask.agile:defaultztask.bug:defaultztask.epic:default)zsub-tasksubtasku   подзадачаz
user story	userstorystoryu   историяr  u   задачаbugu   багu   ошибкаdefectu   эпикr  rd  u-   Обрабатываем тип задачи Nr   r/  r7  r  r  r  scoper  r7  r  r  r  r  z::\d+)::r3   u   ext_id типа задачи r  r   TrD  r'  r   u2   Поиск типа задачи по имени 'rV  r  uW   Ошибка объединения одноименных типов с именем 'u*   ': одинаковый источник 'zERR-0118r]  )r<   r  u   Тип задачи 'u2   ' не найден. Создание новогоr6  r  rY  rM   r*  ui_colorr   r  )r   r   rM  r3  r_  r7  r4   )r  r4   re   r  r6   r=  r>  rY   rW   r]  r   r  findallr7  r   r  r  r-   rA  r  r  r;   r:   r  r   r7   r  rG   rV   r_  r  )r"   	name2coderc  rj  rx  r  issue_type_scope_idrN   ext_id_patternissue_type_nameissue_type_aliaslogic_type_ext_id_oldlogic_type_ext_id_mergedtemplate_coder3  s                  r#   _process_issue_typez!JiraAPIImport._process_issue_type  s   
 +)"421-6(0%(.(+'
	$ **=9 |	7JOO""''*WXbWc(de((* 't,M#'??#9#9#@#@#L#L"MRP] _3/@.A)EFG~~g& *4G)<Y)G)M(NaP]&_#'+'='='D'D'P'P&QQSTgSh$i!v->,?s'CD  ,,00 '* 1 J
 !"$//"8"8"?"?"K"K!LHUN

>:3D3D3J3JKLqP &&..3J< @SS]SdSdReg %'FF>2s:CTCT?U$V
!$/!
(nn-?FASTZZ\O)&1779&&++HHYYZ[ $0044"G_=$g. 5 

 !((*,->,?r(BJ%+,B/s:;L;L7MM!~~g.24T__5K5K5R5R5^5^4__ablmqbrassu0v-,6,=,=,C,C,K,K1 -
)
 244E3FzGXGXFY/Z,2::n6NOPSTT11u  wF  vG GFFJooF\F\FcFcFoFoEppqs& *%3 2  1,,D
) %7(
0@0@@$$++,<=$/OO""''''88jk &MM/*?*?*ABM  ).>.D.D.FH\ ]yy./25$6M 01Q6$7Mi($6M**..m4"| / H  ,,$.!*!X../-.b1?? - J "22$4#5
 OOLOO11Q61y|	7r%   u2   Обработка бизнес-процессовc                 :
   i }| j                  d      D ]
  }|||d   <    | j                  d      D ]  }| j                  j                         r y| j                  j                  j	                  |d   d           | j                  j
                  j
                  j                   d|d   d    d|d   d    }t        j                  j                  |      }|sBt        j                  j                  d	
      }t        j                  ||| j                        }|d   |_
        |d   d   |_        |j                  d       |d   D ]  }| j                  ||d      |        t        j                  j                  dd|gg dgdg      D ]J  }t        j                  j                  dd|j                   gdd|gg dg      s9|j#                  d       L |j%                          |d   D ]  }| j                  j                         r  y| j                  j
                  j
                  j                   d|j&                   d|d    }	t        j(                  j                  |	|      }
|
s#t        j)                  ||	| j                  d      }
|
j*                  sA| j                  j                  j-                  d|
j                   d|j                   d       |d   |
_        |d   |
_
        |d   D cg c]>  }| j                  j
                  j
                  j                   d|j&                   d| @ }}t        j                  j                  dd|g      |
_        t1        |
j.                        t1        |      k(  sJ d        | j                  j
                  j
                  j                   d|j&                   d|d!    }t        j                  j                  |      }|d"   j3                         }|d#k(  r|rd|_        |j                  d$       ||
_        |j                  d%      rN|d%   d   t9        t;        fd&| j                  d'            d      }	 | j=                  |      |
_        d|
_         |
j                  d        tE                | j                  xjF                  d/z  c_#         yc c}w #  | j                  jC                  d( d)|
j                   d*|j                   d+d,d-|.       Y xY w)0u   Импортируем workflowr%  r   r4  Nr   r/  entityIdr(  rX  rL   r7  r   Tr:  r8  r*  r  r+  r  r9  r.  r;  r=  )r7  r8  r  r  r  r  r  r7  rA  uN   DEV: Fatal Вероятно, сломали создание статусов!r  r>  rC  rD  r  c                 P    t        | j                  d            t              k(  S r  r	  r
  s    r#   r   z1JiraAPIImport._process_workflow.<locals>.<lambda>  s    3vzz$/?+@C	N+R r%   r  r  r  r  rV  r  r  r  r3   )$r  r4   r6   re   r  r=  r>  rW   rO  rY   r   r   rA  rQ  rR  r   r+  rS  rT  r   rU  rZ  r  rV  r   r  rW  rX  r   r   r  r  r  r;   r7   r  )r"   jira_statusesr`  jira_workflowworkflow_idr8  template_workflowr   rm  rn  rp  strr  rs  rX  ro  r  r  s                    @r#   _process_workflowzJiraAPIImport._process_workflow  s~      ++J7 	;K/:M+d+,	; "--k: Q	7M((*OO""''=+>v+F*GI!__33::FFGr-X\J]^dJeIffhivw{i|  ~H  jI  iJ  KK))--[-AH$*$6$6$:$:@T$:$U!!--[K\imixix-y)-8HM)$/7HMMMdM+  -Z8 P##M+d2C$DhOP !**//T88TVl7m8E 0 H * ''++]D&J\J\4]5?x4PRh4j+ kD)* ((*#0#? 32??,,.'+'='='D'D'P'P&QQST\T_T_S``bcrswcxby$z!#__008IT\0]
!!'!)0#'??(,	 "1 "J "11OO**22*:??*;;_`h`m`m_n oT U "1&"9
"1-"@
 zI  JP  zQ  +Rsudoo.D.D.K.K.W.W-XXZ[c[f[fZggijlim+n  +R'  +R)/)9)9)>)>xQUWnFo)>)p
&:112c:Q6RR  e  Ue  eR&*oo&<&<&C&C&O&O%PPRS[S^S^R__abqrvbwax#y ",,008H0I	"1&"9"?"?"A"h.97;I4NNTN2'0
$"&&x0 / 9$ ?I"&R ,,Y7 #K
151P1PQ\1]
.59
2 D1g32h LOO11Q61cQ	7b +R,11UV_U` a88B7HHijrjwjwixxy{&%0 ( 2 s   AS5S?Tu    Обработка схем БПc                 	   | j                  d      D ]p  }| j                  j                         r y | j                  j                  j                  j                   d|d    }t
        j                  j                  dd| dg      }|sJ d|d           | j                  j                  j                  j                   d|d	    }t
        j                  j                  |
      }|sCt
        j                  j                  d      }t
        j                  ||| j                  d      }|j                  rI|d   |_
        |j                  dd      |_        ||_        ||_        ||_        |j                  d       n3| j                  j                   j#                  d|j                   d       g }|d   j%                         D ]D  \  }}	| j                  j                  j                  j                   d| }
t
        j&                  j                  ddd|
 dg      }t
        j(                  j                  dd|gdd|gg      }|ru|j                  si| j                  j                   j#                  d|j                   d|j*                   d|j                   d       |j-                  |j*                         |st
        j(                  j                  dd|gdd|gg dg dgd       }|rj| j                  j                   j#                  d|j                   d|j*                   d|j                   d!       |j-                  |j*                         t
        j)                  d"||| j                  #      }| j                  j                  j                  j                   d|	 }t
        j                  j                  dd| dg      }||_        |j                  d       |j-                  |j*                         G t
        j(                  j1                  d$d%|gdd|gg dgd       }|D ]  }|j3                  d&        t5                | j                  xj6                  d'z  c_        s y )(NrF  r/  r  r7  r  r  r.  u+   Не импортировался workflow r   r(  rH  rL   Tr2  r   r   r   r:  rE  rF  r  r  rN   r1  rI  rG  rH  rI  rJ  rK  r  r  rL  r  rM  rM   r  rJ  r3   )r  r4   r6   r=  r>  rW   rO  rY   rY  rZ  r   r   rZ  r[  rh  rA  re   r  r   r]  r\  rM   r   rL  r   rS  r7   r  )r"   rF  default_task_workflow_ext_idrZ  ro  rp  r3  rr  logic_type_idr  rx  rN   rw  rh  r8  rs  s                   r#   _process_workflow_schemez&JiraAPIImport._process_workflow_scheme  s   #//0AB _	7O((*.2oo.D.D.K.K.W.W-XXZ[jk|[}Z~+($*$6$6$:$:8VXtWuuxUyBz$:${!(|,WXghyXzW{*||("&//"8"8"?"?"K"K!LB_cOdNef**..6F.GI!--117H1I"..%+#$(	 / 	 ((!0!8	!0!4!4]B!G	2G	/5J	2,;	)40&&..@@P Q< = M0?@S0T0Z0Z0\ /0,}'+'='='D'D'P'P&QQSTaSb$c!#0044XvQTUfTggjOk<l4m
--11%sJ7$c95 2   4 4OO**22G	GW X**.))4]^h^m^m]n oCD
 "((3!1155)3
;(#y966	  )- 6 D ..66KINNK[ \..2ii[8ablbqbqar sst
 &,,TYY7 !11'0#-"+#'??	 2 D &*__%;%;%B%B%N%N$OrR_Q`"a!--11(FN__bLc9d1e'/$		d	+$$TYY/_/0d "(!7!7!<!<X}5 #y1.
 !% "= " + 3T23 LOO11Q61_	7r%   c                    t         j                  j                  }| j                  d      D ][  }|j	                  | j
                        }|j                  | j                  j                   d| t        j                  |             ] y )Nr  r  )r  r  r  r  rY   rU   r  r4   r   r  r  )r"   r  r  r   s       r#   _cache_all_userszJiraAPIImport._cache_all_usersZ  sl    <<%%))'2 	VI--.CLLDOO../vcU;V\\)=TU	Vr%   c                    t               | _        g dg dg}|r8t        j                  j	                  dd|gg      }|j                  dd|g       t        j                  j	                  |dg      }|D ]T  }|j                  j                  j                         D ]+  \  }}| j                  j                  t        |      |f       - V t	        | j                        | _        y	)
u  
        Кеширует приоритеты системы

        Args:
            field_config_scheme (CmfCustFieldConfScheme, optional):
                Схема кнфигурации полей установленная проекту.
                Если не указана, то кешируются все импортированные приоритеты системы.
                Defaults to None.
        )r   r1  rO   r  cache_schemesrA  r.  r2  r  r  N)r  priorities_cacherW   r  r   r   r  r  r   r   r  r-   )r"   field_config_schemer  r  field_configsfield_configkvs           r#   r  zJiraAPIImport._cache_priorities`  s     !$ &&
 %66;;'0C/DE  <   NNHd,<=>4499; : 
 * 	7L$,,2288: 71%%))3q61+67	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(  s|  yw)r3   Nr/   r  rO   r   s     r#   r  z5JiraAPIImport._get_cached_priority.<locals>.<genexpr>       T(x{e?SXT   Nc              3   4   K   | ]  }|d    k(  s|  yw)r   Nr/   r  s     r#   r  z5JiraAPIImport._get_cached_priority.<locals>.<genexpr>  r  r  u   Приоритет 'uP   ' не найден. Возможно он еще не импортирован.)r   r{  r8   )r"   r   priority_tuples    ` r#   r  z"JiraAPIImport._get_cached_priority  s{     Td&;&;T
 %!! Td&;&;T
 %!!.ug  6F  G  H  	Hr%   u   Простой дампr   c                    t        j                         }| j                  j                         j	                  | d      }| j                  j                         j	                  | d      }|j                         rt        j                  |       t        |d      5 } |       D ]H  }| j                  xj                  dz  c_	        |j                  t        j                  |      dz          J 	 d d d        t        j                  ||       | j                  j                  d       t        j                         |z
  }| j                  j                   j#                  d|j$                   d	|d
d       y # 1 sw Y   xY w)N.jsonz.json.dirtyr,  r3   r  TrD  u
   Дамп 'u   ' выполнен за r  r  )r  r  r4   rq   rr   rs   r~   r  rt   json_object_countr  ru   r  r}   r   rA  re   r  r)   )	r"   api_funcr   r  ry   r   rz   r  r  s	            r#   _simple_dumpzJiraAPIImport._simple_dump  s8   ^^OO557@@D6P	99;DDv[EYZIIi -& 	0!z 011Q61

3$./0	0 	M9-t,^^"##j1B1B0CC[\^_b[cck$lm	0 	0s   AE;;Fc              #     K   | j                   j                         j                  | d      }|j                         r5t	        |d      5 }|D ]  }t
        j                  |        	 d d d        y y # 1 sw Y   y xY ww)Nr  r+)r4   rq   rr   rs   rt   ru   r  )r"   r   ry   rz   r  s        r#   r  zJiraAPIImport._simple_get  sw     OO557@@D6P	i& *! *C**S/)** * s   A	BA5+
B5A>:Bc              #     K   | j                   j                         j                  d      }|j                         rt        j                  |      D ]  }|j                  d      r|j                  d      r,| j                   j                  j                  d| d|        Rt        | d| dd      5 }t        j                  |       d d d         y y # 1 sw Y   xY ww)Nr  rL  rM  u(   Пропускается каталог r  
/info.jsonr  )r4   rq   rr   rs   r~   listdirr  re   r  rt   ru   rv   )r"   r3  rb  rz   s       r#   r
  zJiraAPIImport._get_projects  s     oo779BB:N jj5 '
&&x0&&w/OO**003[\g[hhijtiu1vw[M:,jA4H 'A))A,&' ''  ' 's   B3C%5CC%C"	C%c                 F    | j                         D ]  }||d   k(  s|c S  y r  )get_projects)r"   rb  rY  s      r#   get_projectzJiraAPIImport.get_project  s-     --/ 	$L\$//##	$r%   c                     | j                   j                         j                  d|d      }t        |d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nr  workflows.jsonr  )r4   rq   rr   rt   ru   rv   )r"   rb  workflows_filerz   s       r#   rP  z/JiraAPIImport._get_simplified_project_workflows  sU    ::<EE
$4
 .$' 	 199Q<	  	  	 s   AA c              #      K   | j                   j                         j                  d|      }t        | dd      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nr  /issue_types.jsonr  r4   rq   rr   rt   ru   r  r"   rb  r3  rz   r  s        r#   rN  z*JiraAPIImport._get_issue_types_for_project  sj     oo779BB:zZ[M!23T: 	&a &jjo%&	& 	& 	&   :A1A%	A1%A.*A1c              #      K   | j                   j                         j                  d|      }t        | dd      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nr  /statuses.jsonr  r  r  s        r#   rO  z'JiraAPIImport._get_statuses_for_project  i     oo779BB:zZ[M0$7 	&1 &jjo%&	& 	& 	&r  c              #      K   | j                   j                         j                  d|      }t        | dd      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nr  /roles.jsonr  r  r  s        r#   r  z JiraAPIImport._get_project_roles  si     oo779BB:zZ[M-t4 	& &jjo%&	& 	& 	&r  c              #     K   | j                   j                         j                  d|d      }t        j	                  |      D ]4  }t        | d| dd      5 }t        j                  |       d d d        6 y # 1 sw Y   AxY ww)Nr  ra   r  r  r  r4   rq   rr   r~   r  rt   ru   rv   )r"   rb  	board_dirr  rz   s        r#   r  z!JiraAPIImport._get_project_boards  s     OO557@@ZYab	

9- 	#H1XJj94@ #Aiil"# #	## #   ABA;0B;B	 Bc              #     K   | j                   j                         j                  d|d      }t        j	                  |      D ]4  }t        | d| dd      5 }t        j                  |       d d d        6 y # 1 sw Y   AxY ww)Nr  r  r  r  r  r  )r"   rb  sprints_dir	sprint_idrz   s        r#   r  zJiraAPIImport._get_all_sprints  s     oo779BB:z[deK0 	#IQyk<dC #qiil"# #	## #r  c              #      K   | j                   j                         j                  d|      }t        | dd      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nr  /versions.jsonr  r  r  s        r#   r=  z#JiraAPIImport._get_project_versions  r  r  c              #      K   | j                   j                         j                  d|      }t        | dd      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nr  /components.jsonr  r  r  s        r#   r3  z%JiraAPIImport._get_project_components  sj     oo779BB:zZ[M!12D9 	&Q &jjo%&	& 	& 	&r  c                 p   d}d}| j                   j                         j                  d|d      }|j                         rtt	        |      j                         D ]X  }|j                         s|j                  j                  d      r0|j                  d      j                         r|dz  }|dz  }Z ||fS )Nr   r  r  rK  rO  r3   )	r4   rq   rr   rs   r   rQ  rR  r   r  )r"   rb  r  unprocessedrV  rW  s         r#   r  z"JiraAPIImport._count_project_tasks  s    OO557@@ZY`a	 O335 (==))*=>$$]3::<1$K
 k!!r%   c              #   ~  K   | j                   j                         j                  d|d      }|j                         s,| j                   j                  j                  d| d|        y d}t        |      j                         D ]  }|j                         s|j                  }|j                  d      r2|r |j                  d      j                         sT||k  r|dz  }_|||z   k\  r y t        |j                  d	      d
      5 }	t        j                  |	       d d d        |dz  } y # 1 sw Y   xY ww)Nr  r  u   Каталог u    отсутствует. Возможно он был удален или еще не создан. Необходимо повторно запустить импорт проекта r   rK  rO  r3   	info.jsonr  )r4   rq   rr   rs   re   r  r   rQ  rR  r   r  rt   ru   rv   )
r"   rb  r  r  only_processingrV  r  rW  task_idrz   s
             r#   r  zJiraAPIImport.get_project_tasks	  s3    OO557@@ZY`a	!OO""**!) -hhrgsu Y//1 	H??$mmG 34x'8'8'G'N'N'Pu}
%h''4d; #qiil"#QJE#	# #s   DD=	D1!D=1D:	6D=c                    |d   d   }i }|d   D ]t  }|d   dvr|d   j                         D ]T  \  }}|j                  |d|i      }|j                  di       }|j                  |d         rAt        |d	         ||d   <   V v |j	                         D ]  }i }	|d   j                         D ]0  \  }}
|	j                  |
t                     }|j                  |       2 i |d<   |	j                         D ]+  \  }}t        |      d
kD  r	||d   d<   |D ]
  }||d   |<    -  |j	                         D cg c]  }| c}|d<   |S c c}w )u   
        Создает структуру схемы экранов проекта из данных плагина "Smart Jira Configuration"
        schemesissueTypeScreenSchemeglobalActionsr   )BROWSEPROJECTSCREATEISSUES
EDITISSUESr  issueTypeIdactionsr  r3   r8  rd  )r   rT  rY   r  r   r  r  r   )r"   smart_configscreen_schemerd  r  rj  r   rc  r  issue_type_screensr  r  issue_type_screenr  s                 r#   _get_project_screen_schemez(JiraAPIImport._get_project_screen_scheme%  s    %Y/0GH "?3 	AFd|#SS(.y(9(?(?(A A$u(33MMS`Cab
$//	2>{{6$<0,/h,@GF4L)	A	A &,,. 	FJ!#%/	%:%@%@%B #!	+66y#%H

6"# %'Jy!.@.F.F.H F*!7w<!#7HJy))4% FF4EJy)&1F	F	F 4?3E3E3G'Ha'Hm$ (Is   9	E
c                    t        |d         j                  d      }|j                         rt        j                  |       |j                          |d   d   }|D ]  }|d   }	 | j                  j                  j                  d| d       | j                  j                  t        j                  j                  |            }t        j                  d| d	d
      }|j                  |      }t!        |d      5 }	|	j#                  |       d d d         y # 1 sw Y   xY w# t$        $ r/}
| j                  j'                  d| d|
 ddd       Y d }
~
d }
~
ww xY w)Nr3  r4  r5  r6  r   u(   Дамп бизнес-процесса 'u   ' как XMLr:  r;  Tr<  zwb+uB   Не удалось получить бизнес-процесс 'u   ' как XML: rB  rO  rx   r  
error_type)r   rr   rs   r}   rmtreemkdirr4   re   r  rG   get_workflow_as_xmlr  r  quoter   rP  rt   r  r8   r;   )r"   rY  r^  rf  rg  r  rc  ra  rb  rz   r  s              r#   _get_project_workflows_as_xmlz+JiraAPIImport._get_project_workflows_as_xmlH  sa   \-89BB;O!MM-(%&<=jI+ 	M)&1M&&++.VWdVeeq,rs#yy<<V\\=O=OP]=^_$+$9$9d3#'%! !. 6 67H I-/ *1GGL)*	* * ))XYfXgguvyuz{*%	 *  s1   &BD(?DD(D%	!D((	E 1%EE c                    | j                   j                  |      D cg c]  }t        |d          }}g }|r| j                   j                  |      }n<| j                   j	                  d      }|j                  dt        |d         d       |D cg c]  }|d   dk7  rt        |d          }}i }	|D ]  }t        |d         }
t        |d         }| j                   j                  |      D ]S  }|	j                  |d   |d   i d	      }|
dk(  r|D ]  }||v r||d
   |d   d|d   |<    B|
|d
   |d   d|d   |
<   U  |	S c c}w c c}w )Nr9  r   T)
is_defaultr8  )r  fieldConfigurationIdr  r  )r   contextisHidden
isRequired)issuetypeIdr  r  r  )rG   get_issue_for_projectr-   "get_field_configuration_issue_typeget_field_configr   get_field_config_fieldsrT  )r"   field_configuration_scheme_idrb  rc  issue_types_projectfield_configuration_mappingfield_config_defaultfield_configurationissue_types_schemefields_usedrj  field_configuration_idr   
field_useds                 r#   _get_field_config_issue_typez*JiraAPIImport._get_field_config_issue_typed  s    #ii===T
 
4 !
 
 ')#(*.))*V*VWt*u'#'99#=#=#=#N '..#,,/0DT0J,K (C
#"=1Y> #M23
 
 #> 	 3M BCM%()<=S)T%U"::;QR (33$K#Dk#%
 !I-&9 
%);;$ ,6(-j(9*/*==
9-j9	 (5$)*$5&+L&9<Jy)-8'		: q
&
s   EEc                    | j                   j                  |      }| j                  ||      }|j                         D ]  }|d   }|j	                  d      s| j                   j                  ||      }|s:| j                   j                  ||      }	 | j                   j                  ||      }| j                   j                  ||      }|j!                  d      r5|d   j#                         D ]  \  }}|j%                  |       |||d<     |D ]2  }|d   j!                  |      }|s|j%                  |       |.||d<   4  |S # t        $ rt}	i }| xj                  dz  c_	        d| d| d|	 }
t        |	d      r|
d|	j                  j                   z  }
| j                  j                  |
d	d
d       Y d}	~	d}	~	ww xY w)u   
        Возвращает список используемых полей в проекте
        в виде сруктуры как через плагин "Smart Jira Configuration" в box версии
        r   customfield_r3   u9   Не удалось получить опции поля u    в контексте r  responsez HTTP: Response text -> zERR-0109r  rx   r  NisAnyIssueTyper  options)rG   &get_project_field_configuration_schemer  r   r  !get_field_context_project_mappingget_field_contextget_field_context_optionr8   r:   hasattrr  r   r4   r;   #get_field_context_issuetype_mappingrY   r   r   )r"   rb  r  r  r  field_used_id
context_idr  context_optionr  
error_textcontext_issuetypesrj  context_issue_types                 r#   _get_project_fields_usedz&JiraAPIImport._get_project_fields_used  s    
 )-		(X(XYc(d%778UWab%,,. *	GJ&t,M ++N;DD]T^_Jii11-LG!%!C!CMS]!^ "&!N!N}^h!i{{+,9CI9N9T9T9V G5M#5&--g6%18F*95G
 &8 GM)3I)>)B)B=)Q&- &--g6%18F*95GI*	GX =  !#1$XYfXgg~  @J  K  KM  NQ  MR  S
3
+$<S\\=N=N<O"PPJ))4%	 *  s   E	GA)GGc              #   t   K   |d    d}t         j                  |      D ]  }|dk(  r	|| d| d  y w)Nr  z/attachmentsall_attachments.zipr  )rm  ry   )r~   r  )r"   r"  attachments_pathrm  s       r#   rw  z$JiraAPIImport._get_issue_attachments  sX     #L12,?$45 	[I11 );K:LAi[8YZZ	[s   68c              #      K   |d    d}t        |d      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nr  z/comments.jsonr  )rt   ru   r  )r"   r"  comments_file_pathrz   r  s        r#   rF  z!JiraAPIImport._get_issue_comments  sW      %l 34NC$d+ 	&q &jjo%&	& 	& 	&s   AA 	A A	Ac                     |d    d}t        |d      5 }t        j                  |      }d d d        xs g S # 1 sw Y   xY w)Nr  z/worklog.jsonr  rt   ru   rv   )r"   r"  r  rz   r?   s        r#   r&  z!JiraAPIImport._get_issue_worklogs  sN     %l 34MB$d+ 	q))A,C	yb	 	s	   9Ac                     |d    d}t        |d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nr  z/properties.jsonr  r  )r"   r"  properties_file_pathrz   s       r#   ro  z#JiraAPIImport._get_issue_properties  sC    "'"5!66FG&- 	 99Q<	  	  	    4=c                     |d    d}t        |d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nr  z/watchers.jsonr  r  )r"   r"  watchers_file_pathrz   s       r#   rL  z!JiraAPIImport._get_issue_watchers  sB     %l 34NC$d+ 	 q99Q<	  	  	 r  c                     | j                   j                         j                  d      }|j                         r+t	        |d      5 }t
        j                  |      cd d d        S i S # 1 sw Y   i S xY w)Nglobal_settings.jsonr  )r4   rq   rr   rs   rt   ru   rv   )r"   global_settings_file_pathrz   s      r#   r\   z'JiraAPIImport._get_jira_global_settings  sd    $(OO$E$E$G$P$PQg$h!$++-/6 $!yy|$ $	$	s   A''A1c                    | j                   j                         }| j                  j                         j	                  d      }t        |d      5 }t        j                  ||       d d d        |d   | _        y # 1 sw Y   xY w)Nzcloud_id.jsonrp   cloudId)	rG   get_cloud_idr4   rq   rr   rt   ru   rx   r[   )r"   r=  	data_filerz   s       r#   _get_cloud_idzJiraAPIImport._get_cloud_id  sk    yy%%'OO557@@Q	)T" 	aIIdA	Y	 	s   A::Bc                    | j                   j                  j                  d       | j                  j	                         D ]p  }|d   s		 | j
                  j                  |d         |d<   |d   D ]>  }	 | j
                  j                  |d   |d         }||d<   |d   j                  |       @ r | j                  | j                         y #  Y cxY w#  Y xY w)Nu0   Получение контекста полейr   r   r  r  )
r4   re   r  r{   r   rG   _get_field_context_get_field_optionsr2  r   )r"   r   r  r  s       r#   _get_fields_contextz!JiraAPIImport._get_fields_context  s    ##$VW%%,,. 	E?#'99#?#?d#Li $Y/ G"&))">">uT{GTXM"Z-4	*i(//8		" 	 0 01s$   
)C4;C/CCCCc                    t         j                  j                  }|d   }| j                  |      \  }}| j	                  ||      D ]  }| j
                  j                         r yt        |d         j                  d      }| j
                  j                         j                  d      }| j
                  j                         j                  d      }	|j                         r
t        j                  ||	       t        |d      5 }
t        |d      5 }t        |	d      5 }|
D ]  }||vs|j                  |       t        j!                  |      }|j#                  | j$                        }|sL|j'                  | j
                  j(                   d	| t+        j,                  |              	 ddd       ddd       ddd       |j/                          t        j0                  |	|       t        |d         j                  d
      }| j
                  j                         j                  d
      }| j
                  j                         j                  d      }|j                         s+t        |d      j3                          t        j                  ||       t        |d      5 }
t        |d      5 }t        |d      5 }|
D ]  }||vs|j                  |        	 ddd       ddd       ddd       |j/                          t        j0                  ||        y# 1 sw Y   xxY w# 1 sw Y   }xY w# 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   nxY w# 1 sw Y   rxY w)u]   
        Собирает пользователей и группы из задач
        r   r  Nr  r  zusers.json.newr>  r,  r  r  zgroups.json.newa)r  r  r  r  r  r4   r6   r   rr   rq   rs   r}   copyrt   r  ru   r  rY   rU   r  r   r  r  rS  r   close)r"   rY  r  rb  r  r  r"  issue_users_pathall_users_pathall_users_path_newf1f2f3rS  r  r   issue_groups_pathall_groups_pathall_groups_path_news                      r#   _collect_users_and_groupsz'JiraAPIImport._collect_users_and_groups  s    <<%%!$'
22:>Q++Jk+J %	BE((*#E,$78AA,O!__>>@II,WN!%!B!B!D!M!MN^!_&&(N,>?*C0 *Bnc2 *b!"4d; 
*r(* 	*#'r>$&HHTN04

40@I*3--*FC'*(0/3/A/A.B&,N,2LL,C)*	*
*** !'').? $U<%8 9 B B= Q"oo??AJJ=YO"&//"C"C"E"N"NO`"a '')_c*002O-@A+S1 3Ros3 3r!"5t< 3(* 3#'r>$&HHTN3333 "((*/AK%	B
* 
** ** *03 33 33 3s   	ML6#
L)	.AL)	2A L)	3L6;M.M(;M
M	M	'M/M()L3.L66M ;MM	MMM%!M((M1	c                     | j                   j                         }| j                  j                         j	                  d      }t        |d      5 }t        j                  ||       d d d        y # 1 sw Y   y xY w)Nr  rp   )rG   get_configurations_of_jirar4   rq   rr   rt   ru   rx   )r"   global_settings_datar  rz   s       r#   _dump_jira_global_settingsz(JiraAPIImport._dump_jira_global_settingsH  se    #yyCCE$(OO$E$E$G$P$PQg$h!+T2 	/aII*A.	/ 	/ 	/s   A00A9u/   Обработка ссылок в текстеr   attachments_dirc                 	   d}|s|S t        |d      j                  d       D ].  }d}|j                  d      rd}|j                  |   }	 |j	                  d      r)| j
                  j                  j                  d|        c|j	                  d      s4t        j                  j                  | j                  j                  |      }|j	                  | j                  j                        s)| j
                  j                  j                  d	|        t        j                  |j                  d
      d         \  }}	|s*| j
                  j                  j                  d|        Lt!        j"                  dt        j                  j%                  |            }
|
ro|
d   |
d   j                  dd      }|d   k(  rM|d   d   }t'        t)        fd|      d       }|r*| j
                  j                  j                  d|        t        j                  j%                  |j                  d      d   j                  d
      d         }t*        j,                  j/                  |      }|j1                  |      }t*        j2                  j5                  ||d   | j
                  j6                  j6                  j8                        }|sNt*        j3                  | j
                  ||d   | j
                  j6                  j6                  j8                        }||_        ||_        d|_        |jA                          tC                1 t        |d      }|j                  ddi      D ]  }|j                  j5                  d       r#| jI                  |j                  d    |d!          A|j                  j5                  d"      r#| jI                  |j                  d"   |d!          t        j                  jK                  |j                  d         }t        j                  jM                  |jN                        }| jI                  |d#   d   jQ                         |d!           |S # tD        $ rE}tG                | j
                  j                  j                  d| d|        |dz  }Y d }~d }~ww xY w)$Nr   r;  c                 J    | j                  d      xs | j                  d      S r  r  r  s    r#   r   z+JiraAPIImport._dump_links.<locals>.<lambda>T  s"    CLLQWDXDo\_\h\hin\o r%   r  r  zmailto:u   Это почта: httpuH   Это внешняя ссылка, оставляем как есть: r  u   Это не файл: r  r3   r  r  r   rW  c                 ,    | j                  d      k(  S r  r   r  s    r#   r   z+JiraAPIImport._dump_links.<locals>.<lambda>m  s    $((4.I:U r%   uE   Этот файл уже обработан во вложениях: r  r  r   )r  
obj_ext_idr>  )r4   r  r  r>  Fu0   Не удалось скачать ссылку r  r  r  r  r  r  r  r  r   ))r   r  r  r  r  r4   re   r  r  r  urljoinrG   r[  r  r  r   r  r  r  r   r   rW   r  _get_filenamerr   CmfImportDownloadrY   r=  r>  pathr   
downloadedrA  r7   r8   r9   r  r  r  r  r  )r"   r   r  r"  r:   r  r   r[  r  encodingr  attach_filenamers  r  r   rm  ry   download_jobr  doc_soupr  r  r  s                         @r#   _dump_linkszJiraAPIImport._dump_linksN  s:   
 v.778op 1	 CC||F#))C.C, >>),OO**225H3NO~~f- ,,..tyy}}cBC~~diimm4OO**225}  B  ~C  4D  E&/&:&:399S>!;L&M#	8 OO**225KC53QRII&QSYS_S_SgSghkSlm	 )!I&/l&8&8a&@O OA$66&+Hol&C!%f-UWb&cei!j! OO22::  >C  DG  CH  <I  J$||++CIIcN2,>,D,DS,I!,LM"..<<TB	+44Y?	%77;;GLT{HLH^H^HeHeHqHq  <  s $#)#;#;tADGLT{HLH^H^HeHeHqHq $< $sL %.!$(!*/'!!#[1	 d !}5$$G\+B$C 	SCyy}}./##CII.?$@%BUV/##CIIo$>l@ST#\\22399V3DE
--j.>.>?##E&M!$4$:$:$<eL>QR	S    &&..1abeaffhijhk/lma
 s4   9Q7BQ7AQ70B"Q7D?Q77	S :S  Sc                 "   | j                   D ]  }| j                   |   d   s|j                  |      s(||   j                  di       }|j                         D ]  }|j                  d      s|d   |d   |d   |d   d}|j                  d      r$|d   j                         D cg c]  }| c}|d<   | j                   |   j                  dg       }||vr|j	                  |          | j                  | j                          y	c c}w )
u   
        В box версии, контексты полей получаем из плагина "Smart Jira Configuration"
        r   r  r   r   isGlobalContextr  )r   r   r+  r  r  N)r{   rY   r   rT  r   r   )r"   r  r   contextsr  context_dataoptionfield_contexts           r#   _get_field_contextsz!JiraAPIImport._get_field_contexts  s%    ** 	J##J/9??:.":.229bAH#??, {{4(!$-#FO'./@'A&-.>&?	  ;;y)DKIDVD]D]D_.`&v.`L+ $ 0 0 < G G	SU V}4!((6	, 	 0 01 /as   (	Dc                    | j                   j                  |d         }| j                  D ]~  }| j                  |   d   s|d   j                  |      s,|d   |   j                  d      }|r|D ]  }|j                  d      s.| j                  j                  d| t        j                         B| j                   j                  rK| j                  |   j                  dg       D ](  }|d   |d   k(  s|j                  d      s!|d   |d<   * || j                  |   d   vs| j                  |   d   j                  |        | j                  |   d	   d   j                  d
d      d   }|dk(  r0|d   |   }|s[| j                  || j                     |d          |dk(  r7|d   |   xs g }	|	D ]$  }| j                  || j                     |d          & |dk(  r)|d   |   }
|
s| j                  |d   |   |d          |dk(  r*|d   |   xs g }|D ]  }
| j                  |
|d           |dk(  s|d   |   }| j                  |   j                  dg       }|sJ|j                  |       t        t!        |            | j                  |   d<    | j#                  | j                         y)u   На коробке только через мету задачи можно получить варианты выбора полей

        Args:
            issue (dict): задача
        r   r   r   allowedValuesr   u   Выбор без id: r  r<  r   r7  r3   r  
userpickerr  multiuserpickergrouppickermultigrouppickerr  N)rG   get_issue_metar{   rY   r4   r5   rc   r  rV   r   r   r  rU   r  r2  r   r  r   )r"   r"  metar   r  r.  cur_optcustom_field_typesr  r  r  r  r   s                r#   r  z JiraAPIImport._get_field_options  s    yy''e5** 0	QJ##J/9>%%j18nZ044_EG% SF!::d+++.DVH,Mw_ yy'+'7'7
'C'G'G	SU'V MG&t}t<#)::j#9:@:LGJ$7M
 ")9)9*)Ei)PP ,,Z8CJJ6RS "&!1!1*!=h!G!Q!W!WX[]^!_`b!c!\1Xz2''T]](;U<=PQ#'88h
39r! RD''T]](;U<=PQR#}4h
3%%eHoj&A5CVW#'99x4:# BE%%eU<-@AB#x/x4**:6::9bINN6*>B3w<>PD$$Z0;a0	Qd 	 0 01r%   r  ri  c                    | j                   j                  | j                  |d   |      }t        |d         j	                  d      }t        |d      5 }t        j                  ||d       d d d        y # 1 sw Y   y xY w)Nr   r3  r  rp   FrJ  )rG    get_simplified_project_workflowsr[   r   rr   rt   ru   rx   )r"   r  ri  r4  r  rz   s         r#   "_dump_simplified_project_workflowsz0JiraAPIImport._dump_simplified_project_workflows  sy    
 II>>MMDM
	 gm45>>?OP.$' 	81IIiI7	8 	8 	8s   A66A?c           
         t        d      5  d}	 |j                         }||j                  |       	n	 ddj                  |D cg c]  }| c}       d}| j                  j                  |t        |      d	      }	|	d
   }
|
D 	]3  }	 | j                  j                         r	 t                 d d d        y| j                  j                  j                  d|d    d       |j                  t        |d               }|j                  t        |d         dz         }|j                         rt        j                   ||       |j#                  d       ||d<   | j%                  |       |j                  d      }| j                  j&                  j&                  j(                   d|d    }|d   d   D ]k  }|d   }|d   }|d   }|j                  t        |            }|j                  dt        |            }| d| }t*        j,                  j                  || j                  j&                  j&                  j(                  g d      }|sKt*        j-                  || j                  j&                  j&                  j(                  | j                  d      }||_        ||_        ||_        |j4                  s|j                         sd|_        ||_        |j;                          |j                  d      sJ| j=                  |d   | j>                     |       n t                | j@                  j                  d      r!|j                  d      }|j                         rtB        jE                  |       tG        |d      5 }| j                  jI                  |d         }|D ]  }|j                  di       j                  | j>                        r"| j=                  |d   | j>                     |       |j                  d i       j                  | j>                        s|| j=                  |d    | j>                     |        tJ        jM                  ||       d d d        | j                  jN                  r=|d!   d"   d#kD  r2| j                  jQ                  |d         D cg c]  }| c}|d!   d$<   |d!   d$   D ]6  }|j                  d      s| j=                  |d   | j>                     |       8 |d   j                  d%      r=| j=                  |d   j                  d%      j                  | j>                        |       |d   j                  d&      r>| j=                  |d   j                  d&i       j                  | j>                        |       |d   j                  d'i       r>| j=                  |d   j                  d'i       j                  | j>                        |       || jS                  |d(   d)   ||      z  }|j                  d*      }|j                         rtB        jE                  |       | j                  j                  j                  d+       tG        |d,      5 }| j                  jU                  |d         D ]  }|j                  di       j                  | j>                        r"| j=                  |d   | j>                     |       |j                  d i       j                  | j>                        r"| j=                  |d    | j>                     |       |jW                  tJ        jY                  |      d-z          | j                  xjZ                  dz  c_-        | j                  j]                  d.       || jS                  |d/   ||      z  } 	 d d d        | j                  j_                  |d         |d0<   | j                  ja                  |d         }|j                  d1      } tG        | d      5 }tJ        jM                  ||       d d d        | j                  jc                  |d         }!|!D ]!  }"| j=                  |"| j>                     |       # |j                  d2      }#tG        |#d      5 }tJ        jM                  |!|       d d d        t        j                   ||       |j#                  d       |j                  d3      }$t        |      je                  dd4      |d<   tG        |$d      5 }tJ        jM                  ||       | j                  xjZ                  dz  c_-        | j                  j]                  d5       d d d        |j                  d6      }%tG        |%d7      5 }|jW                  d4       d d d        t                	6 	 |j                  |       		 d d d        y c c}w # 1 sw Y   xxY wc c}w # 1 sw Y   :xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   ~xY w# tf        $ r4}&|dz  }| j                  ji                  d8| d9|& d:d;d<=       Y d }&~&d }&~&ww xY w# t                w xY w# tf        $ r;}&| j                  ji                  d>|d?    d@| d9|& d:d;d<=       |dz  }Y d }&~&d }&~&ww xY w# 1 sw Y   y xY w)ANFrv  r   Tzid in (r  rf  zchangelog,renderedFields)r  expandr  r3   u   Задача 'r   rV  r   rL  exist_okr  rs  r/  r   rW  rY  content)r   r  r#  )r  r>  r   )r  r>  r4   rZ  r   r  zworklog.jsonrp   r  r  r  (   r  r   r  rR   r  r   zcomments.jsonu#   Дампим комментарииr,  r  r$  r   r  zproperties.jsonzwatchers.jsonr  r   r  rO  r  u0   Не удалось скачать задачу r  zERR-0111r  rx   r  uB   Не удалось получить задачи проекта 'r   r  )5r   rY   rz  r   rG   rE  r   r4   r6   r7   re   r  rr   r-   rs   r}   r   r  r  r=  r>  rW   r"  r   r  r#  r  r$  rh  rA  r  rU   r]   r~   r  rt   issue_get_worklogru   rx   rV   get_changelogr)  get_commentsr  r  r  rx  get_issue_remotelinksget_issue_propertiesget_watchersr  r8   r;   )'r"   rV  rY  task_chunk_queuetasks_that_are_donerz  rk  r  rE  r  r  r"  rW  task_dir_tmpr  task_ext_idattatt_idrm  download_urlatt_pathatt_path_tmp
att_ext_idr'  worklog_file_namerz   worklogsr+  r-  comments_file_namer$  rB  properties_filewatchersrQ  watchers_file	info_pathrY  r  s'                                          r#   _dump_task_partzJiraAPIImport._dump_task_part  s
   51 a	0F-113
%$((4V #DIIj.Q7w.Q$R#SSTUC#yy}}!*o9  -  H
 &h/F!' E)D)#88:'(D 'Lma	0 a	0* !OO2277.uVW8XY'0'9'9#eDk:J'KH+4+=+=c%+>NQY>Y+ZL'0 &Hl C(...=2>E,/ 33E:.6.?.?.NO-1__-C-C-J-J-V-V,WWYZ_`dZeYf*gK',X|'D &),T,/
O	/29~+:+C+CCK+P/;/D/D]TWX^T_/`0;}Bvh-G
/5/G/G/K/K/9040F0F0M0M0Y0Y+C 0L 0"
 (4393K3K3=48OO4J4J4Q4Q4]4]37??8<	 4L 4&L 5> 14@ 14< 1#/#:#:,BUBUBW>CL$;CFL$@$0$5$5$7#&778#4$($7$7(+Hdmm(D(4%&7&> 'L#88<<=RS4@4I4I.4Y 1#4#;#;#=$&II.?$@%)*;T%B !;a/3yy/J/J5QU;/WH3; %v+2;;x+D+H+H+W,0,?,?@QRVR_R_@`bn,o+2;;~r+J+N+Nt}}+],0,?,?@WX\XeXe@fht,u	%v
 %)IIh$:!;  $yy53Eg3NQS3S;?99;R;RSXY]S^;_C"07GC"k 2; ? ,1+=k+J h#*;;x#8$($7$78I$--8XZf$gh  %X22:> $ 3 3E(O4G4G
4S4W4WX\XeXe4fht u$X229= $ 3 3E(O4G4G	SU4V4Z4Z[_[h[h4ikw x$X22:rB $ 3 3E(O4G4G
TV4W4[4[\`\i\i4jlx y"d&6&6u=M7N}7]_npu&vvF1=1F1F1W.188: "		*< = OO22778]^!%&8$!? 	p1/3yy/E/EeDk/R !pG'.{{8R'@'D'DT]]'S(,(;(;GH<Mdmm<\^j(k'.{{>2'F'J'J4=='Y(,(;(;GN<STXTaTa<bdp(q$%GGDJJw,?$,F$G$(OO$E$E$J$E$(OO$<$<Y$G$*d.>.>w~?VXgin.o$oF!p	p 48993R3RSXY]S^3_E-0 *.)G)Gd)TJ.:.C.CDU.VO!%ot!< 9 $		*a 89 (,yy'='=eDk'JH+3 Z $ 3 3GDMM4JL YZ,8,A,A/,RM!%mT!: 7a $		(A 67"KKh?+1141@(0(9(9+(FI25h-2G2GRT2UE,/!%i!6 A! $		% 3 $ A AQ F A $ 8 8 @A )1(9(9-(HI!%i!5 , !, 'LKE)` $''/}  a	0 a	0 /Rv!; !;C"(	p 	p"9 97 7A A, ,( "aKF OO55"RSXRYY[\_[` a *)2+1	 6   'L   OO--(01ZL3%I"!*#) .  aKF oa	0 a	0s@  )k	j	g<jh3(j<I
h3Bh3Bg"2:g",A	h35	g/>%h3$Fh3D:g4<A$h3 h7A)h3 h7A+h3"Ah3%h3h'*h32j?k	j"g,'h34g>9h3hh3hh3h$ h3'h0,h33	i0<*i+&i3+i00i33i??j	k0k;k	kk		kc           
         t        |d    d      }|j                  d       | j                  j                         }d}t	        | j
                        }d}||k  r|}t        dt	        | j
                        |      D cg c]  }| j
                  |||z     }}| j                  j                         }	|D ]  }
|	j                  |
        |	j                  d        g }t        | j                        D ]~  }| j                  j                  | j                  d|dz    |||	|d	
      }|j                  |       |j                          | j                  j                  j!                  d|         d}||z  }t	        |      | j                  z   dz
  | j                  z  }||z  }| j                  j                  j!                  d|dz   d|dz  dz   d|dz   d       |D ]N  }|j#                  |       |j%                         s&| j                  j'                  dddd       t)        d       | j                  j                  j!                  d       |j+                         s$||j-                         z  }|j+                         s$| j                  j                  j!                  d|        |S c c}w )Nr3  /tasksTr@  r   2   _dump_task_part_r3   )rV  rY  rJ  rK  targetr   r>   u   Запущен r  u&   Тайм-аут дампа задач r\  u   ч u   м u   сtimeoutu$   Возможно завис дампzERR-0055r  rx   r  u"   Ошибка дампа задачuK   Закончили параллельное скачивание задачu   Ошибок: )r   r  r   Queuer   task_id_listr>  rz  r   r   Threadr[  r   r  r4   re   r  r   is_aliver;   TimeoutErroremptyrY   )r"   rY  rV  rK  rz  r  task_chunk_sizerH  task_chunksrJ  rk  threadsthreadtime_per_tasktime_per_chunkchunks_per_threadtotal_time_per_threads                    r#   _dump_taskszJiraAPIImport._dump_tasks  s   L78?@	&"jj..0
 $++,/))O 1c$"3"34oF
 aO 34
 

  ::++-% 	-J  ,	-T"t889 	DA^^**++'Aw/!*$0(8+>	 + 	F NN6"LLNOO""''/&(BC	D" &8 -0Q0QQTUUZ^Z{Z{{ 1N B##4$,-S%,34C$r)*".	
  		IFKK 5K6 )):&%	 *  ##GHH		I 	##$qr%++-)--//F &++-##nVH$=>s
s    J;c                 |   | j                   j                  j                  d|d    d|d    d       | j                  j	                  |d         }|r|j                  d      si }| j                  j                  r| j                  j                  |d         }n5|j                  dg       D ]   }|d   d	k(  s|d
   D ]  }|d   ||d   <    " |j                  dg       D ]k  }g |d<   |j                  |d   g       D ]L  }|d   j                  |       |d   dk(  s | j                  |d   | j                   j                                N m t        |d    d      }	|	j                         rt        j                  |	       t        |	d      5 }
t         j#                  ||
       d d d        y # 1 sw Y   y xY w)NuH   Дамп схемы безопасности задач проекта "r   rD  r   rf  r   r  r  BROWSE_PROJECTSr  r  levelsr>  r  r   r3  /issue_security_scheme.jsonrp   )r4   re   r  rG   !get_project_issue_security_schemerY   rV    get_issue_security_level_membersr   r  rq   r   rs   r~   r  rt   ru   rx   )r"   rY  r  security_schemesecurity_level_membersr  security_levelrh   member	dump_filerz   s              r#   #_dump_project_issue_security_schemez1JiraAPIImport._dump_project_issue_security_scheme  s   ##WXdekXlWmmqr~  @E  sF  rG  GH  I	
 ))EElSWFXY<#3#3L#A%'"yy)-)S)STcdhTi)j&*..C eFe}(99.4Z.@ eNKYZcKd2>$3GHee
 ),,Xr: b#%i 488tbI bF)$++F3f~/++F7OT__=^=^=`abb L788STU	IIi )T" 	*aIIoq)	* 	* 	*s   F22F;c                    | j                   j                  j                  d       t        |d    d      }|j	                         rt
        j                  |       t        |d      5 }i }	 d}| j                  j                  |d   dj                  |            }t        j                  ||       |cd d d        S # t        $ r2}| j                   j                  t        |      d	d
d       Y d }~Wd }~ww xY w# 1 sw Y   y xY w)Nug   Дампим конфигурацию проекта через плагин "Smart Jira Configuration"r3  z/smart_config.jsonr,  )	projectInformationprojectSchemesprojectIssuetypesprojectVersionsprojectComponentsprojectMembersprojectCustomfieldsprojectGlobalActionsprojectWorkflowActionsr   r   )r  ERR-0056r  rx   r  )r4   re   r  r   rs   r~   r  rt   rG   get_project_smart_configr   r8   r;   r-   ru   rx   )r"   rY  smart_config_filerz   r  r  r  s          r#   _dump_smart_configz JiraAPIImport._dump_smart_config  s
    	##  %N  	O L$?#@@R!ST##%II'(#T* 	 aL
  $yyAA,uBU_b_g_gho_pAq IIlA&/	  	   ))Hj)% *  	  	 s6   (C<,1B>C<>	C9(C4/C<4C99C<<Ddttzr  c                 ~   | xsF t         j                   j                  t         j                  j                        j	                  |      } t        j                  |      }t
        j                  j                  t         j                   j                  | |            j                  |      }|j	                  |      }|S r   )	r(  nowtimezoneutcstrftimepytzlocalizestrptime
astimezone)r  r  r  dt_tzdt_strs        r#   _datetime_in_user_tzz"JiraAPIImport._datetime_in_user_tz#  s    P8$$(():):)>)>?HHP]]2!!("3"3"<"<R"HITTUWX'r%   c                 81   dd l }| j                  d   d   d   }|d   st        d      |d   D cg c]  }|d   s	|d   s|d    c}| _        | j                  j                         j                  d      }|j                  d	
       t        | j                        }t        d|z        }| j                  D ]  }|d   }|d   }	|d   }
	 | j                  j                         r y | j                  xj                  dz  c_        | j                  j                  j                  d|
 d       |j                  |      }|j                  | d      }|j                  d      }| j                  j                  r1| j                  j!                  | j                  j"                        }n0| j                  j!                  | j                  j"                        }|r|d   d   nd}| j                  j%                  |      }d }|j'                         rOt)        |d      5 }t*        j-                  |      }|j/                  d      }d d d        r| j1                  ||      }|j'                         rt3        j4                  ||       nt6        j9                  |d	
       t;        j<                         }| j                  j?                  |	      }tA        |      |d<   d }| j                  j                  s| jC                  |      }| j                  j                  j                  d       tE        |d    d      }|j'                         rt6        jG                  |       t)        |d      5 }| j                  jI                  |d         }	 |d   D ]  }|d    d!   d"k(  s| j                  j                  rF|d    j/                  d      s:| jK                  |d    d   | j                  j                                k| jK                  |d    d#   | j                  j                                 	 t*        jO                  ||       d d d        | jQ                  ||)       | j                  j                  r|d*   sa| j                  jS                  |d         d   d+   |d,<   | j                  jU                  |d         |d-<   | jW                  |d         |d.<   n| j                  j                  j                  d/       tE        |d    d0      }|j'                         rt6        jG                  |       g }t)        |d      5 }| j                  jY                  |d         D ]\  }|j[                  |d          | j                  xj                  dz  c_        |j]                  t*        j_                  |      d1z          ^ 	 d d d        | j                  ja                  |d         |d2<   | jc                  ||       n| j                  ja                  |d         |d,<   d|d,   vr|d,   d   |d,   d3|d,<   n'| j                  je                  |d,   d         |d,   d4<   |j/                  d5i       |d,   d5<   | jg                  |       |j/                  d6      r| ji                  |      |d-<   |j/                  d7i       |d.<   | jk                  |d.          |j/                  d8      }|r{| j                  jm                  d9|        | j                  j/                  |d:   d	;      |d8<   | jK                  |d8   | jn                     | j                  j                                | j                  j                  j                  d<       tE        |d    d=      }|j'                         rt6        jG                  |       t)        |d      5 }| j                  jq                  |d         D ]H  } | j                  xj                  dz  c_        |j]                  t*        j_                  |       d1z          J 	 d d d        | j                  j                  j                  d>       tE        |d    d?      }!|!j'                         rt6        jG                  |!       t)        |!d      5 }| j                  js                  |d   @      ju                         D ]  }"| j                  j                         r d d d         y | j                  xj                  dz  c_        | j                  j/                  |"d	;      }#g }$|#j/                  dAg       D ]  }%|%d!   dBk(  s	 | j                  j                  rE| j                  jw                  |%dC   j/                  d      |%dC   j/                  dD      E      |%dF<   n"| j                  jw                  |%d         |%dF<   |%j/                  dF      s| jK                  |%dF   | jn                     | j                  j                                 |#j/                  dA      r|$D ]  }'|#dA   jG                  |'        |j]                  t*        j_                  |#      d1z           	 d d d        | j                  j                  j                  dK       tE        |d    dL      }(|(j'                         rt3        j                  |(       |(j                          tE        |d    dM      })|)j'                         rt3        j                  |)       |)j                          	 | j                  j                  |d   @      D ]   }*| j                  j                         r  y | j                  xj                  dz  c_        | j                  j                  j                  dN|*d           | j                  j                  |*d         |*d4<   | j                  j                  |*d4   dO   d         |*d4   dO<   | j                  j                  |*d         }+| j                  j                  rAdPdQ| j                  j                  |*d         D ,cg c]  },|, c},ii}-|+j                  |-       |+|*d4   dR<   | j                  j                  s;| j                  j                  |*d         }.t        t        |.      dkD        |*d4   dS<   |d   |*dT<   |(j                  tA        |*d               }/|/j                  d	
       |/j                  d      }0t)        |0dU      5 }t*        jO                  |*|       d d d        	 |*d!   dVv r!| j                  j                  j                  dW       | j                  j                  |*d         D ]  }1| j                  j                         r   y |1dX   |*d   k7  r.| j                  xj                  dz  c_        |)j                  tA        |1d               }2|2j                  d	
       |2j                  d      }3|3j'                         r-| j                  j                  j                  dY|1d    dZ       | j                  j                  s|*d4   dS   |1dS<   i |1d[<   | j                  j                  j                  dY|1d           | j                  j                  |1d   d\g]      D ]V  }4| j                  j                         r    y |4d   }5|5|4d   |4d^   d\   d   |4d^   d\   d   |4d^   d\   d   d_d`}6|6|1d[   |5<   X t)        |3dU      5 }t*        jO                  |1|       | j                  j                  da       d d d         # 	 | j                  jm                  di       tE        |d    dj      }8|8j'                         rt6        jG                  |8       t)        |8d      5 }| j                  j                  |d         D ]m  }9| j                  j                         r d d d         y | j                  xj                  dz  c_        |j]                  t*        j_                  |9      d1z          o 	 d d d        | j                  jm                  dk       tE        |d    dl      }:|:j'                         rt6        jG                  |:       t)        |:d      5 }| j                  j                  |d         D ]  };| j                  j                         r d d d         y |;j/                  d8      r:| jK                  |;d8   | jn                     | j                  j                                | j                  xj                  dz  c_        |j]                  t*        j_                  |;      d1z           	 d d d        dmt6        j                  dn<   | j                  xj                  |z  c_Q        | j                  j                  d	o       t                dpt6        j                  dn<   t3        j4                  |d   |       tA        |      |d<   |d    dq}t)        |dU      5 }t*        jO                  ||       d d d        t;        j<                         |z
  }<| j                  j                  j                  dr|
 ds|<dtdu       tE        |d    dv      }=|r| j                  |d         \  }>}?|=j'                         s8| j                  j                  j                  dw|
 dx|d    dy|= dz| d{	       d }n3|>s1| j                  j                  j                  d||
 dx|= d}| d{       d }|d~   d   s6|d~   d   }@| j                  jM                  d|@ d|@ d|
 d|	 d	dd&d'(       nt        j                  j                  t        j                  j                        j                  d      }A| j1                  |A|      }Bd}Ct;        j<                         }| j                  j                  |d   ||B      }D|Drd|
 dD }E|sBr"Edz  }E|rEd| z  }EBrEdB z  }EEd| dz  }E| j                  jm                  E       d|d    d}F|r	Fd| dz  }FBr	FdB dz  }FFdz  }F| j                  j                  |Fd]      D Gcg c]  }GtA        |Gd          c}G| _\        C| j                  |      z  }Ct;        j<                         |z
  }<| j                  j                  j                  d|
 ds|<dtdu       | j                  |       n)| j                  j                  j                  d|
 d       Cs1A|d<   t)        |dU      5 }t*        jO                  ||       d d d        n| xj                  Cz  c_M         | j                  jm                  d       y c c}w # 1 sw Y   xY w#  | j                  jM                  d$ d%d&d'(        xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   xY w# |jx                  jz                  $ re}&|&j|                  j~                  dGk(  rF|$j[                  |%       | j                  j                  j                  dH|#d    dI|& dJ       Y d }&~&] d }&~&ww xY w# 1 sw Y   9xY wc c},w # 1 sw Y   	xY w# 1 sw Y   	DxY w# |jx                  jz                  $ r}7|7j|                  j~                  dbk(  r?dctA        |7      v sddtA        |7      v r%| j                  jm                  tA        |7             n#| j                  jM                  de|* dfdgd'(        Y d }7~7$d }7~7w | j                  jM                  de|* dfdgd'(        xY w#  | xj                  dz  c_M        | j                  jM                  dh| dfdgd'(       Y fxY w# 1 sw Y   ~xY w# 1 sw Y   KxY w# 1 sw Y   xY wc c}Gw # 1 sw Y   gxY w#  | xj                  dz  c_M        |j/                  d      r$| j                  jM                  d|
 ddd&d'(       n"| j                  jM                  d| dd&d'(       Y xY w)Nr   r  r   	isCheckedu5   Не выбрали ни одного проекта!r<  r<   r  Tr@  P   r   r   r   r3   u   Дампим "rJ  rL  r  )r  )r  timeZoneEtc/UTCr9  r>  	dump_dater3  u   Дампим права/permissions.jsonr,  permissionsholderr>  r  	parameteru0   Не удалось сдампить права r  r  rx   r  )r  r  workflowSchemer5  jira_screen_schemer  u/   Дампим типы задач проектаr  r  rF  )r   r  r  r4  r  
fieldsUsedrw  u1   Ищем руководителя проекта r"   )absoluteu*   Дампим статусы проектаr  u$   Дампим роли проектаr  )r   r  r  	actorUserrJ   )r  r  r  i  u&   Пользователь к роли "u   " не найден. u+   . Возможно он был удаленu&   Дампим доски проектаz/boards/z	/sprints/r  r   r  r  r   r  rb  rp   )r  simpleu&   Дампим спринты доскиoriginBoardIdu   Спринт u    уже скачанr  r  r  r   )r   r   r   )r   r   r  rB  i  z"The board does not support sprintsuD   Данная доска не поддерживает спринтыu4   Не удалось сдампить спринты zERR-0057r@  u   Не удалось сдампить доски, возможно проект не поддерживает доски или у вас нет прав project_info=u(   Дампим версии проектаr  u!   Дампим компонентыr  r   NO_CACHErD  1r  u&   Дамп данных проекта "u   " выполнен за r  r  r]  u$   В каталоге проекта "rD  u5   ), отсутствует каталог задач (u@   ). Дата последнего успешного дампа (u   ) будет сброшена.u/   В каталоге задач проекта "ud   ) отсутствуют задачи. Дата последнего успешного дампа (rt  havePermissionu   Не удалось выполнить дамп задач проекта. Пользователь не имеет разрешения 'uA   '. Предоставьте пользователю право 'u0   ' в схеме прав для проекта 'rd  rf  zERR-0128%Y-%m-%d %H:%M)r!  r*  u$   Дамп задач проекта 'r  u    (в периодu    с u    по u4    включительно, часовой пояс: zproject = 'rV  z AND updated >= 'z AND updated <= 'z ORDER BY updatedr
  u$   Дамп задач проекта "u   В проекте 'u5   ' нет новых/обновленных задачr  u   Проект "u   " является приватным и не может быть импортирован, отключите приватность в Jira или предоставьте пользователю праваzERR-0058u2   Не удалось получить проект u0   Закончили дампить проекты)_requestsr!  r8   rb   r4   rq   rr   r  r   r  r6   r  re   r  rG   rV   user_find_by_user_stringr  get_permissionsrs   rt   ru   rv   rY   r  r}   r   r~   makedirsr  rL  r  r-   r  r   r  get_project_permission_schemer  r;   rx   r~  get_project_schemeget_project_screen_schemer  r  r   r  r  get_project_workflow_schemer=  get_workflow_schemer  r  r0  r5   rU   get_statusesget_project_rolesr   r  
exceptions	HTTPErrorr  r|  r  r  get_all_agile_boardsget_agile_board_configuration
get_filterget_advanced_board_settingsget_board_quick_filtersr   get_agile_board_projectr   get_sprintsget_sprint_issuesrx  r:   get_project_versions_paginatedget_project_componentsenvironprogressrA  r7   r  r(  r  r  r  r  get_project_issues_count_duringjql_get_list_of_ticketsre  rr  r  )Hr"   r  rootvalprojects_dirrG  r+  r  rb  r   r  r3  project_tmp_dirr  r  user_tzuser_permissionslast_dump_daterz   current_dumplast_dump_date_utcr  rY  r  permission_fileperm_sch	perm_dict
types_fileri  rc  r  statuses_filer  	role_filerole_uri	role_infounfound_actorsr  r  unfound_actor
boards_dirr  r  advanced_settingsqfquick_filtersboard_projectsr  board_info_filerB  sprint_pathsprint_file_pathr"  r  r  r  version_list_filenamer}  components_list_filenamer  r  rV  r  r  r  new_dump_date_utcnew_dump_datetask_errorsrh  info_msgrE  r  sH                                                                           r#   _dump_projectszJiraAPIImport._dump_projects-  sD   }}./8;K STT8<Z8H!lCPUJ[^_j[k#e*!l88:CCJOD)$(()28}-- c	dG J!%.K"6?L_d??,,.11Q61&&++n\N!,LM*33J?"."7"7:,f8M"N'00=	 99?? $		 B BI[I[ B \I $		 B BDIIL^L^ B _I6?)A,z2Y $(99#<#<
#<#S  "&##%i- K'+yy|-9-=-=k-J*K *)-)B)BCUW^)_%%'KK_=KK$K?&&(#yy44[A.1/.B]+  $yy#'#:#:<#HL &&++,EF"&,}*E)FFW'X"Y"))+IIo./40 +A#yyFF|TXGYZH)1-)@ I(26:fD#'99??'0':'>'>w'G(,(;(;Ih<OPW<XZ^ZiZiZ{Z{Z}(~$($7$7	(8KK8XZ^ZiZiZ{Z{Z}$~ IIh*+  88T`8a99??'5		44\$5GHKL\] %%;< >BYY=`=`amnras=t%9:6:6S6ST`aeTf6g]3 ..334ef%)\--H,IIZ*[%\
%,,.IIj1)+!*d3 Gq.2ii.M.MYefjYk.M.l G
 . 5 5j6F G $ A AQ F A !

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

3$ 6788
 &&++,RS L$?#@!LM	##%IIi()T* %>a$(II$?$?LY^L_$?$`$g$g$i $>??446"%> %> 99Q>9$(IIMM(TM$J	)+%.]]8R%@ ]E$V}0KK!.'+yy=AYY^^5:;5G5K5KF5S7<[7I7M7Mk7Z >L >\k(: >BYY^^UZ[aUb^=ck(: $)99[#9$($7$7k8J4==8Y8<8Y8Y8[%]-]2 %==21? J )( 3 : := IJ 

9 5 <=I$>%>P &&++,TU!\-%@$A"JK
$$&MM*-  ""l=&A%B)#LM%%'MM+.!!#[c!%!?!?LY]L^!?!_ V"??446"99Q>9..33k%-4QR(,		(O(OPUVZP[(\f26))2F2FuV}U]G^_cGd2efh/ -1II,Q,QRWX\R],^)99?? 3$259YY5V5VW\]aWb5c5&/15&6"-M .44]C2Cfh/#yy .2YY-N-NuUY{-[N<@^ATWXAX<YE&M.9.:4.@l+$.$7$7E$K8H$I	!6*3*<*<[*I!/48 0A IIeQ/02"$V}0CC $ 6 6 ; ;<d e.2ii.C.CE$K.P #!KF'+'@'@'B(.'-o'>%+'M(0$(OO$E$E$J$E2=2F2Fs6RV<GX2YK$/$5$5t$5$D7B7K7KK7X$4'7'>'>'@(,(>(>(C(CmTZ[aTbSccwDx(y(0+/99??AFv~A^~(>79F8$4$(OO$:$:$?$?-PVW]P^O_@`$a151L1L(.t09{ 2M 2& %P ,0??+D+D+F,238;2:38<6;Hoi6PQU6V7<Xy7QRW7X8=h	8RSY8Z8.6*
 FPx(8(B!%P" *..>)E %K(,		&!(<(,(@(@(J%K %KC#!KOV"x ##$NO(,]0K/LN-[(\%(//1II34/6 <!#'99#K#KLY^L_#` <??446"< < 99Q>9

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

9 5 <=>> *,

:&((D0($$t$4),

:&L7E.1+.>]++M:;:F	)T* /aIIlA./ &&(2-&&++.TUaTbbz{}  B  {C  CK  -L  M !L$?#@!GH	!%)%>%>|D?Q%RNK$++-..66CL>QUVbcpVqUr sQQZP[ \\\j[k  lJK
 *.(..66N|n\`aj`k l\\j[k  lJK *.'(9:;KL&67H&I&&QOOO--ZZiYj kYYhXi jIIUVYZeYffgi #!-#) .  )1(9(9(=(=h>O>O>S>S(T(](]^n(o%$($=$=>OQX$YM"#K**,B!%!J!J$T*#1!. "K "J
 "%I,WZ[eZf#g)]$(;;H- (d>2B,C C, (f]O,D D$*^_f^ggh(iiH++H5 !,L,>+?qA)%6~6Fa#HHC(%6}oQ#GGC22 )-		(I(I#VZ(I([- $  T
O-) $t'7'7\'7'RR!..025..33B<.Phiklohppxy
 66|D..331,?tu
 '4E[1!)T2 7a IIlA67 7 ;6qc	dH 	NOS "mFK KH114dendo2p4>bh 2 j+ +@G GR8 84 (0':':'D'D 
!.'*||'?'?3'F(6(=(=e(D(,(>(>(F(F.UV_`fVgUhh~/2e3^-`)* )1(-
!.#%> %>B5&&0 0L%K %K  (22<< & zz55<BfjmnojpBp  u{  B  CD  E  uE $ 3 3CF ; $ 9 9<pqvpw:x<FQZgm !: !o %	 !<
" OO558lmrls6t8BYci 6 k!cOOq(OOO--  1W  Xd  We  /f0:Y[a . c< <> >$/ /L-,7 7
d1$;;{+OO--), 8Q R"\f .  OO--0bcjbk.l.8<\b . ds  
AWAWAWA`(+D;A`(&'AW"D'A`(4AXAW/(*AW/A#AW/6AXDA`(A?AX$H	A`(A+AX1A/A`(2AAZ??A`(	AAZ?&A=AX>#AZ?5BAZ?B9A`(>A^0C+A^0-	A[6CA^09A[A^0A*A[+A^0D9A[+?A^0AA[+2A[	7A[+A^0AA`(#=A_/@ A`(@*AA_/A3A%A`(C=A_<DA`(DBA_<F3B.A`(I!A`	I8IA`(SA`SB/A`(V	A`V A`(W"AW,	W'A`(W/%AXXAXXAX!	XA`(X$AX.	X)A`(X1AX;	X6A`(X>AZ<YAAZ7Z0AZ?Z6AZ7Z7AZ<Z<AZ?Z?A[		[A`([A^0[A[[A^0[A[([#A[+[+A^-\A;A^]?A^0^(A^-^-A^0^09A_,_)A`(_/A_9	_4A`(_<A`	`A`(`	A`	`A`(`A`%	` A`(`(A.Abc                  
   | j                   j                         }t        j                  |      \  }}}||z  dz  }| j                   j	                  d| d       | j                   j
                  j                  d       | j                  j                  r | j                          | j                          | j                   j
                  j                  d       | j                          | j                         | _        | j                   j                  j                  j!                  dd      rL| j                   j
                  j                  d       | j#                  | j                  j$                  d	       n+| j                   j	                  d
t&        j(                         | j+                          | j                   j
                  j                  d       | j#                  | j                  j,                  d       | j                   j
                  j                  d       | j#                  | j                  j.                  d       | j#                  | j                  j0                  d       | j                  j                  r| j                   j
                  j                  d       | j#                  | j                  j2                  d       | j                   j
                  j                  d       | j#                  | j                  j4                  d       | j                   j	                  d       | j#                  | j                  j6                  d       | j#                  | j                  j8                  d       | j                   j	                  d       | j#                  | j                  j:                  d       | j#                  | j                  j<                  d       | j                   j	                  d       | j#                  | j                  j>                  d       | j                   j	                  d       | j#                  | j                  j@                  d       dtB        jD                  d <   d!| j                   _#        | j                   jI                          tK                d"tB        jD                  d <   | j                   j
                  j                  d#       | jM                          y$)%u_   
        Загружаем все данные из апи, кроме аттачей
        d   u   Свободно места: r  u$   Скачаем данные из APIu9   Дампим глобальные настройки Jirar  Tu'   Дампим пользователейr  uA   Не дампим пользователей из-за опцийr  u   Дампим статусыr%  u    Дампим типы задачrd  issue_security_schemesu*   Дампим бизнес процессыr4  u7   Дампим схемы бизнес процессовrF  u   Дампим экраныr  r  u!   Дампим приоритетыr  r  u+   Дамп решений(резолюций)r  u   Дамп фильтровr  r   r     r  u   Дампим проектыN)'r4   rq   r}   
disk_usager5   re   r  rG   rV   r  r  r  r\   r]   r   r   rY   r  r  rc   r  rx  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  rA  r7   r  )r"   download_pathr  usedfreefree_percents         r#   download_datazJiraAPIImport.download_data  s    99;"--m<tTe|c);L>KL##$JK99?? $$&##$_`'')$($B$B$D!??((..22<FOO""''(QRdii117;OO ckrkzkz{##$AB$))00*=##$FG$))33]C$))>>@XY99??OO""''(TUdii55{COO""''(abdii@@BST78$))33Y?$))55G?@$))66E$))88:LMIJ$))77G78$))33Y? "$

:#% !$

:##$ABr%   c                 b   dt         j                  d<   t        j                  j	                  | j
                  j                  g d      }|j                  rFt        |j                  |j                  z        dz  |_
        |j                  d       t                dt         j                  d<   y )	Nr   r  )r  r  r  r   r   r  TrD  r  )r~   r  rW   	CmfImportrY   r4   r   r  r  r  r  rA  r7   )r"   r4   s     r#   r  zJiraAPIImport._calc_progress  s    !#

:%%))T__-?-?1k * m
''"%j&F&FIeIe&e"fil"lJOOdO+L!$

:r%   c                 |   ddl m} t        |d    d      } |       }|d   D ci c]  }|j                  d      r	|d   |d    }}t	        |d      5 }t
        j                  |      }d d d        | j                  j                  j                  j                   d	d
    }	t        j                  j                  |	      }
|
s"t        j                  |	d| j                        }
|
j                  r|d   |
_        |
j                  d       n)| j                  j                  j!                  d|
 d       ddg}g d}||z   }dg|z   }t        j"                  j%                  |
|      D ]  }|j                  sA| j                  j                  j!                  d|
 d|j&                  j                   d       P|D ]  }t)        ||g         |D ]  }t)        ||d        |j                  d        |d   D ]  }	 d	| j                  j                  j                  j                   d	|d
    d	}	|j                  |d         r(t        j*                  j                  ||d      d      }n)| j                  j                  j!                  d|        dd d!|	 d!g}t        j"                  j                  ||"      }|st        j"                  j                  ||
|#      }|s8| j                  j-                  d$| d%|
&       | xj.                  d'z  c_        &|j0                  r|j0                   |	 |_        n|	|_        |j                  s]|d(   d)   d*k(  ru| j                  j                  j                  j                   d	|d(   d*   d
    }t        j2                  j                  |      }|j4                  j7                  |       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|_!        n|d(   d)   d0k(  r| jD                  jF                  r,|d(   j                  d1      r/| jI                  |d(   d1         }n| jI                  |d(   d2         }r|jJ                  j7                  |       n| j                  j-                  d3| d4|&       | xj.                  d'z  c_        |d(   d)   d5k(  r| jD                  jF                  r8d	| j                  j                  j                  j                   d	|d(   d1    d	}	n:d	| j                  j                  j                  j                   d	|d(   d5   d    d	}	t        jL                  j                  dd d!|	 d!gdg"      }|s0|d(   d5   d   }t        jL                  j                  dd6|gdg"      }|re|j0                  s|	|_        n#|	|j0                  vr|j0                   |	 |_        |j                  d       |jJ                  j7                  |       nv| j                  j-                  d7| d8|&       | xj.                  d'z  c_        | j                  j-                  d9|d(   d)    d:|&       | xj.                  d'z  c_        |j                  d        g d?d@gdAdBgdC}|jO                         D ]  \  }}	 t        j"                  j                  dDdE|gdFdE|
gg|"      }|D ]h  }t        j"                  j                  dDdE|gdFdE|
gg|"      }|j                  s9|D ]  } t)        || tQ        ||               |j                  d       j  tS                |
S c c}w # 1 sw Y   ExY w#  | j                  j-                  d;| d<d=>       | xj.                  d'z  c_        Y xY w#  | j                  j-                  dG|
 dH| dI| dJdKdL>       | xj.                  d'z  c_        Y =xY w)MNr   r  r3  r  r  r  rM   r>  r/  r   r(  Tr7  rZ  r4   r   r:  u#   Схема прав доступа u@    была изменена и не будет обновленаaccess_project_roleaccess_members)access_local_useraccess_owneraccess_owner_assistantaccess_authoraccess_spectatorsaccess_executorsaccess_responsibleaccess_list_owneraccess_project_owneraccess_project_owner_assistantaccess_project_spectatorsaccess_project_executorsaccess_sdesk_clientaccess_anonymousaccess_guestaccess_sharelink_anonymousr   r  u&   В схеме прав доступа u+    было изменено правило 'u,   ', оно не будет обновленоFr  r  )rM   r  u4   Не нашли соответствия права r7  r  r  r  )project_permissionr2  r   u*   Не найдено правило для zERR-0059rK  r3   r  r>  projectRole)applicationRoleanyoneprojectLeadrR   r   sd.customer.portal.onlyr  r   r  u9   Не нашли пользователя для прав zERR-0060r  r  u-   Не нашли группу для прав zERR-0061u'   Неизвестный тип прав zERR-0062u6   Не удалось загрузить правило zERR-0063CmfProjectPermPermissionr  )zPPP-RELEASE-EDITzPPP-OBJ-CREATEzPPP-OBJ-EDITzPPP-OBJ-DELETEzPPP-OBJ-TREEMOVEzPPP-OBJ-ORDERzPPP-TSK-ASSIGN-EXECUTORSzPPP-TSK-DEADLINEzPPP-TSK-ORDER)zPPP-PR-ADMINzPPP-TSK-ASSIGNzPPP-TSK-SCHEDULEzproject_permission.coder1  r2  u   В схеме uR    не удалось скопировать разрешения из права 'u   ' в 'rV  zERR-0113CmfProjectPermSchemeRule)*r  r  r   rY   rt   ru   rv   r4   r=  r>  rW   CmfProjectPermSchemerZ  r   rA  re   r  r  r   r  r  r  r;   r:   r7  r  r  r   r  r  r  r	  r  r  rG   rV   rM  r  r  r   getattrr7   )!r"   rY  r  r  r  r<   map_permrz   perm_scheme_dictr7  perm_schemerule_list_access_fieldsrule_bool_access_fieldsrule_access_fieldsrule_fieldsscheme_rule
list_field
bool_fieldr  r  rD  r  r  rR  r  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  s1	   ,,}"=!>>OPQj ##<=
ww{# c&k)
 

 /3' 	,1#yy|	,OO**11==>bAQRVAW@XY1155V5D 55VUYfjfufu5vK&&/7K.OO""**5k]  CC  D
 "#
#
$ 57NNe55 "::?? @ 
 	/K ..&&..<[M JAALA_A_AdAd@e f@A
 5 5
Z455 8
Z78.	/$ *-8 U	%IT%doo44;;GGH9UY?J[[]^<<	, 78!::>>HYWcMdDew{>|DOO**225ijsit3uv#Vq];$==AAYdAe""("A"A"E"EY]fq  {F"E  #GK&114^_h^i2j2<+ 2 O1, "))0;0B0B/CF8-L*-3*"22X&v.-?%)__%;%;%B%B%N%N$OrR[\dRefsRtuyRzQ{"|K!0044K4HD33::4@x(04QQ48K1x(0MA7;K4x(0J>59K2x(0J>/3K,04K-x(04MM6:K3x(0F:yy$X.227;%)%5%5i6I'6R%SF!%!1!1)H2Ek2R!S#2299&A114mnwmx2y2<+ 2 O1, x(0G;yy#%doo&<&<&C&C&O&O%PPRS\]eSfgnSoRppr!s#%doo&<&<&C&C&O&O%PPRS\]eSfgnSopvSwRxxz!{"1155hRSTZS[[\P]=^hpgq5rE %.x%8%A&%I
 & 5 5 9 9&'S]A^hpgq 9 r$||+1EL#5<<7.3ll^F8+DEL

t
4#2299%@114abkal2m2<+ 2 O1, OO--0WXabjXklrXsWt.u.8k . KOOq(O  T 2cU	%t + #!
" ):(?(?(A !	%$NH %";;??2CH!34 . @ 	 %- 3L$==AA6\J%sK8   2 B G #22 -? )#-#I/@A LLTL2!3!	%F 	]

	, 	,Z%)),bclbm*n*4?Y * [1$^%))$[M 2((6'7vhZqJ7	 *  1$sR   !^)^.B^;B^;&5^;F#^;F^;<^;^;B_9.^8;8_69?`;c                    t        d      5  d}	 |j                         }|dk(  rn| j                  j                         rnt        j
                  j                  |g d      }t        |j                        }t        |j                        }t        |j                        }t        |j                        j                  d      }	t        |	      d	kD  r	d
|	d	    dnd}
d| d}|j                  r|j                  d   }|dz  }| d|dd}| j                  j                  j                  |
 d| d| d       	 | j                   j#                  ||t$        j&                         | j                  j                  j                  |
 d| d| d       d|_        |j+                          t-                | j                  j/                  d       |j7                  |       d d d        y # t0        $ rD}t3                | j                  j5                  |
 d| d| d| ddd|       |d	z  }Y d }~dd }~ww xY w# 1 sw Y   y xY w)NFrv  r   Trx  )r   r  r#  r  rh  r  r/  r3   u   [Задача ID: z] r   rV  rc  i   r  r  z MB)u   Скачивание rU  rb  u	   Файл u    сохранен в 'rW  u"   Ошибка скачивания r  zERR-0027r"  rx   )r  r  r  ext_href)r   rY   r4   r6   rW   r"  r-   r   r  r#  r  r   r   rh  re   r  rG   download_filer   IMPORT_DOWNLOAD_TIMEOUTr$  rA  r7   rx  r8   r9   r;   rz  )r"   download_queueerror_queuerz  download_job_iddownload_objrm  file_urlry   ext_id_splittask_id_msg	file_sizefile_size_mbr  s                 r#   _download_file_workerz#JiraAPIImport._download_file_worker  sn   51 ;	$F"0"4"4"6"f,??,,.%77;;&  < 	    1 12	|001 1 12	"<#:#:;AA$GJMlJ[^_J_ 2<?2C2Feg	{!,	// , < <V DI#,#8L#,+RS/A FI&&++{m;PQZP[[^_g^hhi,jk II++ ! & > > , 
 OO**//&-y;QR[Q\\]^ /3L+ %%'LOO,,\:Y p OOF#w;	$ ;	$` ! 	  NOO--&-'I)TWX`Waadehdij#-!4#)!) .  aKF	 a;	$ ;	$s7   D3IBG3I3	I <:H;6I;I  IIc                    | j                   j                  j                  d       | j                  j	                         }| j                  j	                         }d}| j                   j                  dg       dd| j                   j                  j                  j                  gg dg dg}| j                   j                         j                  d      }d}g }| j                  D ]  }|d	   }	|j                  |	      }
t        |
      j                  d
      st        |
      d
z   }
dd|
 dgg}t        j                  j                  ||z         }|sp||z  }|j!                  ||z           |s'| j                   j                  j                  d       |S | j                   j                  j                  d|        g }t#        | j$                        D ]y  }| j&                  j)                  | j*                  d| ||d      }|j!                  |       |j-                          | j                   j                  j                  d|        { |D ]D  }t        j                  j/                  |dg      D ]  }|j1                  |j2                          F t5                |D ]  }|j1                  d        |j7                         s|D ]  }|j9                           | j                   j;                         r|S |j7                         s$||j=                         z  }|j7                         s$| j                   j                  j                  d|        |S )Nu=   Скачиваем все найденные вложенияr   zplugin.plugin.source_hashr>  r1  )r$  r1  F)r   r:  r  r  r   r  r#  r  r  r.  u3   Нет вложений для скачиванияu'   Скачивание вложений: _download_file_worker_)r7  r8  r`  u    Запустили задачу r  r  rx  uC   Закончили скачивание файлов, ошибок )r4   re   r  r   rd  r	  r=  r>  rq   rr   rb   r-   r  rW   r"  r  r   r>  r   r   rf  r@  r  slistrz  r   r7   ri  r   r6   rY   )r"   r7  r8  r:   main_filterprojects_pathattachment_countr  r  rb  project_pathpath_filterdownload_countrl  rH  rm  r  r'  s                     r#   download_fileszJiraAPIImport.download_files.  s-   ##$cd))+jj&&(
##%@$AB C!7!7!>!>!J!JK&1	
 99;DDZP -- 		:G J(11*=L|$--c2"<036"F|nA,>?@K#55;;;Q\C\;]N N2 {[89		:  OO""''(]^OO""''*QRbQc(det889 	UA^^**11-aS1&4#. + F NN6"LLNOO""''*J6((ST	U  	4G & 8 8 > >gW[V\ > ] 4""<??34	4 	 	'Fv&	'##%!  ??$$&##%+//++J ##%##&ijtiu$vwr%   c           	         | j                   j                         ry | j                   j                  j                  d|d    d|d    d       d }t	        |d    d      }t        |      5 }t        j                  |      }d d d        r| j                   j                  j                  j                   d|d	    }t        j                  j                  |
      }|s"t        j                  || j                   d      }|j                  r |d   |_        |j                  d      |_        ||_        |j#                  d       |d   D ]5  }|d    d|d	    d}| j                   j                  j                  j                   d|d	    }	t        j$                  j                  |	
      }
|
s#t        j%                  ||	| j                   d      }
|
j                  r-|d   |
_        |j                  d      |
_        t        j&                  j)                  |
      D ]  }|j+                  d        |j                  dg       D ]  }	 t        j'                  |
      }|j                  d      }|j                  d      }|dk(  r't        j,                  j                  d      |_        n<|dk(  r| j                   j                  j                  j                   d| }t        j0                  j                  |
      }|r't        j0                  j                  |
      |_        nt3        d|       |dk(  r't        j,                  j                  d      |_        n|dk(  r't        j,                  j                  d      |_        nY|d k(  r't        j,                  j                  d!      |_        n-|d"k(  r)|r d| j                   j                  j                  j                   d| d}t        j4                  j                  d#d$d%| d%gd#g&      }|sB| j6                  j8                  r|d'   n|}t        j4                  j                  dd(|gd#g&      }|rR|j:                  s||_        n#||j:                  vr|j:                   | |_        |j#                  d       ||_        n2t3        d)|       t        j4                  j                  d*      |_        n|d+k(  rA	 | j=                  |      }| j?                  |d-d-.      \  }}|r||_        nt3        d/|       |d0v r{| j                   j                  j                  j                   d| }t        j@                  j                  |
      }|rtC        |j                        g|_"        nGt3        d1|       |d2k(  r&t        j0                  j                  d3      |_        nt3        d4|       |j#                  d       tG                 |
j#                  d       tG                |j                  d:      stM        |j                  d:            tM        |d	         k(  s|
|_'        |j#                  d       8 tG                |S # 1 sw Y   xY w# t2        $ r}t3        | d,      d }~ww xY w# t2        $ rD}| xjH                  d5z  c_$        | j                   jK                  d6| d7| d89       Y d }~d }~ww xY w);NuV   Импортируем схему безопасности задач проекта "r   rD  r   rf  r3  rv  r/  r   r(  Tr  r   r:  ru  r  r  r	  rJ  r  r>  r   r  zvar:current_userrL   r  u0   Не найдена проектная роль r  zvar:project_ownerr   z
var:authorrR   zvar:responsibler  r7  r  r  r  r  r  u!   Не найдена группа Usersr  r  Fr  u+   Не найден пользователь )groupCustomFielduserCustomFieldu>   Не найдено пользовательское поле r  zsdesk-client:defaultu-   Неизвестный тип правила r3   uF   Не удалось создать правило для уровня r  zERR-0070rK  defaultSecurityLevelId)(r4   r6   re   r  r   rt   ru   rv   r=  r>  rW   CmfSecurityLevelSchemerY   rZ  r   r   rh  rA  r  CmfSecurityLevelRuler   rS  r   access_memberr  r8   r  rG   rV   r7  r  r  CmfCustFieldr-   access_task_fieldsr7   r:   r;   r  default_task_security_level)r"   rY  r  r}  rz   r=  scheme_ext_idrh   	level_msglevel_ext_idr{  
level_ruler|  member_typemember_valuer  r  r7  r  r  r  r  rR  r  cust_field_ext_id
cust_fields                             r#   r  z&JiraAPIImport._process_security_levelst  s1   ??$$&##efrsyfze{{  AM  NS  AT  @U  UV  W	
 !%L788STU	)_ 	 99Q<D	 #55<<HHIDQUJ<XM$*$A$A$E$E]$E$[!((.(E(E(#$( )F )% %44-1&\%*-1XXm-D%*48!1!&&4&8h pA$V}oRd}A>	"&//"8"8"?"?"K"K!LBuUY{m\!'!8!8!<!<L!<!Q%%+%<%<!6+#'??(,	 &= &N "11*/-N'*/))M*BN'&,&A&A&F&Fn&F&] A
"))4)@A #())Ir": VU)/)D)DN)D)[J*0**V*<K+1::g+>L*.??;A;K;K;O;OUg;O;h
 8!,!=151G1G1N1N1Z1Z0[[]^j]k.l'-'<'<'@'@'@'T#'?E?T?T?X?X`k?X?lJ$<*36fgsft4u*v$v!,!=;A;K;K;O;OUh;O;i
 8!,
!:;A;K;K;O;OUa;O;b
 8!,
!:;A;K;K;O;OUf;O;g
 8!,!7#//1$//2H2H2O2O2[2[1\\^_k^lln-oF,2,A,A,E,E08&AfXQ-/P08z -F -&E ,1LPIIOOVK5Ham
060E0E0I0I4:GZ3P4<: 1J 1* (-/4||;AEL-35<<-G>Cll^F8;TEL(-

t
(DCH
(@.7:[\h[i8j.k(k @F?T?T?X?X^e?X?fJ$<!,!6!F040M0Ml0[I -1,@,@SXaf,@,g	#)?EJ$<*36abnao4p*q$q!,0W!W7;7M7M7T7T7`7`6aacdpcq4r 1-3-@-@-D-DL]-D-^
#-EHEYDZJ$A*36t  vB  uC  5D  +E  %E!,0I!I;A;P;P;T;TZp;T;q
 8&/2_`k_l0m&n n&OOO=&L_Vp ###58845#dhhG_>`:aehinositeu:uHV)E)..4.@apAd L$$O	  	 ~ (1 !F*3se  <D  5E  +F  %F!F.  )  OOq0O OO55"hirhssuvyuz { *$. 6  sJ   ,ZJ'Z>9Z
DZ>Z	Z;(Z66Z;;Z>>	\9\\r   c           	      ~   |d   d   j                  dd      }|d| j                  j                  j                  j                   j	                         z  }|d   d|g g g g dd	d	d
}|d   }|d   d   j                  dd      d   }|dk(  rd|d<   |S |dk(  rd|d<   |S |dk(  rd|d<   |S |dk(  rd|d<   |S |dv r$d|d<   |d   D ci c]  }|d   |d    c}|d<   |S |dv r$d|d<   |d   D ci c]  }|d   |d    c}|d<   |S |dk(  rd|d<   |d   |d<   |S |d k(  rd!|d<   i |d<   |S |d"k(  rd#|d<   |S |d$k(  rd$|d<   |S |d%k(  rd&|d<   |S |d'k(  rd(|d<   |S |d)v rd*|d<   |S | j                  j                  d+|d,    d-|d    d.|d   d    d/d0d12       | xj                  dz  c_        d }|S c c}w c c}w )3Nr   r   customfieldcfr  r   T)r  r8  r}  r  F)r  r   r  visible_filterrequiredrequiredChangedr   r   r7  r3   r  textarear   field_custom_type	textfieldr-   floatr[  )r"  radiobuttons
choice_strr  r   r  )multiselectmulticheckboxeschoice_multir  r  cascadingselectchoice_cascade_multi
datepickerdater(  r3  r  r4  r  )r6  r5  r  r  r   rd  u6   ) имеет неподдерживаемый тип 'rV  zERR-0064rS  r  )r  r4   r=  r>  r  r   r;   r:   )r"   r   r  r?   r   r:  opts          r#   
_map_fieldzJiraAPIImport._map_field  s   ;'-55mTJ
$//0077CCDEKKMM
.D
+-22_a"b!e= +&	&x0:@@aHL+'-C#$f 
e  ;.',C#$` 
_  7*'.C#$Z 
Y  5(',C#$T 
S  #=='3C#$AJ9AUV#c$iW5VC	NL 
K  #EE'5C#$AJ9AUV#c$iW5VC	ND 
C  8+'-C#$&y1C	N< 
;  #44'=C#$C	N4 
3  </'-C#$. 
-  :-'1C#$( 
'  </'-C#$" 
!  #44'.C#$ 
  #FF'/C#$ 
 OO%%Yv./s9T?2C DGGPQYGZ[cGdFeefh'	 &  OOq OC
M W Ws   F50F:c                 &   d | _         | j                  D ]  }| j                  t        j                  j
                     d   D ]Q  }d|vr-| j                  j                  dt        j                           y |d   d   |k(  s@| j                  |   |d<   S  | j                  j                  j                  j                  }t        j                  j                  |dg      }|s#t        j                  d|d| j                  	      }d
|_        |j                          t        j                   j                  dd|      }| j                  j"                  j$                  j                  dd      s&| j                  j&                  j)                  d       y | j                  j                  d       t        j                  j+                         D ci c]  }|d   |
 }}g }g }	| j                  t        j                  j
                     d   D ]  }|j                  d      r|d   d   s"| j                  j                  d|d           ?| j-                  |      }
|d   d   j/                  dd      }|d| j                  j                  j                  j                   j1                         z  }||d<   |
s|
d   dv r|	j3                  |       | j                  j                  j                  j                   d|d   d    }t        j4                  j                  |g d      }|s/t        j5                  |d   |d   |
d   d|| j                  d      }||v r||   d   |j6                  j$                  k7  rI| j                  j9                  d |d   d    d!|d   d    d"|j6                   d#||   d    d$	d%d&'       | j                  j                  d(| d)|d    d*       ||   |d+<   n6| j                  j                  d,| d)|d    d-       |j3                  |       |j:                  rW|d   |_        |
d   d.k(  r|j>                  j$                  xs i }tA        |jB                  j$                        xs
 tA               }|d   d/   D ]  }|d0   s	i }tA               }|j                  d1g       D ]<  }tE        jF                  |d2   d3d45      }|d2   ||<   |d6   s,|jI                  |       > |D ch c]  }||vr|
 }}|jK                  |       |jK                  |        n |}||_        tM        |      |_!        |jN                  rd|_(        |j3                  |       |j                  d7       tS                t        jT                  j                  ||||8      }|rt        jU                  ||||8      j                  d7        tS                |jW                          |rt        j                  jY                  tZ        jZ                  j]                         j_                  d9      d
dd:       t        j                  ja                  d;d
i       t        j                  j+                         D ci c]  }|d   |
 }}|D ]  }||d      |d+<    dAfd<	|	D ]V  }t        j                  jb                  |d+   d      }te        t              |jf                     |d   d1   D ]
  } |        X | j                  j"                  j$                  }|d=   D ]P  }|d   t        j                  j
                  k(  s$| j                  t        j                  j
                     d   |d<   R || j                  _        d>th        jj                  d?<   d| j                  j"                  _'        | j                  j                          tS                d@th        jj                  d?<   y c c}w c c}w c c}w )BNr   r   uj   Текущая настройка не поддерживает импорт кастомных полейr   r   r  u8   Экран проектов Jira по умолчаниюTr   r7  rZ  r4   r  _customr  )r   r>  r2  import_custom_fieldsFuI   Отключен импорт пользовательских полейu8   Импорт пользовательских полейr   r   u!   Поле не кастомное r   r_  r`  r  r   re  )rl  r  rn  r/  )widgetr  r  disabled_choices)r  r   re  dirtyr7  r4   rZ  rw  u,   Неудалось смапить поле 'rd  u   ): widget поля 'u7   ' не совпадает с существующим 'rV  zERR-0065rS  r  u   Поле с именем r  u4   ) есть в таблице, мапим в негоr   u(   Создаем поле с именем u   ), и мапим в негоri  r  r+  r  r   r1      seplengthdisabledr:  )r]  r   r2  ui_form_groupz%Y%m%d%H%M%S)meta_version
model_namer<  rM  c                    t        | t              r;j                  |       }|s	 |       }|j                  r|j	                          y y t        | t
              rj                  | d         }|s | d         }| j                  dd      |_        |r|j                  |_        |j                  r|j	                          | j                  dg       D ]  } ||        y y )Nr  r   r~  Fr<  )	r   r-   rY   r  rA  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    &#&$((f(5(f5E##JJL $FD)$((fWo(>(fWo>E#)::j%#@ -7]]E*##JJL#ZZ
B7 0E!%/0 *r%   r  r   r  r  r   )6rF   r{   r!  rW   r  r   r4   r5   rc   r  r=  r>  r  rY   rM  rA  CmfUiFormGroupr   r   re   r  r   rr  r  r  r   rS  rw  r;   rZ  r  r  r  rx  r   translit_stripr  r   r   r  ry  r7   CmfUiFormFieldinvalidate_cachecustom_fields_gen_metar(  r  r  custom_field_sync_update_modelsr   varsr   r~   r  )r"   ext_field_namer   r7  ui_view_formr  rz   shop_fields
new_fields
m2m_fieldsui_fieldr   r]  current_choicescurrent_disabled_choicesr  default_choicesdefault_disabled_choicesr.  
option_keyr   rx  ui_form_fieldfield_classr!  rq  r  r  s                             @@r#   _process_custom_fieldsz$JiraAPIImport._process_custom_fieldsI  s=   !".. 	JNv~~'B'BCHM J"e+OO''  )U  W^  Wf  Wf  g%d+~=)-)9)9.)IE+&J	J %%,,88''++63%+H!++O $??	 , L '0#--11ywWc1d,,22667MuUOO""**[ VW39>>3T3T3VWaq)WW

]]6>>#>#>?I i	)E99[){1CH1M##&GgGW$XYu-H%d+33M4HDa..55AABCIIKKD E&M+,0``!!%(..55AAB"U;EWX\E]D^_F,,00K 1 J #00!'Nv&./B&C!#$( 1 
 {"t$X.*2C2C2I2IIOO--!+.v67s5;Md;S:T U,,6,=,=+> ?88CD8I(8S7TTUW #!/ .  ##&?vRgGW  XL  %M  N'24'8m$##&NtfTVW\]dWeVf  gC  %D  E!!%())%*7^
"/0L@&0&8&8&>&>&D"O/2:3N3N3T3T/U/^Y\Y^,#(#5i#@ D&'89$*,3650&-kk)R&@ IF)0)?)? &w$'')*J
 ;A/OJ7%j1 8 < <Z HI ,;,$'"/9  ,( , )//0HI'..?-D0 ,D()8J&267G2HJ/(('+J$%%e,D1 #1155%#+	 6 M !%%)'"/	 & 
 $4$(Si	)V 	%%'NN11$,$5$5$9$9$;$D$D^$T"+" NN::<Li;XY7=~~7X7X7Z[!1\?A-[K[# B'25='Am$B	0(   	&E ..//m0D\0RSK<(9(9:L,Y7 &f%&	& ??0066+, 	SAyFNN777"mmFNN,G,GHR(	S )1%!#

:37%%0!$

:G XV,^ \s   ``	`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}t         j                  j+                         D ci c]  }|d   |
 }}d}|d   }|d   }|dz  }| j,                  j.                  j.                  j0                   d| }| d}	t         j2                  j5                  |	ddg      }
|
sOt         j2                  j5                  |ddg      }
|
r*t         j6                  j9                  dd|
g      }|rd }
nd!}|
sO| j,                  j:                  j=                  d"| d#| d$       t         j3                  d%|	| j,                  d!&      }
|
j>                  r?|	|
_         ||
_        |j5                  dd'      |
_	        ||
_!        |
jE                  d!(       n)| j,                  j:                  jG                  d)|
 d*       |r;t         jH                  jK                  |
d!+      }|D ]  }|jM                  d!d!,        tO        |d-   d.      D ]g  \  }}|d   }|d   }|d/z  }|	 d| }t         jH                  j5                  |g d0d!1      }|sS| j,                  j:                  j=                  d2|
 d3| d#| d$       t         jI                  d4|
|| j,                  d!5      }|jP                  r=| j,                  j:                  jG                  d6|
 d7|j                   d#| d8| d9	       n|j>                  s=| j,                  j:                  jG                  d:|
 d;|j                   d#| d8| d9	       n|jB                  rZ|jB                  jR                  j5                  d<      r5|jT                  |jB                  d<   k(  r||d<<   n|jB                  d<   |d<<   n||d<<   |d<   |_*        ||_        ||_!        |jE                  d!(       |d=   D ]  }|d   }|j5                  |      }|r|jV                  }n|jY                  d>      r|d   }|j5                  |      }|r|jV                  }n|j[                  d?d@      }|dA| j,                  j.                  j.                  j0                   j]                         z  }||vr| j,                  j.                  j.                  j0                   d| }t         j^                  j5                  |dBdCg      }|s
t         j`                  j5                  ddgdd|
ggdDgE      }|r[|j>                  sO| j,                  j:                  jG                  d:|
 dF|jb                   dG|jd                  j                   dH       |st         j`                  j5                  dd|gdd|
gg dIg dJgd!K      }|r8| j,                  j:                  jG                  d:|
 dF|jb                   dL       t         ja                  ||
| j,                  d!M      }tg        |t         j^                        r||_4        ||_2        |jj                  sU| j,                  j:                  j=                  d2|
 dN|jb                   d#| dO| dP	       |jE                  d!(        j |
jm                          to                |
S c c}w )Qu  
        Создает отдельный экран для перехода бизнес-процесса
        Экран перехода создается без вкладок и групп,
        в него добавляются только те вкладки, которые есть в Jira

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

        Returns:
            CmfUiForm: объект экрана
        r   rW  rw  rR   rt  r  r  r   rO   r   r+  r   r   rQ   r  r2  z	Epic Link)Sprintr  r   Fr   r   u    [переход]r/  z::transitionr   r4   r  ra  r1  r.  NT   Создан экран 'rd  rf  r  )rM  r7  r4   rZ  u   Экран переходаr:     Экран uv    был изменен пользователем. Новые данные из импорта не применены)r2  r  )rK  r<  tabsr3   r@  )r  rR  rh  r7  r   r     На экран $    добавлена вкладка 'tab)r>  r2  r7  r4   rZ     C экрана D    пользователем была удалена вкладка 'r  uF   ). Новые данные из импорта не применены   На экране F    пользователем была изменена вкладка 'rR  r   r  r_  r`  r  r  re  r  r      поле 'm   ' было изменено или уже добавлено пользователем во вкладку 'uF   '. Новые данные из импорта не примененыrK  r  r  uy   ' было удалено пользователем. Новые данные из импорта не примененыr_      добавлено поле 'u   ) во вкладку 'rV  )8rW   r  r   rs  rv  rP   rs  r  r  r   rO   r   r,  r   r   rN   r  r  r  r  r  r   r4   r=  r>  r  rY   CmfUiFormSchemeRuler  re   r  rZ  r7  rh  rA  r  r  r   rS  r  r  r   rR  r  r  r  r  rS  r  r  r  r   r]  r  r  r7   )r"   r  task_field_maprz   r  purge_groupsr  screen_namescreen_ext_idtransition_screen_ext_idui_formin_screen_schemeui_form_groupsr  rg  tab_datatab_idtab_namerR  
tab_ext_idr  jira_field_id
task_fieldr   jira_field_namer\  r  s                              r#   r  z(JiraAPIImport._process_transition_screen  s   
00
 &..44
 88	

 22
 6>>66
 &..33
 fnn))
 6>>..
 //
 &..33
 v~~99
 v~~..
 v~~**
 22
  ::!
" fnn00#
& ,,'
( nn**"NN==+
< 4:>>3T3T3VWaq)WW%	!&)**??1188DDER	{S&3_L#A ""&&+& ' 
  &&**$\* + G #)#=#=#B#B8UXZaJb#B#c #"G#'LOO""''+K=I;aH &&(/?? $	 ' G ""5GN&GL&??=:WXGL&1G#LLTL*OO""**gY 'V W
 #2277 $ 8 N "0 H$$d$$GH  )V)<a@ M	9OE8d^F'HdlG45Rx@J"1155!
 !% 6 M !&&++&wi/ST\S]]`ag`hhij !' 5 5"%#$( !6 ! ((&&..%gY /''4'9'9&:#fXRz RZ[
 #22&&..(	 2''4'9'9&:#fXRz RZ[ "11%55;;??	J$,,0M0Mi0XX.5+.;.K.KI.V+*1HY'(0(;%%-"08-""t"4&x0 S9
 *4 0+//>
!+!6!6J"--n=&0&8O!/!3!3O!DJ!%/%:%:
%2%:%:=$%O
"$//*@*@*G*G*S*S)T&U&[&[&]]
%[8$/3/E/E/L/L/X/X.YY[\i[j,k)%+%8%8%<%<#4 ) 3$ &= &
 " & 5 5 9 9j1!30
 ( !: ! !)F)FOO**22,WI 6%%/%7%7$8 900=0K0K0P0P/Q R^_ $$*$9$9$=$=#S*5%sG466	  )- %> %M %..660	 :))3););(< =bc
 !$*$9$9'&#'??(,	 %: %M "*f.A.AB3=0.;+ ++OO**//*7) 488B8J8J7K3zl [008z<
 "&&4&8gS9uM	9^ 	  "] Xs   #bc                 >   t         j                  j                         D ci c]  }|d   |
 }}|d   }|d   }| j                  j                  j                  j
                   d| }t         j                  j                  |ddg      }|sO| j                  j                  j                  d| d	| d
       t         j                  d|d| j                        }|j                  }|j                  r6||_        |j                  dd      |_        ||_        |j                          n)| j                  j                  j!                  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&                  j)                  |      }
|
D ]i  }|	j                  |j                        }|r8|j                  d d!      |_        |j                  d"d!      |_        |d   |_        |j                  d#       k ng }t         j0                  j)                  d$d%|gg d&g d'gd(g)      }|D ]M  }||v r|j3                  d*       |j                  |_        |j                  d#       |j5                  |       O d d d d d d+}
| j"                  j$                  s|
D ]  }dd%|gd,d%|d-k7  rd.nd/gd$d%|gg}|d0k(  r|j5                  g d1       t         j&                  j                  |dd,g2      }|srt         j&                  j)                  |d,g3      }|r|d4   }d|_        |j                  d#       n/| j                  j                  j!                  d5| d6| d7| d8       ||
|<    t7                t9        |d9         }|d9   D ]M  }|d:k(  r|
d;   r|
d;   }n<|d   }|d   }| d| }t         j&                  j                  |d,d<gd=      }|sS| j                  j                  j                  d>| d?| d	| d
       t         j'                  d/||d| j                  @      }|j:                  r=| j                  j                  j!                  dA| dB|j                   d	| dC| dD	       ni|j                  s=| j                  j                  j!                  d5| dE|j                   d	| dC| dD	       n ||_        ||_        |j                  d#       |dF   D ]  }|d   j=                  dG      sj?                  dHdI      }|dJ| j                  j                  j                  j
                   jA                         z  }||vrptC        tE        fdK| jF                  t         j                  jH                     dF         d       }|s| j                  j                  j                  j
                   d|dL   d    }t         jJ                  j                  |dMdNg      }t         j0                  j                  dOd%|gd$d%|ggdPg3      }|r[|j                  sO| j                  j                  j!                  d5| dQ|jL                   dR|jN                  j                   dS       |st         j0                  j                  dOd%|gd$d%|gg dTg dUgdV      }|r8| j                  j                  j!                  d5| dQ|jL                   dW       t         j1                  |||| j                  dX      }|jP                  dYv r|
dZ   xs ||_'        n$|jP                  d[v r|
d\   xs ||_'        n||_'        |jR                  sq|jN                  jT                  }|jN                  j                  }| j                  j                  j                  d>| d]|jL                   d	| d^|d/k(  rd_nd` da| db       |j                  d#        P |jW                          t7                |S c c}w )cNr   r   r   r/  r   r4   r  r  rd  rf  r  T)rM  r7  rZ  r4   r   r   r  r<  r@  )r  rR  i  i  i  rR  i  ip  )hiddenrR  iX  i@  i(#  )	_main   Участники   Даты   Планu   Разработкаu
   Связи_addonru  _descrr	  r  Fr  r:  r2  r1  )rZ  r1  T)r4   r1  Nz-cmf_created_at)r   order_byrJ  )r  r  r  r  r  r>  r  r  r  r  )r  r1  click)r   r  r   r  r   r  u6    не найдена системная группа 'u   '. Возможно она была удалена пользователем. Поля на экране могут отображаться некорректно. Создайте группу с названием 'u$   ' и повторите импортr  r3   r  r  r  r  r  )r>  r2  r7  rZ  r4   r  r  r  uL   ). Изменения из импорта не будут примененыr  r   r  r_  r`  r  c                 @    | j                  d      xr | d   d   k(  S )Nr   r   r   )r   r  s    r#   r   z/JiraAPIImport._process_screen.<locals>.<lambda>  s,    !IIk2 J %k 24 8M I r%   r   r  re  r]  zui_form_group.typer  r  uL   '. Изменения из импорта не будут примененыrK  r  r  u   ' было удалено пользователем. Изменения из импорта не будут применены)r]  r   r2  r4   rZ  )r  r  r  r  r  )rp  r(  r  r  r  u   во вкладкуu   в группуr  rV  ),rW   r  r   r4   r=  r>  r  rY   re   r  r  rZ  r   r   rh  rA  r  rG   rV   r  r   r  r  rR  r  rS  r   r7   r   r  r  r  r  r   r   r!  r   rS  r  r  re  r  r>  r  )r"   r  rz   r  r  r  r  r  ui_form_is_newdefault_groupsr  r  group_configcurrent_ui_form_fieldsui_form_fieldsr  r  r  r  num_tabsr  r  r  r  
jira_fieldr   r   r\  r]  
group_typer  s                                 @r#   _process_screenzJiraAPIImport._process_screen
  s	   39>>3T3T3VWaq)WW4L	Vn??1188DDER	{S""&& & ' 
 OO""''+K=I;aH &&($ $??	 ' G !""&GL!::mR8GL&,G#LLNOO""**gY '\ ]
 $))// ##
 ##'
 ##
 ##
 t) ##
 ##
 ##
 ##A$NJ $2277w7GN!/ 5-11-2D2DE+7+;+;He+LM(+7+;+;He+LM(,8,CM)""t"45 &("#2277sG,2-
 ,, 8 N "0 = $::!(($(?+2+=+=(""t"4&--m<= #'  
 yy, ;
S*-SZ8-C'PsG,
 +NN#;< & 5 5 9 9""8 !: !
 % $2277& &x 8 F (.q	/3,%**t*<..660	9opzo{ |T U_S_  `DE .;z*?;B 	vf~&&> Z	9C1}!8 !/w 7Tv; -b9
 & 5 5 9 9%% %) !: ! %OO**//*7)3WX`Waadekdllmn %+$9$9"&)(,#'?? %: %M !,,OO**22)' 3++8+=+=*>c&H: Vde
 '66OO**22,WI 6++8+=+=*>c&H: Vde *2M&47M1!&&4&8!(m j9
 *4 0$//?$,,]DA!DOO2299EEFGMMOO{* fnn&A&AB8L 	 '+'='='D'D'P'P&QQSTYZeTfgkTlSm$n!#0044,!+ 5 
 !' 5 5 9 9%sJ7!30
 - !: ! !)F)FOO**22,WI 6%%/%7%7$8 900=0K0K0P0P/Q Rde $$*$9$9$=$=)3
;%sG466	  )- %> %M %..660	 :))3););(< =hi
 !$*$9$9#-!&#'??(, %: %M // 4  3AAU2V2gZgM/11 6  3A2L2]P]M/ 3@M/ ++!.!<!<!A!AJ!.!<!<!A!AJOO**//*7) 488B8J8J7K3tfTV4>%4G0M^__ablammnp
 "&&4&8Uj9aZ	9x 	  "A
 Xs   `u,   Обработка схемы экрановc           
         |j                  d      r|d   }|d   }| j                  j                  j                  j                   d| }t        j
                  j                  |dg      }|s"t        j                  || j                  d      }|j                  r| j                  d      D ci c]  }|d   |
 }}|j                  s5t        j                  j                  |	      D ]  }|j                           |d
   |_        |j                  d       |d   D ]  }	|	d   }
d }|
dk7  rz| j                  j                  j                  j                   d|
 }t        j                  j                  ddd| dg      }|s"| j                  j                  d|
 dd       |	d   j!                         D ]  \  }}|j                  |      }|s%| j                  j                  d| d| dd       ?	 | j#                  |      }dddd ddd d!}| j                  j%                         r  y ||d"|j                  |d      | j                  d#}t	        j                  j                   d*i |d$d%gi}|st	        j                  d*i |}|r|j&                  j)                  |       |j                  d         ne| j                  j                  j                  j                   d|d    }t        j
                  j                  |dg      }|s@t        j                  |d&    d'|d
    || j                  d(      }|j                  d       t        j*                  j                  | j                  j                  j                  j                  dg      }|j                  ryt        j                  j                  |dg      }|s"t        j                  |d| j                  )      }|j                  r'||_        ||_        d"|_        |j                  d       t3                |S c c}w #  | j                  j                  d| d| dd       Y xY w)+Nr  r   r/  r   r  Tr  r  )r  r   r:  rd  r  r8  r7  r  r  r  r.  ;   Не удалось найти логический тип rB  CmfUiFormSchemer  r  u8   Не удалось найти в дампе экран u    для zERR-0069u:   Не удалось импортировать экран zERR-0068r  r   rj  )r8  r  r  r  r  r  r  r  )r  ra  rM  crud_choicer4   r   logic_typesr   u+   : Схема экранов проекта r  r  r/   )rY   r4   r=  r>  rW   r  rZ  r  r  r  r   rS  r   rA  r]  r;   r   r  r6   r  r   r  r  ra  rM  r7   )r"   rY  screen_scheme_datascreen_scheme_idr7  r  rq  r  rw  issue_type_datarj  rN   rx  r  r  r  r  action_mappingry  r  s                       r#   r  z$JiraAPIImport._process_screen_schemeM   s   01!-.B!C1$7..55AAB"EUDVWF#3377vse7TN!!'!7!7!#$( "8 " --.2.>.>y.IJ1T719JJ%,, & : : ? ?~ ? ^ && '9&@####5'9-'H >4O$3M$BM!%J$	1/3/E/E/L/L/X/X.YY[\i[j,k)%+%8%8%<%<XvY\]n\oorWsDt%<%u
) OO55"]^k]l m *): 6 
 %-<Y-G-M-M-O /4)	!(Y!7% OO55"Z[dZeemntmu v *): 6 
 %%&*&:&:6&BG (1&.$,$*,4*2.4*  ??446" /=&-.7+9+=+=fi+P*.//%	  &99==b	bS`Rab##)#=#=#J	#JD% ,,33J?		d	3_/4>4@ ..55AAB"\RVEWDXYF#3377vse7TN!!'!7!7(/00[\hio\p[qr!#$(	 "8 " ###5!++//t7M7M7T7T7`7`jmin/oL--1155VSE5R!55%(,#'?? 6 D
 ''*8D'".DK*3D'II$I/M KH% OO55"\]f\ggopvow x *): 6 
 %s   2P= Q&Q+c                 v
   i }t               }|j                  d      s|S t        j                  j	                         D ci c]  }|d   |
 }}|d   j                         D ]<  }|d   j                  d      s|d   j                  dd      }|d| j                  j                  j                  j                   j                         z  }||vrq| j                  t        j                  j                     d   D ]  }|j                  d	      s|d   |d	   d   k(  s$|d
   j                         D ]f  \  }	}
|
j                  d      s|j                         }|
|d
<   |j!                  |	i       }|||d   <   |
d   sM|j!                  di       }|||d   <   h  ? |j                         D ]~  \  }	}d}| j                  j                  j                  j                   d|d    }|d    d|d    }|	dk7  rd| j                  j                  j                  j                   d|	 d}t        j"                  j                  ddd| dg      }|s"| j                  j%                  d|	 dd       |d|	 z  }|d|d    z  }n|dz  }t        j&                  j                  |dg      }|s5t        j'                  ||d| j                        }|j)                  d        |j+                  ||f       |j                         D ]  \  }}|d
   }
| j                  j                  j                  j                   d| }t        j,                  j                  |g d!      }t        j.                  j                  ||"      }|s"t        j/                  ||| j                  #      }|
j                  d$d%      |_        |
j                  d&d%       |_        |j4                  d'k(  r|j6                  j8                  xs i }t        |j:                  j8                        xs
 t               }i }t               }|
j                  d(i       j                         D ]Q  }t=        j>                  |d)   d*d+,      }|d)   ||<   |d-   r|j+                  |       ||vsA|j+                  |       S |jA                  |       ||_        tC        |      |_        ||_        tC        |      |_        |j)                          |jD                  r|j)                  d        tG                   |S c c}w ).u1    Импорт конфигураций полейr  r   r   r  r_  r`  r  r   r   r  r  r  Nr/  r   5   : Конфигурация полей проекта r   r7  r  r  r.  r  rB  CmfCustFieldConfSchemer  u    для типа     по умолчаниюr   r  Trt  r:  )re  r  rx  )r]  r2  )r]  r2  r4   r  Fr  ri  r  r   r1  rz  r{  r~  )$r  rY   rW   r  r   r   r  r  r4   r=  r>  r  r!  r   r   r
  rT  r]  r;   r  rA  r  rS  r  rb  visiblere  r  r   rx  r   r  r   r   r  r7   )r"   rY  logic_type_fieldslogic_type_field_confrz   r  r  r   r  ru  r  r   r   rN   r  r   rx  r  field_idfield_ext_idr]  r  r  r  r  rx  r.  r  s                               r#   _process_field_confz!JiraAPIImport._process_field_conf   s    #.((39>>3T3T3VWaq)WW '}5<<> 	8Jd#..~>#D)11-FJAdoo44;;GGHIOOQQJ,"mmFNN,G,GHR 8
!~~k2d#z+'>t'DD2<Y2G2M2M2O 8.w&{{40$ * 1+2i(!2!=!=mR!P.3uT{+"#34%6%A%A%%LF27F5;/88	8< &7%<%<%> \	!M6J(,(>(>(E(E(Q(Q'RRTUabfUgTh%i""5)**_`lms`t_uvD%&()?)?)F)F)R)R(SSUVcUddf$g!#0044XvQRSdReefOg<h4i
!OO--UVcUde"!9 . 
 &B}o*>>&+Jv,>+?@@22$5599AWad`e9fO""("9"91$(#	 #: #  $$$6!%%z?&CD $*<<> 9%	*"&//"8"8"?"?"K"K!LBxjY#0044' 5 
 )/(D(D(H(HT^gv(H(w%,,2,H,H#-.#'?? -I -)
 29\51Q%.4;KK
E4R0R%-//<?&0&8&8&>&>&D"O/2:3N3N3T3T/U/^Y\Y^, G'*u$")++i"<"C"C"E E%,%;%;"7O ##%&

 /5Wo
+!*-,00< &_<488DE $**734;)1=ABR=S):)8J&267O2PJ/%**,((OOO5s9G\	| %$ Xs    T6uA   Обработка схемы конфигурации полейc                    | j                   j                  j                  j                   d|d    }t        j                  j                  |dg      }|s@t        j	                  |d    d|d    || j                   d	      }|j                  d
       t        j                  j                  |dg      }|sAt        j                  |d    d|d    d|d| j                         }|j                  d
       | j                  |      }|j                  d |f       |j                  rt        j                  j                  |      D ]  }|j                  d        t               }|D ][  \  }}	|j                  |	       ||	|r|gng d| j                   d}
|sd|
d<   t        j                  di |
}|j                  d
       ] |D ]$  }	|	j                          |	j                  d
       & |j!                          || _        |S )Nr/  r   r   r  r   u@   : Схема конфигурации полей проекта r   Tr  r:  r  r  rt  r	  rJ  )r2  r  r  rZ  r4   r3   rR  r/   )r4   r=  r>  rW   r  rY   rA  r  r  r  rZ  CmfCustFieldConfSchemeRuler   rS  r  
calc_cacher  r  )r"   rY  r7  r  r  r  rw  field_confsrN   
field_confry  s              r#   r  z(JiraAPIImport._process_field_conf_schemeP!  sN   OO**11==>bdAS@TU!'!>!>!B!B&Z]Y^!B!_%%+%B%B$U+,,lmy  {A  nB  mC  D?? $	 &C &" #''D'9 1155VSE5R$55$U+,,abnoubvaw  xP  Q $??	 6 O   T 2 $ 8 8 F!!4"9:!1199>>F\>] 3T23%K*? ,&
J
+4'13=J<2'+"&//	 "+,Ii(88E9E		d	+, * 2
%%'D12 	//1&<#%%r%   c                    | j                          | xj                  | j                         z  c_        | j                  j	                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                  j                  r@| j                          | j                          | j                          | j                          | j                          | j!                  | j"                  j$                  j&                  j)                  dd             | j+                  | j"                  j$                  j&                  j)                  dd             | j-                          | j/                          | j"                  j$                  j&                  j)                  dd      r.| xj                  | j"                  j1                         z  c_        n%| j"                  j2                  j5                  d       | j"                  j7                         ry d| j"                  _        | j"                  j;                          t=                | j"                  j?                  d       | jA                         D ]  }|d	   | jB                  D cg c]  }|d	   	 c}vr&| j"                  j2                  jE                  d
|d    d       tF        jH                  sc	 d| j"                  jJ                  jJ                  jL                   d|d	    d}| j"                  jO                  || j"                  j2                          | j"                  j?                  d| j"                  jT                          | j                   S c c}w # tP        $ r3}| j"                  j2                  jS                  d|        Y d }~Fd }~ww xY w)Nprocess_task_linksT)r  import_filtersprocess_linksu2   Отключена обработка ссылокr  rI  r   u'   Импортирован проект 'r   rV  r/  )re   uC   Не удалось создать отчет по проекту. u-   Импортировано объектов: )+r   r:   rJ  rG   r  r  r  r#  r.  ri  r  r  rV   rr  rv  r  r&  r4   r   r   rY   r  rT  rV  process_cross_linksre   r  r6   r  rA  r7   r5   r
  rb   r  r   IMPORT_COLLECT_STATSr=  r>  project_statsr8   rn  r  )r"   r  r<   r  r  s        r#   process_importzJiraAPIImport.process_import!  sn   4..00		   "##%!!#99??""$!))+! 44::>>?SUYZ 	  	
 	44::>>?OQUV 	 	
 	$$&??((..22?DIOOtBBDDOOO""**+_`??$$&#& H%))+ 	zGt}$:P:P$Q3SY$QQOO""''*QRYZ`RaQbbc(de..z#%doo&<&<&C&C&O&O%PPRSZ[_S`Raac!d--nT__E[E[-\	z 	KDOOLqLqKrst??"" %R  z&&,,/rsvrw-xyyzs   'P6A%P!!	Q*(QQ)T)rB  r  )TTNr  )   r@  )NFr   )r   r@  F)Nr  r  )r)   r*   r+   r,   r  r.   r   r-   r   r   rT   propertyr{   r   rj   r   r   staticmethodr  r	   r
   r   ri   r   r   r   r   r   r  r$  r'  rG  rC   rS  r}  r  r  r   r  r  r  r#  r.  rW   rY  rz  rQ  r  r  r  rt  r}  r  r  r  r   r  r  r  r   r)  r8  rI  rZ  r#  r  r  r  r$  r%  r  rM  r   r  r  r.  r9  r?  rK  rm  rq  r  r  r  r  r  r  r  r  ry  r  r&  r"  r!  rT  rV  ri  rr  rv  rx  r  r  r  r  r
  r  rP  rN  rO  r  r  r  r=  r3  r  r  r  r  r  r  rw  rF  r&  ro  rL  r\   r  r  r  r  r)  r0  r  r   r=  r[  rr  r~  r  r  r  r   r  r  r@  rJ  r  rr  r  r  r  r  r  r  r  __classcell__)rm   s   @r#   rE   rE   B   s!   EOT	?"
W 
$ 
B "T#t)_ " ".
2
 'y 'c 'htDz>R ' 'A Dc3h,@  D      E" ! !F<tDz <|d 
DJ 
4 
 =E (2 OP* Q*" :;U <Un YZT3 T T [Tlw& :;5X 5XY 5X <5Xnr"h 45!Q 6!QF DEc Fc6 :;7 <7<OHZHZ Ob5nTlYv:xfP
' 45 6> @A/= B/=b LM7 N7> 45~
4 ~
 6~
@9vu
n GHQ IQVt V4 Vp0 "4l+@e_N :;,M <,M\EN RS T. 45DG 6DGL :;sJ <sJj9'RT V V* CD/$ / E/4@& OP6B4 6B Q6Bp{)z GHC IC:60 8M<^ EF<J G<J| tu%, v%,N(!T+, 67i 8iV =>' ?' JKH
T H
 LH
T @Ad4 d4 Bd4L 67[2 8[2z AB;| C;|z 67 8 IJQ7 KQ7f IJ]7 K]7~ 78`7 9`7DV<@H# H8 ./n3 n 0n" 
'$
 &&&##&&""8!F8:x5n[D [& &  4  
   
(2.-B^/ FGA Ad A4 A HAF2892v88 8b0HF FP*:  D   # eh  nP`2h	%Rh<$|DLR%h? ?BE%NxtAF
 CDv EvpH%T XY2& Z2&h8#r%   rE   )6cmf.appr   cmf.includecmf.utilr   r   dataclassesr:  r  r(  r  r  r  r  pathlibr   r}   r  typingr   r	   r
   r   r   r   r   bs4r   	itertoolsr   textwrapr   r   unicodedatar   
cmf.modelsr   %common.models.cmf_plugin_import_mixinr   modules.jira.apir   modules.jira.base_importr   modules.jira.jql.parserr   rW   r  r   r  r  	dataclassr   rC   rE   r/   r%   r#   <module>r	     s      )       	     H H H  " # !   F $ 3 1$v~~&V-=-=(>VEVEV@WWX	 
% 
% 
%*{E#N {E#r%   