
    vgi                         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 d dlmZ d dlmZ d dl d d	lmZ d d
lmZ  ej,                         ZddZed        Z G d dej4                        Zy)    N)contextmanager)permutations)Path)Queue)BeautifulSoup)cmf_context)*)ZephyrScale)cmf_plugin_zephyr_scalec                       fd}|S )Nc                       fd}|S )Nc                    	 }j                   dk(  r|d|d    z  }|%| j                  j                  d d| dd d       | j                  j                         ry | g|i |}t	                |S # t
        $ rQ}t                | xj                  dz  c_        | j                  j                  drd|z   nd	 d
|        Y d }~yd }~ww xY w)N_simple_dump r   z=====T	anonymous   u   Ошибка . )	__name__
cmf_importlog	is_cancel
cmf_commit	Exceptioncmf_rollback
has_errors	log_error)objargskwargs_nameresexcfuncnames         0./modules/jira/models/cmf_plugin_zephyr_scale.pywrapperz3catch_exception.<locals>.decorator.<locals>.wrapper   s    ==N2qa	]*E$NN&&'!E7!F8'DPT&U>>++-3000
 !#((<ueRT7UUWX[W\)]^	s   AA9 !A9 9	CACC )r%   r(   r&   s   ` r'   	decoratorz"catch_exception.<locals>.decorator   s    	$     r)   )r&   r*   s   ` r'   catch_exceptionr,      s    * r+   c               #      K   	 dt         j                  d<   d  dt         j                  d<   y # dt         j                  d<   w xY ww)Nr   NO_CACHE1)osenvironr)   r+   r'   enable_cacher2   .   s8     %!#

:!$

:

:s   A/ AAAc                       e Zd Zej                  j
                  dz   Zej                  j                  dgz   ZdZ fdZe	d        Z
d Zed        Zed        Zed	efd
       Zd Zd Zd Zd Zd Zd Zed        Zd Zd Z ed      dOd       ZdPdZd Zd Zd Z e       d        Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)dQd$Z*d% Z+d& Z,d' Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<d7 Z= e       d8        Z>d9 Z?d: Z@d; ZA e       d<        ZBd= ZCd> ZDd? ZEd@ ZFdA ZGdB ZHdC ZI e       dD        ZJdE ZKdF ZL edG      dH        ZM edI      dJ        ZNdK ZO edL      dM        ZPdN ZQ xZRS )RCmfPluginZephyrScale)clientget_all_projectsNc                 @    t        |   |i | g | _        d| _        y )Nr   )super__init__selected_projectsr   )selfr    r!   	__class__s      r'   r9   zCmfPluginZephyrScale.__init__A   s$    $)&)!#r+   c           
         | j                   s| j                  g d       t        t        | j                  j
                        t        | j                  j                        | j                  j                  j                         | j                  j                  j                         | j                  j                  j                  | j                  j                  j                  t        j                               | _         | j                   S )u;    Клиент для работы с Zephyr Scale REST API )pluginzplugin.ext_urlzplugin.ext_loginzplugin.ext_passwordzplugin.ext_tokenzplugin.cloudzplugin.verify_ssl)urlusernamepasswordtokencloud
verify_sslsession)_CmfPluginZephyrScale__clientload_fieldsr
   strr>   ext_url	ext_loginext_passworddecrypt	ext_tokenrC   valuerD   cmfutilrequests_sessionr;   s    r'   r5   zCmfPluginZephyrScale.clientG   s     }}   (++,T[[2231199;kk++335kk''--;;1177002DM }}r+   c                     d}t        j                  ||      }|rBt        |j                  d            }| j                  j
                   d|j                   d| S t        d|       )u   
        Конвертирует ключ Zephyr в код Eva

        Args:
            key (str): ключ

        Returns:
            str: код
        z^([A-Za-z]+)-([A-Za-z]+)(\d+)$   -u8   Не удалось преобразовать ключ )rematchintgroup_projecttask_code_prefixcode_prefixr   )r;   keymodelpatternrV   numbers         r'   convert_codez!CmfPluginZephyrScale.convert_code_   sl     4#&Q(Fmm445Qu7H7H6I6(SSRSVRWXYYr+   c                  
    g } | S Nr)   )r#   s    r'   calc_models_settingsz)CmfPluginZephyrScale.calc_models_settingsr   s    
r+   c                  "    dddddddddg} | S )Nr&   displayName)model_fieldattremailemailAddressdoes_not_workactiver)   )user_settingss    r'   _get_user_import_settingsz.CmfPluginZephyrScale._get_user_import_settingsw   s+     #M:#^<+X>

 r+   
field_namec                 @    |sy | j                  |g      }|r|d   S d S )N)fields_namer   )import_shop_fields)r]   rn   r#   s      r'   _get_field_namez$CmfPluginZephyrScale._get_field_name   s.    &&J<&@s1v&$&r+   c                 "    dddd}||v r||   S y)Nu   ИмяEmailu   Активный)re   ri   rk   r   r)   )r;   rg   mappings      r'   _get_setting_title_by_attrz/CmfPluginZephyrScale._get_setting_title_by_attr   s(    ##(

 7?4= r+   c           	         | j                  dg       | j                  j                  | _        g }	 | j                  5 }|j	                         D ]y  }|d   |d<   |d   }|d|d    dz  }d| j                   d|d    d}t
        j                  j                  d	d
d| dgdddg      }|r|dz  }||d<   |j                  |       { 	 d d d        |S # 1 sw Y   |S xY w# t        $ r}	t        j                  |	        d }	~	ww xY w)Nzplugin.source_hashr&   original_name (r\   )::idext_idLIKE%T--rZ   )filterinclude_deletedfieldsu    [импортирован])rG   r>   source_hashr5   get_projectsmodels
CmfProjectsgetappendr   gdebug)
r;   r    r!   projectsr5   project_dataproject_nameproject_ext_idprojectr$   s
             r'   r6   z%CmfPluginZephyrScale.get_all_projects   sC   ./0;;22	 2$*$7$7$9 2L4@4HL1#/#7L be)<(=Q$??L')$*:*:);2l4>P=QQS%TN$//44 (&An5EQ2GH(, $&89 5 G
 $(EE+7L(OOL1!22, -2, 	  	GGCL	s5   C" BCC" CC" C" "	D+DDc                 "    g | _          j                   j                  dg        fd}d } j                   j                         j                  d      }|j	                         r j                  d      D ]  } n |sE j                  j                   j                  j                  d      D cg c]  }| }}|r|d   }|st        d       || j                  t        j                         j                  d	g d
       S c c}w )Nzplugin.plugin.*c                 
    |       }|D ]X  }j                  | |d         |d<   j                  ||d         |d<   j                  |d         |d<   |j                  |d<   Z j	                  |j
                  |d       y )Nrg   file_valrf   titleicon)r&   r   )
_get_valuerr   rv   r   r   verbose_name)r   settings_funcr]   obj_settingssettingresultr;   s        r'   _get_settingszACmfPluginZephyrScale.tmplt_import_settings.<locals>._get_settings   s    (?L' -&*ooc76?&K
#)-)=)=eW]E[)\&#'#B#B76?#S "'**	-
 MM5#5#5NOr+   r   usersr   )r@   	limit_endr   ua   Не найдено ни одного пользователя, импорт невозможенselectedObjects)r&   rN   )r   rG   get_download_pathjoinpathexists_simple_getr5   	get_usersr@   r   rm   r   	CmfPersonr   )r;   r   r   userprojects_dirr   r   r   s   `      @r'   tmplt_import_settingsz*CmfPluginZephyrScale.tmplt_import_settings   s	   $##%6$78	P 88:CCJO ((1  $(KK$9$94;;CWCWcd$9$efSSfEfQx  A  A 	dD::F<L<LM 	02>? gs   5	Dc                    | j                   j                  j                  j                  d      }t	        |      | _        | j
                  r&t        j                  j                  |      | _        yt        j                  | _        y)u   
        Устанавливает резервного пользователя,
        если пользователь не будет найден в методе _get_person()
        default_user_id)r|   N)r   json_settingsrN   getbool_is_default_userr   r   _fallback_personr   system_user)r;   r   s     r'   _set_fallback_personz)CmfPluginZephyrScale._set_fallback_person   sc    
 //77==AABST $_ 5  $*$4$4$8$8O$8$LD!$%MMD!r+   c                     | j                   d   d   d   }|d   st        d      |d   D cg c]  }|d   r
|d   r|d    c}| _        y c c}w )Nr   rN   r   	isCheckedu8   Не выбраны проекты для импортаchildrenr   )settingsr   r:   )r;   root_selectedss      r'   _set_selected_projectsz+CmfPluginZephyrScale._set_selected_projects   sg    &78A!D[)VWW ,J7"
xAkN eH"
 "
