U
    $fE                     @   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Z
ejjjjjddddg 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d2e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 ed0d1 Z!  Z"S )3CmfPluginConfluence)
confluenceNTget_all_spacesget_space_pagesget_total_spacesget_page_by_idc              	   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>7   s     z7CmfPluginConfluence.get_space_pages.<locals>.<listcomp>children.pagec                 S   s   g | ]}|qS r   r   r0   r   r   r   r3   9   s     r   Zarchived)statusZ_archived_pagesarchiveu!   Архивные страницыZpageresults)r   r   titleZchildrenr   plugin.*plugin.plugin.*r   r'   projects	info.jsonZ
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   resr6   r?   e
cmf_importdump_dirfprojectZroot_page_idZdoc_filef2Zarchived_page_idr   r   r   r	   4   sL    







z#CmfPluginConfluence.get_space_pages)rL   c           	   
   O   s   d}z | j jjdddd}|d }W nr tk
r } zTt| tjj|dddgd	}|	 
d
}| rtdd | D }n W 5 d}~X Y nX |S )uI    Получает общее количество пространств r   z
type=spaceT)cqllimitZinclude_archived_spacesZ	totalSizer   r9   r:   r;   r<   c                 s   s   | ]}|  rd V  qdS )   N)is_dir)r1   pr   r   r   	<genexpr>l   s      z7CmfPluginConfluence.get_total_spaces.<locals>.<genexpr>N)r   ZconnrT   rA   rB   rC   r   rD   r(   rE   rF   rG   sumZiterdir)	r   rL   r    r   totalZresponserN   rO   rP   r   r   r   r
   `   s    
z$CmfPluginConfluence.get_total_spacesc                 O   s   g }z@| j j|dD ],}|d dkr6|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 )N)slicer   Zpersonalr   u(    (Личное пространство)r   r9   r:   r;   r<   r=   )r   r   r@   rA   rB   rC   r   rD   r(   rE   rF   rG   oslistdirrH   rI   rJ   )r   rL   r\   r    r   rM   r2   rN   rO   rP   rK   rQ   r   r   r   r   q   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 )Nr4   )expandr   r9   r:   r;   r<   r>   r=   u,   Документ не попал в дамп)r   r   rA   rB   rC   r   rD   r(   rE   rF   rG   r]   r^   rH   rI   rJ   )r   Zpage_idrL   r    r   rN   rO   rP   rK   Zdoc_dirrQ   r   r   r   r      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_importrb   r   calc_import_settingsr   rO   rb   r   r   r   rd      s    z(CmfPluginConfluence.calc_import_settingsc                 C   s   ddl m} || j| S )u   
        Предварительный просмотр данных
        :param models.CmfImport cmf_import: Объект импорта.
        r   ra   )rc   rb   r   previewre   r   r   r   rf      s    zCmfPluginConfluence.previewc                 C   s"   ddl m} d|_|| j| S )ux   
        Процесс импорта
        :param models.CmfImport cmf_import: Объект импорта.
        r   ra   u)   Импорт данных из Confluence)rc   rb   r   r   process_importre   r   r   r   rg      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   ra   )rc   rb   r   download_datare   r   r   r   rj      s    z!CmfPluginConfluence.download_datac                 C   s   ddl m} || j| S ri   )rc   rb   r   download_filesre   r   r   r   rk      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webuirV   baser    )r.   rl   r(   r]   pathjoinr   r   ZschemeZnetlocr   calc_ext_href)r   r2   linkZself_urlr!   r   r   rq      s    z!CmfPluginConfluence.calc_ext_hrefc                    s2   | dg |jdkr&|jr&|jd S t |S )Nrl   )
CmfProjectCmfDocumentro   )r.   r   rl   r   calc_dump_path)r   r2   r!   r   r   ru      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}|stt$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#) rNt*  |	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_contextra   r   r   r;   
logic_typerl   project.agile:defaulttree_parent_idr$   r      Документыr%   r6   )Zsys_typeZtree_parentuD   Грузим документы в несколько потоков_process_document_fork)	obj_queue
done_queuerR   archive_foldertargetr   r   .   Параллельный обработчик homepager   ro   r   r5   trashedrV   DONEu0   Ждем обработки документов   Импорт прерван*   ------------------------ скорость '    документов в секундуuI   Закончили обработку документов, ошибок ).datetimecmf.apprw   rc   rb   cmfutildisable_acldisable_notifyr   rD   r(   r   r   _load_selected_objsrs   rx   r   rt   r   rl   r/   root_parentqueueQueueZ	CmfFolderloggerinfonowrangethreading_max_forks	threadingThreadr|   r@   startrO   dict_get_documents_selected_objsputrp   	is_cancelcommit_with_eventwarningtotal_secondsempty)rL   
project_idoffsetrU   dtrw   rb   errorsrO   
api_importrR   r   spaceobj_processr}   r~   r   siproccntr   docdiff
has_errorsr   r   r   process_document_fork   s    







z)CmfPluginConfluence.process_document_forkc              
   C   s  dd l }ddlm} ddlm} d}t  t n 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 }|jd |j  }t|	jD ]J}|	jj|	jd| ||dd}| | |!  |	j"jd|  q|
d}|sZt#d d}d}|	$|d ||D ]T}|d |d krqp|d |	j%krqp|d dkrqp|d7 }|&| qp|D ]}|&d q|	j"jd |D ]}|'  ~q|	j"( r8t)  |	j"j*d W 5 Q R  W 5 Q R  d S |j  | }||+  }|	j"jd|dd  d}|, s||
 7 }qn|	j"jd!|  ||7 }W 5 Q R X W 5 Q R X |S )"Nr   rv   ra   r   r   r;   rx   rl   ry   rz   r$   r   r{   r%   u_   Обрабатываем версии документов в несколько потоковZ_process_doc_versions_fork_)r}   r~   r   r   r   r   ro   r   r5   r   rV   r   u=   Ждем обработки версий документовr   r   z.3fr   uW   Закончили обработку версий документов. Ошибок: )-r   r   rw   rc   rb   r   r   r   r   rD   r(   r   r   r   rs   rx   r   rt   r   rl   r/   r   r   r   r   r   r   r   r   r   r   Z_process_doc_versions_forkr@   r   rO   r   r   r   r   rp   r   r   r   r   r   )rL   r   r   rU   r   rw   rb   r   rO   r   rR   r   r   r   r}   r~   r   r   r   r   r   r   r   Zspeedr   r   r   r   process_doc_versions_fork.  s    






z-CmfPluginConfluence.process_doc_versions_fork)N)#__name__
__module____qualname__modulesr   r'   cmf_plugin_confluencer   Zui_meta_skipr-   Z	api_allowZapi_methodsr   r   r)   propertyr	   strr
   r   r   listrd   rf   boolrg   rh   rj   rk   rq   ru   staticmethodr   r   __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   