
    v9j                     <    d Z ddl d Zd Zd
dZ	 d
dZd Zd	 Zy)uu  Вспомогательные функции импорта папок тест-кейсов EvaTest.

Каноническая схема ext_id импортированной папки тест-кейсов:
``<id проекта>::<нормализованный путь папки>``.

Нормализованный путь очищается от начальных и конечных слешей и
изолируется id проекта, поэтому повторные импорты идемпотентны, а
одноимённые папки в разных проектах не пересекаются.
    )*c                 (   t        | t              r)| j                  d      xs | j                  d      xs d}n| r| }nyt        |      j	                         j	                  d      }d|v r&|j                  dd      \  }}|j	                  d      }|S )u  Возвращает нормализованный путь папки тест-кейсов из значения импорта.

    Поддерживаются реальные значения импорта: словари CSV-маппинга
    (``ext_id``/``name``) и скалярные пути. Если путь уже содержит
    канонический разделитель проекта, проектный префикс отбрасывается.
    ext_idname /::   )
isinstancedictgetstrstripsplit)folder_fieldrawfolder_path_s       1./modules/evatest/utils/testcase_folder_import.py#extract_testcase_folder_import_pathr      s     ,%x(JL,<,<V,DJ	c(.."((-K{$**43;!'',    c                 v    t        |       } || rt        d|  d      t        d      |j                   d|  S )u   Строит канонический ext_id импортируемой папки тест-кейсов для проекта.e   Не удалось определить проект для каталога тест-кейсов ''c   Не удалось определить проект для каталога тест-кейсовr	   )r   CmfImportErrorid)r   project_objs     r   #build_testcase_folder_import_ext_idr   #   sm    5kBK w  yD  xE  EF  G    C  D  	DnnR}--r   Nc                 J   | t        d      t        | j                  d| j                        }||j                  |      }||S t        j
                  j                  | ddg      }|&t        d| j                   d| j                   d      t        |       ||||<   |S )	u   Возвращает реестр тест-кейсов проекта и гарантирует, что он ветка дерева.r   valueCmfTestcasetree_node_is_branch)parenttypefieldsuH   Реестр 'Тест-кейсы' не найден в проекте 'z' (id=u6   ) — проект создан без scaffold_tests.)	r   getattrr   r   modelsCmfRegistryCmfErrorr   #_ensure_testcase_import_tree_branch)r   registry_cache	cache_keycachedregistrys        r   'get_testcase_folder_registry_for_importr0   0   s      C  D  	D@I!##I.M!!%%%& & H
 VWbWgWgVh i>>""XZ
 	

 (1!$,y!Or   c                    t        |       }|st        d      |t        d| d      t        ||      }t        j                  j                  ||      }|r|dfS t        ||||      \  }}t        j                  j                  ||dg      }|r||_        |j                  d	       |dfS |||||d
}	dd|gdd|gg}
 ||	|
      }t        |t              rt        |      dk7  rt        d      |\  }}|t        d| d      ||fS )u   Находит или создаёт импортируемую папку тест-кейсов в дереве проекта.

    ``process_folder(folder_data, filter_obj)`` должен вернуть кортеж
    ``(obj, is_new)``.
    uA   Не указан путь каталога тест-кейсовr   r   )r   projectFr   )r   tree_parentr&   T	only_data)r   r$   r2   r   r3   z==r2      u   process_folder для импорта каталогов тест-кейсов должен вернуть кортеж (obj, is_new)uI   Не удалось создать каталог тест-кейсов ')r   r   r   r(   CmfTestcaseFolderr   +_resolve_testcase_folder_import_tree_parentr   saver   tuplelen)folder_field_or_pathr   process_folderr,   r   r   folderr   r3   folder_data
filter_objprocess_resultis_news                r   )find_or_create_testcase_folder_for_importrC   L   sy    66JKK`aast  tA  AB  C
 	
 1kJF%%)))MFu}C	D+ %%))tV^U_)`Fd#u} "K T6*Yk,JKJ#K<Nne,N0Cq0H)
 	
 $NFF~hithuuvwxx6>r   c                     | j                  dd      }|d   }t        |      dk(  r|t        ||      fS t        |d   |||      \  }}t	        |       ||fS )uu  Определяет имя папки и родителя дерева для импортного пути.

    Для верхнего уровня возвращает реестр тест-кейсов проекта, а для
    вложенного пути рекурсивно создаёт или возвращает родительскую папку.
    r   r
   r   )rsplitr;   r0   rC   r+   )r   r   r=   r,   partsr   parent_folderr   s           r   r8   r8      sq     sA&E9D
5zQ<[.YYY@a	M1 (6r   c                 t    | j                  dg       | j                  sd| _        | j                  d       yy)u{   Помечает узел дерева как ветку без запуска полной логики save модели.r#   Tr4   N)load_fieldsr#   r9   )nodes    r   r+   r+      s8    +,-###' 		D	! $r   )N)__doc__cmf.includer   r   r0   rC   r8   r+    r   r   <module>rO      s4    *
.@ 	7t4"r   