s   Ac                    t         j                  j                  }| j                  d      D ][  }|j	                  | j
                        }|j                  | j                  j                   d| t        j                  |             ] y )Nr   :user:)APPREDIS_DBredisr   r   user_keysetr   r|   pickledumps)r;   redis_db	user_datar\   s       r'   _cache_all_usersz%CmfPluginZephyrScale._cache_all_users   sl    <<%%))'2 	VI--.CLLDOO../vcU;V\\)=TU	Vr+   c                 .    |sy| j                  |      }|S )u`   
        Метод получает значение параметра объекта
        N)r   )obj_datarg   rN   s      r'   r   zCmfPluginZephyrScale._get_value   s    
 T"r+   c                     |dk(  r| S |S )Nrj   r)   )r;   rn   rN   s      r'   _normalize_valuez%CmfPluginZephyrScale._normalize_value   s    (9r+   c                     i }|D ]@  }|d   s	| j                  ||d         }| j                  |d   d   |      }|||d   d   <   B |S )uC    Преобразование настроек для модели rf   rg   rn   )r   r   )r;   r   r   normalized_objr   rN   s         r'   _normalize_objz#CmfPluginZephyrScale._normalize_obj  sw     	IG=)OOC9E))&|4E DIN7=1,?@	I r+   u   Дампc                 F   |xs g }|xs | j                   j                         }|j                  | d      }|j                         rt        j                  |       |j                  | d      }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                  j                  d	       y # 1 sw Y   FxY w)
N.jsonz.json.dirtya+r   F)ensure_ascii
T	only_data)r   r   r   r   r0   removeopenjson_object_countwritejsonr   shutilmoverN   save)	r;   	file_nameapi_funcapi_argspath	file_pathfile_tmp_pathfrows	            r'   r   z!CmfPluginZephyrScale._simple_dump  s    >r:t88:MMYKu"56	IIi ;&?@-& 	D!* D11Q61

3U
;dBCD	D 	M9-""T"2	D 	Ds   >ADD c              #     K   |xs | j                   j                         }|j                  | d      }|j                         r5t	        |d      5 }|D ]  }t
        j                  |        	 d d d        y y # 1 sw Y   y xY ww)Nr   r+)r   r   r   r   r   r   loads)r;   r&   r   r   r   r   s         r'   r   z CmfPluginZephyrScale._simple_get%  s     :t88:MMTF%.1	i& *! *C**S/)** * s   ABA;1
B;B Bc           	      j   t        |d         }|d   }|d   }	 | j                  j                  |      }| j                   d| }t        j
                  j                  || j                  ddg      }|s2t        j                  |d| || j                  | j                  |	      }||_        |j                  s|j                         sd
|_        |j                          t                y# t        $ r<}t                | j                  j!                  d| d| d| ddd       Y d}~yd}~ww xY w)u   
        Создает задачу на скачивание вложения

        Args:
            attachment_data (dict): сырые данные вложения
        r|   r&   fileNamer{   r   
downloaded)
obj_ext_idr   r   z/rest/tests/1.0/attachment/)r&   hrefr   r   r   import_raw_jsonFu\   Не удалось создать задачу на скачивание вложения '' (). ERR-0007CmfImportDownloaddump
error_codeobj_type
error_typeN)rH   _attachments_dirr   r   r   r   r   r   r   
is_changedr   r   r   r   r   r   r   )	r;   attachment_dataatt_idatt_nameatt_file_nameattachment_fileattachment_ext_iddownload_jobr$   s	            r'   _pre_dump_attachmentz)CmfPluginZephyrScale._pre_dump_attachment.  sl    _T*+"6*'
3	"33<<]KO#'#3#3"4B}o F!3377, ,,- 8 L
  %77!6vh?0 $ 0 0#$3  8   !0L&&o.D.D.F*/'!!#L 	NOO%%nownxx{  }C  |D  DG  HK  GL  M%,!	 &  	s   CC- -	D262D--D2c                 T    |j                  dg       D ]  }| j                  |        y)u   
        Создает задачи на скачивание вложений сущности теста

        Args:
            test_entity_data (dict): сырые данные сущности теста
        attachmentsN)r   r   )r;   test_entity_datar   s      r'   _pre_dump_attachmentsz*CmfPluginZephyrScale._pre_dump_attachmentsX  s.      033M2F 	7O%%o6	7r+   c                 $   |syd}| d}t        |d      }|j                  d      D ]f  }|j                  d      s|d   }||vrt        j                  ||      }|s8|j                  d      }|d| d| d	d
}	| j                  |	       h y)ud  
        Создает задачи на скачивание изображений, встроенных в текст HTML.
        Встроенные изображения не учитываются в параметре 'attachments' в данных сущности теста

        Args:
            html_text (str): текст HTML
        N!/rest/tests/1.0/attachment/image/(\d+)lxmlimgsrcr   	embedded_T)r|   r   r&   embedded)r   find_allhas_attrrU   searchrX   r   )
r;   	html_textsrc_pathr^   soupr  	src_valuerV   img_idr   s
             r'   _pre_dump_embedded_imagesz.CmfPluginZephyrScale._pre_dump_embedded_imagesb  s     6Zu%Y/==' 	7C<<&E
Iy(IIgy1E[[^F'x0#F8, 	O %%o6'	7r+   c           	         |j                  d      }|j                         rt        j                  |       | j                  j                  ||      }t        |d      5 }|D ]g  }|j                  t        j                  |dd      dz          | j                  |j                  d             | j                  j                  d       i 	 d d d        y # 1 sw Y   y xY w)	Ncomments.jsonr   FT)r   	sort_keysr   bodycomment)r   r   r0   r   r5   get_comments_forr   r   r   r   r  r   r   inc_stat)r;   entity_nametest_entity_idtest_entity_dircomments_filecommentsr   r  s           r'   _dump_test_entity_commentsz/CmfPluginZephyrScale._dump_test_entity_comments  s    '00A!IIm$;;//^L-& 	4!# 4

7$
ORVVW..w{{6/BC((34	4 	4 	4s   A-CCc                    t        d      5  | j                  d   }| j                  d   }| j                  d   }	 |j                         }	|	|j                  |	       n|	\  }
}	  |||
|      }|d   D ]  }|d   }|d   }|d   }|j                  d	      }| j                  j
                  j                  | d
| d| d       |j                  |      }|j                  d       |dk(  r]| j                  j                  |      }|j                  d      }t        |dd      5 }t        j                  ||ddd       d d d        |r|j                  t        |            }|j                  dd       t        |      |d<   |j                  d      }t        |dd      5 }t        j                  ||ddd       d d d        | j                  |       ddgdgdgd}|j                  |g       D ]"  }| j!                  |j                  |             $ |dk(  r\|d   j                  d      xs g }|D ]>  }| j                  |       g d}|D ]"  }| j!                  |j                  |             $ @ n|dk(  r|j                  d       xs g }|D ]  }d }|j                  d!      xs g }|D ]  } | j                  d"      s| } n |r|d#   }|s@| j                  |       | j!                  |j                  d$             |d%   }!|!D ]>  }"| j                  |"       g d&}|D ]"  }| j!                  |"j                  |             $ @  | j#                  |||        	 4	 d d d        y # 1 sw Y   6xY w# 1 sw Y   xY w# t$        $ r>}#| j                  j'                  d'| d(| d| d)| d*|
 d+| d,|# d-d.d/0       Y d }#~#hd }#~#ww xY w# 1 sw Y   y xY w)1NFinit_views_and_dsr|   r\   r&   T)offsetlimitresultsmajorVersion 'r   rz   exist_oktestcaseversions.jsonwutf-8)encoding   )indentr   r  )parentsr*  dir	info.json	objectivepreconditiondescriptionr+  testruntestplan
testScriptsteps)r7  testDataexpectedResultr9  testRunItemstestResultslastTestResultr  testScriptResults)r7  r=  r>  r  u&   Не удалось получить 'u   ' проекта ') [z	] offset=z limit=r   zERR-0002CmfTestcaser   r   )r   _project_datar   putr   loggerinfor   mkdirr5   get_testcase_versionsr   r   r   rH   r  r  r   r   r   )$r;   entity_titler  get_test_entities_funcpagination_queue
entity_dir
project_idproject_keyr   
paginationr$  r%  test_entitiesr  r  test_entity_keytest_entity_nametest_entity_versionr  versions_dataversions_filer   test_entity_filetest_entity_text_fields
text_fieldr<  	step_datatext_fieldstestrun_itemstestrun_itemtest_result_datatest_resultstest_resultstep_resultsstep_result_datar$   s$                                       r'   _dump_test_entities_workerz/CmfPluginZephyrScale._dump_test_entities_worker  s    51 t	++D1J,,U3K--f5L-113
%$((4 *g$::f\a$bM,9),D \()9$)?*:5*A+;F+C(.>.B.B>.R+..33+nB/?.@OCTTUV +5*=*=o*N'--t-<&*4,0KK,M,Mo,^M,;,D,D_,UM!%mS7!K "q $		$11+,16.2	 !* !"" /.=.F.FsK^G_.`O'--dT-J25o2F(/+:+C+CK+P(!"2C'J a II 0!'(-2*.	 &  223CD *5n(E(5)43/
 +B*E*EkSU*V ]J ::;K;O;OPZ;[\] '*4$4\$B$F$Fw$O$USUE-2 ^	 $ : :9 E/"
 3> !^J$($B$B9==Q[C\$]!^^ )I5,<,@,@,P,VTVM0= i37 0/;/?/?/N/TRT3? !LK'27G'H;F(8(-!L
 (4;G;K(8'7$, $ : :;K L $ > >?O?S?ST]?^ _/?@S/T8D 	!i$4$($>$>?O$P3&K 7B %i
(,(F(FGWG[G[\fGg(h%i	!ii4 77'*+q\  t	 t	>" " | ! OO--@ O(>[MZL I""(r#@ $.!.#) .  Yt	 t	sp   AO'CN+M:A$N*NDNB N-O:N?NNN	O4OOOOO'c                    t        | j                  d         j                  |      }|j                  d        || j                  d         }d}t	               }t        ||z   dz
  |z        D ]  }	|j                  |	|z  |f        |j                  d        g }
t        | j                        D ]y  }t        j                  | j                  d|dz    |||||d	      }|
j                  |       |j                          | j                  j                  j                  d
|        { |
D ]  }|j!                           y )Nr3  Tr)  r|   2   r   _dump_test_entities_worker_)rL  r  rM  rN  rO  targetr&   r!   u$   Запущен обработчик )r   rF  r   rJ  r   rangerG  download_threading_max_forks	threadingThreadre  r   startr   rH  rI  join)r;   rL  r  get_total_entities_funcrM  rO  totalr%  rN  pagethreadsithreads                r'   _dump_test_entitiesz(CmfPluginZephyrScale._dump_test_entities  sK    $,,U34==kJ
$''(:(:4(@A 755=1,67 	8D  $,!67	8T"t889 	YA%%6621q5':$0#..D(8",
F NN6"LLNOO""''*Nvh(WX	Y   	FKKM	r+   c           
      D   | j                   j                         j                  d      }|j                  d       t	        | j
                        }t        d|z        }| j
                  D ]  }|d   }|d   }|j                  d      xs |j                  d      }	 | j                   j                         r y | j                   xj                  d	z  c_	        | j                   j                  j                  d
