B
    Ef=                 @   sV   d dl mZ d dl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 )	    )OptionalN)*)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d+d, Zd-d. Z  Z S )0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}x2|  D ]&\}}x|D ]}||  krL|S qLW q>W 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   sZ   dgdgddgddgddd	gd
}x2|  D ]&\}}x|D ]}||  kr:|S q:W q,W dS )u+    Поиск priority по синониму u   минu   низкu
   обычнu   нормальнu   срокu
   высокu   блокирующu
   большu   крит)r         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}x2|  D ]&\}}x|D ]}||  kr6|S q6W q(W d	S )
ue    Поиск программных типов workflow для проектов по синониму Zagilebaseu   основнu   классическZhelpdeskZservicedeskZwiki)zproject.agilezproject.basezproject.helpdeskzproject.servicedeskzproject.wikizproject.agile)r   r   )r   r   Zlogic_prefixr   r   r   r   r   calc_logic_type1   s    

zCmfImportPlugin.calc_logic_type)
obj_fieldsr   c       	      C   s   i }i }i }x|  D ]\}}t|ttfr| j|}|dkrXdd | D d }n,|dkrxdd | D d }n| d }t|tjj	r||d||< q||d||< q|||< qW |||fS )Nparentc             S   s   g | ]}|j d kr|qS )
CmfProject)__name__).0mr   r   r   
<listcomp>K   s    z9CmfImportPlugin._get_any_table_fields.<locals>.<listcomp>r   )Z	executorsZ
spectatorsc             S   s   g | ]}|j d kr|qS )	CmfPerson)r+   )r,   r-   r   r   r   r.   N   s    )modelr   )
r   
isinstancedictlistr   r   Zrelated_models
issubclasscmfZ
CmfM2MBase)	r0   r(   related_objscurrent_objm2m_objs
field_namevalueZ
main_fieldZrelated_modelr   r   r   _get_any_table_fieldsA   s     z%CmfImportPlugin._get_any_table_fieldsNF)
cmf_importr(   
filter_objr   c             C   s  |  ||\}}}x8| D ],\}	}
| j||
d |
d d\}}|||	< qW x| D ]\}	}
||	dkrtg ||	< dddg}xl|D ]d}|
d |d}|r|d	}x>|D ]6}|| i}| j||
d |d\}}||	 | qW P qW qVW |tjkrt|std
|d< dd |dg D }d|kr:d|d< d|d< d|krttjj|d dgd}|rh|dfS |d |d< |tj	krdd|d gdd|d gg}|dr|dd|d g |tj
krdd|d gdd|d gddtjj|d d
dgdd|d gg}|r|}ng }ddddg}xZ|D ]R}||d}|r*|dkrh|d|d|gdd|gg n||d|g P q*W |sx\| D ]P\}}|rt|tjjstt||tjr|| ddt|jg qW d}|rd d |D }|d! |j||d"}|rdnd
}|r,|n|||dd
d#}x"| D ]\}}t||| qJW |r|jrd
}|||dd
d#}x"| D ]\}}t||| qW |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: Фильтр для проверки на существование объекта в БД
        r0   r   )r0   r(   NZext_idr   email ,TZ
user_localc             S   s   g | ]}|j jqS r   )r   r:   )r,   Zpgr   r   r   r.      s    z<CmfImportPlugin.process_any_table_fields.<locals>.<listcomp>Zrg_member_ofZServiceDeskClientFZemail_if_self_changesz**)r>   r   Zloginr   z==Zworkflowr   r)   Z
cmf_authorZcmf_created_at)ZdayfirsttextORZ_idc             S   s   g | ]}|qS r   r   )r,   r9   r   r   r   r.      s    r   )filterr   )r<   r   import_originalr*   )Zsave_import)r;   r   process_any_table_fieldsr   splitstripappendr   r/   Z	CmfStatusZ
CmfCommentdateutilparserparser1   r5   Z	CmfEntityr4   getattrr   Z
CmfRelBasestridsetattrZ
is_changedrD   is_new
class_namesave)clsr<   r0   r(   r=   Zdont_updater6   r7   r8   Zmain_field_nameZrelated_infoZrelated_obj_field_namesr9   Zfield_valuevaluesr:   Zrelated_obj_fieldsZrg_member_of_codeZexisted_personZ_filterZuniq_field_namesZuniq_field_nameZuniq_field_valueZexisting_obj_fieldsrP   Znew_objr   r   r   rE   Z   s    









"
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   rZ   r[   r\   r   r]   r   r   r   _init_secret   s    zCmfImportPlugin._init_secretr   )depthrZ   r[   r\   c               s*   | j r| ||| t j|d|i|S )Nr`   )rP   r_   r	   rR   )r   r`   rZ   r[   r\   r   r   )r   r   r   rR      s    zCmfImportPlugin.save)forcec               s>   t jjdd| jgddddgd}|  t j|d|i|S )NrY   z==rZ   r[   r\   )rC   r   ra   )r   r^   r   rN   deleter	   )r   ra   r   r   r]   )r   r   r   rb      s    zCmfImportPlugin.deletec             C   s
   t  dS )uJ   
        Формирование шаблона настроек
        N)NotImplemented)r   r<   r   r   r   tmplt_import_settings   s    z%CmfImportPlugin.tmplt_import_settingsc             C   s
   t  dS )u9   
        Предпросмотр импорта
        N)rc   )r   r<   r   r   r   preview   s    zCmfImportPlugin.previewc             C   s
   t  dS )u-   
        Запуск импорта
        N)rc   )r   r<   r   r   r   process_import   s    zCmfImportPlugin.process_importc               C   s
   t  dS )uC   
        Маппинг полей по умолчанию
        N)rc   r   r   r   r   calc_models_settings   s    z$CmfImportPlugin.calc_models_settingsc             O   s
   t  dS )uK   
        Тестирование подключения к апи
        N)rc   )r   r   r   r   r   r   test  s    zCmfImportPlugin.testc             C   s
   t  d S )N)rc   )r   r   r   r   download_data  s    zCmfImportPlugin.download_datac             C   s
   t  d S )N)rc   )r   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| 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r||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>zhtml.parser)featuresr   )Z
