
    4j                     \    d dl  d dl d dlmZ d dlmZ  G d deej                        Zy)    )*)cmf_testcycle)EvaTestCodeMixinc                        e Zd Zej                  j
                  dgz   ZdZd Zd Zd Z	 fdZ
 fdZd Zed
 fd		       Z xZS )CmfTestcyclecomplete)openin_progressc                 n    | j                   ry t        j                  j                  dddg      | _         y )Nztestcycle.base:defaultTsave_eval_code)codecache_inmemoryfields)workflowmodelsCmfWorkflowget)selfs    )./modules/evatest/models/cmf_testcycle.py_calc_workflowzCmfTestcycle._calc_workflow   s1    ==**..4L]ak{j|.}    c                     | j                   j                  sy t        j                  j	                  dd| gg dg      D ]#  }| j                   |_        |j                          % y )Nparent==)responsibler   N)filter)default_responsible
is_changedr   CmfTestcaseRunlistr   save)r   test_case_runs     r   _apply_responsiblezCmfTestcycle._apply_responsible   sf    ''22#2277$PT@U@[@]7 ^ 	!M&*&>&>M% 	!r   c                     | j                   j                  sy| j                   j                  dk7  r!| j                   j                  dk(  rd| _        y| j                  r6| j                  j
                  t        |       j                  j                  v ry| j                  j
                  xs i }|j                         D ch c]  \  }}|dkD  r|| j                  vr| }}}|sy|dhk(  rd| _        y|dhk(  rd| _        yd| _        yc c}}w )	u  Рассчитывает результат EvaTest только при смене статуса цикла.

        Ручные результаты из вариантов поля ``resolution`` сохраняются.
        Открытые прогоны и прогоны в работе не учитываются; если финальных
        статусов нет, результат не устанавливается.
        NCLOSEDr   passedsuccessfailedfailpart_success)cache_status_typer   newold
resolutionvaluetypechoicestestcase_run_cacheitemsNON_FINAL_TESTCASE_RUN_STATUSES)r   	run_cachestatuscountstatusess        r   _calc_resolutionzCmfTestcycle._calc_resolution   s     %%00!!%%1%%))X5"&??t44T
8M8M8U8UU++117R	(1(9
$vuqyV4+O+OO 
 
 z!'DO(#$DO,DO
s   D
c                 (    t         |          dgz   S )u  Предзагружает кэш прогонов для расчета результата при сохранении.

        RPC-метод объекта ``complete`` загружает только id, но
        ``_calc_resolution()`` нужен ``testcase_run_cache``; предзагружаем его,
        чтобы избежать неявной ленивой загрузки при сохранении.
        r2   )supersave_preload_fields)r   	__class__s    r   r<   z CmfTestcycle.save_preload_fields<   s     w*,0D/EEEr   c                     | j                   r(| j                  r| j                  j                  |        | j                          t	        |   |i |S )N)	testcycle)is_newtestplanrunr#   r;   r!   )r   argskwargsr=   s      r   r!   zCmfTestcycle.saveE   sL    ;;4==MM   	!w|T,V,,r   c                     | j                   j                         j                  d      | _        | j	                          y )Nr%   )status_type)r   loadget_default_statusr6   r!   )r   rC   rD   s      r   r   zCmfTestcycle.completeM   s-    mm((*==(=S		r   c                 h    |dk(  r | j                   |f||||d|S t        |   ||||||fi |S )Nrelease)object_fieldsr   r   order_by)releases_options_listr;   field_options_list)	clsrelation_field_namemodels_filtersr   rK   r   rL   rD   r=   s	           r   rN   zCmfTestcycle.field_options_listQ   sy    )+,3,,-@  ZP]flu{  GO  Z  SY  Z  Zw)*=~vWdflnv  B  {A  B  	Br   )NNNNN)__name__
__module____qualname__r   r   api_methodsr4   r   r#   r9   r<   r!   r   classmethodrN   __classcell__)r=   s   @r   r   r      sZ    ,,88J<GK '>#~
!-BF- B Br   r   N)cmf.include
cmf.fieldsmodules.evatest.fieldsr   -modules.evatest.models.cmf_evatest_code_mixinr   r    r   r   <module>r]      s*      0 JNB#]%?%? NBr   