
    riϋ                    
   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	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d dlZd dlZd dlmZ d dlmZ d dl d d	lmZ d d
l m!Z! d Z" G d dejF                        Z#y)    N)Path)Queue)Thread)CallableDictListOptionalTypeUnion)BeautifulSoupcmf_context)*)cmf_plugin_you_track)YouTrackClientc                       fd}|S )Nc                       fd}|S )Nc                    }j                   dk(  r|d|d    z  }n'j                   dk(  r|d|d   d    d|d   d    d	z  }	 | j                  j                  d
 d| dd
 d        | g|i |S # t        $ r@ t	                | xj
                  dz  c_        | j                  j                  d|        Y y w xY w)N_simple_dump    _process_issuer   
idReadable (id)z=====T	anonymousu   Ошибка )__name__
cmf_importlog	Exceptioncmf_rollback
has_errors	log_error)objargskwargs_namefuncnames       1./modules/youtrack/models/cmf_plugin_you_track.pywrapperz3catch_exception.<locals>.decorator.<locals>.wrapper   s    E}}.1T!WI&"221T!W\232d1gdm_AFFB""gYawax#@D"QC1$1&11 B!#((=)@ABs   0A8 8AC C )r*   r-   r+   s   ` r,   	decoratorz"catch_exception.<locals>.decorator   s    	B     r.   )r+   r/   s   ` r,   catch_exceptionr1      s      r0   c            
           e Zd ZU ej                  j
                  dz   Zej                  j                  ddgz   Zeed<   e	e
ef   ed<    fdZed        Zede	e
ef   fd	       Ze	 	 	 dyd
e
de
de
de
fd       Zedede
fd       Zed        Zede
deee      fd       Zed        Zedefd       Zedefd       Zedefd       Zedefd       Zed        Zed        Zd Zd Zd Z ed        Z!ed        Z"	 	 dzd Z#	 d{d!ee   defd"Z$d# Z%d$e
fd%Z&d& Z'd'e
fd(Z(d)e
fd*Z)d'e
d)e
fd+Z*d, Z+d-e,fd.Z-d{d/Z.d0 Z/d1 Z0d|d2Z1 e2d3      d'e
fd4       Z3d5 Z4d-e,fd6Z5	 	 dzd7e
d8e
fd9Z6	 	 dzd:ed;ed7e
d8e
fd<Z7d= Z8d> Z9d? Z:d@ Z;d}dAZ< e2dB      dC        Z= e2dD      dE        Z>dFefdGZ?dH Z@ e2dI      dJe
de
fdK       ZA e2dL      dM        ZB e2dN      dO        ZC e2dP      dQ        ZD e2dR      dS        ZE e2dT      dU        ZF e2dV      dW        ZG e2dX      dY        ZHdZ ZId[ ZJd\ ZKd] ZL e2d^      d_        ZM e2d`      da        ZN e2db      dc        ZOdd ZP e2de      df        ZQdg ZR e2dh      di        ZS e2dj      dk        ZTdled:efdmZU e2dn      do        ZV e2dp      dq        ZWdr ZXds ZY e2dt      du        ZZ e2dv      dw        Z[dx Z\ xZ]S )~CmfPluginYouTrack)youtrackyoutrack_fieldstestget_all_projectsr$   #_CmfPluginYouTrack__youtrack_fieldsc                     t        |   |i | i | _        i | _        i | _        g | _        g | _        d| _        d| _        d | _	        y )Nr   F)
super__init__epicsissue_relationssubtasksboardsselected_projectsr$   update_fieldsr8   )selfr'   r(   	__class__s      r,   r;   zCmfPluginYouTrack.__init__:   sQ    $)&)
!!#"!%r0   c                    | j                  g d       t        | j                  j                  j                  | j                  j
                  j                         | j                  j                  j                  | j                  j                  j                         | j                  j                  j                        S )u7    Клиент для работы с YouTrack REST API )pluginzplugin.ext_urlzplugin.ext_tokenzplugin.ext_loginzplugin.ext_passwordzplugin.verify_sslurltokenusernamepassword
verify_ssl)
load_fieldsr   rE   ext_urlvalue	ext_tokendecrypt	ext_loginext_passwordrK   )rB   s    r,   ytzCmfPluginYouTrack.ytF   s     	 
 	 ##))++''//1[[**00[[--557{{--33
 	
r0   returnc                 J   | j                   r| j                   S | j                  j                         j                  d      }|j	                         rG| j
                  s;t        |d      5 }t        j                  |      | _         d d d        | j                   S | j                  j                         | _         t        |d      5 }t        j                  | j                   |d       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r+w+Fensure_ascii)r8   r    get_download_pathjoinpathexistsrA   openjsonloadrS   
get_fieldsdump)rB   	file_pathfs      r,   r5   z!CmfPluginYouTrack.youtrack_fieldsY   s    !!)))OO557@@O	d&8&8i& 6!)-1&6 %%% &*WW%7%7%9D"i& I!		$00!%	HI!&D%%%6 %%%	I Is   *D#DDD"datetimetzformatc                 ~   | xsF t         j                  j                  t         j                  j                        j                  |      } t        j                  |      }t        j                  j                  t         j                  j                  | |            j                  |      }|j                  |      }|S N)
dtre   nowtimezoneutcstrftimepytzlocalizestrptime
astimezone)re   rf   rg   dt_tzdt_strs        r,   _datetime_in_user_tzz&CmfPluginYouTrack._datetime_in_user_tzj   s     Pr{{r{{?HHP]]2!!"++"6"6x"HITTUWX'r0   	timestampc                     t         j                  j                  | dz  t        j                        }|j                         S )N  )rj   re   fromtimestampro   rm   	isoformat)rv   dt_objs     r,   	_ts_to_dtzCmfPluginYouTrack._ts_to_dtv   s2     **9t+;TXXF!!r0   c                 ^    |sy| j                  |      }|j                  d      r|r|d   S |S )u`   
        Метод получает значение параметра объекта
        Ncf_rN   )get
startswith)r&   attrrN   s      r,   
_get_valuezCmfPluginYouTrack._get_value|   s4    
 ??5!e>!r0   
field_namec                 @    |sy | j                  |g      }|r|d   S d S )N)fields_namer   )import_shop_fields)modelr   ress      r,   _get_field_namez!CmfPluginYouTrack._get_field_name   s.    &&J<&@s1v&$&r0   c                     i dddddddddddd	d
d	dd	dd	dddddddddddddddddddddddddddd}|j                  | d      S )N   ОтложеноLowest   Самый низкий   НизшийVery lowLow   Низкий   НезначительнаяMinor   Среднийr   MediumMid   ОбычнаяNormalHighr      Высокий   Серьезная      )Major	Very high   Высший   НаивысшийHighest   КритическаяCritical   Критический   НеотложнаяShow-stopper	Emergency)r   )prioritymappings     r,   _get_priorityzCmfPluginYouTrack._get_priority   s   

b
 &r
 B	

 
 2
 B
 +B
 R
 a
 a
 1
 a
 a
 A
  a!
" !!#
$ "#&'&'$%9
< {{8Q''r0   issuec              #      K   t        | d         j                  d      }t        j                  |      D ]  }|dk(  r	||j                  |      d   y w)N
issue_pathattachmentsall_attachments.zip)	file_namerc   )r   r\   oslistdir)r   attachments_pathr   s      r,   _get_issue_attachmentsz(CmfPluginYouTrack._get_issue_attachments   s`     l 34==mL$45 	^I11 )8H8Q8QR[8\]]	^s   AA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.jsonrW   r^   r_   loads)r   comments_file_pathrd   rows       r,   _get_issue_commentsz%CmfPluginYouTrack._get_issue_comments   sW      %l 34NC$d+ 	&q &jjo%&	& 	& 	&   AA 	A A	A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/worklog.jsonrW   r   )r   worklog_file_pathrd   r   s       r,   _get_issue_worklogsz%CmfPluginYouTrack._get_issue_worklogs   sW     $\23=A#T* 	&a &jjo%&	& 	& 	&r   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/activities.jsonrW   r   )r   activities_file_pathrd   r   s       r,   _get_issue_activitiesz'CmfPluginYouTrack._get_issue_activities   sX     "'"5!66FG&- 	& &jjo%&	& 	& 	&r   c                    ddl m} | j                  dd      j                  dd      }  || dd	      }	 d
dd| gddd|  dgddd| dgg}t        j                  j                  |      }|s(t        j	                  |       }|j                  d       |S # t        $ r%}t        j                  d|  d|        Y d }~y d }~ww xY w)Nr   )translitr   _# ruT)language_codereversedORr+   ILIKEaliasz%""%filterr+   save_importu+   Не удалось создать тег '': )
transliterater   replacemodelsCmfTagr   saver"   loggingwarning)tagr   r   _filtertag_objes         r,   _create_tagzCmfPluginYouTrack._create_tag   s    *kk#s#++C4D4@	W#&'RuB<0'Rwb>2	G mm''w'7G --S-1.N 	WOOI#cRSQTUVV	Ws   A"B 	C!CCc            
      (   dt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  ddt         j
                  j                         t         j
                  j                  ddt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  ddt         j                  j                         t         j                  j                  dg} | S )	uW    Собственный магазин при выборе импорта из Tracker u   Поля контактов)captionfieldsiconu   Поля организацийu   Поля задачu   Поля заметокu   Поля проектовu"   Поля списков задачu   Поля групп)
r   	CmfPersonr   r   
CmfCompanyCmfTask
CmfComment
CmfProduct
CmfProjectCmfPersonGroup)r   s    r,   calc_models_settingsz&CmfPluginYouTrack.calc_models_settings   s;   
 9 **==?((-- = ++>>@)).. 1 ..;;=++ 5 ++>>@)).. 7 ++>>@)).. @ ++>>@)).. 1 //BBD--22?$
J 
r0   c                    t         j                  j                  | j                  j                  g d      }|j
                  rGt        |j                  |j
                  z        dz  |_        |j                  d       t                y y )N)imported_object_countjson_object_countprogressr   r   d   T	only_data)r   	CmfImportr   r    r   r   intr   r   r   commit_with_event)rB   r    s     r,   _calc_progressz CmfPluginYouTrack._calc_progress  sw    %%))!! * 

 ''"%j&F&FIeIe&e"fil"lJOOdO+ (r0   c                     ddddddddd	d
d
}||v r||   S | j                   j                  |i       j                  dd      xs, | j                   j                  |i       j                  dd      S )Nu   ИмяEmailu(   Не работает/Уволенныйu   Ключu   Наименованиеu   Описаниеu   Созданоu   Обновленоu   Завершеноu
   Автор)
fullNameemailbannedr   summarywikifiedDescriptioncreatedupdatedresolvedauthorlocalizedNamer   r+   )r5   r   )rB   r   r   s      r,   _get_setting_title_from_attrz.CmfPluginYouTrack._get_setting_title_from_attr  s     @$1#5'+,"
 7?4= $$((r266K F''++D"599&"E	Gr0   c           	          ddddddddddd	dd
dddddg}ddddddddd}| j                   j                         D ]5  \  }}|j                  |j                  |d   |d   d   fd      ||d       7 |S )uO    Сопоставление настроек для модели models.CmfTaskcoder   model_fieldr   r+   r  textr  cmf_created_atr  cmf_modified_atr  status_closed_atr  r   
logic_typestatusresponsiblefix_versionsaffected_versions
componentsdeadline))Priorityenum)r
   r  )Statestate)Assigneeuser)zFix versionsversion)zAffected versionsr  )	Subsystem
ownedField)zDue Datedate	fieldType	valueTypeN)r  r   	ext_field)r5   itemsappendr   )rB   issue_settingsdefault_fields_mappingcf_idcfs        r,   _get_issue_import_settingsz,CmfPluginYouTrack._get_issue_import_settings0  s     #L9"I6",AB,i@-yA.
C
 #-* ("/)7.A)5",	"
 --335 	IE2!!599ZK!=>  # 	 r0   c                  "    dddddddddg} | S )uQ    Сопоставление настроек для модели models.CmfPersonr+   r   r  r   does_not_workr   r.   )user_settingss    r,   _get_user_import_settingsz+CmfPluginYouTrack._get_user_import_settingsR  s+     #J7#W5+X>

 r0   c                  "    dddddddddg} | S )uR    Сопоставление настроек для модели models.CmfCommentr  r  r  
cmf_authorr  r  textPreviewr.   )comment_settingss    r,   _get_comment_import_settingsz.CmfPluginYouTrack._get_comment_import_settings\  s,     -i@((;"M:

  r0   c                 
   |dk(  r|j                         S |dk(  rC||S d| j                   d|d    d}t        j                  j	                  ddd| dg      }|S |d	k(  rH||S | j                   d|d
   d    d|d    }t        j
                  j	                  dd|gdg      }	|	S |dk(  r||S | j                  |d         S |dv rg }
||
S |D ]  }| j                   d|d    }t        j                  j	                  |      }|s:| xj                  dz  c_        | j                  j                  d|d    dd       s|
j                  |        |
S |dk(  rg }||S t        |t              r|g}|D ]  }| j                   d|d    }t        j                  j	                  |      }|s:| xj                  dz  c_        | j                  j                  d|d    dd       s|j                  |        |S |dv r't        |t              rt         j#                  |      S |S |dk(  ra|y|d   j%                  dd      }t        j&                  j	                  d|d g!      }|r||j(                  v r|S | j+                  |d         S |j-                  d"      r|r||S |d#   d$   }|d#   d%   }|d&k(  r|st.        j1                  |d   dd'(      }|S |d&k(  rM|rKt        j2                  j5                  d)|      }|D cg c]  }|d   	 }}|D cg c]  }|d   |v s| }}|S |d*k(  rB|s@	 	 | j7                  |d         }| j;                  |d,d,-      \  }}|st9        d.| d/      |S |d*k(  r\|rZg }|D ]Q  }	 	 | j7                  |d         }| j;                  |d,d,-      \  }}|st9        d.| d/      |j                  |       S |S |d6k(  rvg }t        |t<              r.|D ]'  }| j?                  |      } | s|j                  |        ) |S t        |t              r$| j?                  |      } | r|j                  |        |S |d7v r%t        |t              rt         j#                  |      S |S c c}w c c}w # t8        $ r}t9        | d+      d }~ww xY w# t8        $ rL}| xj                  dz  c_        | j                  j                  d0|d    d1| d2| d3| d4d5       Y d }~y d }~ww xY w# t8        $ r}t9        | d+      d }~ww xY w# t8        $ rM}| xj                  dz  c_        | j                  j                  d0|d    d1| d2| d3| d4d5       Y d }~d }~ww xY w)8Nr
  r  ::r   ext_idLIKE%r   r  project=status_typer   r   r  )r  r  
::version:r7  r   u!   Не найдена версия r+   zERR-0050CmfListobj_typer  u%   Не найден компонент CmfComponent)r  r  r  r  r   r   -r   choicesr+   parentr   r~   r"  r#  isMultiValuer      seplengthr   r  uL   . Возможно пользователь был удален в YouTrack.F)createupdateu   Пользователь u%    не найден в системе.u0   Не удалось присвоить полю r   u   ) значение z. ERR-0038r   group)r!  date and time) uppersource_hashr   CmfLogicTyper   	CmfStatus_get_personr@  r$   r    r%   r&  
isinstancedictrC  r   r3   r|   r   CmfCustFieldConfFieldrE  r   r   cmfutiltranslit_stripCmfCustomFieldChoicelist_choice_get_user_data_from_dumpr"   _process_personlist
_get_group)!rB   r&   rN   r   r$  cust_field_conflogic_type_ext_idr  status_ext_idr  versionsr  version_ext_idversion_objr  	componentcomponent_ext_idcomponent_objvalue_idfield_configcustom_field_typeis_multi_value	value_keyrE  vvalueschoicer   	user_infoexcpersonr   rP  s!                                    r,   _normalize_valuez"CmfPluginYouTrack._normalize_valuef  s    ;;= <'}"$T%5%5$6btR H,,00 &A.?-@*BC 1 J 8#}#//03y>$3G2H5QU;-XM%%)) #}5% * F M=(}##E$K00@@H}  1$($4$4#5Z!O$nn000G"OOq(OOO--;GFO;LM"!* .  OOK01 O<'J}!!%&" 5	&*&6&6%7r)D/9J#K  & 3 3 7 7?O 7 P$OOq(OOO--?	&@Q?RS"!/ .  %%m45  
 
 %%(22599F E :%}T{**33H!77;;&!{ < L
 L,@,@ @%%eFm44""5)i} )+ 6{ C&{3NCN F*>#22&M 3 	
 ! "f, 55AA .33!F)33,3P&vf~7OvPP
"f,^ $($A$A%+$N	
 !% 4 4YuUZ 4 [IFA!'7w>cd  "M #f, A(,(E(Eag(NI
 %)$8$85Y^$8$_	%"+";A3>c d#  

6*, 
"g-eT*" . $ 2 JJu-. 
	  t, OOE2E

5)
"&??eS),66u==G 4P % '"e#op  !  OOq(OOO--J9U[K\J]]_`j_k l,,17"SE;"!,	 .      ) "+#&%'s t#  % 1,11NyY_O`Naacdnco p001s"SE;&%0	 2  s   RR,R=R )R+ T9T"	R(R##R((R+ +	T 4AS;;T 	TTTT""	U8+AU33U8settingsc           	          i }|D ]R  }|d   s	| j                  ||d         }| j                  |||d   d   |j                  d      |      }|||d   d   <   T |S )uC    Преобразование настроек для модели r  r   r   r$  )r   rv  r   )rB   r&   rw  rb  normalized_objsettingrN   s          r,   _normalize_objz CmfPluginYouTrack._normalize_obj  s      	IG=)OOC9E))&|4K(E DIN7=1,?@	I r0   c                     t         t        t        j                     t        t        j                     f   }g | _         j
                  j                  dg       dt        dt        g t        t           f   d|dt        f fd}d }d } j
                  j                         j                  d      }|j                         rJ j                         D ]   } j                  |d         D ]  } n |s  n  j                  d	      D ]  } n |s: j                   j"                  j%                  d
      D cg c]  }| }	}|	r|	d   }|st'        d      |s: j                   j(                  j%                  d
      D cg c]  }| }
}|
r|
d   }|st'        d      d _         || j,                  t        j                          || j.                  t        j                         j1                  dg d       S c c}w c c}w )Nplugin.plugin.*r&   settings_funcr   rT   c                 
    |       }|D ]X  }j                  | |d         |d<   j                  ||d         |d<   j                  |d         |d<   |j                  |d<   Z j	                  |j
                  |d       y )Nr   rN   r  titler   )r+   r   )r   r   r  r   r&  verbose_name)r&   r~  r   obj_settingsrz  resultrB   s        r,   _get_settingsz>CmfPluginYouTrack.tmplt_import_settings.<locals>._get_settings3  s    (?L' -#'??3#H )-)=)=eW]E[)\&#'#D#DWV_#U "'**	-
 MM5#5#5NOr0   projectsr   usersr   )max_resultsr   uT   Не найдено ни одной задачи, импорт невозможен!ub   Не найдено ни одного пользователя, импорт невозможен!TselectedObjects)r+   rN   )r   r
   r   r   r   r    rL   r   r   r   r[   r\   r]   _get_projectsget_project_tasks_simple_getrS   issuesget_allr"   r  rA   r+  r/  r&  )rB   r    	TypeModelr  taskr  dump_dirr:  r&   tasksr  r  s   `          @r,   tmplt_import_settingsz'CmfPluginYouTrack.tmplt_import_settings,  s   $v~~.V5E5E0FFG	:<$##%6$78	Pt 	PHRd^4L 	PU^ 	Pcg 	P ??446??
K??--/  2274=A D	
 ((1  $(GGNN$:$:q$:$IJSSJEJQxrss$(GGMM$9$9a$9$HISSIEIQx  A  B  B " 	dD;;V^^LdD::F<L<LM 	02>?3 K Js   9	H	Hcmf_import_idc                    g }	 | j                   j                  D cg c]  }| }}|S c c}w # t        $ r}t        j	                  |        d }~ww xY wri   )rS   r  r"   gdebug)rB   r  r'   r(   r   r&   r   s          r,   r7   z"CmfPluginYouTrack.get_all_projectse  sS    	"&''"2"23333C3
 
 4 	GGAJ	s    . 	). . 	AAAc                     d}| j                   j                         j                  d|d      }|j                         r%t	        d t
        j                  |      D              }|S )Nr   r  r  c              3   @   K   | ]  }|j                  d          yw).dirtyz.metaN)endswith).0entrys     r,   	<genexpr>z9CmfPluginYouTrack._count_project_tasks.<locals>.<genexpr>u  s     cEENN+>??cs   )r    r[   r\   r]   sumr   r   )rB   