| d| d| d       |j                  |      }|j                  | d      }	|j                         rt        j                  ||	       n|	j                  d       | j                  j!                  |      }
t#        |	      |
d<   | j%                  d| j                  j&                  |g|	       | j%                  d| j                  j(                  |g|	       | j%                  d| j                  j*                  |g|	       | j%                  d| j                  j,                  |g|	       | j%                  d| j                  j.                  |g|	       | j%                  d| j                  j0                  |g|	       | j%                  d| j                  j2                  |g|	       | j%                  d| j                  j4                  |g|	       | j%                  d| j                  j6                  |g|	       | j%                  d| j                  j8                  |g|	       | j%                  d| j                  j:                  |g|	       dD ]a  }| j                  j=                  ||      }|	j                  d| d      }t?        |d      5 }t@        jC                  ||d d!"       d d d        c tE               5  | j                   xjF                  |z  c_#        | j                   jH                  jK                  d#       tM                d d d        t        j                  |	|       t#        |      |
d<   |j                  d$      }t?        |d      5 }t@        jC                  |
|d d!"       d d d        |
| _'        tQ        | jN                  d         j                  d%      | _)        | jR                  j                  d       | jU                  d&d'| j                  jV                  | j                  jX                         | jU                  d(d)| j                  jZ                  | j                  j\                         | jU                  d*d+| j                  j^                  | j                  j`                         " | j                   ji                  d2       y # 1 sw Y   UxY w# 1 sw Y   xY w# 1 sw Y   FxY w# tb        $ rE}| xjd                  d	z  c_2        | j                   jg                  d,| d-| d.d/d01       Y d }~d }~ww xY w)3Nr   Tr)  P   r|   r\   rx   r&   r   u   Дамп проекта 'r   rD  ].dirtyr3  permissions)r   r   r   roleslabelsenvironments
iterationsdatasetstestcase_prioritiestestcase_statusestestplan_statusestestrun_statusestestresult_statusesr8  foldertree_r   zw+r0  F)r1  r   r   r4  r   u   Тест кейсr+  u!   План тестированияr:  u   Тестовый прогонr9  u2   Не удалось получить проект r   zERR-0003r   r   )r   r   u*   Дамп проектов завершен)5r   r   r   rJ  lenr:   rW   r   r   r   rH  rI  r   r   r   r5   get_projectrH   r   get_permissions	get_roles
get_labelsget_environmentsget_iterationsget_datasetsget_testcase_prioritiesget_testcase_statusesget_testplan_statusesget_testrun_statusesget_testresult_statusesget_foldertree_forr   r   r   r2   progressrN   r   r   rF  r   r   rw  get_total_testcasesget_testcasesget_total_testplansget_testplansget_total_testrunsget_testrunsr   r   r   r   )r;   r   cntstepr   rP  rQ  r   project_dirproject_tmp_dirr   entityfoldertree_datafoldertree_filer   project_data_filer$   s                    r'   _dump_projectsz#CmfPluginZephyrScale._dump_projects7  s   88:CCJOD)$(()28}-- d	G J!%.K";;7N7;;v;NL_??,,.11Q61&&++/~SSQ[P\\]^ +33J?"."7"7:,f8M"N%%'KK_=#))4)8#{{66zB&)/&:U# !!!![[88(\(	 "  !!![[22(\(	 "  !!![[33(\(	 "  !!"![[99(\(	 "  !! ![[77(\(	 "  !!![[55(\(	 "  !!)![[@@(\(	 "  !!'![[>>(\(	 "  !!'![[>>(\(	 "  !!&![[==(\(	 "  !!)![[@@(\(	 "  B TF&*kk&D&DZQW&XO&5&>&>VHTY?Z&[Oot4 T		/1QU	ST TT "^ !OO,,4,OO))...>L!
 O[9&)+&6U#$/$8$8$E!+T2 MaIIlAaeILM &2" )-T-?-?-F(G(P(PQ^(_%%%++T+:(('KK33KK--	 ((7KK33KK--	 ((3KK22KK,,	od	L 	HIgT T! !M M<  1$))H	QSTWSXY)%	 *  sj   W:K%WV*9WAV7A	W&W DW*V4/W7W	<WW		W	X:XXc                 Z   t         j                  d      }| j                  j                  j                  |_        |j                  | j                  j                  j                         | j                  j                         }t        j                  |      \  }}}||z  dz  }| j                  j                  j                  d| d       | j                  j                  j                  d       | j                  d| j                  j                         t               5  d| j                  _        | j                  j                   j#                          t%                d d d        | j                  j                  j                  d       | j'                          y # 1 sw Y   ?xY w)	Nzatlassian.rest_clientd   u   Свободно места: r   u5   Скачивание данных через API ... r      u,   Дамп выбранных проектов)logging	getLoggerr   rH  handlerssetLevellevelr   r   
disk_usagerI  r   r5   r   r2   r  rN   r   r   r  )r;   rH  download_pathrr  usedfreefree_percents          r'   download_dataz"CmfPluginZephyrScale.download_data  s=   ""#:;//0099..44599;"--m<tTe|c)##&CL>QR$ST##$[\ 	'4;;#8#89^ 	')DOO$OO!!&&(L	
 	##$RS	 	s   #A F!!F*c           
      l   	 t         j                  j                  |g d      }t        |j                        }| j
                  j                  | j
                  j                  t        |j                              }t        |j                        }t        |j                        j                  d      }t        |      dkD  r	d|d    dnd}d}|j                  j                  }	|	r2|	j                  d      }
|
rt        |
t               r|
d	z  }d
|dd|
 d}| j"                  j$                  j'                  | d| d| d| d       t)        j*                         }| j
                  j-                  ||ddddt.        j0                        }t)        j*                         |z
  }|d   }
|
d	z  }|d
|dd|
 dz  }|	r=|	j                  d      s|
|	d<   |	j                  d      r|d   r
|d   }||	d<   |	|_        d|_        |j5                          t7                | j"                  j9                  d       | j"                  j$                  j'                  | d| d| d| d       |
|fS # t:        $ r;}t=                | j"                  j?                   d d d| d d!d"|#        d$}~ww xY w)%u  
        Скачивает файл вложения

        Args:
            download_job_id (str): ID задачи на скачивание вложения

        Returns:
            tuple: размер файла в байтах, время скачивания
        )r&   r   r   r   r   )r|   r   r{   r   z[ID: z] r   fileSize   ry   .3fu    MБ / u
    байт)u   Скачивание ''z: 'zapplication/octet-streamr.  z
keep-alive)AcceptzAccept-Charset
Connection)headerstimeout	file_sizer
  r   r&   T
attachmentu
   Файл 'u    сохранен в 'u"   Ошибка скачивания z'. r   r   r   )r   r   r   ext_hrefN) r   r   r   rH   r&   r5   
url_joinerr?   r   r   r   splitr  r   rN   
isinstancerW   r   rH  rI  timeperf_counterdownload_fileconfigIMPORT_DOWNLOAD_TIMEOUTr   r   r   r  r   r   r   )r;   download_job_iddownload_objr   att_urlr   ext_id_splitfile_id_msgfile_size_msg	file_datafile_size_bytesfile_size_mbro  r   download_timer$   s                   r'   _download_filez#CmfPluginZephyrScale._download_file  s   J	!3377" 8 	L <,,-Hkk,,T[[__c,BSBS>TUGL--.I|667==dCL9<\9JQ9NE,q/!2"5TVKM$44::I"+--
";"z/3'G#2W#<L&(c(:'/ARR\$]MOO""''-5hZqsSZR[[\] %%'E[[..8&-".
 66 / 	F !--/%7M$[1O*W4Lr,s!37?:K:VVM }}Z0,;Ij)==,1D%k2H(0If%/8,&*L#LOO$$\2OO""''-z(1]OCYZcYddef #M11 		NOO%%-A(3wiWZ[^Z_`%,!  &  		s   I,I/ /	J386J..J3c                    t        j                         j                  }t        j                         j                  }d}d}d}d}d}	t	        d      5  	 | j
                  j                         rn@|j                         }
|
dk(  rn*	 | j                  |
      \  }}||z  }|	|z  }	|dz  }|dz  }[|dz  }|	dk7  r||	z  nd}|||||	f}|j                  |       | j
                  j                  j                  d| d| d	| d
| d| d|dd|dd| d       d d d        y # t        $ r |dz  }Y w xY w# |dz  }w xY w# 1 sw Y   y xY w)Nr   Fr"  DONEr   r  u   Поток 'z' (ID: uU   ) завершен. Скачано файлов (успешно/неуспешно): /    из 8   . Средняя скорость скачивания: .2f)    МБ/с. Скачанный объем: r      МБ / 	    байт)rm  current_threadr&   identr   r   r   r   r  r   rG  rH  rI  )r;   download_queueresult_queuethread_name	thread_iderror_countdownloaded_counttotal_countdownloaded_bytestotal_download_timer  r  r  downloaded_mb
speed_mb_sstatss                   r'   _download_file_workerz*CmfPluginZephyrScale._download_file_workerS  s   ..055,,.44	51 &	??,,."0"4"4"6"f,	%595H5H5Y2O]$7$'=8'$)$  1$K# & -w6M@SWX@X)<<^_J   #E U#OO""''{m79+ >T#$Ak]& FIISTWHX Y22?1DHM]L^^g	iA&	 &	 ! %1$K%  1$K%&	 &	s=   3E #D"*A/E "D30D62D33D66D==E  E	c                 z   dd| j                   gg dg}| j                  j                         j                  d      }d}g }| j                  D ]  }t        |d         }|j                  |      }t        |      j                  d      st        |      dz   }dd	| d
gg}||z   }	t        j                  j                  |	      }
|
s{||
z  }|j                  |	        |s&| j                  j                  j                  d       y| j                  j                  j                  d|        t               }t               }d}d}d}d}d}g }t        | j                        D ]v  }t!        j"                  | j$                  d|dz    ||d      }|j                  |       |j'                          | j                  j                  j                  d|        x |D ]E  }t        j                  j)                  |ddg      D ]  }|j+                  |j,                          G t/                |D ]  }|j+                  d        |D ]  }|j1                           | j                  j3                         r%| j                  j                  j5                  d       |j7                         s@|j9                         \  }}}}}||z  }||z  }||z  }||z  }||z  }|j7                         s@|dz  }|dk7  r||z  nd}| j                  j                  j                  d| d| d| d|dd|dd| d       |S ) Nr   =)r   r  Fr   r   r|   r  r   r~   r   r   u3   Нет вложений для скачиванияu'   Скачивание вложений: _download_file_worker_r   )r  r  ri  u   Запущен поток r   r   r   r  u   Импорт прерванr  u{   Скачивание вложений завершено. Скачано файлов (успешно/неуспешно): r  r  r  r  r  r  r  )r   r   r   r   r:   rH   endswithr   r   countr   rH  rI  r   rk  rl  rm  rn  r  ro  slistrG  r|   r   rp  r   warningemptyr   )r;   main_filterprojects_pathattachment_countfiltersr   rP  project_pathpath_filterdownload_filterdownload_countr  r  
main_counttotal_downloadedtotal_errorstotal_downloaded_bytesr  rt  ru  rv  filter_r   r  r  r  r  r  total_downloaded_mbr  s                                 r'   download_filesz#CmfPluginZephyrScale.download_files  s   C!1!12&
 99;DDZP 22 
	0L\$/0J(11*=L|$--c2"<036"F|nA,>?@K)K7O#55;;?;SN N2 /
	0  OO""''(]^OO""''*QRbQc(dew
!"t889 	OA%%11-a!eW5&4$0F NN6"LLNOO""''*DVH(MN	O  	4G & 8 8 > >gW[]aVb > c 4""<??34	4 	 	'Fv&	'  	FKKM	 ??$$&OO""**+HI$$&   "  +%J 00K'L"&66"=0 $$& 5w>BUYZBZ(+>>`a
##P ,vj\ BEEOPSDT U..A#-FhOeNffo	q	
 r+   c                    t         j                  j                  }|j                  | j                  j
                   d|       }|t        j                  |      S | j                  d      D ]  }|j                  | j                        |k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  s|c S  t        d|       )	Nr   r   r&   r   r@   ri   re   uH   В дампе не найдены данные пользователя )r   r   r   r   r   r|   r   r   r   r   lowerr   )r;   user_idr   	user_infos       r'   _get_user_data_from_dumpz-CmfPluginZephyrScale._get_user_data_from_dump  s6   <<%%LLDOO$6$6#7vgY!GH	 <<	**))'2 
	!I}}T]]+w6  }}VR(..0GMMOC  }}Z,224G  }}^R0668GMMOK  }}]B/5577==?J  
	! bcjbklmmr+   c           
         | j                  || j                  t        j                  j                     d         }| j
                  j                  s|d   }t        j                  d|d         }|D cg c]#  }|j                         s|j                         % }}t        |      dkD  r|D cg c]  }||j                  d      d   v s| }}|D cg c]  }|j                  d      d   |v s| }}|r	|d   |d<   n|r	|d   |d<   n|d   |d<   |j                  |d          |d   |d<   d	| j                   d	|| j                      d	}|d   j                  d
