U
    /ep6                     @   sN   d dl mZ d dlT d dlmZ d dlmZ d dlmZ G dd dej	Z	dS )	    )Optional)*)fields)cmf_import_plugin)	CmfImportc                       s  e Zd Z fddZeeedddZeeedddZeeeddd	Z	ee
e
e
e
fd
ddZed+ee
ee eefdddZdd Zddddd fdd
Zdd fdd
Zdd Zdd Zdd  Zed!d" Zd#d$ Zd%d& Zd'd( Zed)d* Z  ZS ),CmfImportPluginc                    s2   t  j|| tjjdd| _tj| _tj	| _
d S )NZsoftdev)code)super__init__modelsZCmfActivitygetZdefault_activityZconfigZIMPORT_THREADSZthreading_max_forksZIMPORT_DOWNLOAD_THREADSZdownload_threading_max_forksselfargskwargs	__class__ $./common/models/cmf_import_plugin.pyr
   
   s    zCmfImportPlugin.__init__)namereturnc              	   C   sl   ddddddgddd	d
dgddgddddddgd}|  D ]*\}}|D ]}||  krH|    S qHq<dS )Nu   открытopenu   к выполнениюZtodonewZpausedu
   работZprogressZindeterminateZactiveZ
inProgressZreviewu
   ревьюcloseu   закрытu
   готовZdoneZarchivedZ	cancelled)OPENZIN_PROGRESSZ	IN_REVIEWZCLOSEDr   itemslower)r   mappingstatus_typewordswordr   r   r   calc_status_type   s    z CmfImportPlugin.calc_status_typec                 C   sT   dgddgdgdddgd}|  D ]*\}}|D ]}||  kr0|    S q0q$d	S )
u+    Поиск priority по синониму u   низкu
   обычнu   нормальнu   срокu   блокирующu
   высокu
   больш)r         r   r   )r   r   priorityr    r!   r   r   r   calc_priority    s    zCmfImportPlugin.calc_priorityc                 C   sV   dgdddgdgdgdgd}|  D ]*\}}|D ]}||  kr2|    S q2q&d	S )
ue    Поиск программных типов workflow для проектов по синониму Zagilebaseu   основнu   классическZhelpdeskZservicedeskZwiki)project.agilezproject.basezproject.helpdeskzproject.servicedeskzproject.wikir)   r   )r   r   Zlogic_prefixr    r!   r   r   r   calc_logic_type/   s    zCmfImportPlugin.calc_logic_type)
obj_fieldsr   c           	      C   s   i }i }i }|  D ]\}}t|ttfr| j|}|dkrVdd | D d }n,|dkrvdd | D d }n| d }t|tjj	r||d||< q||d||< q|||< q|||fS )Nparentc                 S   s   g | ]}|j d kr|qS )
CmfProject__name__.0mr   r   r   
<listcomp>I   s     
 z9CmfImportPlugin._get_any_table_fields.<locals>.<listcomp>r   Z	executorsc                 S   s   g | ]}|j d kr|qS )	CmfPersonr.   r0   r   r   r   r3   L   s     
 )modelr   )
r   
isinstancedictlistr   r   Zrelated_models
issubclasscmfZ
CmfM2MBase)	r5   r+   related_objscurrent_objm2m_objs
field_namevalueZ
main_fieldZrelated_modelr   r   r   _get_any_table_fields?   s     
z%CmfImportPlugin._get_any_table_fieldsN)
cmf_importr+   
filter_objr   c                 C   s  |  ||\}}}| D ],\}}	| j||	d |	d d\}
}|
||< q| D ]H\}}	||dkrng ||< | j||	d |	d d\}
}|| |
 qP|tjkr|sd|d< d|krtjj|d dgd	}|r|d
fS |d |d< |tjkr.dd|d gdd|d gg}|dr.|dd|d g |r:|}ng }ddddg}|D ]V}||d}|rN|dkr|d|d|gdd|gg n||d|g  qqN|s| D ]P\}}|rt|t	jj
stt||tjr|| ddt|jg qd}|r(|j|dd |D d}|r2d
nd}|r@|n|||ddd}| D ]\}}t||| q\|jr|jr|jr|jdkr|  |jdd |}||fS )u.  
        Создание объектов на основании моделей при импорте
        :param CmfImport cmf_import: Объект импорта для хранения настроек, статуса по текущему импорту
        :param model: Модель по которой создается объект
        :param dict obj_fields: Параметры объекта
        :param Optional[list] filter_obj: Фильтр для проверки на существование объекта в БД
        r5   r   )r5   r+   NTZ