project_idcount	tasks_dirs       r,   _count_project_tasksz&CmfPluginYouTrack._count_project_tasksp  sT    OO557@@ZY`a	cRZZXaMbccEr0   r+   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)N.jsonrW   )r    r[   r\   r]   r^   r_   r   )rB   r+   rc   rd   r   s        r,   r  zCmfPluginYouTrack._simple_getx  sw     OO557@@D6P	i& *! *C**S/)** * s   A	BA5+
B5A>:Br  c                     | j                   j                         j                  d|      }t        |j                  d      d      5 }t        j                  |      }d d d        |S # 1 sw Y   S xY w)Nr  rV   rW   )r    r[   r\   r^   r_   r`   )rB   r  project_dirrd   project_fieldss        r,   _get_project_fieldsz%CmfPluginYouTrack._get_project_fields  se    oo779BB:zZ+&&}5t< 	*!YYq\N	* 	* s   A&&A0c                     t        t              r| j                  |      }t        t	        fd|      d       }|st        d d      |S )Nc                     | d   d   v S )Nfieldr+   r.   )rd   r+   s    r,   <lambda>z6CmfPluginYouTrack._get_project_field.<locals>.<lambda>  s    QwZ/47 r0   u0   В проекте не найдено поле '')rW  strr  nextr   
ValueError)rB   r+   r  r  project_fields    `   r,   _get_project_fieldz$CmfPluginYouTrack._get_project_field  s^    
 dC D11*=7H

 OPTvUVWXXr0   c                    t         j                  j                  }|j                  | j                  j
                   d|       }|t        j                  |      S | j                  d      D ]}  }|j                  d      |k(  r|c S |j                  dd      j                         |j                         k(  r|c S |d   sV|d   j                         |j                         k(  s{|c S  t        d|       )N:user:r  r   loginr   r   uH   В дампе не найдены данные пользователя )APPREDIS_DBredisr   r    r   pickler   r  lowerr"   )rB   user_idredis_db	user_datas       r,   r^  z*CmfPluginYouTrack._get_user_data_from_dump  s    <<%%LLDOO$6$6#7vgY!GH	 <<	**))'2 	!I}}T"g-  }}Wb)//1W]]_D  !i&8&>&>&@GMMO&S  	! bcjbklmmr0   	dump_pathc                    	 | j                  |      S # t        $ r! 	 |j                  d      }|j                         rVt	        |d      5 }|D ].  }t
        j                  |      }||d   k(  s!|c cd d d        cY S  	 d d d        n# 1 sw Y   nxY w| j                  j                  j                  |      }|rOt	        |d      5 }|j                  t
        j                  |d      dz          d d d        n# 1 sw Y   nxY w|cY S Y y #  | j                  j                  j                  d|        Y Y y xY ww xY w)	N
users.jsonrr   a+FrY   
uS   Не удалось получить данные пользователя по ID )r^  r"   r\   r]   r^   r_   r   rS   r  r   writedumpsr    loggerr   )rB   r  r  
users_pathrd   r   r&   r  s           r,   _get_user_dataz CmfPluginYouTrack._get_user_data  s6   	0099 	&//=
$$&j#. +!#$ +C"&**S/C&#d)3'*
	+ +++ + + !GGMM--g6	j$/ R1

95
 ID PQR R R$$ &&..ijqirs!	sn    
D>-D#B	/B	2	D;D>>B	 	D	B	:D*C;2	D;D	 DD>*D:7D>:D>c                    |dk(  ry 	 | j                  |      }| j                  |dd|      \  }}|s| j                  j                  j                  j                  d	      rdt        j                  j                  | j                  j                  d	   
      }| j                  j                  j                  d| d|        |S t        j                  }| xj                  dz  c_        | j                  j                  d| ddd       |S #  | j                  j                  d| ddd       t        j                  cY S xY w)Nunknownu5   Не найден пользователь user_id = u/    в дампе, указан системныйzERR-0045CmfUserrA  Fr&   default_user_idr   u@   , указан пользователь по умолчанию r   u!   , указан системный)r^  r    r%   r  system_userr_  json_settingsrN   r   r   r   r  r   r$   )rB   r  r&   r  ru  r   s         r,   rV  zCmfPluginYouTrack._get_person  sO   i	!009D ((ue(E	,,22667HI))--1N1NO`1a-b&&..KG9 UUU[T\^  1$))KG9Tuv& *  3	!OO%%GyP  A" & 
 == s   D 4Ec                     d| 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 )	Nr6  r   r7  r8  r9  r+   r=  r   )rS  r   r   r   rB   
group_datagroup_ext_idrP  s       r,   ra  zCmfPluginYouTrack._get_group  s    D,,-R
40@/AD%%))f,q&9:8 * 
 ))--F);<x . E r0   c              #   T  K   | j                   j                         j                  d      }|j                         r_t        j                  |      D ]F  }|j                  d      rt        | d| dd      5 }t        j                  |       d d d        H y y # 1 sw Y   TxY ww)Nr  r  /
/info.jsonrW   )
r    r[   r\   r]   r   r   r  r^   r_   r`   )rB   r  r  rd   s       r,   r  zCmfPluginYouTrack._get_projects  s     oo779BB:N jj5 '
&&':;[M:,jA4H 'A))A,&' '	'  
' 's   A6B(8BB(B%	!B(c              #     K   | j                   j                         j                  d|d      }|j                         s,| j                   j                  j                  d| d|        y t        t        j                  |            D ]Y  \  }}||k  r|j                  d      r|||z   k\  r y t        | d| dd      5 }t        j                  |       d d d        [ y # 1 sw Y   fxY ww)	Nr  r  u   Каталог u    отсутствует. Возможно он был удален или еще не создан. Необходимо повторно запустить импорт проекта r  r  r  rW   )r    r[   r\   r]   r  r   	enumerater   r   r  r^   r_   r`   )rB   r  startlimitr  itask_idrd   s           r,   r  z#CmfPluginYouTrack.get_project_tasks  s     OO557@@ZY`a	!OO""**!) -hhrgsu #BJJy$9: 	#JAw5y 34EEM!1WIZ8$? #1iil"# #	## #s   C C1C%C1%C.	*C1u   Дампc                 b   | j                   j                         j                  | d      }| j                   j                         j                  | d      }|j                         rt        j                  |       t        |d      5 } |       D ]J  }| j                   xj                  dz  c_        |j                  t        j                  |d      dz          L 	 d d d        t        j                  ||       | j                   j                  d	       t                y # 1 sw Y   FxY w)
Nz.json.dirtyr  r  r   FrY   r  Tr   )r    r[   r\   r]   r   remover^   r   r  r_   r  shutilmover   r   )rB   api_funcr+   file_path_tmprc   rd   r   s          r,   r   zCmfPluginYouTrack._simple_dump
  s    99;DDv[EYZOO557@@D6P	IIi -& 	D!z D11Q61

3U
;dBCD	D 	M9-t,	D 	Ds   
AD%%D.c                 f   | j                   j                  d       | j                  j                  j	                  |      }t        |d    d      }|j                         rt        j                  |       t        |d      5 }t        j                  ||d       d d d        |S # 1 sw Y   |S xY w)Nu"   Дамп полей проектаr  z/fields.jsonrX   FrY   )r    r!   rS   r  custom_fieldsr   r]   r   r  r^   r_   rb   )rB   project_datar  fields_list_filenamerd   s        r,   _dump_fieldszCmfPluginYouTrack._dump_fields  s    @A))77E#|M'B&C<$PQ&&(II*+&- 	=IInaeI<	= 	= s   B&&B0c                    |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      dz          d d d        |S # 1 sw Y   IxY w# 1 sw Y   |S xY w)Ngroups.jsonr  r+   r  FrY   r  )r\   r]   r^   r_   r   r  r  )rB   rP  r  groups_pathrd   r   r&   s          r,   _dump_groupszCmfPluginYouTrack._dump_groups(  s    ((7k3' #1 #C**S/CV}F3"
	# ### +t$ 	BGGDJJu5J9D@A	B # #	B s#   &B,B,"B,8*B8,B58Clast_dump_datenew_dump_datec	                 *   t        d      5  | j                  j                  j                  d| d||z           |}	d}
	 |	j                  j                  |d   ||||      D ]  }	 | j                  j                         r/	 | j                  j                  j                           d d d        y|d	   }|d
   }| d| d}| j                   d| }| j                  j                  j                  d|        |j                  |      }|j                  |dz         }|j                         rt        j                  ||       |j                  d       ||d<   |d   r| j                  |d   d	   |       |d   r| j                  |d   d	   |       |d   d   D ]  }| j                  |d   d	   |        |d   D ]  }| j                  |d	   |        |d   d   D ]  }| j                  |d	   |        |j                  d      }|j                  d      }|j                  d       |d   r&| j                  j                  j                  d| dt!        |d                 t"        j$                  j'                  | j(                  j*                  j,                  d| d      }d }|j                  |      }t.        j0                  j3                  ||| j                  !      }|s-t.        j1                  ||| j                  | j                  "      }||_        ||_        d|_        |j;                          |j                  j                          | j                  j                  j                  d#|        |j                  d$      }|j                         rt<        j?                  |       tA        |d%      5 }|	j                  jC                  |      D ]}  }| j                  |d&   d	   |       |jE                  tF        jI                  |d'      d(z          | j                  xjJ                  dz  c_%        | j                  jM                  d)        	 d d d        |	j                  jO                  |      D cg c]  }| c}|d*<   |	j                  jQ                  |      D cg c]  }| c}|d+<   |	j                  jS                  |      D  cg c]  } |  c} |d,<   |d-   D ]  }!|!d.   d/   d	   }"|!d.   d/   d0   d1   }#|!d2   }$d3|"jU                  d4d5       }%|!||%<   |#dk(  r2|$r0tW        |$tX              s|$g}$|$D ]  }&| j                  |&d	   |        r|#d6k(  sx|$s{tW        |$tX              s|$g}$|$D ]  }'| j[                  |'|         |j                  d7      }(|(j                         rt<        j?                  |(       tA        |(d8      5 }|	j                  j]                  |      D ]C  })| j                  |)d&   d	   |       |jE                  tF        jI                  |)d'      d(z          E 	 d d d        |j                  d9      }*|*j                         rt<        j?                  |*       tA        |*d8      5 }|	j                  j_                  |      D ][  }+| j                  |+d&   d	   |       | j                  |+d:   d	   |       |jE                  tF        jI                  |+d'      d(z          ] 	 d d d        t        j                  ||       |j                  d;      },ta        |      jU                  dd<      |d<   tA        |,d8      5 }tF        jc                  ||d'       d d d        | j                  xjJ                  dz  c_%        | j                  jM                  d=       | j                  j                  j                  d>|        | j                  j                  j                           	 |ji                  |
       |	jk                          d d d        y # 1 sw Y   xY wc c}w c c}w c c} w # 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w#  |