d      }	d}
|	D ]  }t        |      |
kD  st        |      }
 t        t        j                  j                  j                   t        j                  j"                  j                   t        j                  j$                  j                         }|
|k  rlt        |	      dk(  r|	d   |d<   d|d<   d|d<   nt        |	      dk(  r|	d   |d<   |	d   |d<   d|d<   ndt        |	      dk\  rV|	d   |d<   |	d   |d<   |	d   |d<   n=| xj&                  dz  c_        | j(                  j+                  d|d    d| ddd       ddg}t        j                  j-                  ddd| dg|      }|re|j.                  j0                  j3                  d	| j                   d	      dkD  r/| j(                  j+                  d| d|j.                   dd d!       |s9d"dd#d$| j                   d%gg d&g}t        j                  j-                  d'd(|d   g|g|      }|st        j                  j5                  dd(|d   g|g|      }t        |      dkD  rG| j(                  j+                  d)|d    d*t        |       d+d       | xj&                  dz  c_        g }|s| j(                  j6                  j9                  d,|d           dd(|d   g|g}t        j                  j5                  ||      }|sd"g}t;        |	t        |	            D ]|  }t        |	      dk(  r	dd(|d   g}t        |	      dk(  r |j=                  dd(|d   gdd(|d   gg       Ht        |	      dk(  sW|j=                  dd(|d   gdd(|d   gdd(|d   gg       ~ ||g}t        j                  j5                  ||      }t        |      dkD  rK| xj&                  dz  c_        | j(                  j+                  d-|d    d.|d    d/t        |       d0d       |r|d   }|S c c}w c c}w c c}w )1Nr   r&   z[,;\s]+rh   r   @r   email_2r{   r   r0  	last_namer   
first_namesecond_namerS   u?   Часть полного имени пользователя 'u   ' длиннее u_    символов. Фамилия, Имя и Отчество не были заполнены.zERR-0004r   r   r	   rg_member_ofr}   r~   r   r  uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0005r   r   ORzNOT LIKEz%::z::%)r}   z==NloginILIKEu+   Пользователей с почтой z > ERR-0006uH   Не удалось найти пользователя с почтой u+   Пользователей с именем ry   z) > r   )r   r   r   r   r   r5   rC   rU   r  stripr  r   r   r   minr  
max_lengthr  r  r   r   r   r   r}   rN   r  listrH  r  r   r   )r;   r   normalized_data
user_loginemailsrh   emails_by_loginemails_by_namer}   	full_namecurrent_length_namer&   max_length_namer   personnot_source_hash_filterpersons_filter
name_combos                      r'   _process_personz$CmfPluginZephyrScale._process_person  s|   --MM&**778B

 {{   #6*JXXj/'*BCF17I5;;=ekkmIFI6{Q6<"bU
ekkZ]N^_`Na@a5"b"b5;!aEu{{3?OPQ?RV`?`%!a!a"/>q/AOG,#/=a/@OG,/5ayOG,og67-3AY	*d&&'r)DMM*B)C2F#F+11#q9	   	0D4y..&)$i#	0 ''22&&11((33

 /19~"/8|,02-13.Y1$/8|,09!-13.Y1$/8|,09!-1:1.
 OOq OOO%%QRabhRiQj k""1!2 3_` $ &  ~&!!%%f&m4 & 
 fmm))//"T5E5E4Fb0IJQNOO%%bcibj kvv|  wD  wD  vE EBC &$ &   :T-=-=,>c'BC&&"
 %%))gw'?@*  * F  **// '?7+CD. " 0  w<!#OO--EoV]F^E__bcfgncobpq"!, . 
 OOq(O GOO**22bcrszc{b|}  /&*AB.G %..33763RG"#'&*6y#i.*Q #J"9~2+6A*O!$Y1!4 '%17JqM$J%0':a=$I0" !# "%Y1!4 '%0':a=$I%17JqM$J%2GZ]$K0" !## $2# #)"2"2"7"7wv"7"Vw<!#OOq(OOO--EoV\F]E^ _+G45T#g,I"!,	 .  $QZFa J"b!as$   3U;	U;/V V V1Vc                 `   |r|dk(  ry	 | j                  |      }| j                  |      }|st        d|       	 |S # t        $ re}|r | j                  }| j                  rd| nd}| j
                  j                  | d| dd	       | xj                  d
z  c_        Y d}~|S d}~ww xY w)u  
        Возвращает пользователя по какому-либо идентификатору (id, имя, логин, email и др.).

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

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

        Returns:
            CmfPerson: Объект пользователя.
        unknownNue   Пользователь с указанными данными не найден в системе: u   по умолчанию u   'Система'u;   . Будет установлен пользователь zERR-0008r   r  r   )r  r'  r   r   r   r   r   r   )r;   r  raise_on_errorr   r"  r$   
person_msgs          r'   _get_personz CmfPluginZephyrScale._get_person  s    " 'Y.	%55g>I)))4F{  }F  |G  H  "   	%..DHDYDY7x@_q
))eVWaVbc( * 
 1$	%s   2? 	B-AB((B-c              #     K   | j                   j                         j                  dt        |      d      }|j	                         s,| j                   j
                  j                  d| d|        y d}|j                         D ]  }|j                         s|j                  }|j                  d      r2t        |j                  d      d      5 }t        j                  |      }d d d        d	}D ]  }	|	d
   s	t        |	d         } n |j                  |d      }
|
j	                         st        |
d      5 }t        j                  |       d d d        |d	z  } y # 1 sw Y   ~xY w# 1 sw Y   xY ww)Nr   r+     Каталог     отсутствует. Возможно он был удален или еще не создан. Необходимо повторно запустить импорт проекта r   r{  z.metar,  rr   latestVersionr'  r4  r   r   r   r   rH   r   rH  r  iterdiris_dirr&   r  r   r   load)r;   rP  testcases_dirr  testcase_dirtestcase_keyr   versionsmajor_versionversiontestcase_files              r'   _get_project_testcasesz+CmfPluginZephyrScale._get_project_testcases  s    99;DDJ
 ##%OO""**!- 1hhrgsu )113 	L&&(',,L$$%89l++O<cB (a99Q<( M# ?+$'(?$@M
 )11-MM '')mT* #aiil"# QJE/	( (# #s=   CE=E%(E==A E==E1E=%E.	*E=1E:	6E=c              #   6  K   | j                   j                         j                  dt        |      d      }|j	                         s,| j                   j
                  j                  d| d|        y d}|j                         D ]  }|j                         s|j                  }|j                  d      r2|j                  d      }|j	                         sTt        |d      5 }t        j                  |       d d d        |d	z  } y # 1 sw Y   xY ww)
Nr   r:  r.  r/  r   r0  r4  r1  r   r3  )r;   rP  testplans_dirr  testplan_dirtestplan_keytestplan_filer   s           r'   _get_project_testplansz+CmfPluginZephyrScale._get_project_testplans  s    99;DDJ
 ##%OO""**!- 1hhrgsu )113 	L&&(',,L$$%89(11+>M '')mS) #Qiil"# QJE	# #   C#D%D=DD	Dc              #   6  K   | j                   j                         j                  dt        |      d      }|j	                         s,| j                   j
                  j                  d| d|        y d}|j                         D ]  }|j                         s|j                  }|j                  d      r2|j                  d      }|j	                         sTt        |d      5 }t        j                  |       d d d        |d	z  } y # 1 sw Y   xY ww)
Nr   r9  r.  r/  r   r0  r4  r1  r   r3  )r;   rP  testruns_dirr  testrun_dirtestrun_keytestrun_filer   s           r'   _get_project_testrunsz*CmfPluginZephyrScale._get_project_testruns  s    88:CCJ
 ""$OO""**!, 0hhrgsu '//1 	K%%'%**K##$78&//<L&&(lC( #Aiil"# QJE	# #rE  c              #   p  K   | j                   j                         j                  d      }|j                         rm|j	                         D ]Y  }|j
                  j                  d      rt        |j                  d      d      5 }t        j                  |       d d d        [ y y # 1 sw Y   gxY ww)Nr   r0  r4  r   )
r   r   r   r   r4  r&   r  r   r   r6  )r;   r   r  r   s       r'   _get_projectsz"CmfPluginZephyrScale._get_projects  s     88:CCJO +335 '##,,-@A+..{;TB 'a))A,&' '	' !
' 's   BB6B*B6*B3	/B6c                     |sy | j                    d| }t        j                  j                  |ddg      }|s!| j                  j                  d| d|       |S )Nz
::version:r|   r   r}   r   u!   Не найдена версия zERR-0009r   )r   r   CmfListr   r   r   )r;   r   
version_idr}   r<  s        r'   _get_versionz!CmfPluginZephyrScale._get_version#  sm    $$%Z
|<..$$FD$<$HOO%%3J<@ &  r+   c                    g g d}|D ]  }|j                  d      }|s| j                   d| }t        j                  j                  |ddg      }|s#| j                  j                  d| dd	|
       p|d   d   }|dk(  r|d   j                  |       |d   j                  |        |j                         D 	
ci c]  \  }	}
|
s	|	|
 c}
}	S c c}
}	w )N)defectscoverageissueIdr{   r   r|   rO  u!   Не найдена задача uC   . Возможно она не импортирована из JirazERR-0018rP  type	systemKeyBLOCKSrU  rV  )r   r   r   CmfTaskr   r   r   items)r;   r   trace_links
task_links
trace_linkissue_idtask_ext_idtask	link_typekvs              r'   _get_task_linksz$CmfPluginZephyrScale._get_task_links2  s   


 & 	4J!~~i0H!--.b
