U
    S2f 2                     @   sH   d dl m Z  d dlmZmZ d dlT d dlZG dd dejjj	j
Z
dS )    )cached_property)urlparse
urlunsplit)*Nc                       s   e Zd Zejjjjjd ZdZ	dd Z
ddddd fdd
Zd	d
 fdd
Zedd Zdd ZedddZedddZedddZedddZedddZedddZdd  Zd!d" Z fd#d$Z fd%d&Zed'd( Z  ZS ))CmfPluginConfluence)
confluenceNc              	   K   s@   | j r
d S tjf | j| j| j|||d|}|  || _ d S )N)nametypetokenext_url	ext_login	ext_token)pluginmodels	CmfPlugincode
class_nameidsave)selfr   r   r   kwargsr    r   4./modules/confluence/models/cmf_plugin_confluence.py_init_secret   s      z CmfPluginConfluence._init_secretr   )depthr   r   r   c                   s*   | j r| ||| t j|d|i|S )Nr   )Zis_newr   superr   )r   r   r   r   r   argsr   	__class__r   r   r      s    zCmfPluginConfluence.saveF)forcec                   s>   t jjdd| jgddddgd}|  t j|d|i|S )Nr
   ==r   r   r   filterfieldsr   )r   r   getr   deleter   )r   r   r   r   r   r   r   r   r%      s
    
zCmfPluginConfluence.deletec              	   C   sn   | j shddlm} | ddddddd	g || jjj| jjj| jj	 | jj
	 | jjj| jjjd
| _ | j S )Nr   )ConfluenceApir   zplugin.ext_urlzplugin.ext_loginzplugin.ext_tokenzplugin.verify_sslzplugin.cloudzplugin.ext_password)ZurlZloginZpasswordr
   
verify_sslcloud) _CmfPluginConfluence__confluenceZmodules.confluence.apir&   load_fieldsr   r   valuer   Zext_passwordZdecryptr   r'   r(   )r   r&   r   r   r   r      s     


zCmfPluginConfluence.confluencec                 O   s  g }zddd | j |dD }dd | j j|dddD }|rd| dd	d
dd|iid}|| W nT tk
r } z2t| tjj	|dddgd}	|	
 d}
|
 rt|
|d}t|}|d D ]@}|
|d|d}| rt|}|t| W 5 Q R X qg }|	dg D ]D}|
|d|d}| r,t|}|t| W 5 Q R X q,|r| dd	d
dd|iid}|| W 5 Q R X n W 5 d }~X Y nX |S )Nc                 S   s   g | ]}|qS r   r   .0objr   r   r   
<listcomp>0   s     z7CmfPluginConfluence.get_space_pages.<locals>.<listcomp>children.pagec                 S   s   g | ]}|qS r   r   r,   r   r   r   r/   2   s     r   Zarchived)statusZ_archived_pagesarchiveu!   Архивные страницыZpageresults)r   r	   titleZchildrenr   plugin.*plugin.plugin.*r   r#   projects	info.json
root_pages	documentsarchived_pages)r   Zget_root_pages_from_spaceZget_all_pages_from_spaceappend	Exceptiongdebugr   	CmfImportr$   get_download_pathjoinpathexistsopenjsonload)r   keycmf_import_idr   r   resr2   r<   e
cmf_importdump_dirfprojectZroot_page_idZdoc_filef2Zarchived_page_idr   r   r   get_space_pages-   sL    







z#CmfPluginConfluence.get_space_pages)rI   c                 O   s   g }z<| j  D ],}|d dkr2|d  d|d< || qW n tk
r } zzt| tjj|dddgd}|	 
d	}| rt|D ]0}	t|
|	d
}
|t|
 W 5 Q R X qn W 5 d }~X Y nX |S )Nr	   Zpersonalr   u(    (Личное пространство)r   r5   r6   r7   r8   r9   )r   get_all_spacesr=   r>   r?   r@   r   rA   r$   rB   rC   rD   oslistdirrE   rF   rG   )r   rI   r   r   rJ   r.   rK   rL   rM   rH   rN   r   r   r   rR   Y   s     
z"CmfPluginConfluence.get_all_spacesc                 O   s   z| j j|ddW S  tk
r } zt| tjj|dddgd}| 	d}|
 rt|D ]R}|	|d|}	|	
 rdt|		d	$}