dz  }
| j                  je                  d? d@dAdBC       Y xY w# | j                  j                  j                          w xY w#  |
dz  }
| j                  j                  jg                  dD|dE    dF       Y xY w# 1 sw Y   y xY w)GNFinit_views_and_dsu   Дамп задач с u    до r   	shortName)
start_dateend_dateskipr  r   r   r   r   r   r6     Задача r  Texist_okr   reporterupdaterwatchersissueWatchersr  mentionedUsersvotersoriginalr   u1   Обработка вложений задачи : z/api/issues/z/attachments/allr   )href
obj_ext_idrS  )r  r  rS  r    u/   Дамп комментариев задачи zcomments.jsonr  r  rY   r  commentlinkssprintstagscustomFieldsprojectCustomFieldr  r"  r#  rN   r~   rD  r   rP  zactivities.jsonrX   zworklog.jsoncreator	info.jsonr   r  u#   Создан дамп задачи u9   Не удалось создать дамп задачи zERR-0089r   rb   rB  
error_typeuA   Не удалось получить задачи проекта r+   u    с сервера)6r   r    r  infor  for_project	is_canceldpcommitrS  r\   r]   r  r  mkdirr  lenurllibparseurljoinrS   _connectionrG   r   CmfImportDownloadr   pathr+   
downloadedr   r   r  r^   commentsr  r_   r  r   inc_statr  r  r  r   rW  r`  r  
activitiestime_trackingr  rb   r%   	exceptionputclose)-rB   r  r  r4   tasks_that_are_doner  r  r  r  rS   errorsr   issue_id	issue_keyissue_key_idissue_ext_idtask_dirtask_dir_tmpwatchermentioned_uservoterattachments_dirattachments_dir_tmpattachments_urlr   attach_file_pathdownload_jobcomments_file_namerd   r  lstr*  field_id
field_typefield_valuer)  
value_uservalue_groupactivities_file_nameactivityworklog_file_nameworklog	info_paths-                                                r,   _dump_task_partz!CmfPluginYouTrack._dump_task_part6  s	    51 f	OO""''*A$vdU`N`Ma(bcBF]YY22 --* + 3  W4EP4??446#$\ **113}f	 f	$ $);$),$7	*3Bxj'B*.*:*:);2hZ'H..33mL>4RS#,#5#5h#?'0'9'9(X:M'N#??,"KK,?$**D*9.:l+ , //j0A$0GV + //i0@0FU',Z'8'I UG //0E|TU.34D.E TN //t0DlST%*8_Z%@ KE //d\JK +3*;*;M*J.:.C.CM.R++1141@ / OO2277"ST`Saacdghmn{h|d}c~ 
 /5ll.B.B $ 3 3 7 7".xj8H I/O
 )>I/>/G/G	/R,+1+C+C+G+G%4+7,0,<,< ,H ,L
 $0/5/G/G)8/;040@0@/3	 0H 0" 1AL-09L-6;L3(--/(OO224 ..336efres4tu-9-B-B?-S*-446II&89!"4d; Dq+-99+=+=e+D D $ 3 3GH4Ed4K\ Z !

7
(ORV(V W $ A AQ F A $ 8 8 C	DD 68YY__U5K)L!)Lg 8:yy7H7H7O+P!A+Pi( 57IINN54I(Jq(Jf #("7 QB')*>'?'H'NH)+,@)A')J;)WXc)dJ*,W+K&)(*:*:3*D)E$FE+-E%L)V3'1+t'D3>-K2= !XJ$($7$7
48H,$W!X!+w!6;'1+t'D3>-K3> !QK$($5$5k<$P!QQ& 0</D/DEV/W,/668II&:;!"6= Y,.II,@,@,G Y $ 3 3HX4Ft4Ll [ !

8%
(PSW(W XYY -9,A,A.,Q),335II&78!"3T: Xa+-99+B+B5+I X $ 3 3GH4Ed4K\ Z $ 3 3GI4Ft4Ll [ !

7
(ORV(V WXX L(;$,$5$5k$B	.1(m.C.CHb.Ql+!)T2 Da IIeQUICD 99Q>9008 ..336YZfYg4hi**113oW4|  ##F+HHJMf	 f	hD D *M ,Q )K2Y YX XD D
!11WXdWef&%.'-	 2  **113!&&00WXdekXlWmm  ACf	 f	s   3d	'c)a:%c2La:	B`8&%a:	a#a:7	a
 #a:#	a,Ba:/a:2A0a:"A"aA
a:A:a!
Aa:#a.<Aa:>(b(&'c"d	8a=a:aa:!a+&a:.a73a::)b%#b((&cc3dd		dr  issues_countc                 ^   t         j                  j                  }d}t        |d         j	                  d      }|j                  d       t               }t        j                  || j                  z        }	d}
d}g }||kD  r=|
|	z  |	z   }||k\  r|}t        | j                  d|
 |||
|	z  ||
|	z  z
  |||t        | j                  j                  j                  | j                  j                   j#                         | j                  j$                  j                  | j                  j&                  j#                         | j                  j(                  j                        d	      }|j+                  |       |j-                          | j.                  j0                  j3                  d
|        |
dz  }
||kD  r=|	dz  }| j.                  j0                  j3                  d|	 d       t5        j6                         }|D ]N  }|j9                  |       |j;                         s&| j.                  j=                  dddd       t?        d       t5        j6                         |z
  }| j.                  j0                  j3                  d|dd       |jA                         s$||jC                         z  }|jA                         s$| j.                  j0                  j3                  d|        | jE                  |d   | jG                  |d               D ]  }| j.                  jI                         r|c S t        |d         j	                  d      }| j.                  jK                         j	                  d      }| j.                  jK                         j	                  d      }|jM                         rtO        jP                  ||       tS        |d      5 }tS        |d      5 }tS        |d       5 }|D ]n  }||vs|jU                  |       tV        jY                  |      }|j[                  | j.                  j\                   d!|d    t_        j`                  |             p 	 d d d        d d d        d d d        |jc                          tO        jd                  ||       t        |d         j	                  d"      }| j.                  jK                         j	                  d"      }| j.                  jK                         j	                  d#      }|jM                         stS        |d$      jg                          tO        jP                  ||       tS        |d      5 }tS        |d      5 }tS        |d       5 }|D ]  }||vs|jU                  |        	 d d d        d d d        d d d        |jc                          tO        jd                  ||        |S # 1 sw Y   yxY w# 1 sw Y   ~xY w# 1 sw Y   xY w# 1 sw Y   kxY w# 1 sw Y   oxY w# 1 sw Y   sxY w)%Nr   r  r  Tr  dump_tasks_rF   )r  r  r  r  r  r  r#  r4   targetr+   r(   u   Форк _dump_task_part proc=r   <   u%   Таймаут дампа задач u    минут)timeoutu/   Возможно завис дамп задачzERR-0055r   rb   r  u"   Ошибка дампа задачuQ   Параллельное скачивание задач выполнено за .3f    сек.u.   Ошибок скачивания задач: r   r  r   r  zusers.json.newr  r  r  r  zgroups.json.newa)4r  r  r  r   r\   r  r   mathceildownload_threading_max_forksr   rA  r   rE   rM   rN   rO   rP   rQ   rR   rK   r&  r  r    r  r  time	monotonicjoinis_aliver%   TimeoutErroremptyr   r  r  r  r[   r]   r  copyr^   r  r_   r   setr   r  r  unlinkr  r"  )rB   r  rB  r  r  r  r$  r  r#  stepr  r  processprocrH  t1t2r   issue_users_pathall_users_pathall_users_path_newf1f2f3liner  issue_groups_pathall_groups_pathall_groups_path_news                                r,   _dump_taskszCmfPluginYouTrack._dump_tasks  s    <<%%m45>>wG	&#gyy(I(IIJ[(d(T/Kl**++"1#&!*$0H#.T#9&4%2+> . KK//55"kk33;;=!%!6!6!<!<!%!9!9!A!A!C#';;#9#9#?#?!D( NN4 JJLOO""''*H(OPFA9 [(> )##&KD6Q\$]^^^ 		IDIIgI&}}))E&%	 *  ##GHH		I ^^"##_`bcf_ggop	
 &++-)--//F &++- 	##&TU[T\$]^ ++++L,>? , 
 '	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$,LL+/??+=+=*>fYt_DU(V(.Y(?%&	&&	&
& !'').? $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 "((*/AO'	BR 7& &	& 	&
& 
&,3 33 33 3s   W>+W18
W$	A)W$	-W15W>(X#5X
X	X	!X)X#$W.)W11W;6W>>X	XXX X##X,	c                    | j                   d   d   d   }|d   st        d      | j                  j                         j	                  d      }|j                  d       |d	   D cg c]  }|d
   r
|d   r|d
    c}| _        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|	 d| d       |j	                  |      }
|j	                  | d      }|
j	                  d      }| j                  j                  j                         }|r|d   d   d   d   nd}d }|j!                         rOt#        |d      5 }t$        j'                  |      }|j)                  d      }d d d        r| j+                  ||      }t,        j.                  j1                  t,        j2                  j4                        j7                  d      }| j+                  ||      }|
j!                         rt9        j:                  |
|       nt<        j?                  |d       tA        jB                         }| j                  jD                  j)                  |d         }tG        |      |d<   |d   r0| jI                  |d   d   | j                  j                                |d   r0| jI                  |d   d   | j                  j                                | jK                  |       }|D ]S  }|d!   d"   d#   }|d$k(  s|d%   D ]8  }|d&   s	| jI                  |d&   d   | j                  j                                : U | j                  jD                  jM                  |      |d'<   d(t<        jN                  d)<   | j                  xjP                  |z  c_(        | j                  jS                  d*       | j                  jT                  jW                          d+t<        jN                  d)<   t9        j:                  |d   |
       tG        |
      |d<   |d    d,}t#        |d-      5 }t$        jY                  ||d./       d d d        tA        jB                         |z
  }| j                  j                  j                  d0| d|	 d1|d2d3       t[        |d    d4      }|r|j!                         s8| j                  j                  j]                  d5|	 d6|d    d7| d8| d9	       d }nE| j_                  |d         s1| j                  j                  j]                  d:|	 d6| d;| d9       d }tA        jB                         }| j                  j`                  jc                  |||<      }d=| }|s|r"|d>z  }|r|d?| z  }|r|d@| z  }|dA| dz  }| j                  je                  |       | xjf                  | ji                  ||||B      z  c_3        tA        jB                         |z
  }| j                  j                  j                  dC|	 dD|d2d3       | jf                  s2||d<   t#        |d-      5 }t$        jY                  ||d./       d d d         | j                  je                  dJ       y c c}w # 1 sw Y   xY w# 1 sw Y   NxY w# 1 sw Y   GxY w#  | xjf                  dz  c_3        | j                  jk                  dE| dFdGdHI       Y xY w)KNr  rN   r   	isCheckedu9   Не выбраны проекты для импорта!r  Tr  childrenr&   P   r   r  r+   r   u   Дамп проекта r  z (ID r   r  r  profilesgeneralrl   Etc/UTCr  	dump_date%Y-%m-%dT%H:%Mr  	createdByleader)r  r  r"  r#  r   rq  ownertimeTrackingSettingsr   NO_CACHEr   1r  rX   FrY   u%   Дамп данных проекта u    выполнен за rI  rJ  z/tasksu$   В каталоге проекта '' (u5   ), отсутствует каталог задач (u@   ). Дата последнего успешного дампа (u   ) будет сброшена.u/   В каталоге задач проекта 'ud   ) отсутствуют задачи. Дата последнего успешного дампа ()r  r  u*   Дампим задачи проекта: u    (в периодu    с u    по u4    включительно, часовой пояс: )r  rB  r  r  u$   Дамп задач проекта 'u   ' выполнен за u2   Не удалось получить проект zERR-0058r   rb   r  u0   Закончили дампить проекты)6rw  r"   r    r[   r\   r  r@   r  r   r  r   r  r  rS   r  mer]   r^   r_   r`   r   ru   rj   re   rk   rl   rm   rn   r  r  r   makedirsrP  process_timer  r  r  r  r  environr   r   r  r  rb   r   r   r  r  r  r!   r$   rh  r%   )rB   rootprojects_dirvalcntrY  r:  r  project_keyproject_namer  project_tmp_dir	data_filer  user_tzr  rd   current_dumplast_dump_date_utcnew_dump_date_utcr  r\  r  r  r  r8  rN   r]  r  rB  info_msgs                                  r,   _dump_projectsz CmfPluginYouTrack._dump_projectsb  s   }}./8;K WXX88:CCJOD) #'z"2"
5zc+. J"
 $(()28}-- S	G J!+.K"6?LN??,,.11Q61&&++.{m2l^5Q[P\\]^ +33J?"."7"7:,f8M"N'00=	 !GGMM,,.	PY)J/	::FtL_h "&##%i- K'+yy|-9-=-=k-J*K *)-)B)BCUW^)_$&KKOOBKKOO$D$M$MN^$_! $ 9 9:KW U%%'KK_=KK$K?&&(#ww//33GDMB.1/.B]+,''[(A$(GIjIjIlm)''X(>t(DdooFgFgFij "&!2!2!2!M%3 oM!.w!7!D[!QJ!\1%28%< oE$W~ $ 3 3E'N44H$//JkJkJm noo 8<ww7G7G7U7UVb7c34
 *,

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

:&L7E.1+.>]++M:;:F	)T* CaIIlAEIBC &&(2-&&++;K=<. Y--/HH> !L$?#@!GH	!$++-..66B<.PST`anToSp qQQZP[ \\\j[k  lJK
 *.!66|D7IJ..66Ml^[^_h^i j\\j[k  lJK *. &&(#ww~~33-*  4   H~V!] 33H% d>*:$;;$ f]O$<<"VW^V__` aaH##H- 4#3#3!-!-#1"/	 $4 $  &&(2-&&++.RS_R``xy{|  yA  AI  -J  K 0AL-i. G!		,	FGUS	j 	NOy"
FK KbC CzG G1$))H	R)%	 * sp   ([/	\%C\='[4$F\2\ D\\5G:\/\\4[>	9\\	\\	\9]c                    | j                   j                         }t        j                  |      \  }}}||z  dz  }| j                   j                  j                  d| d       | j                   j                  j                  d       | j                   j                  j                  j                  dd      rV| j                   j                  j                  d       | j                  | j                  j                  j                  d       n+| j                   j                  d	t        j                  
       | j                   j                  j                  d       | j                  | j                  j                   j                  d       d| j                   _        | j                   j%                          t'                | j                   j                  j                  d       | j)                          y)u^   
        Загружает все данные из API, кроме вложений
        r   u   Свободно места: r9  u5   Скачивание данных через API ... 
load_usersTu#   Дамп пользователейr  9   Отключен импорт пользователей!levelu    Дамп типов ссылок	linktypes   u,   Дамп выбранных проектовN)r    r[   r  
disk_usager  r  r  rN   r   r   rS   r  r  r!   r   WARNINGr  r   r   r   r  )rB   download_pathtotalusedfreefree_percents         r,   download_datazCmfPluginYouTrack.download_data  sq    99;"--m<tTe|c)##&CL>QR$ST##$[\??((..22<FOO""''(MNdggmm33W=OOKoo    	##$FG$''++33[A#% ##$RSr0   c                 *   t        d      5  d}	 |j                         }|dk(  rn| j                  j                         rnt        j
                  j                  |d         }| j                  j                  j                  d| d       	 | j                  j                  |d   |d	          t        j                  j                  |d
         }d|_        |j                          | j                  j                  j                  d|d	           | j                  j                  d       "|j%                  |       d d d        y # t         $ r0}|dz  }| j                  j#                  d| dd       Y d }~Pd }~ww xY w# 1 sw Y   y xY w)NFr  r   TDONEr  u   Попытка скачать  ... r  r   r  u   Файл сохранен в 