;K>>%%[$%ND))7z  BE  F * 
 "6*;7IH$9%,,T2:&--d3'	4* ",!1!1!39Aq1999s   
CCc                    t         j                  j                  j                  }|D ]  }|j	                  d      }|j	                  d      }|s(|j	                  d      }| j
                   d| }t         j                  j	                  |      }	|	s#t         j                  ||| j                  d      }	|	j                  s||	_        |xs |d | |	_        ||	_	        |	j                  d        y )	Nr?   urlDescriptionr|   r{   r}   Tparentr}   r   import_originalsave_import)r   CmfLinkr&   r  r   r   r   rl  r?   r   r   )
r;   r   r]  max_link_name_lengthr_  r?   url_descriptionlink_idlink_ext_idlinks
             r'   _process_web_linksz'CmfPluginZephyrScale._process_web_linksO  s    %~~22==% 	,J..'C(nn-=>O nnT*G!--.b	:K>>%%[%9D~~&#$(	 &  ##+Is3H4H/I	'1$		d	+)	,r+   c                    d}| d}|j                  d      D ]3  }|j                  d      s|d   }||vr t        j                  ||      }|s9|j	                  d      }d| }	| j
                   d|	 }
t        j                  j                  dd	|
gg d
gg d      }|rut        |j                        j                         rQt        j                  j                  |
g d      }|s|j                  }|r|d   n|	}t        j                  ||	|d|
|j                  | j                  d      }|j!                  d       t#        t        |j                        d      5 }|j%                  |j'                         dd       d|_        |j!                  d       ddd       |j*                  d   |j*                  d<   t-        |j.                        |j*                  d<   t-        |j0                        |j*                  d<   d|j*                  d<   | j                  j3                  t4        j6                   d|	 dd|       6 y# 1 sw Y   xY w)u   
        Конвертирует путь src у встроенного изображения

        Args:
            obj (_type_): объект теста
            text_soup (BeautifulSoup): объект текста
        r  r  r  r  r   r	  r{   r   r~   )r   r  T)r   r   r   r  )r?   url_previewurl_preview_imgrO  r&   T)r&   r   rk  r
  r}   r   r   rl  rm  rbFsmart_backup
mark_dirtyNsrc_origzdata-attach-idcmf_convertedu    Не найден файл 'r  r  r   r   )r  r  rU   r  rX   r   r   r   r   r   r   r   CmfAttachmentr   r   r   r   r   upload_filereadrl  attrsrH   r?   r|   r   
thread_ctxtest_entity_msg)r;   r   	text_soupr  r^   r  r  rV   r  img_name
img_ext_iddownloaded_filer  att_datar&   r   s                   r'   _convert_embedded_img_srcz.CmfPluginZephyrScale._convert_embedded_img_srch  sd    7Zu%%%e, @	C<<&E
Iy(IIgy1E[[^F"6(+H ,,-Rz:J$66;;!6:6- 9 < O 4(<(<#=#D#D#F#1155% 6 
 ".>>H/78F+XD!'!5!5!"*"!%)(7(G(G#'??(, "6 	"J OOO5d?#7#78$? :1"..FFH)-', / 
 6:
2"D9: ),		%(8		*%#&z~~#6		% .1*--.@		*+-1		/*))!1122OPXzYZ[) * y@	\: :s   &<II	c                    |s|S 	 t        |d      }| j                  ||       |j                  r>dj                  |j                  j                  D cg c]  }t        |       c}      }|S |}|S c c}w # t        $ r[}t        |j                  dk(        }| j                  j                  t        j                   d|rdnd d| d|       Y d }~|S d }~ww xY w)	Nr  r   
CmfCommentu4    Не удалось обработать текстu    комментарияr   zERR-0026rP  )r   r  r  rp  r   rH   r   r   
class_namer   r   r  r  )r;   r   textr  cr$   
is_comments          r'   _convert_textz"CmfPluginZephyrScale._convert_text  s    K	%dF3I**3	:IR277INN,C,CDqCFDED  ^bD  E 	cnn<=JOO%%--. /?I;rRRTUXTY[	 &   	s1   AA7 A2%A7 .A7 2A7 7	C ACCc                    |sy | j                   j                  t        j                   dd       |D ]  }	 t	        |d         }|d   }|d   }| j
                  j                  |      }|j                         st        d      | j                   d| d| }t        j                  j                  |	      }	|	s#t        j                  ||| j                   d
      }	|	j                  r||	_        ||	_        |j                  d      |	_        |j                  d      r| j#                  |d         |	_        nt&        j(                  |	_        |	j$                  |	_        ||	_        |	j/                  d       t1        |d      5 }
|	j3                  |
j5                         dd       d|	_        |	j/                  d       d d d        t7                | j                   j9                  dd        y # 1 sw Y   3xY w# t        $ re}t;                | j                   j=                  t        j                   d d d| d|       t        xj>                  dz  c_        Y d }~5d }~ww xY w)Nu$    Обработка вложенийTr   r|   r&   r   uf   Не найден файл. Возможно при скачивании возникли ошибкиr{   ri  rj  	createdOnuserKeyrm  ry  Frz  r  	processedu<    Не удалось обработать вложение 'r   r   ERR-0014rP  r   ) r   r   r  r  rH   r   r   r   r   r   r   r  r   rl  r&   r   cmf_created_atr,  
cmf_authorr   anonymous_user	cmf_ownerr   r   r   r  r  r   r  r   r   errors)r;   r   attachments_datar   r   r   r   att_file
att_ext_idr  r   r$   s               r'   _process_attachmentsz)CmfPluginZephyrScale._process_attachments  sm   ))**NO 	 	

  0 0	'O/'_T23*62 /
 ;0099-H(# A  !% 0 01M?"VHM
#1155Z5H
!!'!5!5")#'??(,	 "6 "J --&.JO+8J(0?0C0CK0PJ-&**95040@0@QZA[0\
-010@0@
-+5+@+@J(1@J.OOO5h- :"..FFH)-', / 
 6:
2"D9: (({CO0	'<: :  '))!112 3 zVHCu6	 *  !!Q&!!'s1   EH <G4.H 4G=	9H  	I.	AI))I.c                      fddddt         j                  ddddt         j                  ddd	dt         j                  dd
}|j	                         D ]  \  }}|j                  d| d      }t        |d      5 }t        j                  |      }d d d        |d   }t         j                  j                   j                  |d   d   |d   d   ddg      }	d   D ]  }
 ||
|	        t        |j                  dd|	gdgd            |	_        |	j                  d       t!                 y # 1 sw Y   xY w)Nc           	         |d   }|d   }|d   }
j                   j                  d| j                   d| d| d       
j                   d| d| }| j	                  |d	d
g      }|s  | 
j
                  |
j                   d      }||_        ||_        t        |d         |_	        ||_
        |j                          |d   D ]  } 	| ||        y )Nr|   r&   	projectIdu   Папка r(  r   rz   r{   tree_parenttree_node_is_branchrO  Trj  r   )r   r   r  r   r   rY   r&   r  r   r  r   r   )folder_modelfolder_datar  	folder_idfolder_namerP  folder_ext_idfoldersubfolder_data_create_folderr;   s            r'   r  zICmfPluginZephyrScale._process_test_entity_folders.<locals>._create_folder  s   #D)I%f-K$[1JOO+l.E.E-FbUXYbXccd ef#//0:,bLM!%%$!) & F %==(#$(	 &FK!,F)-k*.E)FF&%0F"KKM"-j"9 E|^VDEr+   u   Тест-кейсыrE  )r&   rX  )registryr  u   Тест-планыCmfTestplanu   Тест-прогоныCmfTestcycle)r+  r:  r9  r  r   r1  r  r  r&   rX  Tr  )rk  r&   rX  systemr   r   r  r  r   )r   r   include_archivedrm  )r   CmfTestcaseFolderCmfTestplanFolderCmfTestcycleFolderr\  r   r   r   r6  CmfRegistryr   rY   r   r   r  r   r   )r;   r  rS  test_entityentity_datar  r   r  r  r  r  r  s   `          @r'   _process_test_entity_foldersz1CmfPluginZephyrScale._process_test_entity_folders  s   	ED 2) !' 8 8 2) !' 8 8 6* !' 9 9
0 )6(;(;(= 	$K)22[U3STOos+ /q"&))A,/ '~6L ,,00}} ,V4 ,V4-. 1 K  /z: G|[+FG /3!!)3< 6%) " /K+ .L3	/ /s   D99E	c                 n   t         j                  j                  d      | _        dddd}i | _        | j                  d|      D ]n  }|j                  dd	      j                         }|j                  |d      }t         j                  j                  || j                  
      }|| j                  |<   p y )Ntestcase.base:defaultcodedraftapprovedfailr  r  
deprecatedr  r&   r   r  workflow)r   CmfWorkflowr   _testcase_workflow_testcase_statusesr   r  	CmfStatusr;   r  
status_mapstatus_datastatus_namestatus_codestatuss          r'   _set_testcase_statusesz+CmfPluginZephyrScale._set_testcase_statusesV      "("4"4"8"8>U"8"V " 

 #%++,?M 	:K%//&"5;;=K$..g>K%%)){TE\E\)]F39D##K0		:r+   c                 T    dddd}|j                  |j                               xs dS )Nr   r   rB  )highnormallow)r   r  )r;   priority_namesignificance_maps      r'   _get_significancez&CmfPluginZephyrScale._get_significancef  s4    

  ##M$7$7$9:?a?r+   c           	      v   ddl m} |j                  dg       }|r.| j                  j	                  t
        j                   dd       g }|D ]  }|j                  dd      j                  d	d
      } ||dd      }	 dddd| dgdd|gddd| dgg}t        j                  j                  |      }	|	st        d| d      |j                  |	        |S # t        $ rT}
| j                  j                  t
        j                   d|
 d|       t
        xj                  dz  c_        Y d }
~
d }
~
ww xY w)Nr   translitr~  u    Обработка теговTr   r   _#r   rulanguage_codereversedr  aliasr  ""%r&   r  u   Тег 'u   ' не найденzERR-0010r  r   )transliterater  r   r   r   r  r  replacer   CmfTagr   r   r   r  )r;   testcase_objtestcase_datar  testcase_labelstagslabelr  r  tagr$   s              r'   _get_testcase_tagsz'CmfPluginZephyrScale._get_testcase_tagsn  sb   *'++Hb9OO--..LM   
 $ 	'EMM#s+33C<EU$FE'g5'}5We,g5'}5	 mm''w'7#hug5H$IJJC 	'*   '))!112!C59)$ * 
 !!Q&!!'s   >AC	D8$A