t|
W  5 Q R     W Y S Q R X qdn td
W 5 d }~X Y nX d S )Nr0   )expandr   r5   r6   r7   r8   r;   r9   u,   Документ не попал в дамп)r   get_page_by_idr>   r?   r@   r   rA   r$   rB   rC   rD   rS   rT   rE   rF   rG   )r   Zpage_idrI   r   r   rK   rL   rM   rH   Zdoc_dirrN   r   r   r   rV   m   s    
,z"CmfPluginConfluence.get_page_by_id)returnc                 C   s   ddl m} || j| S )u   
        Инициализация настроек
        :param models.CmfImport cmf_import: Объект импорта.
        r   ConfluenceAPIImport)modules.confluence.api_importrY   r   calc_import_settingsr   rL   rY   r   r   r   r[      s    z(CmfPluginConfluence.calc_import_settingsc                 C   s   ddl m} || j| S )u   
        Предварительный просмотр данных
        :param models.CmfImport cmf_import: Объект импорта.
        r   rX   )rZ   rY   r   previewr\   r   r   r   r]      s    zCmfPluginConfluence.previewc                 C   s"   ddl m} d|_|| j| S )ux   
        Процесс импорта
        :param models.CmfImport cmf_import: Объект импорта.
        r   rX   u)   Импорт данных из Confluence)rZ   rY   r   r   process_importr\   r   r   r   r^      s    z"CmfPluginConfluence.process_importc                 C   s   g S )Nr   )r   r   r   r   calc_models_settings   s    z(CmfPluginConfluence.calc_models_settingsc                 C   s   ddl m} || j| S Nr   rX   )rZ   rY   r   download_datar\   r   r   r   ra      s    z!CmfPluginConfluence.download_datac                 C   s   ddl m} || j| S r`   )rZ   rY   r   download_filesr\   r   r   r   rb      s    z"CmfPluginConfluence.download_filesc                    s   | dg |jr|jd dr|jd ddd  }|jd drbtj|jd d |S t|jd d }t|j|j	|ddfS t
 |S )Nimport_raw_jsonZ_linksZwebui   baser    )r*   rc   r$   rS   pathjoinr   r   ZschemeZnetlocr   calc_ext_href)r   r.   linkZself_urlr   r   r   ri      s    z!CmfPluginConfluence.calc_ext_hrefc                    s2   | dg |jdkr&|jr&|jd S t |S )Nrc   )
CmfProjectCmfDocumentrg   )r*   r   rc   r   calc_dump_path)r   r.   r   r   r   rm      s    
z"CmfPluginConfluence.calc_dump_pathc                 C   s  dd l }ddlm} ddlm} d}t  t  tj	j
| ddgd}||jj|}	|	  tjj
|ddgd}
|
}|
jjd	krtjj
d
d|
jgdddggdgd}|jj}||	_g }|	j }|	j }tjj
d|
d}|jd |j  }t|	jD ]P}|	jj|	j d| |||
|dd}|!| |"  |	j#jd|  qd}|
d}|s|t$|d d d}|	%|d ||D ]T}|d |d krq|d |	j&krq|d dkrΐq|d7 }|'| q|D ]}|'d q|	j#jd |D ]}|(  ~q|	j#) rVt*  |	j#j+d  W 5 Q R  W 5 Q R  d S |j  | }|	j#jd!||,   d" d}|- s||
 7 }q|	j#jd#|  ||7 }W 5 Q R X W 5 Q R X |S )$Nr   )cmf_contextrX   r   r   r7   
logic_typerc   zproject.agile:defaultZtree_parent_idr    r   u   Документыr!   r2   )Zsys_typeZtree_parentuD   Грузим документы в несколько потоков_process_document_fork)	obj_queue
done_queuerO   archive_folder)targetr   r   u.   Параллельный обработчик homepager:   )r   rg   r   r1   Ztrashedrd   ZDONEu0   Ждем обработки документовu   Импорт прерванu*   ------------------------ скорость u'    документов в секундуuI   Закончили обработку документов, ошибок ).ZdatetimeZcmf.apprn   rZ   rY   ZcmfutilZdisable_aclZdisable_notifyr   rA   r$   r   r   Z_load_selected_objsrk   ro   r   rl   r   rc   r+   root_parentZqueueZQueueZ	CmfFolderloggerinfoZnowrangeZthreading_max_forks	threadingThreadrp   r=   startrL   dictZ_get_documentsZ_selected_objsZputrh   Z	is_cancelZcommit_with_eventZwarningZtotal_secondsempty)rI   Z
project_idoffsetlimitZdtrn   rY   errorsrL   Z
api_importrO   rv   ZspaceZobj_processrq   rr   rs   siprocZcntru   docZdiffZ
has_errorsr   r   r   process_document_fork   s    






z)CmfPluginConfluence.process_document_fork)__name__
__module____qualname__modulesr   r#   cmf_plugin_confluencer   Zui_meta_skipr)   r   r   r%   propertyrQ   strrR   rV   listr[   r]   boolr^   r_   ra   rb   ri   rm   staticmethodr   __classcell__r   r   r   r   r      s(   	
,	r   )r   Zurllib.parser   r   Zcmf.includeZ/modules.confluence.fields.cmf_plugin_confluencer   r   r#   r   r   r   r   r   r   <module>   s   