attachmentr   u,   Не удалось скачать файл zERR-0091r  rA  )r   r   r    r  r  r  unquoter  r  rS   downloadr   r  r  r   r  r"   r%   r!  )rB   download_queueerror_queuer$  r2  r  download_job_objr   s           r,   _download_file_workerz'CmfPluginYouTrack._download_file_worker0  s   51  	$F-1136)??,,.||++L,@A&&++.LTFRW,XYGG$$$V,$V,
 (.'?'?'C'C|TXGY'C'Z$26$/$))+OO**//2OP\]cPdOe0fgOO,,\:) : OOF#A 	$  	$0 ! aKFOO--FtfM"!4 .  1 	$  	$s7   BF	B"E1F		F&F<F	FF		Fc                 R   | j                   j                  j                  d       t               }t               }d}| j                   j	                  dg       dd| j
                  gg dg}t        j                  j                  |      }|s'| j                   j                  j                  d       |S | j                   j                  j                  d	|        g }t        | j                        D ]j  }t        | j                  d
| ||d      }|j                  |       |j                          | j                   j                  j                  d| d       l t        j                  j                  |ddg      D ]Q  }	| j                   j!                         r n5|j#                  |	j$                  |	j&                  |	j(                  d       S |D ]  }
|j#                  d        |j+                         s|D ]  }|j-                           | j                   j!                         r|S | j                   j                  j                  d       |j+                         s@| j                   j!                         r|S ||j/                         z  }|j+                         s@|S )Nu)   Cкачивание вложений ... r   zplugin.plugin.source_hashrS  ==)r  r  Fr   u   Вложений нетu   Файлов: _download_file_worker_)r  r  rE  u/   Запуск задачи скачивания r  r  r  r=  )r   r  r  r  u8   Скачивание вложений завершено)r    r  r  r   rL   rS  r   r  r  rangerO  r   r  r&  r  slistr  r!  r   r  r  rU  rR  r   )rB   r  r  r   r   count_download_filesprocsr  r[  r2  r   s              r,   download_filesz CmfPluginYouTrack.download_filesS  sp   ##$OPg##%@$ABD$"2"23'
  &77==W=M#OO""''(ABJ##n5I4J$KLt889 	gA11-aS1&4#.D LLJJLOO""''*YZ^Y__d(ef	g #44::F# ; 
 
	L ((*"oo$))$))  
	  	'Av&	' ##% 		 ??$$&J##$^_##%((*
;??$$C ##%
 
r0   c           
         |rd| dnd}| j                  || j                  t        j                  j                     d         }d| j
                   d|d    d}|j                  d      }|s| j                  j                  j                  d|d	    d
       t        j                  j                  j                  t        t        j                         z
  dz
  }	t"        j%                  |d	         d |	  dt        j                    }||d<   |d   j'                  dd      j)                  d      }
t        |
      dkD  r$t+        t        |
d         t        |
d               nt        |
d         }t-        t        j                  j.                  j                  t        j                  j0                  j                        }||k  r4t        |
      dkD  r|
d   nd|d<   t        |
      dkD  r|
d   n|
d   |d<   n=| xj2                  dz  c_        | j                  j5                  d|d    d| ddd       ddg}t        j                  j                  d	d|d   g|      }|s	t        j                  j                  ddd| dg|      }|st        j                  j7                  dd|d   g|      }t        |      dkD  rJ| j                  j5                  d |d    d!t        |       d| d"d       | xj2                  dz  c_        g }|s| j                  j                  j                  d#|d    d|        dd$|d   g}t        j                  j7                  ||      }|sgt        |
      dk(  r	dd$|
d   g}n/t        |
      dkD  r!d%dd$|
d   gdd$|
d   ggdd$|
d   gdd$|
d   ggg}t        j                  j7                  ||      }t        |      dkD  rN| xj2                  dz  c_        | j                  j5                  d&|d    d'|d    d(t        |       d| d"d       |r|d   }n9| j                  j9                  d)|d    d'|d    d*| t:        j<                         d+}|s|rd,}d}|d   }t        j                  j                  d	d|j?                         g|      r| j                  j9                  d-| d.t:        j@                         |d   j)                  d      \  }}| d/| d| }|dz  }t        j                  j                  d	d|j?                         g|      rt        j                  ||| j                  d,0      }nd |fS |r| j                  j                  jC                  d1|        |jD                  r|D ]  }tG        ||||           |jH                  r$||jH                  vr|jH                   | |_$        n||_$        t        jJ                  jM                         }t        jJ                  jO                         }|jP                  jS                  |       |jP                  jS                  |       d,|_*        |jV                  r|jY                  d,2       ||fS )3N(r   r   r   r6  r   r   u   У пользователя r  u    не указан emailr   @r+   .r   r   
first_name	last_nameu?   Часть полного имени пользователя 'u   ' длиннее uM    символов. Имя и фамилия не были заполнены.zERR-0110r   rA  r   rg_member_ofr   r=  r7  r8  r9  u+   Пользователей с почтой z > zERR-0037uH   Не удалось найти пользователя с почтой r  r   u+   Пользователей с именем r   z) > uM   Не нашли пользователя среди существующих z) FTuQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифру+)r7  r  r    import_originalu0   Импортируем пользователя r   )-r{  rw  r   r   r  rS  r   r    r  r   cmfr   CmfEmail
max_lengthr  config
ORG_DOMAINrZ  r[  r   splitmaxminr  r  r$   r%   r`  r!   r   INFOr  r  r  r  setattrr7  r   youtrack_group
user_groupr  r&  
user_local
is_changedr   )rB   r  rM  rN  r&   obj_msg	user_dictperson_ext_idr   max_lenr+   current_length_namemax_length_namer   ru  personsr   
is_creatednr  prefix_emaildomainkeyr  r  s                            r,   r_  z!CmfPluginYouTrack._process_person  s    #AcU!*''dmmF<L<L<Y<Y.Z[c.de	T--.bdB?g&OO""**.tG}o=UV jj))44s6;L;L7MMPQQG--d7m<XgFGqIZIZH[\E"	' ((c288=ADTQc#d1g,DG=TWX\]^X_T`f..99DDfFVFVF`F`FkFkl/114TQd1gBIl#03D	AT!W47Ik"
 OOq OOO%%QR[\bRcQddu  wF  vG GM N$	 &  ^$!!%%Wi&89 & 
 %%)) &Am_A*>? * F  **//#Wi.@A! 0 
 w<!#OO--EiPWFXEYY\]`ah]i\jjklsktu"!, . 
 OOq(O GOO**22bclmtcubvvwx  xA  B  &tYv->?G$..33763RG"t9>'2D$q'&BG Y] $".d1g!>dTXYZT[@\ ]".d1g!>dTXYZT[@\ ]%G
 #)"2"2"7"7wv"7"Vw<!#OOq(OOO--EiPVFWEX Y%g./tCL>7)M"!,	 .  $QZFOO''g$V,-R	'0B/C2gYP 
!
(&&**7GU[[]2S\b*cOO''klqkr  sR  S ,5W+=+C+CC+H(L&+nAaS&:EFA &&**7GU[[]2S\b*c  ))(#$(	 *  Z''OO""''*Z[_Z`(ab%%$ 9CFC389
 }} 5'-}}om_$EFM -#22AACN..99;J&&~6&&z2 $F  -z!!r0   u   Обработка группc                 >   | j                  d      D ]J  }	 | j                  j                         r y d| 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
       |j                  j                          | j                  xj                  dz  c_        M y #  | xj                  dz  c_        | j                  j                  d| dd       Y xY w)Ngroupsr6  r+   r7  r8  r9  r   r=  r   T)r+   r7  r    import_raw_jsonr  r   r   u4   Не удалось загрузить группу rO  r   rA  )r  r    r  rS  r   r   r   r  r+   r7  r   r  r  r   r$   r%   r  s       r,   _process_groupsz!CmfPluginYouTrack._process_groups!  s   **84 (	J'??,,.!#D$4$4#5R
68J7K2N--11$f,q.AB5 2  "1155 &F1CD #u 6 E
 "11'/+#'??(2(, 2 E ((!+F!3EJ||#/EL!5&+ll^L>#BEL

t
,!55:5C(	D1$))J:,W- * s   E!D*E!!8Fu-   Обработка пользователейc                    | j                   j                  j                  j                  dd      s,| j                   j	                  dt
        j                         y t               }| j                  d      D ]  }	 |d   r
| j                   j                         r y | j                  |      \  }}| 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*                  t-        |      g       y y y #  | xj                   dz  c_        | j                   j#                  d	| d
d       Y TxY w)Nr  Tr  r  r  guestr   z.evateam.ruu@   Не удалось загрузить пользователя rO  r   rA  send_invites)r'   )r    r  rN   r   r!   r   r  rW  r  r  r_  r   r   r-  r  addr$   r%   schedule_deferred_jobr   r   register_personsr`  )rB   new_user_emailsr  ru  r  s        r,   _process_usersz CmfPluginYouTrack._process_usersM  s   ,,2266|TJOOKoo    %$$W- 	D=??,,.%)%9%9$%?"
55:5 LL"00"LL11-@"#''(:(:;!	4 t<<BBFF~W[\!&"2"2"C"C4P_K`Jab  ]?1$))VW[V\]( * s   <FFBF8Gr  c                    |d   d   j                  dd      }d| d| j                   j                         }|d   d|g g g g dd	d	d
}|d   d   d   }|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k(  r+|rdnd|d<   |d   d   D ci c]  }|d   |d    c}|d<   |S |dk(  rd|d<   |S |dk(  rd|d<   |S |dk(  r|rdnd|d<   |S |d k(  rd!|d<   |S d }|S c c}w )"Nr$  r   rD  r   r~   r  T)r  workflowr=  logic_prefixF)r   custom
class_namevisible_filterrequiredrequiredChangedr"  r#  rH  r  field_custom_typestringr  integerr   floatr  choice_multi
choice_strrq  r+   rE  r!  rQ  re   r  r  rP  r  )r   rS  r  )rB   r  r7  r  r   rm  rn  rp  s           r,   
_map_fieldzCmfPluginYouTrack._map_fieldu  s   %d+33C=8*Ad&6&6%78>>@
W~$ "	 $
 "+.{;KH{+K8H&'-C#$: 
9 (*',C#$4 
3 )+',C#$. 
- ')'.C#$( 
' &(9G~\C#$:?:LX:VWQagqy0WC	N  
 &('-C#$ 
 /1'1C#$ 
 &(2@wfC#$ 
 ')'/C#$ 
 C
! Xs   (C8c                    d | _         | j                  D ]T  }| j                  t        j                  j
                     d   D ]%  }d|vr|d   d   |k(  s| j                  |   |d<   ' V | j                  j                  j                  d       | j                  }t        j                  j                  |dg      }|s#t        j                  d|d| j                  	      }d
|_        |j                          t        j                  j                  dd|      }t        j                  j                         D ci c]  }|d   |
 }}g }g }	| j                  t        j                  j
                     d   D ]x  }|j                  d      s-| j                  j                  j                  d|d    d       B|d   r-| j                  j                  j                  d|d    d       t| j!                  |      }
|
sX| xj"                  dz  c_        | j                  j%                  d|d   d    d|d   d    d|d   d   d    d|d    dd       |d   d   j'                  dd       }d!| d | j                   j)                         }||d<   |
d"   d#k(  r|	j+                  |       | j                   d$|d   d    }t        j,                  j                  |g d%d&      }|s/t        j-                  |d   |d   |
d"   d|| j                  d'      }|j.                  rB| j                  j                  j1                  d|j2                   d|j4                   d(       ||v r||   d)   |j6                  j8                  k7  rc| xj"                  dz  c_        | j                  j%                  d|d   d    d|d   d    d*|j6                   d+||   d)    d,|d    
d-d       u||   |d<   | j                  j                  j                  d.| d|d    d/       n@|j+                  |       | j                  j                  j                  d0| d|d    d/       |j:                  r%|d   |_        |d   |_        |
d"   d1k(  r|j<                  j8                  xs i }i }t?               }|d   d2   D ]<  }t@        jC                  |d   dd34      }|d   ||<   |d5   s,|jE                  |       > |D ch c]  }||vr|
 }}|jG                  |       |jG                  |       ||_        tI        |      |_%        |jL                  rd|_'        |j+                  |       |j                  d6       |jP                  jS                          |d   d7   s)t        jT                  j                  ||||8      }|rPt        jU                  ||||8      j                  d6       { |jP                  jS                          |jW                          |rt        j                  jY                  tZ        j\                  j_                         ja                  d9      d
d:d;       t        j                  jc                  d<d
i       t        j                  j                         D ci c]  }|d   |
 }}|D ]  }||d      |d<    |	D ]  }t        j                  jd                  |d   d      }tg        t              |jh                     }|d   d2   D ]Y  }|j                  |d   =      }|s ||d   =      }|j                  d5d:      |_5        |jL                  sJ|j                          [  | j                  jl                  j8                  }|d>   D ]P  }|d   t        j                  j
                  k(  s$| j                  t        j                  j
                     d   |d<   R || j                  _6        d?tn        jp                  d@<   | j                  j                          | j                  jP                  jS                          dAtn        jp                  d@<   y c c}w c c}w c c}w )BNr   r$  r   u0   Обработка кастомных полейr   r7  r   uG   Экран задач проектов YouTrack по умолчаниюTr+   r7  r  r    r   _customrP  r+   typerG  r   
   Поле 'r  u   ' не кастомноеr  u   ' уже смапленоr   u-   Не удалось смапить поле 'r+   rx  u   ). Тип поля 'r"  r#  u%   ' не поддерживается: zERR-0064	CmfUiFormrA  rD  r   r~   r  r  r6  )widgetrE  r   disabled_choicescmf_deletedr7  r   include_deleted)r   r+   r  dirtyr7  r    r  #   ) удалено в системе.r  u   ). widget поля 'u7   ' не совпадает с существующим 'r   zERR-0065uT   В таблице есть соответствующее поле с именем 'r   u+   Создание поля с именем 'r  rq  rI  rJ  archivedr   isAutoAttached