D33D8c                    g }|j                  d      }|rj| j                   d| }t        j                  j                  |ddg      }|r|j	                  |       |S | j
                  j                  d| d|       |S )	NcomponentIdr{   r|   r   rO  u%   Не найден компонент zERR-0011rP  )r   r   r   CmfComponentr   r   r   )r;   r  r  
componentscomponent_idcomponent_ext_id	components          r'   _get_testcase_componentsz-CmfPluginZephyrScale._get_testcase_components  s    
$((7"&"2"2!32l^D++//7GQUW[P\/]I!!),  ));L>J$ *  r+   c                    |d   }|j                  d      }| j                   d| d}t        j                  j                  |      }|rZ|s$t        j                  d||| j                  d      }| j                  ||      |_        |j                  d	       t                y |r|j                  d
       t                y )Nr\   r6  r{   z::preri  preTstep_sectionrk  r}   r   rl  rm  )TEXKOM_db_delete)
r   r   r   CmfTestcaseStepr   r  r  r   deleter   )r;   r  r  r9  testcase_preconditionstep_ext_idtestcase_steps          r'   _process_testcase_prestepz.CmfPluginZephyrScale._process_testcase_prestep  s    $U+ - 1 1. A))*"\N%@..22+2F   & 6 6!&'&#$( !7 ! "&!3!3LBW!XM40 	   $ 7r+   c                    |d   j                  d      xs g }|D ]/  }|j                  d      r|d   }|d   }|j                  d      }|j                  d      }|j                  d      }	| j                   d	| }
t        j                  j                  |

      }|s$t        j                  d||
| j                  d      }| j                  ||      |_        | j                  ||      |_        | j                  ||	      |_        |dz   dz  |_	        |j                  d       | j                  ||j                  dg              2 t                y )Nr;  r<  testCaser|   indexr7  r>  r=  r{   ri  mainTr  r     rm  r   )r   r   r   r  r   r  r  expected_result	test_dataordernor   r  r   )r;   r  r  r<  r  step_id
step_indexstep_descriptionstep_expected_resultstep_test_datar  r  s               r'   _process_testcase_stepsz,CmfPluginZephyrScale._process_testcase_steps  s]   l+//8>B 	RDxx
#4jGgJ#xx6#'88,<#= !XXj1N!--.b	:K"2266k6JM  & 6 6!''&#$( !7 ! "&!3!3MCS!TM,0,>,>}Nb,cM)&*&8&8&WM#%/!^t$;M!40%%mTXXmR5PQ7	R: 	r+   c                 j   | j                    d| d|d    }t        j                  j                  |      }|s$t        j                  ||| j                  d      }n|j                  dg       |j                  r|j                  d      r*| j                  |d         |_        |j                  |_	        |j                  d      r|d   |_
        |j                  |_        ||_        ||_        | j                  ||j                  d	            |_        |j!                  d
       t#                y y )Nr{   r|   ri  Trj  z**	createdByr  r  rm  )r   r   r  r   r   rG   rl  r,  r  r  r  cmf_modified_atrk  r   r  r  r   r   )r;   r   obj_keycomment_datacomment_ext_idr  s         r'   _process_commentz%CmfPluginZephyrScale._process_comment  s$    ,,-Ry<;M:NO##''~'>''%?? $	 ( G '"",%)%5%5l;6O%P"$+$6$6!,)5k)B&*1*@*@' GN&2G#--g|7G7G7OPGLLLTL*L #r+   c           
      >   t        |      j                  d      }|j                         sL| j                  j	                  t
        j                   d| dd|       t
        xj                  dz  c_        y |j                         j                  dkD  r| j                  j                  t
        j                   dd	
       t        |d      5 }|D ]G  }	 t        j                  |      }| j                  |||       | j                  j                  dd       I 	 d d d        y y # t         $ ra}t#                | j                  j	                  t
        j                   d| d| d|       t
        xj                  dz  c_        Y d }~d }~ww xY w# 1 sw Y   y xY w)Nr  u6    Файл комментариев не найден 'u\   '. Возможно при дампе комментариев возникли ошибкиzERR-0012rP  r   r   u,    Обработка комментариевTr   r   r  r  uB    Не удалось обработать комментарий: r   zERR-0013)r   r   is_filer   r   r  r  r  statst_sizer   r   r   r   r  r  r   r   )	r;   r   obj_dirr  r  r   r   r  r$   s	            r'   _process_commentsz&CmfPluginZephyrScale._process_comments  s   W..?$$&OO%%--..derds tl l	 &  "''!+OO--..Z[   
 mT* /a /C/'+zz#--c7LI00KH	// / , % /$11)99::|"e2cU,& #	 2  #))Q.))// /s8   FAD&F&	F/AFFFFFc                 	   dt         _        |d   }| j                  |t        j                        }|d   }d| d| dt         _        | j                  j                  t         j
                   dd	       | j                   d
| }t        j                  j                  |dddg      }|sRt        j                  j                  dddg      }t        j	                  ||| j                  || j                  d      }|j                  r||_        |d   |_        | j                  |_        | j"                  j                  |d   d   j%                               |_        | j)                  |d   d         |_        |j                  dd      dz  dz  |_        | j/                  |j                  d            |_        |j                  d      r| j/                  |d         |_        n|j0                  |_        |j                  d      r| j/                  |d         |_        |j                  d      |_        |j                  d      xs |j6                  |_        |j                  d      rK|d   d   }|d   d   }	| j                   d
| d
|	 }
t        j:                  j                  |
       }||_        ||_        |jA                  d!       ||_!        |d"   |_"        | jG                  ||j                  d#            |_$        | jK                  ||      |_&        | jO                  ||      |_(        |jA                  d!       tS                |j                  d$g       }| jU                  ||      }|jW                         D ]  \  }}|d%k(  r||_,        ||_-         |jA                  d!       | j]                  ||       | j_                  ||       | ja                  ||       n6| j                  jb                  je                  t         j
                   d&       | jg                  ||j                  d'g              | ji                  ||d(   |       | j                  j                  t         j
                   d)t         j                   d	       | j                  jk                  d*d+       t         j                  S ),Nr   r\   r'  u   [Тест кейс z (vz)]     Начало обработкиTr   r{   deffectscovered_tasksr}   r  r   r  r   r|   )r  r   )r  
logic_typerk  r}   r   rl  r&   r  priorityestimatedTimer  <   r  owner	updatedByr  	updatedOnr  r  ri  rm  r2  r5  
traceLinksrU  v    был изменен пользователем. Новые данные из импорта не примененыr   r3  8    Завершение обработки. Ошибок: r+  r  )6r  r  r`   r   rE  r  r   r   r   r   CmfLogicTyperY   rl  r  r&   r  r  r  r  r  r  significanceestimate_timer,  r  r  cmf_modified_byr  r  r  r  r   r   cmf_ver_numbercmf_ver_curr  r  r  r  r  r  r   rf  r\  r  r  ru  r   r  rH  r  r  r  r  )r;   r  r9  testcase_codetestcase_major_versiontestcase_ext_idr  r!  rP  r  testcase_folder_ext_idtestcase_folderr]  r^  	type_linktaskss                   r'   _process_testcasez&CmfPluginZephyrScale._process_testcase  s   
$U+)),8J8JK!.~!>':<.LbKcce%f
"z99::Z[gkl!--.b?))--"! . 
 ,,006MW[]aVb0cJ!--"%}}&?? $ . L '' -L -f 5L$($;$;L!"&"9"9"="=h'/557#L )-(>(>}Z?XY_?`(aL%)6):):?A)NQU)UXZ)ZL&&*&6&6}7H7H7U&VL#  ))-)9)9-:P)Q&)5)@)@&  -/3/?/?k@Z/[,*7*;*;K*HL'+8+<+<[+I+h\MhMhL(  **84[A
)(3D9	,0,<,<+=R
|2i[)Y&"(":":">">F\">"]&5#+8L($/*@L''4_'EL$ $ 2 2<ARARS^A_ `L&*&C&CLR_&`L# $ 7 7m TL$/L'++L"=K--lKHJ$.$4$4$6 7 	5	),1L)16L.	7
 $/##L+>**<G((}EOO""**--. /V W
 	!!,0A0A-QS0TU|]5-A<P))**bcmctctbuv 	 	
 	  [9   r+   c                 4   t        d      5  	 |j                         }|nVt        |      j                  d      }t	        |d      5 }t
        j                  |      }d d d        | j                         i	 d d d        y # 1 sw Y   %xY w# 1 sw Y   y xY wNFr"  r4  r1  )r   r   r   r   r   r   r6  r8  )r;   testcase_queuer+  r=  r   r  s         r'   _process_testcase_workerz-CmfPluginZephyrScale._process_testcase_workerz      51 
	6)--/# $X 7 7 D-- 1$(IIaLM1 &&}5  	
	6 
	61 1
	6 
	6#   ;BBBB	BBc                    t               }g }t        | j                        D ]J  }t        j                  | j
                  d| d|i      }|j                  |       |j                          L | j                  |      }|D ]  }|j                  |d           |D ]  }|j                  d         |D ]  }|j                           y )N_process_testcase_worker_r;  ri  r3  )r   rk  threading_max_forksrm  rn  r<  r   ro  r>  rG  rp  )r;   rP  r;  rt  ru  rv  	testcasesr  s           r'   _process_testcasesz'CmfPluginZephyrScale._process_testcases      t//0 		A%%4404$nF NN6"LLN		 //
;	& 	5M}U34	5  	%Ft$	%  	FKKM	r+   c                 n   t         j                  j                  d      | _        dddd}i | _        | j                  d|      D ]n  }|j                  dd	      j                         }|j                  |d      }t         j                  j                  || j                  
      }|| j                  |<   p y )Nztestplan.base:defaultr  r  r  r  r  r  r&   r   r  )r   r  r   _testplan_workflow_testplan_statusesr   r  r  r  s          r'   _set_testplan_statusesz+CmfPluginZephyrScale._set_testplan_statuses  r  r+   c                 Z   dt         _        |d   }| j                  |t        j                        }d| dt         _        | j                  j                  t         j
                   dd       | j                   d| }t        j                  j                  |d	      }|s.t        j	                  || j                  || j                  d
      }|j                  }|j                  r||_        |d   |_        d |_        | j                   |_        | j$                  j                  |d   d   j'                               |_        | j+                  |j                  d            |_        |j                  d      r| j+                  |d         |_        n|j,                  |_        |j                  d      r| j+                  |d         |_        |j                  d      |_        |j                  d      xs |j2                  |_        | j7                  ||j                  d            |_        |j                  d      rK|d   d   }|d   d   }| j                   d| d| }	t        j:                  j                  |	      }