model_nameZ	icon_pathpath)rk   r   r   get_icon_model  s    z7CmfImportPlugin.create_tag_link.<locals>.get_icon_modelrA   )hreftitleZviewModeZobjIdZ	modelNamezhtml.parser)rm   aZinheritrp   )contenteditablerp   spanZfalse)rs   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_rq   zpadding-right: 5px;)Zstylez: zbackground-color: z; color: #fff;zcard-status)Zbs4rk   jsonrandomr2   rp   r   r:   rN   rQ   Znew_tagdumpsrH   r   r1   r   rl   statusloadZcolorstring)objrx   ry   ro   Zlink_paramsZsouplinkZlink_params_strZspan_wrapperrt   Z	icon_spanZ	name_spanZstatus_spanr   )rk   r   create_tag_link  sD    	







zCmfImportPlugin.create_tag_linkc             C   s   d S )Nr   )r   r~   r   r   r   calc_ext_hrefA  s    zCmfImportPlugin.calc_ext_hrefc             C   s   d S )Nr   )r   r~   r   r   r   calc_dump_pathD  s    zCmfImportPlugin.calc_dump_path)NF)!r+   
__module____qualname__r
   staticmethodrM   r   intr%   r'   r2   r;   classmethodr   r   r3   anyboolrE   r_   rR   rb   rd   re   rf   rg   rh   ri   rj   r   r   r   __classcell__r   r   )r   r   r   
   s0    v4r   )typingr   rI   Zcmf.includer5   r   Zcommon.fieldsr   Zcommon.models.cmf_importr   r   r   r   r   r   <module>   s   