cust_fieldr+   rG  ui_form_groupz%Y%m%d%H%M%SF)meta_version
model_nameforcecmf_model_namer   import_settingsr   rv  rw  )9r8   r5   rw  r   r   r  r    r  r  rS  r  r   r  r   CmfUiFormGroupr   r  r$   r%   r   r  r&  CmfCustFieldr  r   r+   r   r  rN   r  rE  rW  rZ  r[  r  rN  r`  r  r  r  r  r  CmfUiFormFieldinvalidate_cachecustom_fields_gen_metarj   re   rk   rn   custom_field_sync_update_modelsr   varsr   
cmf_hiddenr  r   r|  )rB   ext_field_idr  ui_form_ext_idui_view_formr  rd   shop_fields
new_fields
m2m_fieldsui_fieldr7  r   cust_field_ext_idr  current_choicesdefault_choicesdefault_disabled_choicesrN   ro  r  r  ui_form_fieldfield_classchoice_modelrr  rw  r5  s                               r,   _process_custom_fieldsz(CmfPluginYouTrack._process_custom_fields  s	   !% 00 	LLv~~'B'BCHM L"e+%d+|;)-)=)=l)KE+&	L	L 	##$VW ))''++!5 , 
 !++^% $??	 , L '0#--11 2 
 4:>>3T3T3VWaq)WW

]]6>>#>#>?I |	-E99[)&&++jw8HHa,bc]#&&++jw8HHa,bcu-H1$))CE+DVW]D^C__bchitcuvzc{b| }((-k(:;(G(T'U V::?:L9MO ( *  [)$/77SAHxj$*:*:);<BBDJ&E&M+,>!!%(#'#3#3"4Bu[7I$7O6P Q,,00( !% 1 
J #00!'Nv&./B&C,#$( 1 
 %%&&..  1Z5G5G4HHkl [(z*84
8I8I8O8OOOOq(OOO--GkHZ[aHbGccfglmxgyz~g  gA A,,6,=,=+> ?88CJ8OPX8Y7ZZ]^cdo^p]qs #!, .  '2:'>m$&&++jkujvvyz  AH  {I  zJ  JK  L !!%(&&++A*SQVW^Q_P``ab ))%*7^
""'-
/0L@&0&8&8&>&>&D"O&(O/2u,!&{!3H!= D$+$:$:!&M ##% %; %	
 6;6]	2 ,488CD (7( #o5 ($ ( %++,DE#**?;)8J&267G2HJ/(('+J$%%e,D1$$& [!"23 & 5 5 9 9)#'"/	 !: ! %))#-'+&3	 * 
 dtd,y|	-| 	 %%'NN11$&KKOO$5$>$>~$N"+" NN::<Li;XY7=~~7X7X7Z[!1\?A-[K[# B'25='Am$B   		"E ..//m0D\0RSK<(9(9:L{+H5 "%))uV})=)uV}=F$)IIj%$@!$$KKM"		" ??0066+, 	SAyFNN777"mmFNN,G,GHR(	S )1%!#

:!!#!$

:O XF(V \s   <a) a.0a3uB   Обработка упоминаний пользователейr  c                    |sy t        |d      }|j                  d       D ]  }	 | j                  |j                  d         }|j                  d   |j                  d<   |j                  |j                  d<   d|j                  d<   |j
                  j                  |j                  d<   |j                  j                  |j                  d	<    dj                  |j                  j                  D cg c]  }t        |       c}      S # t        $ rD}| xj                  d
z  c_	        | j                  j                  d| d| dd       Y d }~2d }~ww xY wc c}w )Nlxmlc                 $    | j                  d      S )Ndata-user-idhas_attrr   s    r,   r  z5CmfPluginYouTrack._process_mentions.<locals>.<lambda>{  s    n1M r0   r  r  	href_origTcmf_convertedzdata-linked-resource-idzdata-usernamer   uZ   Не удалось преобразовать ссылку на пользователя r  zERR-0098r   rA  r   )r   find_allrV  attrsr  r   rN   r  r"   r$   r    r%   rR  bodyrk  r  )rB   	issue_objr  doc_soupr   ru  r   cs           r,   _process_mentionsz#CmfPluginYouTrack._process_mentionsu  s9    v.$$%MN 	C))#))N*CD),6):		+&$*KK		&!-1		/*7=yy		34-3\\-?-?		/*	" ww(>(>?1A?@@  1$))pqtpuuwxywz{( *   @s   B(D3E	E9EEu8   Обработка комментариев задачиc                    d|d    d|d    d|d    d}d}d}| j                  |      D ]  }| j                   d	|d    }t        j                  j	                  |
      }|r.|j
                  s"| j                  j                  d| d|       h|st        j                  |d|      }| j                  |d   d         |_	        |j                  |_
        |j                  |_        | j                  |d         |_        |d   r| j                  |d         |_        n|j                  |_        |d   |_        | j!                  ||j                  j"                        |_        | j%                  |||j                  j"                        |_        ||_        |j)                  d       |dz  }| j                  j+                  dd        | j                  j-                  d| d|        y )Nu$   Комментарий задачи r   r   r   ): 'r  r  r   r6  r?  uN   Комментарий уже существует, и был изменен: zERR-0046r  T)rG  r  r7  r  r  r  r2  r   r   r  	processedu   Обработано u:    комментариев, из них приватных )r   rS  r   r   r   r  r    r%   rV  r1  	cmf_ownercmf_modified_byr|   r  r  r  r)  rN   _process_linksr  r   r  r!   )	rB   r&  
issue_datar&   comment_countcomment_private_countcomment_datar7  r  s	            r,   _process_issue_commentsz)CmfPluginYouTrack._process_issue_comments  s   4Z5M4NbQ[\`QaPbbfgqr{g|f}}~ ! 44Z@ '	=L(()L,>+?@F''++6+:Gw66))deldmn! * 
  ++$$(! ,  "&!1!1,x2H2N!OG ' 2 2G&-&8&8G#%)^^L4K%LG"I&*...i9P*Q'*1*@*@''6GL11)W\\=O=OPGL..y*gllFXFXYGL&2G# LLTL*QMOO$$Y<O'	=R 	#M? 3..C-DF	
r0   u*   Обработка тегов задачиc           
      ~   	 |j                  dg       |d   D ]1  }| j                  |d         }|j                  j                  |       3 |j                  r-|j                  d       |j                  j                          y y #  | j                  j                  d|d    d|d    d|d	    d
dd       Y y xY w)Nr  r+   Tr   u1   Не удалось привязать теги 'u   ' к задаче r   r   r   r   zERR-0102r   rA  )
rL   r   r  r&  r  r   r  r  r    r%   )rB   r&  r0  r   r   s        r,   _process_issue_tagsz%CmfPluginYouTrack._process_issue_tags  s    	!!6(+!&) /**3v;7%%g./ ##.##% $	OO%%CJvDVCW X##-l#;"<Bz$?O>PPQS"	 & s   BB 3B<u0   Обработка вложений задачиc                 
   dd l }ddlm} |d    d|d    d}d| d|d	    d
}d}t        |d         j	                  d      }|j	                  d      }	|	j                         r|j                  |	      5 }
|
j                         D ]  	 j                  d      r	 | j                  j                  dd       4t        t        fd|d         d       }}t        j                  j                  ||g d      }|s#t        j                  ||d| j                        }|j                   r|rH| j#                  |d   d   |      |_        |j$                  |_        | j)                  |d         |_        |
j-                        5 }|j/                  d       |j1                  |d       |j/                  d       |r+|j2                  |d   k(  sJ |j2                   d|d           |j4                  j7                          d d d        | j                  j                  dd        	 d d d        | j?                  |      D ]  	 t        t        fd&|d         d       }d'   }t        j                  j                  ||(      }|s#t        j                  | j                  |d|)      }|j                   r|rH| j#                  |d   d   |      |_        |j$                  |_        | j)                  |d         |_        |j/                  d       |jA                          tC        jD                  d*   |jF                         t        jH                  j4                  jJ                  jM                         }|jO                  |jP                        }|jS                          |j4                  j7                          | j                  j                  dd        |S # 1 sw Y   xY w# t8        $ rQ}|dz  }| j                  j;                  d d | d!| d"|       j4                  j7                          Y d }~;d }~w |dz  }| j                  j;                  d# d$| d%|       | j                  j4                  j=                          Y xY w# | j                  j                  dd       w xY w# 1 sw Y   xY w#  |dz  }| j                  j;                  d#d'    d$| d%|       | j                  j4                  j=                          Y ^xY w# | j                  j                  dd       w xY w)+Nr   )RDiskr   r   r   r   u   Вложения задачи : 'r  r  r   r   r   r  r  r,  c                     | d   k(  S )Nr+   r.   )rL  zip_attach_names    r,   r  z8CmfPluginYouTrack._process_attachments.<locals>.<lambda>  s    !F)*F r0   )rG   url_previewurl_preview_imgr  rF  T)r+   rG  r  r    r  r  r  r   F)
mark_dirtysizez != r   u(   Проблема с вложением 'u   ' в задаче uO   , размер файла не совпадает с метой из YouTrack: zERR-0034u;   Не удалось обработать вложение 'u   ' задачи zERR-0035c                     | d   d   k(  S )Nr+   r   r.   )rL  attachment_datas    r,   r  z8CmfPluginYouTrack._process_attachments.<locals>.<lambda>)  s    !F){/K"K r0   r   )r+   rG  )r    rG  r  r+   rc   )*zipfilerdisk.rdiskr8  r   r\   r]   ZipFilenamelistr  r    r  r  r   r   CmfAttachmentr   r  rV  r1  r-  r|   r  r^   r   upload_stream_filest_sizer  r  AssertionErrorr%   rollbackr   
upload_dirr  rV  full_path_fileCmfRFiledata_driverget_rd	get_rfile
_file_namemake_preview)rB   r&  r0  rB  r8  r&  r&   r$  r   all_attach_zip_filemyzipattach_dataattach_namer  attach_frt  rdiskrfilerA  r;  s                     @@r,   _process_attachmentsz&CmfPluginYouTrack._process_attachments  ss   %!,/0:d3C2DAF	.ykZ	=R<SSTU
< 89BB=Q.778MN%%'!45 AL',~~'7 @LO?L*33C8$z 00{Kw '+" F *= 9 !' '6%+%9%9%=%=!,#,$ &> 	&
  *)/)=)=%0'004+/??	 *> *J &55*8<8H8HU]I^_cIdjm8H8n
 57A7L7L
 4<@NN;W`Ka<b
 9!&O!< 7 *D A * = =hSX = Y *D A#.+5+=+=VAT+T %Y+5+=+=*>d;vCVBW(X%Y+T * 4 4 674 00{KA@LALF  $:::F )	DO(D"K"=1  .k:#1155;y5Y
!!'!5!5#'??((,(	 "6 "J --"040@0@XAVW[A\be0@0f
-/9/D/D
,48NN;yCY4Z
1OOO5))+KK <j>W>WX#)??#5#5#A#A#H#H#JE!OOJ,A,ABE&&(MM((* (({CS)	DV O7 7 * /!11FFWWijsit ullokpr& )	 2  #,,..6!11YZiYjjy  {D  zE  F& ) 2 
 **33500{KCAL ALF.!))QRabmRnQoo~  @I  J  K! * 
 ""++-(({Cs   9SO9!S>CO9A?O,O9SE:S,O61O99	R#AQR&AR# R&&SSSAT)&T,,U
u8   Обработка наблюдателей задачиc                 @   d|d    d|d    d|d    d}|d   d	   D ]t  }| j                  |d
   d   |      }|st        d|       ||j                  k(  s||j                  k(  s||j                  k(  rZ|j
                  j                  |       v t                y )Nu$   Наблюдатели задачи r   r   r   r+  r  r  r  r  r  r  uI   _process_watchers: Не найден наблюдатель задачи )rV  CmfErrorr  r1  r-  
spectatorsr&  r   )rB   r&  r0  r&   r+  ru  s         r,   _process_watchersz#CmfPluginYouTrack._process_watchersR  s    4Z5M4NbQ[\`QaPbbfgqr{g|f}}~!*-o> 	0G%%gfod&;%EF!jkrjstuu )///Y111Y000  ''/	0 	r0   r   c                    | j                   j                  j                  d|d    d|d    d       d|d    d|d    d|d    d	}| j                  |      D ]p  }i }||d
<   d|d<   | j	                  |d   d   |      |d<   | j	                  |d   d   |      |d<   |d   |d<   | j                  |d         |d<   | j                  |d         |d<   |d   d   |d<   |d   |d<   | j                   d|d    |d<   | j                   |d<   ||d<   d|d <   |d!   r| j                  |d!         |d"<   t        j                  j                  |d   #      }|rt        j                  d'i |}|j                  j                  t        j                  |j                  j                  $      z   |_        |j!                  d%&       s y )(Nu8   Загрузка журнала работ задачи r   r   r   r   u%   Журнал работ задачи r+  r  r  rG  closedr  r  r  r1  r
  r-  r.  r  r  r!  r  durationminutes
time_spentr  r6  r7  r    r  r   remaining_estimater  r  r?  )rb  Tr   r.   )r    r  r  r   rV  r|   rS  r   CmfTimeTrackerHistoryr   r  rN   rj   	timedeltarc  r  r   )rB   r&  r0  r&   r?  timetracker_historytths          r,   _process_issue_worklogz(CmfPluginYouTrack._process_issue_worklogd  s7   ##FzR^G_F``bcmnrcsbttuv	
 6j6N5OrR\]aRbQccghrs|h}g~~  A//
; 	+G"$,5),4)040@0@ARSWAX^a0@0b-/3/?/?	@RSW@X^a/?/b,5H5V 1248NN79CU4V 0104wv0O-07
0CI0N-*1&/'/3/?/?.@74=/,R)04-5< 1289 45y!9=PYHZ9[#$56..22:Mh:W2XC22I5HI"~~33bll3>>K_K_6``T*-	+r0   u#   Конвертация ссылокc           
         |s|S t         j                  j                  | j                  j                  j
                        }t        |d      }|j                  d       D ]|  }|j                  j                  d      r)| j                  j                  j                  d|        H|j                  d      r|j                  d   }n|j                  d   }|j                  d      r	 t         j                  j                  |      }|j"                  s|j$                  r5|j"                  j                  d      r|j$                  |j$                  k(  s| j                  j                  j                  d|        t         j                  j'                  |      j)                  d      d   j)                  d      d   }
|j                  d      s:t*        j-                  dt         j                  j'                  |            }|r|d   r0t/        t1        fd|j                  dg             d       }|r|d   }
t2        j4                  j7                  |
|dg      }|ru|j                  d      r|j                  d   |j                  d<   |j
                  |j                  d<   d|j                  d<   t9        j:                  |j                  d         }|rs|d   rn|d   j                  d      rZ|j<                  dk(  rKd|j>                  j                  d<   d|j>                  j                  d<   d|j>                  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 rt*        j-                  d%t         j                  j'                  |            }|r|d   }t2        j@                  jC                  d&d'd(| d)gd&g*      }|D ]  }|jD                  d+   |k(  s|j                  d   |j                  d!<   |jF                  |j                  d<   d|j                  d<   | j                  j                  j                  d"|jF                           n d,|j                  j                  dd$      v s|j                  d   jI                  d      j)                  d      d   j)                  d      d   }| jK                  |      }|s|j                  d   |j                  d!<   |jF                  |j                  d<   d|j                  d<   | j                  j                  j                  d"|jF                           d$jM                  |jN                  jP                  D cg c]  }tS        |       c}      S # t        $ r/}	| j                  j!                  d| d	| d
|	        Y d }	~	d }	~	ww xY wc c}w )-Nr  c                 J    | j                  d      xs | j                  d      S )Nr  srcr  r   s    r,   r  z2CmfPluginYouTrack._process_links.<locals>.<lambda>  s    V,CU0C r0   r"  u"   Тег уже обработан: r  rl  )r   zmailto:[u9   ] Не удалось разобрать URL-адрес 'z'. httpu!   Обработка ссылки: r  r   ?r   zdata-attachment-idz/api/files/([-0-9]+)/?\?sign=.*r   c                     | d   k(  S )Nr   r.   )rL  attachment_ids    r,   r  z2CmfPluginYouTrack._process_links.<locals>.<lambda>  s    QtW%= r0   r   r+   rG   rF  src_origTvideosourcecontrolsz100%widthheightr!  u   Заменили на z/issue/r   z/issue/([A-Za-z0-9]+-\d+)/?.*r  r8  z%"idReadable":"r   r=  r   z/users/)*r  r  urlparserS   r  rG   r   r#  r$  r   r    r  r  r  r   r"   r   schemehostnamer  r  researchr  r   r   rF  sget	mimetypes
guess_typer+   rG  r   r`  r  r  striprV  rR  r%  rk  r  )rB   r&  r0  r  yt_url	text_soupr   rG   
parsed_urlrt  attachment_name	url_matchrA  
attach_obj	mime_typer&  r  r  
user_loginru  r(  rq  s                        @r,   r/  z CmfPluginYouTrack._process_links  s   K&&tww':':'>'>?!$/	%%C
 x	XC yy}}_-&&++.PQTPU,VW ||F#ii'ii&~~./
#\\2237
 ""j&9&9%%008"++v> OO""''*KC5(QR$ll2237==cB2FLLSQRSTO  GG$89M II6LL((-	 $-aLM"&=z~~m]_?`a# #&5f&=O--22$ w 3 J
 <<&,/IIe,<CIIj)'1~~CIIe$15CIIo. ) 4 4SYYu5E FI!%aL%aL33G<HH07A