|
|_        ||_        |jA                  d       |rrt        jC                  ||      }|jA                          |jE                  ddg        n6| j                  jF                  jI                  t         j
                   d       | jK                  ||j                  dg              | jM                  ||d   |       | j                  j                  t         j
                   dt         j                   d       | j                  jO                  d d!       y )"Nr   r\   u   [Тест план rz  r  Tr   r{   )r}   r  r  rk  r}   r   rl  r&   r  r  r%  r&  r  r'  r5  r  r  r|   ri  rm  rk  tree_parent_folder    Папка тест-кейсовcase_folder)root_folder_nameroot_folder_typetestcase_idsr)  r   r3  r*  r:  r  )(r  r  r`   r   r  r  r   r   r   r   rY   is_newrl  r  r&   r  rF  r  rG  r  r  r,  r  r  r.  r  r  r  r  r  r  r   r   CmfTestplanTestcaseFoldersetuprH  r  r  r  r  )r;   testplan_datarB  testplan_codetestplan_ext_idtestplan_objtestplan_is_newrP  r  testplan_folder_ext_idtestplan_folderr  s               r'   _process_testplanz&CmfPluginZephyrScale._process_testplan  s   
$U+)),8J8JK':<.%J
"z99::Z[gkl!--.b?))--"! . 
 !--"}}&?? $ . L '--'' -L -f 5L'+L$$($;$;L!"&"9"9"="=h'/557#L '+&6&6}7H7H7U&VL#()-)9)9-:P)Q&)5)@)@&  -/3/?/?k@Z/[,*7*;*;K*HL'+8+<+<[+I+h\MhMhL( $ 2 2<ARARS^A_ `L  **84[A
)(3D9	,0,<,<+=R
|2i[)Y&"(":":">">F\">"]&5#+8L($/99''3 :  %G%2!#   OO""**--. /V W
 	!!,0A0A-QS0TU|]5-A<P))**bcmctctbuv 	 	
 	  [9r+   c                 4   t        d      5  	 |j                         }|nVt        |      j                  d      }t	        |d      5 }t
        j                  |      }d d d        | j                         i	 d d d        y # 1 sw Y   %xY w# 1 sw Y   y xY wr:  )r   r   r   r   r   r   r6  r\  )r;   testplan_queuer:  rC  r   rU  s         r'   _process_testplan_workerz-CmfPluginZephyrScale._process_testplan_worker   r=  r>  c                    t               }g }t        | j                        D ]J  }t        j                  | j
                  d| d|i      }|j                  |       |j                          L | j                  |      }|D ]  }|j                  |d           |D ]  }|j                  d         |D ]  }|j                           y )N_process_testplan_worker_r^  ri  r3  )r   rk  rA  rm  rn  r_  r   ro  rD  rG  rp  )r;   rP  r^  rt  ru  rv  	testplansrU  s           r'   _process_testplansz'CmfPluginZephyrScale._process_testplans  rD  r+   c                 n   t         j                  j                  d      | _        dddd}i | _        | j                  d|      D ]n  }|j                  dd	      j                         }|j                  |d
      }t         j                  j                  || j                        }|| j                  |<   p y )Nztestcycle.base:defaultr  r   in_progressclosed)not executedin progressdoner  r&   r   r  r  )r   r  r   _testcycle_workflow_testcycle_statusesr   r  r  r  s          r'   _set_testcycle_statusesz,CmfPluginZephyrScale._set_testcycle_statuses&  s    #)#5#5#9#9?W#9#X  #(

 $& ++,>L 	;K%//&"5;;=K$..g>K%%)){TE]E])^F4:D$$[1		;r+   c                     dddddd| _         y )Nr   re  passedfailedlocked)rg  rh  passr  blocked)_testrun_statusesrQ   s    r'   _set_testrun_statusesz*CmfPluginZephyrScale._set_testrun_statuses6  s    "("
r+   c                     |sy |d   }| j                    d| }t        j                  j                  |ddg      }|s!| j                  j                  d| d|       |S )Nr|   r{   r   rO  u'   Не найдено окружение r  rP  )r   r   CmfTestEnvironmentr   r   r   )r;   testcase_runenvironment_dataenvironment_idr}   environments         r'   _get_testrun_environmentz-CmfPluginZephyrScale._get_testrun_environment?  s}    )$/$$%R'78//3364QU,3WOO%%9.9IJ  &  r+   c                    |d   }| j                    d| }t        j                  j                  |ddg      }|s%| j                  j                  d| d| d|	       y |d   }| j                    d| }t        j                  j                  |
      }|s/t        j                  ||j                  d|| j                  d      }||_        | j                  ||j                  d            |_
        | j                  ||j                  d            |_        | j                  ||j                  d            |_        | j                  ||j                  d            |_        | j                  j                  |d   d   j                         d      |_        |d   dz   dz  |_        |j%                  d       |j                  d      }	|	rt&        j)                  |	      ni }	t+        |	j-                               }
|j                  dg       D cg c]  }|d   |
vr| }}| j/                  ||       |j                  dg       }| j1                  ||      }|j3                         D ]-  \  }}|dk(  s||_        |j4                  j7                  |       / |j%                  d       |j%                  d       y c c}w )NsourceScriptIdr{   r   r|   rO  u   Не найден шаг z: zERR-0015rP  ri  r  T)rk  r+  r  r}   r   rl  r7  r>  r=  r  testResultStatusr&   r   r  r   r  rm  stepAttachmentsMappingr   r(  rU  )r   r   r  r   r   r   CmfTestcaseRunHistoryStepcache_testcaser  r  r  r  r  actual_resultrs  r  r  r  r   r   r   r   valuesr  rf  r\  r  extend)r;   r\  cur_historysource_step_idsource_step_ext_idr  r	  r  run_stepru   ids_to_remover  r   r]  r^  r6  r7  s                    r'   _process_testrun_stepz*CmfPluginZephyrScale._process_testrun_stepO  s   "#34 $ 0 01N3CD..22%$< 3 
 OO%%+N+;2i[I & 
 D/))*"WI63377{7K77"$33#"?? $ 8 H "/**8Y]]=5QR#'#5#5h	N^@_#` !//)--
:ST!%!3!3HimmI>V!W0044()&1779
 &g.2d:$' -- 89)0$**W%bGNN,- (mmM2>
$}4 
 

 	!!(K8mmL"5))(K@
 * 0 0 2 	3IuI%$)!$$++E2	3 	$'T*
s   Kc           	      	   |d   }|d   }| j                  |t        j                        }| j                   d| }t        j                  j	                  |g d      }|s_|d   }	| j                   d|	 }
t        j
                  j	                  |
ddg      }t        j                  |||||| j                  d	      }|j                  r||_        |d
   |_	        | j                  |d   d
         |_        | j                  ||j	                  d            |_        |j                  j                  |_        |j                  j                   |_        | j#                  |j	                  d            |_        |j	                  dd      dz  dz  |_        t)        |j	                  dd      dz  dz        |_        | j-                  ||j	                  d            |_        | j1                  ||j	                  d            |_        | j4                  j	                  |d   d
   j7                               |_        |j;                  d       |j<                  j>                  }| j                  |t        j@                        }|s$t        jA                  |||| j                  d      }||_        |j                  |_	        |j                  |_!        |j8                  |_        |j                  |_        |j                   |_        |j$                  |_        |j                  |_        |j                  |_        |j&                  |_        d|_"        |jF                  |_#        |j;                  d       |j	                  dg       }| jI                  ||      }|jK                         D ]  \  }}|dk(  s||_&         |j;                  d       ||_        |j;                  d       |d   }|D ]  }| jO                  ||        | jQ                  ||j	                  dg              |j	                  d      r>|d   |j	                  d      |j	                  d      |d   d}| jS                  |||       tU                y )Nr  r\   r{   )r+  zcur_history.cache_testcasezcur_history.deffectsrO  r   r|   T)r  r+  rk  testcycle_testcase_folderr}   r   rl  r&   r"  r5  
assignedTor#  r   r  r$  executionTimejiraVersionIdrz  r~  rm  rJ  r(  rU  rC  r   r  actualStartDate)r  r  r  r|   )+r`   r   CmfTestcaseRunr   r   rE  r   rl  r  r&   r  r"  r  r  r+  r  r  r,  responsiblecache_estimate_timerW   
spent_timerS  releaser{  rz  rs  r  r  r   r  rN   CmfTestcaseRunHistoryr  cur	iterationrf  r\  r  r  r  r  r   )r;   testrun_data	testcycler  r  rI  testrun_codetestrun_ext_idrw  r9  r3  r+  r  cur_history_coder]  r^  r6  r7  
steps_datar\  r  s                        r'   _process_testrunz%CmfPluginZephyrScale._process_testrun  s   $Z0"5)((f6K6KL ,,-R}=,,00! 1 
 (/L!%!1!1 2"\NCO))--_dTX\-ZH!00!! *0%?? $ 1 L '' ,L -f 5L$($:$:=;TU[;\$]L! $ 2 2<ARARS^A_ `L&2&;&;&F&FL#%1%:%:%D%DL"'+'7'78H8H8V'WL$/;/?/?QR/SVZ/Z]_/_L,&),*:*:?A*NQU*UXZ*Z&[L##'#4#4  1$L  (,'D'D  /(L$ #'"8"8"<"</08>>@#L $/&2288K#00f>Z>Z[$::)')#$( ;   0K+00K)5)>)>K&!-!4!4K%1%<%<K"$0$:$:K!&2&>&>K##/#8#8K +00K.:.N.NK+"KO$0$:$:K!.&**<<K--k;GJ$.$4$4$6 1 	5	)+0K(1 .'2L$$/%&9:J' C	**9kBC %%k<3C3CMSU3VW 	*(3!-!1!1,!?!-!1!12C!D&t,	  %%k;Mr+   c                 b
   dt         _        |d   }| j                  |t        j                        }d| dt         _        | j                  j                  t         j
                   dd       | j                   d| }t        j                  j                  |dd	g
      }|s.t        j	                  || j                  || j                  d      }|j                  }|j                  r}||_        |d   |_        | j                  |_        | j"                  j                  |d   d   j%                               |_        | j)                  |j                  d            |_        |j                  d      r| j)                  |d         |_        n|j*                  |_        |j                  d      r| j)                  |d         |_        |j                  d      |_        |j                  d      xs |j0                  |_        |j                  d      |_        |j                  d      |_        | j9                  ||j                  d            |_        |j                  dd      dz  dz  |_        t?        |j                  dd      dz  dz        |_         | jC                  ||j                  d            |_"        |j                  d      rK|d   d   }|d   d   }| j                   d| d| }	t        jF                  j                  |	      }