user_localemailz**)rC   r   FZloginr   ==Zworkflowr   Zext_idr    ORZ_idc                 S   s   g | ]}|qS r   r   )r1   r>   r   r   r   r3      s     z<CmfImportPlugin.process_any_table_fields.<locals>.<listcomp>filterr   )rA   r   import_originalr-   )Zsave_import)r@   r   process_any_table_fieldsr   appendr   r4   Z	CmfStatusr6   r:   Z	CmfEntityr9   getattrr   Z
CmfRelBasestridsetattrZ
is_changedrI   is_new
class_namesave)clsrA   r5   r+   rB   r;   r<   r=   Zmain_field_nameZrelated_infoZrelated_obj_Zexisted_personZ_filterZuniq_field_namesZuniq_field_nameZuniq_field_valuer>   r?   Zexisting_objrP   Znew_objr   r   r   rJ   X   sp    





 z(CmfImportPlugin.process_any_table_fieldsc              	   K   s@   | j r
dS tjf | j| j| j|||d|}|  || _ dS )u3   
        Дает доступ из вне
        N)r   typetokenext_url	ext_login	ext_token)pluginr   	CmfPluginr   rQ   rN   rR   )r   rW   rX   rY   r   rZ   r   r   r   _init_secret   s      zCmfImportPlugin._init_secretr   )depthrW   rX   rY   c                   s*   | j r| ||| t j|d|i|S )Nr]   )rP   r\   r	   rR   )r   r]   rW   rX   rY   r   r   r   r   r   rR      s    zCmfImportPlugin.saveF)forcec                   s>   t jjdd| jgddddgd}|  t j|d|i|S )NrV   rD   rW   rX   rY   rG   r^   )r   r[   r   rN   deleter	   )r   r^   r   r   rZ   r   r   r   r_      s
    
zCmfImportPlugin.deletec                 C   s
   t  dS )uJ   
        Формирование шаблона настроек
        NNotImplementedr   rA   r   r   r   tmplt_import_settings   s    z%CmfImportPlugin.tmplt_import_settingsc                 C   s
   t  dS )u9   
        Предпросмотр импорта
        Nr`   rb   r   r   r   preview   s    zCmfImportPlugin.previewc                 C   s
   t  dS )u-   
        Запуск импорта
        Nr`   rb   r   r   r   process_import   s    zCmfImportPlugin.process_importc                   C   s
   t  dS )uC   
        Маппинг полей по умолчанию
        Nr`   r   r   r   r   calc_models_settings   s    z$CmfImportPlugin.calc_models_settingsc                 O   s
   t  dS )uK   
        Тестирование подключения к апи
        Nr`   r   r   r   r   test   s    zCmfImportPlugin.testc                 C   s
   t  d S Nr`   r   r   r   r   download_data   s    zCmfImportPlugin.download_datac                 C   s
   t  d S rh   r`   ri   r   r   r   download_files   s    zCmfImportPlugin.download_filesc                    s|  ddl m  dd l}dd l} fdd}t| j| jjd| jjd} dd}|j	d	d
|d d}|
|}|j	ddd}d|d< d|d< d|d< ||d< d|d< d|d< || |j	dd| jjd}	|	d}
|
|| j |j	ddd}|| jj d| jj  |	|
 |	| ||	 t| tjrx|j	dd| j jjj dd}d |d< | jjjj|_|	| |S )!Nr   BeautifulSoupc                    s2   ddd}d}| |kr||  } d| dddS )	NztM6,2A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6M6,4H13V9H18V20H6V4M8,12V14H16V12H8M8,16V18H13V16H8Za	  M19,3H14.82C14.4,1.84 13.3,1 12,1C10.7,1 9.6,1.84 9.18,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M12,3A1,1 0 0,1 13,4A1,1 0 0,1 12,5A1,1 0 0,1 11,4A1,1 0 0,1 12,3M7,7H17V5H19V19H5V5H7V7M7.5,13.5L9,12L11,14L15.5,9.5L17,11L11,17L7.5,13.5Z)ZCmfDocumentCmfTaska  M6.2 12.3a1 1 0 011.4 1.4l-2.1 2a2 2 0 102.7 2.8l4.8-4.8a1 1 0 000-1.4 1 1 0 111.4-1.3 2.9 2.9 0 010 4L9.6 20a3.9 3.9 0 01-5.5-5.5l2-2zm11.6-.6a1 1 0 01-1.4-1.4l2-2a2 2 0 10-2.6-2.8L11 10.3a1 1 0 000 1.4A1 1 0 119.6 13a2.9 2.9 0 010-4L14.4 4a3.9 3.9 0 015.5 5.5l-2 2zz<svg viewBox="0 0 24 24" class="ng-star-inserted" style="width: 20px; height: 20px; margin-bottom: -4px;"><path fill="currentColor" d="z"></path></svg>html.parserZfeaturesr   )Z
model_nameZ	icon_pathpathrl   r   r   get_icon_model   s    z7CmfImportPlugin.create_tag_link.<locals>.get_icon_modeltext)hreftitleZviewModeZobjIdro   rp   aZinheritrt   )contenteditablert   spanZfalse)rw   zdata-renderedtruezdata-internal-linkzwiki-link-presentationzdata-macroszdata-macros-parameterszwiki-link-wrapclasszwiki-card-textz$inline-card-icon-and-title link-view)class_ru   zpadding-right: 5px;)Zstylez: zbackground-color: z; color: #fff;zcard-status)Zbs4rm   jsonrandomr7   rt   r   r?   rN   Znew_tagdumpsrK   rQ   r   r6   r   rn   statusloadZcolorstring)objr|   r}   rr   Zlink_paramsZsouplinkZlink_params_strZspan_wrapperrx   Z	icon_spanZ	name_spanZstatus_spanr   rl   r   create_tag_link   sH    	







zCmfImportPlugin.create_tag_link)N)r/   
__module____qualname__r
   staticmethodrM   r"   intr'   r*   r7   r@   classmethodr   r   r8   anyboolrJ   r\   rR   r_   rc   rd   re   rf   rg   rj   rk   r   __classcell__r   r   r   r   r   	   s:      Z
r   N)
typingr   Zcmf.includer:   r   Zcommon.fieldsr   Zcommon.models.cmf_importr   r   r   r   r   r   <module>   s
   