((44:

((15;

((2<<'-0YYv->CIIk*(2CIIf%15CIIo.&&++.DZ^^DT,UV CIIMM&"55II4LL((-	  )!I"NN//-"-i[; 
 !22 0 E !& "//=J58YYv5FCIIk204		CIIf-9=CIIo6 OO2277:PQUQZQZP[8\]!"  CIIMM&"55 YYv.44S9??DRHNNsSTUV
))*5-0YYv->CIIk*(.CIIf%15CIIo.OO**//2H0VWqx	Xt ww	(?(?@1A@AAI  ##	{"[\_[``cdgchi 	H As   ,XY	Y&$YYu   Обработка задачиc                 b   d}| j                    d|d   d    }t        j                  j                  ddd| dgd	g
      }|st	        d|d   d    d      |j
                  }t        j                  j                  |      }|s t        j                  j                  d      }d|d    d|d    d}|d   }| j                    d|d    }	| j                  || j                  t        j                  j                     d   |      }
| j                  |
d<   d|
d<   ||
d<   t        j                  j                  j                  }t        |
d         |kD  rd|
d    d|d    |
d<   |
d   d| |
d<   n|d   |
d<   |	|
d<   |
d    r|
d    j                  |
d!<   |j                  d"      r| j!                  |d"   d   |#      }||
d$<   ||
d%<   |so| xj"                  d&z  c_        | j$                  j'                  d'|d"    d(d)*       | j$                  j)                  d'|d"   d    t*        j,                  dd+       |j                  d,      r| j!                  |d,   d   |#      |
d-<   |
d-   so| xj"                  d&z  c_        | j$                  j'                  d.|d,    d(d)*       | j$                  j)                  d.|d,   d    t*        j,                  dd+       |
j/                  d/g       }|
j/                  d0g       }|
j/                  d1g       }| j$                  j)                  d2| d3|
        t        j                  j                  |	|
D cg c]  }| c}4      }|s&t        j                  |
d   | j$                  d|	5      }t1        |d6      r|j2                  s|j4                  r%|
j7                         D ]  \  }}t9        |||        |j:                  r|j=                  d7       t?                || jA                  ||      z  }| jC                  ||jD                  jF                        |_"        | jI                  |||jD                  jF                        |_"        |d8   r| jK                  ||       |d9   d:   r| jM                  ||       |d;   d<   r|d;   d=   r|d;   d=   d>   d   }|j                  d?|jO                  d@dA             }|dB   rM|jQ                  dCg       |dB   dD   |jR                  _*        |jR                  jF                  j=                          | jW                  ||       ||_,        ||_-        ||_.        |dE   r| j_                  ||       |
dF   |_0        ||_        |j:                  r|j=                  d7       | j$                  jb                  jb                  j                    dG|d    }t        jd                  j                  |      }|s!t        je                  || j$                  H      }||_3        th        jj                  jm                  | jn                  jp                  jr                  dI|d          }dJ| dK| dL|_"        dM|_:        |j=                  d7       | j$                  jw                  dNdO       t?                |S c c}w )Pu}    Общая логика обработки которая потом разделяется на задачи и эпики r   r6  r:  r   r7  r8  %::::%r  r=  u2   Не найден проекта с ключем 'r  r  r?  project.agile:defaultr
  r  r   r9  r  r   r=  TapprovedrG  r+   z<p><strong>z</strong></p><p></p>r  r  Nr  cache_status_typer  r  r1  r-  r   u*   Не найден автор задачи zERR-0049r   rA  )r   exc_infor  r.  uG   Не найден последний обновивший задачу r  r  r  u,   Попытка создать задачу 'u   ' из r  )r+   r    r  r7  r  r   commentsCountr  r  ru  enabledestimater  r~   rD  r   rN   z$op_gantt_task.timetracker_sched_workrb  r  r  z
::comment:r7  r    zissue/u@   Задача импортирована из YouTrack: <a href="z" target="_blank">z</a>r   r  r,  )<rS  r   r   r   r\  r  CmfCustFieldConfr{  rw  r   r  default_activityr+   r  r  r<  rV  r$   r    r%   r!   r   ERRORpophasattrr  is_newr%  r  r  r   
cmf_commitrZ  r)  r  rN   r/  r4  r^  r   rL   op_gantt_task
sched_workri  r  r  r  r6  r  rE   r   rG  r  r  r  rS   r  rG   	log_levelr  )rB   r   r$  project_ext_idr:  r  rb  r&   r&  r(  normalized_issuemax_task_name_lengthissue_reporterr  r  r  r   r&  rN   estimation_field_idestimation_fieldcomment_ext_idr  r  s                           r,   r   z CmfPluginYouTrack._process_issue	  sf     !,,-Ri0@0F/GH##''fN+;3&?@%& ( 
 OPUV_P`alPmOnnopqq.. 1155^5L$5599?V9WOeL12#eI6F5GqI,'	**+2eDk];  ..MM&..556x@
 (,'<'<$'+$%,"%~~22=='(+?? .v67 8./02 V$ (8'?@UAU'VV$',-B'CV$%1"H%4DX4N4Z4Z0199Z !--eJ.?.E3-ON-;\*,:[)!1$))@zAR@ST& * 
 ##@zARSWAX@YZMM"!	 $  99Y262B2Bi & 3C 3./ $$561$))]^cdm^n]op& * 
 ##]^cdm^nos^t]uvMM"!	 $  (++NB?,001DbI%)),;
J9+U\]m\nopNN&&1AB:JB ' 
	 %f-?? $#	 ' I I01))%5%;%;%= 6!
E	:u56 NNtN, 	$++Iu==//	9>>;O;OP	,,Yy~~?S?ST	 !((E: _-""9e4 ./	:23J?&23I&J:&VW^&_`d&e##(99s3F3N3NsTW3X2Y-Z#[ #G,))+Q*RS9I'9RS\9]I++6++11668''	59 ".	 '8	#  *	 =$$Y6
 &66H%I	"$)	!NNtN, !OO2299EEFjQVW[Q\P]^##''~'>''~$//'ZG"||##GG##U<()*

3D6? 	 &  5w Cs   	Z,
c                     d}t        d      5  	 | j                  j                         rn+|j                         }|dk(  rn|| j	                  |      z  }Fd d d        |j                  |       y # 1 sw Y   xY w)Nr   Fr  r  )r   r    r  r   r   r!  )rB   issue_queueissue_queue_errorsr$  r   s        r,   _process_issue_threadz'CmfPluginYouTrack._process_issue_thread	  sz    51 		5??,,.#)F?$--e44 		5 	v&		5 		5s   AA11A:c           
         ddl m} d}t        j                         5  t        j	                         5  t
        j                  j                  |ddg      }|| _        | j                  j                  j                  j                  | _
        | j                  | j                  j                  d         | _        | j                  j                  j                  d| j                           t#               }t#               }	g }
t%        j&                         }t)        | j                         D ]i  }t+        | j,                  d| ||	d	
      }|
j/                  |       |j1                          | j                  j                  j                  d|        k d}| j3                  |||      D ]4  }| j                  j5                         r n|j7                  |       |dz  }6 |
D ]  }|j7                  d        | j                  j                  j                  d       |
D ]  }|j9                           t%        j&                         |z
  }| j                  j                  j                  d d||z  dd       d}|	j;                         s$||	j                         z  }|	j;                         s$| j                  j                  j                  d|        ||z  }d d d        d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)Nr   r   r   r}  r   r  uD   Обработка задач в несколько потоков: _process_issue_thread_)r  r  rE  u=   Запущен параллельный обработчик r   r  u3   Ожидание обработки задач ... z-----u&    скорость обработки: rI  u    задач в секундуu@   Обработка задач завершена, ошибок: )cmf.appr   rZ  disable_acldisable_notifyr   r   r   r    rE   rS  _normalize_settingsr  rw  r  r  threading_max_forksr   rP  rQ  r  r   r  r&  r  r  r  r!  rR  rU  )rB   r  r  r  r  r   r$  r    r  r  issue_processr\  r  r[  issue_countr   r]  r$   s                     r,   process_issue_forkz$CmfPluginYouTrack.process_issue_fork	  s   '  " 7	!G$:$:$< 7	!))-- ./ . J )DO#55<<HHD 44T__5R5RSd5efDMOO""''*nos  pH  pH  oI  )J  K'K!&M!B4334 t551!5'2.@ $$T*

&&++.klpkq,rst K//
D%H !??,,.&q 	! & ('( OO""''*]_% 		 !B&BOO""'')A+PRBRSVAWWtu J(..004466
 )..0 OO""''*jkujv(wxj Fo7	! 7	!r s7	! 7	! 7	!r s)   K=I?K12-K1K=1K:	6K==Lc                 x   dd l }|j                  dddd| j                  j                  j                   d| j                  j                   d|d    d	| d
| dgddt        dd      t        dd            }| j                  j                  d|j                          | j                  j                          |S )Nr   z/usr/bin/python3z	manage.pyshellz*plugin = models.CmfPluginYouTrack.get(id='z(');retcode = plugin.process_issue_fork('z', 'r   z', z, z);Tz"/var/log/eva-import-subprocess.logr  z&/var/log/eva-import-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderru   Запущен )	
subprocessPopenr    rE   r   r^   r!   pid
log_detail)rB   r  r  r  r  r[  s         r,   _execute_taskzCmfPluginYouTrack._execute_task
  s    "K<T__=S=S=V=V<W X**+4T0B/C3tfBug "<dC@$G   
 	odhhZ89""$r0   c                    | j                  |d         }| j                  j                  d| d| j                   d       fd || j                        }t	        j
                         }d}g }t        | j                        D ]2  }| j                  |||      }||z  }|j                  |       ||kD  s2 n ||k  rt	        j                  d       t        |      D ]d  }|j                         }	|	| xj                  |	z  c_        |j                  |       | j                  |||      }
||z  }|j                  |
       f ||k  rt        |      D ]>  }|j                          |j                  s | xj                  |j                  z  c_        @ t	        j
                         |z
  }| j                  j                  d	| d
|ddd       y )Nr   u   Обработка u6    задач в несколько процессов: Tr   c                 v    t        j                  | |z        }|t        j                  kD  r | |dz         S |S )Nr   )rM  rN  r  IMPORT_OBJ_CNT)
task_countmax_processes
chunk_sizecalc_obj_counts      r,   r  z8CmfPluginYouTrack._process_tasks.<locals>.calc_obj_count3
  s<    :#=>JF111%j-!2CDD!!r0   r   r   u   Обработка всех u$    задач завершена за rI  rJ  )r  r    r!   r  rP  rQ  r  r  r&  sleepr`  pollr$   r  communicate
returncode)rB   r  r  import_obj_countr\  r  rZ  r   r[  r  new_procr]  r  s               @r,   _process_tasksz CmfPluginYouTrack._process_tasks)
  s   ..|D/AB
!*-cdhdvdvcwx 	 	
	" **d6H6HI^^t))* 	A%%lD:JKD$$DNN4 j 	 Z JJqMW -!YY[
)OOz1ONN4(#11,FVWH,,DNN8,-	 Z M 	3D4??2	3
 ^^"*:,6Z[]^aZbbjkw{ 	 	
r0   u   Обработка версийc                    t         j                  j                  ddd|d    dgdg      }t         j                  j                  d|      }t         j                  j                  d|      }| j	                  |d	         }|D ]  }|d
   dk7  r|d   D ]  }	 | j
                  j                         r  y | j
                  j                  j                  d|d    d       | j                   d|d	    }t         j                  j                  |      }	|	s"t         j                  || j
                  d      }	t         j                  j                  d      |	_        ||	_        |d   |	_        |j                  dd      |	_        |j                  d      r| j!                  |d         |	_        |j$                  j&                  |	_        |	j*                  r|	j,                  r|	j/                  d       |d   r||	_        n||	_        |	j(                  r-|d   s|d   r|	j3                  d       n|	j3                  d       |	j*                  r|	j,                  r|	j/                  d       | j
                  xj4                  dz  c_          y #  | xj6                  dz  c_        | j
                  j9                  d|d    dd d!"       Y >xY w)#Nr7  r8  r9  z"scheme_wf.default_release_workflowr=  release)sys_typetree_parentarchiver   z$typeVersionProjectCustomFieldrq  u!   Обработка версии 'r+   r  r>  r?  Tr7  r    r  zlist.release:defaultr  descriptionr   releaseDater   r  releasedCLOSEDOPENr   u,   Ошибка загрузки версии 'ERR-0053r@  rA  )r   r   r   	CmfFolderr  r    r  r  r  rS  r@  rT  r  rG  r+   r  r|   release_date	scheme_wfdefault_release_workflowr  r  r  r   r  set_default_statusr   r$   r%   )
rB   r  project_objrelease_folderarchive_folderr  r  r  rf  version_lists
             r,   _process_versionsz#CmfPluginYouTrack._process_versions_
  s   ''++f,x*@)A&CD89 , 
  ))--# . 
  ))--# . 

 11,t2DE# 4	EW~!<< ? 0/002OO**//2ST[\bTcSdde0fg(,(8(8'9GDM?%SN#)>>#5#5^#5#LL''-~~#1'+,0 (6 (
 /5.A.A.E.E3 /F /L+ +6L'(/L%(/M2(FL%{{=148NN7=CY4Z1,7,A,A,Z,ZL)#338O8O$))d);z*3A03A0#,,":.'*2E(;;HE(;;FC#338O8O$))d);OO99Q>9S0	4	\OOq(OOO--FwvFWWXY"!* . s   J9GJ<Ku)   Обработка компонентовc                    t         j                  j                  ddd|d    dgddg      }t         j                  j                  |ddd	g
      }	 | j	                  d|d         }|d   D ]  }| j                  j                         r y | j                  j                  j                  d|d    d       	 |j                  sd|_        |j                          | j                   d|d    }t         j                  j                  |g d      }|s"t         j                  || j                  d      }||_        |d   |_        ||_        |j                  d      r%| j%                  |d   d   d|d          |_        nd |_        d |_        |j*                  r|j,                  r|j                  d       |j                  dd      r|j.                  s!|j1                          d|j.                  _        |j.                  j*                  rG|j                  dd      |j.                  _        |j.                  j4                  j                  d       | j                  xj6                  dz  c_         y # t
        $ r5 | j                  j                  j                  d|d    d|d    d       Y y w xY w#  | xj8                  dz  c_        | j                  j;                  d |d    d!d"#       Y xY w)$Nr7  r8  r9  r  r-  r=  r  Ttree_node_is_branch)r  r  include_systemr   )r  
Componentsr      Проект r  r  r+   uC    не содержит компонентов (подсистем).rq  u)   Обработка компонента 'r  r6  )descr_documentdefault_ownerdefault_responsibler  r  rG  r  r  rt  u   Компонент r  r   r  r   r   u5   Ошибка обработки компонента r  rC  rA  )r   r   r   r  r  r"   r    r  r   r  r  r  r   rS  rC  rG  r+   r  rV  r  r  r  r  r  create_descr_document
text_draftrN   r   r$   r%   )rB   r  r  components_foldercomponents_fieldrh  ri  components_lists           r,   _process_componentsz%CmfPluginYouTrack._process_components
  s$   ''++f,x*@)A&CD!;/ , 
 #,,00#!)*	 1 

	#66+T"  *(3 <	I((*OO""''*ST]^dTeSffg(hi6(<<<@%9%**,&*&6&6%7r)D/9J#K "("5"5"9"9+ #: 