|
|_$        ||_%        |jM                  d       |j                  d g       }| jO                  ||      }|jQ                         D ]  \  }}|d!k(  s||_)         |jM                  d       | jU                  ||       t        jV                  j                  ||"      }|s|s(t        jW                  d#||$      }|jM                          |j                  d%      xs g }|D ]]  }|j                  d&      xs g }|D ](  }|j                  d'      s| jY                  |||        D |sH| jY                  |d(   ||       _ n6| j                  jZ                  j]                  t         j
                   d)       | j_                  ||j                  d*g              | ja                  ||d+   |       | j                  j                  t         j
                   d,t         j                   d       | j                  jc                  d-d.       y )/Nr   r\   u   [Тест-цикл rz  r  Tr   r{   r  r   rJ  r&   r  r  r%  r&  r  r'  plannedStartDateplannedEndDateprojectVersionIdr#  r  r$  r  r7  r  r  r|   ri  rm  r(  rV  rK  rM  )r&   rk  rL  r?  r@  rA  rB  r)  r   r3  r*  r  r  )2r  r  r`   r   r  r  r   r   r   r   rY   rR  rl  r  r&   rj  r  rk  r  r  r,  r  r  r.  r  r  
start_datefinish_daterS  r  r-  rW   r  r  r  r  r  r   r   rf  r\  r  ru  CmfTestcycleTestcaseFolderr  rH  r  r  r  r  )r;   testcycle_datatestcycle_keytestcycle_codetestcycle_ext_idr  testcycle_is_newrP  r  testcycle_folder_ext_idtestcycle_folderr]  r^  r6  r7  r  r^  r_  ra  rb  s                       r'   _process_testcyclez'CmfPluginZephyrScale._process_testcycle  s   
&u-**=&:M:MN':=/%K
"z99::Z[gkl"../r-A''++#! , 
	 ++#}}'?? $ , I %++$$+IN+F3IN!%!9!9I#77;;x(0668 I $(#3#3N4F4F{4S#TI }}W%&*&6&6~g7N&O	#&/&:&:	#!!+.,0,<,<^K=X,Y	)'5'9'9+'FI$(6(:(:;(G(c9KcKcI%#1#5#56H#II $2$6$67G$HI! $ 1 1""#56!I '5&8&8!&Lt&SVX&XI##&~'9'9/1'MPT'TWY'Y#ZI !//	>;M;Mm;\]IN!!(++H5kB
*84T:	-1-=-=,>bByk*Z'#)#<#<#@#@H_#@#` #3	 (6I%NNtN,(,,\2>K--iEJ$.$4$4$6 4 	5
*.3I+4 NNtN,##I{;66:: #, ; F  v::;$'0 ; 
 *..~>D"M - S+//>D"#/ SK"'78--k9fMS
 $--l2.>	6RS OO""**--. /V W
 	!!)^-?-?r-RSy.*?O))**bcmctctbuv 	 	
 	  k:r+   c                 4   t        d      5  	 |j                         }|nVt        |      j                  d      }t	        |d      5 }t
        j                  |      }d d d        | j                         i	 d d d        y # 1 sw Y   %xY w# 1 sw Y   y xY wr:  )r   r   r   r   r   r   r6  r  )r;   testcycle_queuer  testcycle_filer   r  s         r'   _process_testcycle_workerz.CmfPluginZephyrScale._process_testcycle_workerb	  s    51 
	6+//1	$!%i!9!9+!F.#. 0!#'99Q<L0 ''5  	
	6 
	60 0
	6 
	6r>  c                    t               }g }t        | j                        D ]J  }t        j                  | j
                  d| d|i      }|j                  |       |j                          L | j                  |      }|D ]  }|j                  |d           |D ]  }|j                  d         |D ]  }|j                           y )N_process_testcycle_worker_r  ri  r3  )r   rk  rA  rm  rn  r  r   ro  rK  rG  rp  )r;   rP  r  rt  ru  rv  testrunsr  s           r'   _process_testcyclesz(CmfPluginZephyrScale._process_testcycleso	  s    't//0 		A%%551!5%F NN6"LLN		 --j9$ 	5LU 34	5  	&F%	&  	FKKM	r+   u%   Обработка окруженийc                    | j                  d|      D ]  }|d   }|d   }|j                  d      }| j                   d| }t        j                  j                  |      }|s-t        j	                  | j
                  || j                  d      }|j                  s||_        ||_	        |j                  |_
        |j                  d	        y )
Nr  r|   r&   r7  r{   ri  Trj  rm  )r   r   r   r   rv  rY   r   rl  r&   r  slugr   )r;   r  rx  ry  environment_nameenvironment_descriptionenvironment_ext_idrz  s           r'   _process_environmentsz*CmfPluginZephyrScale._process_environments	  s     $ 0 0 M 	3-d3N/7&6&:&:=&I#$($4$4#5R7G!H 3377?Q7RK$77==-#$(	 8  **#3 #: #.#3#3   T 2%	3r+   u   Обработка теговc           
         ddl m} | j                  d|      D ]  }|d   }|d   }	 |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                  |      }	|	s2t        j                  |      }	|	j                  d       t                 y # t        $ r;}
t                | j                  j                  d| d| d|
 dd       Y d }
~
d }
~
ww xY w)Nr   r  r~  r|   r&   r   r  r  r   r  Tr  r  r  r  r  r  r  )r&   rm  u+   Не удалось создать тег 'r   r   zERR-0016r  r  )r  r  r   r  r   r  r   r   r   r   r   r   r   )r;   r  r  tag_datatag_idtag_namer&   r  
tag_filtertag_objr$   s              r'   _process_tagsz"CmfPluginZephyrScale._process_tags	  s0   *((;? 	Hd^F'H''S199#rB MWd+g4&|4g5'}5	
 !--++:+>$mmm6GLLTL2L!	"  ))A(3vhVYZ]Y^_)% *  s   BC	D1DDc           	         t        |d         }t        |d         }|d   }|d   }d| j                   d| d}t        j                  j                  ddd| dgg d	
      }|st        d| d| d| d      d|_        |j                  d       t                || _
        | j                  |       | j                  |       |j                  d      | _        | j                  |       | j!                  |       | j#                  |       | j%                  |       | j'                  |       | j)                  |       | j+                          | j-                  |       y )Nr3  r|   r\   r&   r{   r}   r~   r   )rZ   r   
show_testsr  u   Проект 'r   rD  uY   ] не найден. Возможно он еще не импортирован из JiraTrm  r   )r   rH   r   r   r   r   r   r  r   r   rY   r  r  r   r   r  r  rC  rH  rc  rl  rt  r  )r;   r   r  rP  rQ  r   r   project_objs           r'   _process_projectz%CmfPluginZephyrScale._process_project	  s{   <./d+,
"5)#F+d../r*R@''++f.)9&;< , 
  c+c* NW X 
 "&T*#"";/;' !, 4 4] C))+6##K0
-##K0
+$$[1""$  ,r+   u#   Обработка проектовc                 h   | j                   D cg c]  }t        |d          }}| j                         D ]  }t        |d         }|d   }|d   }	 | j                  j	                         r	 d | _        d | _         y ||vr	 d | _        d | _        [| j                  |       t                d | _        d | _         y c c}w # t        $ rS}t                | xj                  dz  c_        | j                  j                  d| d| d| d| d	d
       Y d }~md }~ww xY w# d | _        d | _        w xY w)Nr|   r\   r&   r   u=   Не удалось импортировать проект 'r   rD  z]. zERR-0017r   r  )r:   rH   rM  r   r   rY   rF  r  r   r   r   r   r   )r;   pselected_projects_idsr   rP  rQ  r   r$   s           r'   _process_projectsz&CmfPluginZephyrScale._process_projects	  sN   7;7M7M N!QtW N N ..0 	*L\$/0J&u-K'/L*??,,.& !%%)"% %::  !%%)" %%l3 !%%)"7	* !O"  	1$))$~SSCuN)	 *  		 !%%)"s<   B=C=CC	DA	DD!DD!!D1c                    d| _         || _        t               5  d| j                  _        | j                  j                  j                          t                d d d        | j                  j                  | _        | j                  j                  j                  j                  | _
        | j                  | j                  j                  d         | _        | j                  j                  rdnd| _        | j#                          | j%                          | j                  5  | j'                          | j)                          d d d        | j+                          | j                    S # 1 sw Y   xY w# 1 sw Y   3xY w)Nr   u   Импорт Jira Zephyr Scaleimport_settings	accountIdr\   )r   r   r2   r&   rN   r   r   get_max_processesmax_processesr>   r   _normalize_settingsr   r   r5   rC   r   r   r   r  r  r  )r;   r   s     r'   process_importz#CmfPluginZephyrScale.process_import

  s!   $^ 	#CDOO OO!!&&(L	
 "__>>??1188DD001N1NO`1ab'+{{'8'8e!!###%[[ 	" !	" 	 ??"")	 		" 	"s   A E)#!E6)E36E?)NNrb   )F)Sr   
__module____qualname__r   r4   ui_meta_skipapi_methodsrF   r9   propertyr5   r`   staticmethodrc   rm   rH   rr   rv   r6   r   r   r   r   r   r   r   r,   r   r   r   r  r  r   re  rw  r  r  r  r  r  r  r'  r,  r>  rD  rK  rM  rS  rf  ru  r  r  r  r  r  r  r  r  r   r  r  r  r8  r<  rC  rH  r\  r_  rc  rl  rt  r{  r  r  r  r  r  r  r  r  r  r  __classcell__)r<   s   @r'   r4   r4   8   s   *??LL P L *>>JJN K H  .Z&     '3 ' '	<$L
2
V 	 	 Z 3 !3"(T7#7J 	4 	4||$LmJ^.Tl0dXtn&^@(T#J88'::,2KZ&9'vQf: @ D$.B2 /D b! b!H62:  M: M:^62; 
 :+xgR k; k;Z62 <=3 >3* 45 68,-\ :;* <*@#r+   r4   rb   )r   rU   r   rm  r  
contextlibr   	itertoolsr   pathlibr   queuer   bs4r   cmf.appr   cmf.include!modules.jira.clients.zephyr_scaler
   modules.jira.fieldsr   localr  r,   r2   r4   r)   r+   r'   <module>r     sk     	    % "      9 7Y__
2 % %j'#2GG j'#r+   