# '&,&9&9/#'??(, ': 'O
 *5&'0'8$.?+==)484D4D!'*401)F2C1DE 5E 5O1
 59O16:3"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:5k<	  	OO""**[ 9:"\&=Q<R SU V 	z1$))KIV\L]K^_+ * s   I= :F?J>=;J;:J;>;K<u   Обработка теговc                    t               }| j                  |d   | j                  |d               D ]<  }| j                  j	                         r y |d   D ]  }|j                  |d           > |D ]  }| j                  |        y )Nr   rK  r  r+   )rW  r  r  r    r  r  r   )rB   r  r  r   r   s        r,   _process_tagszCmfPluginYouTrack._process_tags
  s    u++++L,>? , 
 	&E ((*V} &V%&	&  	"CS!	"r0   c                    | j                    d|d    }t        j                  j                  |dg      }|sPt        j                  |d    d|| j                  d      }| j                  j                  d	|d    d
|d           d|_        |j                          t        j                  j                  dd|      }t        j                  j                         D ci c]  }|d   |
 }}| j                  |d         }|D ]  }|d   d   j                  dd      }	d|	 d| j                    j                         }
|
|vrA| j                  t        j                  j                     d   D ])  }|j                  d      s|d   d   |d   d   k(  s(| j                    d|d   d    }t        j                   j                  |ddgd      }|j"                  rA| j                  j$                  j'                  d|j(                   d|j*                   d       t        j,                  j                  ||
||      }|sTt        j-                  ||
||      j                  d       | j                  j                  d|
 d|d    d | d!| d"	          |j/                          |j0                  j3                          |S c c}w )#Nr6  r   r   r  r  u/   : Экран задач по умолчаниюTr+   r7  r    r  u2   Создан экран задач проекта r  r+   r   r  rP  r  r   r  rD  r   r~   r   r$  r   r  r  r  rx  r  r  r   r  u&   ) добавлено на экран 'u   ' в 'r  )rS  r   r  r   r    r!   r  r   r  r   r   r  r   r  rw  r  r  r  r  r   r+   r   r  r  r  r  )rB   r  r  ui_formr  rd   r  r  r  r7  r   r  r  r  r  s                  r,   _process_screenz!CmfPluginYouTrack._process_screen  s3    ,,-RT0B/CD""&&!5 ' 
 &&$[122ab%?? $	 ' G OOD\R]E^D__abnoubvawx "+--11 2 
 4:>>3T3T3VWaq)WW11,t2DE+ .	M$W-d3;;CEHxj$*:*:);<BBDJ,v~~'B'BCHM 'yy-%d+}W/Ed/KK+/+;+;*<Bu[?QRV?W>X(Y%!'!4!4!8!80%)  )- "9 "J "--..66((9Z=O=O<PPst !$*$9$9$=$=#-'&&3	 %> %M )--'1!+#**7	 . 
 $4$0++(Cg7G HCCJ)6R_Q``ac
 O'.	` 	  "

k Xs   "Ku,   Обработка схемы экрановc                 z   | j                    d|d    }t        j                  j                  |dg      }|sbt        j                  |d    d|| j                  d      }|j                  d	       | j                  j                  d
|d    d|d           | j                  |      }|j                  ryt        j                  j                  |dg      }|s"t        j                  || j                  d      }|j                  r'||_
        ||_        d|_        |j                  d	       t                |S )Nr6  r   r   r  r  u*   : Схема экранов проектаTr  r   u8   Создана схема экранов проекта r  r+   r  r   )rS  r   CmfUiFormSchemer   r    r   r!   r  r  CmfUiFormSchemeRuleui_form_schemerF  r  r   )rB   r  ui_form_scheme_ext_idr  r  rules         r,   _process_screen_schemez(CmfPluginYouTrack._process_screen_scheme`  sa   #'#3#3"4B|D7I6J K//33(5 4 
 #33$[122\],?? $	 4 N D1OOJ,-RV0D/EG
 &&|4))--11,u 2 D 110#$( 2 
 ##&4#%&/#		d	+r0   c           
         t         j                  j                         D ci c]  }|d   |
 }}| j                  |d         }|D ]x  }|d   d   j	                  dd      }d| d| j
                   j                         }||vrA| j                  t         j                  j                     d   D ]
  }	|	j                  d      s|d   d   |	d   d   k(  s(| j
                   d	|d   d    }
t         j                  j                  |
g d
d      }|j                  rA| j                  j                  j                  d|j                   d|j                    d       t         j"                  j                  ||      }|sIt         j#                  ||| j                        }| j                  j%                  d| d|	d    d|        |d    |_        |j(                  dk(  r|j*                  j,                  xs i }t/        |j0                  j,                        xs
 t/               }i }t/               }|d   D ]Q  }t2        j5                  |d   dd      }|d   ||<   |d   r|j7                  |       ||vsA|j7                  |       S |j9                  |       ||_        t;        |      |_        ||_        t;        |      |_        n|j(                  dk(  rt         j                  j<                  |j                     }t?        t               |j@                     }|d   D ]Y  }|j                  |d         }|s ||d         }|j                  dd      |_!        |jD                  sJ|jG                          [ |jG                          |jD                  r|jG                  d       tI                 { y c c}w )Nr   r   r  rD  r   r~   r   r$  r6  )r  r   rE  r  r  Tr  r  rx  r  )r  rG  )r  rG  r    r  u<   ) добавлено в конфигурацию полей 
canBeEmptyr  rq  r+   rI  rJ  r  r  r   Fr   )%r   r   r   r  r   rS  r  rw  r  r   r  r  r    r  r   r+   r   rY  r!   r  r  rE  rN   rW  r  rZ  r[  r  rN  r`  r   r	  r   r
  r  r   r  )rB   r  rb  rd   r  r  r  r7  r   r  field_ext_idr  cust_field_conf_fieldr  r  rE  r  rN   ro  r  r  rr  s                         r,   _process_field_confz%CmfPluginYouTrack._process_field_conf  s   39>>3T3T3VWaq)WW11,t2DE+ Z	!M$W-d3;;CEHxj$*:*:);<BBDJ,v~~'B'BCHM S!yy- )$/53Ed3KK&*&6&6%7r-:PQU:V9W#XL!'!4!4!8!8+  )- "9 
"J "--..66((9Z=O=O<PPst !,2,H,H,L,L#-. -M -) 1060L0L'1#2'+ 1M 1-
 ++(Cg7G HYYhXik :G|9T5T)2!33|C*4*<*<*B*B*Hb36z7R7R7X7X3Y3b]`]b0"$+.5(%28%< HE(/(>(> %f$'') )? )I
 27vGI.$Z0 0 4 4Y ?  )? 8 < <Y GH (..w78?-5AEFVAW->-<
*6:;S6T
3#55G&,nn&;&;JOO&L'+F|K4E4E'F%28%< .E%1%5%55=%5%IF#))55=)I05		*e0LF-%00 &. *..0!,,"D9LgS!Z	! Xs   OuA   Обработка схемы конфигурации полейc                    | j                    d|d    }t        j                  j                  |dg      }|sbt        j                  |d    d|d| j                        }|j                  d	       | j                  j                  d
|d    d|d           t        j                  j                  |dg      }|sbt        j                  |d    d|d| j                        }|j                  d	       | j                  j                  d|d    d|d           | j                  ||       |j                  rpt        j                  j                  |      D ]  }|j                  d        ||g | j                  dd}t        j                  di |}|j                  d	       |j                          |S )Nr6  r   r   r  r  u?   : Схема конфигурации полей проектаTr  r   uM   Создана схема конфигурации полей проекта r  r+   uL   : Конфигурация полей проекта по умолчаниюuB   Создана конфигурация полей проекта rG  TEXKOM_db_delete)rG  rb  logic_typesr    r  r.   )rS  r   CmfCustFieldConfSchemer   r    r   r!   r  r  r  CmfCustFieldConfSchemeRuler`  deleter  )rB   r  cust_field_conf_scheme_ext_idcust_field_conf_schemerb  r  	rule_dicts          r,   _process_field_conf_schemez,CmfPluginYouTrack._process_field_conf_scheme  s   +/+;+;*<B|D?Q>R(S%!'!>!>!B!B05 "C "
 &%+%B%B$[122qr4 $??	 &C &" #''D'9OO_,-RV0D/EG
 !115505 6 
 $55$[122~4 $??	 6 O   T 2OOT,-RV0D/EG
 	  ?!1199>>F\>] 3T23 1#2!"oo#'I 44AyADII$I'//1%%r0   u)   Обработка приоритетовc           	      t   d}ddddddd}	 | j                  d	|d
         }|d   D ]5  }|d   |v r|d   xs |d   |t        |d
   j                  dd            <   7 | j                   d|d
    }t        j                  j                  |      }|rct        j                  j                  d|dg      }|s$t        j                  ddd|| j                        }||_        |j                  d       y y # t        $ r5 | j                  j                  j	                  d|d    d|d    d       Y y w xY w)N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      Минимальныйr   r   r   r   r      Обычныйr   r   r   r   r      Критичныйr   r   r   r  r   r  r   r  u   Блокирующий)r   r   r   r   r   r   r  r   r  r  r  r+   u3    не имеет приоритетов задач.rq  r  rD  r   r6  r?  r   rE  rF  u   Приоритет)r   r+   orig_captionrG  r    Tr   )r  r"   r    r  r   r   r   rS  r   r  r   rY  rE  r   )	rB   r  priority_namesrE  priority_fieldr   cust_field_conf_ext_idrb  r  s	            r,   _process_prioritiesz%CmfPluginYouTrack._process_priorities$  s    
F )#'

	!44T"N 'x0 	jH>1<D_<U<iYabhYiGC..sB789	j
 %)$4$4#5RT8J7K!L 1155) 6 
 $*$@$@$D$D&!{ %E %!
 )(.(D(D0#!5*# )E )% -4!)!&&4&8 !  	OO""**[ 9:"\&=Q<R SE F 	s   C9 9;D76D7project_structc                 "   | j                   j                  j                  d|d    d|d           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<   | j                  |      |d<   | j                  |      |d<   t        j                  j                  ddd|d    dg|j                               }|s)t        j	                  | j                   |d   |d   d      }|j                  r5|D ]  }|dk(  r	t!        ||||           |j                  d      rd|_        |j$                  }|j                          |r7t        j&                  j)                  |      D ]  }|j+                  d        t-                | j/                  |       t-                | j1                  |       t-                | j3                  |       t-                | j5                  |       t-                | j7                  |       | j9                  |       | j;                  |       | j                   xj<                  dz  c_        | j?                          t-                |S )Nu"   Обработка проекта r  r  r+   r  r  r7  r=  r   r   u   Проект с именем u8    уже существует! Переименуем в Ttask_allow_multiple_sprintsr  r  r8  r9  )r    r7  r+   r  
restrictedprivater  r  r   ) r    r  r  r   r   r   r  r   r7  r   r+   r   r  r  keysr  r  perm_policyr  r   r`  r  r  r  r  r  r  r  _hack_replace_creation_date_hack_create_fake_taskr   r   )rB   r  r  r  r  r  r  s          r,   _process_projectz"CmfPluginYouTrack._process_projectw  s'   ##0k1J0K2l[aNbMcd	

 ''++D."89 (+ , 
 &&))^L-II&&&x0&--. -;6,B+C2nU]F^E__`)av&&&..3K4D4D3E F11?1G0HJ !''%3H%="  " 9=45 ,0+F+F|+T'( 483R3RS_3`/0 ''++f.*B)C1&EF!&&( , 
  ++??%h/#F+ $	 , K &&% ?(?S.*=>?
 -*3'##++;+? 3T23 	|,  .<(  .L) 	((5 	##K0--2-r0   u#   Обработка статусовc                 N   	 | j                  d|d         }|d   D ]E  }| j                  j                         r y | j                  j                  j                  d	|d    d
       | j                   d|d    d|d    }t        j                  j                  |      }|s,t        j                  |d   xs |d   || j                        }|d   rd}n.|d   r| j                  |d         }n| j                  |d         }||_        |j                  d       | j                  j                  j                          | j                  xj                   dz  c_        H y # t        $ r5 | j                  j                  j	                  d|d    d|d    d       Y y w xY w)Nr  r   r  r  r  r+   -    не имеет статусов задач.rq  u#   Обработка статуса 'r  r6  r?  r  )r+   r7  r    
isResolvedr  Tr   r   )r  r"   r    r  r   r  r  rS  r   CmfStatusCoder   calc_status_typer<  r   r  r  r   )rB   r  state_fieldr  state_ext_idstatus_coder<  s          r,   _process_statusesz#CmfPluginYouTrack._process_statuses  s   
	11T"K !* 	7E((*OO""''*MeTZm_\](^_"../r,t2D1ERd}UL ..22,2GK$22/@5='# 3  \"&)"&"7"7o8N"OK"&"7"7f"FK&1K#.OO%%'OO11Q617	7  	OO""**[ 9:"\&=Q<R S? @ 	s   E& &;F$#F$u2   Обработка логических типовc                 `   dddddddddddddddddddddddddd	ddd	ddd	dd
ddd
ddd
ddd}	 | j                  d|d         }|d   D ]  }| j                  j                  j                  d|d    d       | j                  j                         r y| j                   d|d    }t        j                  j                  ddd| dg      }|r|j                  |d         }|s%|j                  d      r|j                  |d         }|rjt        j                  j                  dd |d   gdg!      }|j                  rd| |j                   |_        nd| d|_        |j                  d"#       1d$|d    d}dd%|d   j                         g}	|j                  d      r%|d&|d    dz  }d'|	dd%|d   j                         gg}	| j                  j                  j                  |       t        j                  j                  |	dg!      }|rB|j                  rd| |j                   |_        nd| d|_        |j                  d"#       | j                  j                  j                  d(|d    d)       d}
t        j                  j                  dd |
g      }t        j                  |d   xs |d   |j                  d*d+      |d,d| d| j                  -      }|d.   d/   d0k7  r|d.   d/   |_        |j                  d      r|d   g|_        |j                  d"1       t!                | j                  xj"                  d2z  c_         y# t        $ r5 | j                  j                  j	                  d|d    d|d    d       Y yw xY w)3u#    Маппинг Type в logic_type    Подзадачаztask.sub:default)r+   r
  	UserStoryztask.userstory:defaultz
Task Agileztask.agile:defaultBugztask.bug:defaultEpicztask.epic:default)r-  SubtaskzSub-tasku   ИсторияStoryu   Задачаu   ЗаданиеTasku   Ошибкаu   Багr/  u   Эпикu   Вехаr0  r
   r   r  r  r  r+   u<    не имеет логических типов задач.Nrq  u*   Обработка типа задачи 'r  r6  r7  r8  r  r  r   r  r
  r  r=  Tr   u   Ищем по имени 'r   u	    или 'r   u   Тип 'u.   ' не найден и будет созданr  r   r   )r+   r  templater  r7  r    color
background#fffr   r   )r  r"   r    r  r   r  r  rS  r   rT  r   r7  r   r  ui_colorr   r   r   )rB   r  	name2code
type_field
issue_typerc  r  logic_type_dictr  filter_template_codelogic_type_templates               r,   _process_issue_typesz&CmfPluginYouTrack._process_issue_types  sz   
 ,@I["\ 4>PQ!5?QR'2<TU)3KL%1;OP'3=QR)3GH%*4FG$.@A!+=>!'1DE!'1DE#-@A
	"
	00T"J %X. O	7JOO""''*TU_`fUgThhi(jk((* $(#3#3"4Bz$7G6H I,,00 &C0A/B#*FG 1 J  (mmJv,>?O"z~~o'F"+--
?0K"L#0044"D/&*AB$: 5 
 $$*,->,?
@Q@Q?R(SJ%*,->,?r(BJ%$/ 4Jv4F3GqIHw
6(:(@(@(BCG~~o.i
?(C'DAFFWj&A&G&G&IJ OO""''1,,00 z 1 J $$*,->,?
@Q@Q?R(SJ%*,->,?r(BJ%$/OO""'':f-..\] 1M"("5"5"9"9m4 #: #  ,,0FJv4F^^M26,!*-.b1?? - J '"<0F:&0&9,&G
#~~o.$.v$6#7
 OOO-OO11Q61_O	7  	OO""**[ 9:"\&=Q<R SN O 	s   M/ /;N-,N-c                    | j                    d|d    d|d    }t        j                  j                  |      }|j                   d|d    }t        j
                  j                  dd|g      }|s+t        j
                  j                  dd|gdd|gg d	g      }|sFd
d|d
   g}|d   rdd
d|d   gd
d|d
   gg}t        j
                  j                  |dd|gg d	g      }|s"t        j                  ||| j                        }|d   xs |d
   |_        |d   xs d|_        |d   d   dk7  r|d   d   |_	        ||_
        d|_        ||_        |j                  d       |S )Nr6  r   r?  r7  r  r   r*  r  r7  r  Nr+   r  r   )r*  r  r    r  r   r5  r6  r7  Tr   )rS  r   r&  r   r7  rU  r    r+   r  r5  r*  allow_empty_transitionr   )	rB   status_datar  r  r7  r*  rd  r  filter_names	            r,   _create_statusz CmfPluginYouTrack._create_statusz  s   $$%RT(:';2k$>O=PQ**..f.=#??+2k$.?-@A!!%%hm-L%M%%))k2T8,&2) F !4V)<=K?+T;#?@T;v#67
 %%))T8,&2) F
 %%'!?? & F "/2Ik&6I!-06Bw-7&w/=FL((,%%%r0   c                 R   | j                    d|d    }t        j                  j                  |dg      }|s[t        j                  j                  d      }t        j                  |d    d||| j                  	      }|j                  d
       	 | j                  d|d         }|d   D ]  }| j                  |||        	 t        j                  j                  dd|gg dgdg      }|D ]K  }t        j                  j                  dd|j                  gdd|gg dg      s9|j                  d
d
       M |j                          | j                    d|d    }	t        j                   j                  |	      }
|
sIt        j                   j                  d      }t        j!                  |d    d||	| j                  	      }
||
_        ||
_        ||
_        |
j                  d
       t        j(                  j                  |
      D ]  }|j                  d
        d ||
| j                  d!}t        j(                  d"i |}|j                  d
       |
S # t        $ r5 | j                  j                  j                  d|d    d|d    d       Y y w xY w)#Nr6  r   r7  r  zdefault.system:defaultr  r  u3   : Simple бизнес-процесс проекта)r+   r4  r7  r    Tr   r  rq  r  r  r+   r$  r  r  rB  r<  r=  )r7  z!=Nr   )r  r   z
::SIMPLE::r?  zsoftdev:defaultu@   : Simple-схема бизнес-процесса проекта)r  r  r   )r  target_workflowr  r    r.   )rS  r   CmfWorkflowr   r    r   r  rF  r"   r  r   rU  r`  r<  r  create_create_transCmfSchemeWfdefault_epic_workflowdefault_task_workflowdefault_subtask_workflowCmfSchemeWfRule)rB   r  workflow_ext_idr  workflow_templater(  r  workflow_statusesr  scheme_ext_idry  scheme_templater  r  s                 r,   _create_scheme_wf_for_projectz/CmfPluginYouTrack._create_scheme_wf_for_project  s   !--.bd1C0DE%%))()T & 2 2 6 6<T 6 U))$[122ef*&??	 * H MMdM+	11T"K %X. C##E8\BC #,,11T8,& "? 2 
 ( 
	=F##''"D&*<*<=x0* (  MM4tM<
	= 	$$&  ++,J|D7I6JK##''}'=$0044:K4LO''$[122rs($??	 ( F (0$'/$*2'% **//&/A 	/DKKK.	/ ('//	
	 %%2	2		d	#w  	OO""**[ 9:"\&=Q<R S? @ 	s   2I( (;J&%J&u#   Обработка проектовc                    t         j                  j                  d      j                  j                  }| j                         D ]6  }t        |d         |d<   	 | j                  j                         r y |d   | j                  D cg c]  }|d   	 c}vrUd| j                   d|d    d}t         j                  j                  d      }| j                  |       | j                  |       | j                  |      }|j                  di       }|r| j                  |d         }nddd	}||d
<   d|d   |d   |j                  j                  |||d   |||d
}	| j!                  |	|       t#                9 y c c}w # t$        $ rM t'                | xj(                  dz  c_        | j                  j+                  d|d    d|d    dd       Y w xY w)Nsoftdevr  r   r6  r  rs  z#default_import_youtrack@evateam.comdefault_import_youtrack)r   r+   r7  r:  r+   htmlDescriptionr  )
project_typer+   r  r  r  r=  task_code_prefixr-  r7  r  r   u<   Не удалось импортировать проект r  zERR-0104r   rA  )r   CmfActivityr   r   rN   r  r  r    r  r@   rS  rT  r+  r@  rU  rV  r"  r  r"   r#   r$   r%   )
rB   r=  r  r&   r  r  r  project_leaderr-  r  s
             r,   _process_projectsz#CmfPluginYouTrack._process_projects  s    %%))y)9<<BB ..0 7	L!$\$%7!8L4??,,.%4CYCY-ZCc$i-ZZ#%d&6&6%7r,t:L9MR!P#0044:Q4R
 &&|4 )),7 >>|L	!-!1!1(B!?! $ 0 01E FI "G 9!I
 *8X&$-(0():;",--"5"5!* ((4[(A!*,'3" %%nlC[7	 .[N  	1$))R#K01L4H3IK)	 * 		s2   F7F	F FC"F FAGGu*   Обработка связей задачc                    | j                         D ],  }| j                  |d   | j                  |d               D ]  }| j                  j	                         r  y|d   }| j
                   d|d    }|d   d   d   }|d   d   }|rS| j
                   d|d	   d    }| j                  j                  |g       }|j                  |       || j                  |<   |d
   D ]S  }	|	d   d   }
|	d   s|
|k(  r|	d   }|	d   }| j
                   d|
 }|dk(  rL|	d   D ]C  }| d|d    d|d    }|||d   d| j
                   d|d    |d   dd| j                  |<   E |dk(  rL|	d   D ]C  }| d|d    d|d    }|| j
                   d|d    |d   d||d   dd| j                  |<   E |dk(  s|	d   D ]q  }| d|d    d|d    }|| j                  v r"| d|d    d|d    }|| j                  v rA|||d   d| j
                   d|d    |d   dd| j                  |<   s V   / | j                  j                  dt        | j                                t        j                  j                  d      }| j                  D ]^  }| j                  j	                         r yt        j                  j                  |      }|s)| j                  j                  j!                  d|        k| j                  |   D ]  }t        j                  j                  |dg      }|s)| j                  j                  j!                  d|        P|j"                  |j"                  k(  r||_        |j'                  d       | d| }t        j(                  j                  |      }|rt        j)                  ||||| j                        }|j'                  d        a | j                  j*                  j-                          | j                  j                  j/                  dt        | j                  j1                                       dd d!d"}| j                  j3                         D ]P  \  }}| j                  j	                         r y	 | j
                   d|d#   d    }|d#   d$   }|j                  |      }|r!t        j                  j                  |      }n t        j                  j                  |      }|s#t        j                  j                  d$d%|g&      }|s#t        j                  ||| j                  d'      }|j4                  r6|d#   d(   |_        |d#   d)   |_        |d#   |_        |j'                  d       t        j                  j                  |d*   d+         }|s:| j                  j                  j!                  d,|d*   d-    d.|d*   d+    d/       t        j                  j                  |d0   d+         }|s:| j                  j                  j!                  d1|d0   d-    d.|d0   d+    d/       t        j(                  j                  |      }|s!t        j)                  || j                  2      }||_        ||_        ||_         |j'                  d       S | j                  j*                  j-                          y#  | xjB                  d3z  c_!        | j                  jE                  d4|d#    d5|d*   d-    d.|d*   d+    d6|d0   d-    d.|d0   d+    d7d8d9:       Y xY w);u4    Постобработка связей задач r   rK  Nr   r6  rG  linkTyper  r   r  
issuesSize	directionINWARD:)r7  r  )r  outwardIssueinwardIssueOUTWARDBOTHu   Подзадачи: zsystem.additional_parentr  r?  uq   Не удалось связать задачи, возможно задача не попала в импорт parent_taskr  Tr   z:additional_parent:)in_linkout_linkrelation_typer7  r    u   Связи задач: zsystem.finish:finishzsystem.duplicatezsystem.link)Depend	DuplicateRelatesr  r+   r  r   r  targetToSourcesourceToTargetre  r7  u=   Не удалось найти входящую задачу r  r   u   ). Возможно задача не попала в импорт или находится в проекте, который еще не импортирован.rf  u?   Не удалось найти исходящую задачу r  r   u.   Не удалось создать связь z. in_link: z), out_link: r   zERR-0052r   rA  )#r  r  r  r    r  rS  r>   r   r&  r=   r!   r  r   CmfRelationTyper   r  r   r:  ri  r   CmfRelationOptionr  r  r  r  r%  r  in_type_nameout_type_namer  rj  rk  rl  r$   r%   )rB   r:  r   r&  r(  subtask_linktype_idissue_parentparent_ext_id	sub_tasks
issue_linklinktype_idlink_direction	link_typelinktype_ext_idinward_issuerelation_ext_idoutward_issue
both_issuerl  ri  child_ext_id
child_taskrelation_option	map_namesissue_relationrelation_type_ext_idlink_type_namerelation_coderj  rk  s                                 r,   _process_relationsz$CmfPluginYouTrack._process_relations6  s    ))+ N	G////> 0  M ??,,.!,/	"&"2"2!32eDk]C ',Hoj&A$&G#$Xx8'+'7'7&8<?4;P:Q$RM $ 1 1- DI$$\23<DMM-0 #(. 9J",Z"8">K%l3 "&99 %/%<N *: 6I)-)9)9(:"[M&JO%1,6x,@ L1@0A5;-qQ]^bQcPd.eO(1.:+0+>1"
 372B2B1C2lSWFXEY/Z+7+E0"
ED00A (94-7-A M1@0A=QUCVBWWXY^_cYdXe.fO(1151A1A0B"]SWEXDY.Z+8+F1"
 0<+0+>0"
ED00A (61*4X*> J1@0A5;-qQ[\`QaPb.cO.$2F2FF (1@0A:dCSBTTUV[\`VaUb.cO.$2F2FF ((1.:+0+>1"
 372B2B1C2jQUFVEW/X+5l+C0"
ED00AQ9)MN	` 	23t}}3E2FGH..228R2S!]] *	?M((* ..,,M,BK&&..WWdVeg  $m < ?#^^//')? 0 
 "OO**22[[gZhj  &&**<*<<-8J*OOO5)67J<.&YO&,&>&>&B&B/&B&ZO**0*B*B$.%0*7#2'+ +C + (,,,>=?*	?X 	!!###&=c$BVBVB[B[B]>^=_$`a,+$
	 04/C/C/I/I/K F	+O^((*B*.*:*:);2nV>TUY>Z=['\$!/!7!? )n = $*$:$:$>$>M$>$RM$*$:$:$>$>FZ$>$[M$$*$:$:$>$> &n= %? %M %$*$:$:+3#'??(,	 %; %M !001?1GHX1YM.2@2HIY2ZM/4B64JM1!&&4&8 ..,,N>4RS[4\,]OO**22W).9%@ANSaDbckDlCm nOP !>>--^M5RS[5\-]OO**22Y)-8?@>R_C`aiCjBk lOP "(":":">">o">"V&&,&>&>.#'?? '? 'O +2'+3(0=-$$$6{F	P 	!!#1$))D^TZE[D\ ]  .~ >u EFbXfIghpIqHr s!!/!>u!E FbXeIfgoIpHqqrt & * s   1E\A \4A*\A ])c                 F   d| _         || _        d| j                  _        d| j                  _        d| j                  _        | j                  j                          | j                  j                         | _        | j                  j                  j                  j                  | _	        | j                  | j                  j                  d         | _        t                | j                          | j                          | j!                          | j#                          | j!                          | j%                          | j!                          | j'                          | j)                          | j+                          | j                  j                  j,                  j/                  dd      r.| xj                   | j                  j1                         z  c_         n%| j                  j2                  j5                  d       d| j                  _        | j                  j                          t                | j7                         D ]W  }|d   | j8                  D cg c]  }|d   	 c}vr&| j                  j2                  j;                  d	|d
    d|d    d       Y | j                  j2                  j;                  d| j                           | j                  j2                  j;                  d| j                  j                          | j                    S c c}w )Nr   u'   Импорт данных из YouTrackr  process_linksTu2   Отключена обработка ссылокr   r   u&   Импортирован проект r  r9  r+   r  u#   Ошибок обнаружено: u-   Импортировано объектов: )r$   r    r+   r   r   r   get_max_processesr  rE   rS  r  r  rw  r   r  r  r   r  r  r  r^  r  rN   r   process_cross_linksr  r   r  r@   r  )rB   r    r:  r&   s       r,   process_importz CmfPluginYouTrack.process_import
  sl   $H01-#$ !__>>@??1188DD001N1NO`1ab 	##% !??((..22?DIOOtBBDDOOO""**+_`#& ))+ 	Gt}$:P:P$Q3SY$QQOO""''89M8NcRYZ`RaQbbcd	 	##&I$//IZ$[\##&STXTcTcTyTySz${|??"" %Rs   L)Nro  rq  )NNri   )r   rx   )TTN)^r   
__module____qualname__r   r3   ui_meta_skipapi_methodsr   __annotations__r   r  rX  r;   propertyrS   r5   staticmethodru   r|   r   r	   r   r   r   r   r   r   r   r   r   r   r  r+  r/  r4  rv  r{  r  r7   r  r  r  r  r^  r   r  rV  ra  r  r  r1   r   r  r  rA  rh  r  r  r  r  r_  r  r  r  r  r)  r4  r6  rZ  r^  ri  r/  r   r  r  r  r  r  r  r  r  r  r  r  r  r"  r+  r@  rF  rU  r^  r  r  __classcell__)rC   s   @r,   r3   r3   -   s   '99FF J L '88DDH K
 OCI&
& 
 
$ &c4i & &  &			 	 
		 	 "S "S " "
   '3 '8DJ3G ' ' ( (B ^d ^ ^ &4 & & &4 & & &T & & W W( ' 'R G$ D       mf 	 t*
 
.7r	S 	 c  $n .@'#& Z 3  !T , #!q q qn #!ww w 	w
 wrdPL&P!$F=~M"^ 45) 6)V DE%c F%cN3 3jI%V YZA A A [A0 OP2
 Q2
h AB C" GHz Izx OP Q" R+ +< :;AB <ABF 67z 8zx' >@*4
l 67D 8DL @AT BTl 45" 6" Pd CD( E(T^!@ XY6& Z6&p @AP9 BP9ddt d4 dL :;(7 <(7T IJo7 Ko7b,\Ob :;: <:x ABQ$ CQ$f:#r0   r3   )$base64re   rj   rM  r~  multiprocessingr  r  rP  r  pathlibr   queuer   	threadingr   typingr   r   r   r	   r
   r   psutilro   bs4r   r  r   cmf.includemodules.youtrack.fieldsr    modules.youtrack.youtrack_clientr   r1   r3   r.   r0   r,   <module>r     s^                > >      8 ;(W<#,>> W<#r0   