B
    Yfx6                 @   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d0e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 )1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   z==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 }yddd | j |dD }dd | j j|dddD }|rd| dd	d
dd|iid}|| W n\ tk
r } z:t| tjj	|dddgd}	|	
 d}
|
 rt|
|d}t|}xL|d D ]@}|
|d|d}| rt|}|t| W d Q R X qW g }xT|	dg D ]D}|
|d|d}| r2t|}|t| W d Q R X q2W |r| dd	d
dd|iid}|| W d Q R X n W d 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>zchildren.pagec             S   s   g | ]}|qS r   r   )r-   r.   r   r   r   r/   9   s    r   Zarchived)statusZ_archived_pagesarchiveu!   Архивные страницыZpageresults)r   r   titleZchildrenr   zplugin.*zplugin.plugin.*)r   r$   projectsz	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   resr1   r7   e
cmf_importdump_dirfprojectZroot_page_idZdoc_filef2Zarchived_page_idr   r   r   r	   4   sH    





 z#CmfPluginConfluence.get_space_pages)rD   c       	   
   O   s   d}y | 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 dd}~X Y nX |S )uI    Получает общее количество пространств r   z
type=spaceT)cqllimitZinclude_archived_spacesZ	totalSizer   zplugin.*zplugin.plugin.*)r   r$   r4   c             s   s   | ]}|  rd V  qdS )   N)is_dir)r-   pr   r   r   	<genexpr>l   s    z7CmfPluginConfluence.get_total_spaces.<locals>.<genexpr>N)r   ZconnrL   r9   r:   r;   r   r<   r%   r=   r>   r?   sumZiterdir)	r   rD   r    r   ZtotalZresponserF   rG   rH   r   r   r   r
   `   s    
z$CmfPluginConfluence.get_total_spacesc             O   s   g }yDx>| j j|dD ],}|d dkr8|d  d|d< || qW W n tk
r } z~t| tjj|dddgd	}|	 
d
}	|	 rxBt|	D ]0}
t|	
|
d}|t| W d Q R X qW n W d d }~X Y nX |S )N)slicer   Zpersonalr   u(    (Личное пространство)r   zplugin.*zplugin.plugin.*)r   r$   r4   z	info.json)r   r   r8   r9   r:   r;   r   r<   r%   r=   r>   r?   oslistdirr@   rA   rB   )r   rD   rS   r    r   rE   r.   rF   rG   rH   rC   rI   r   r   r   r   q   s     
 z"CmfPluginConfluence.get_all_spacesc             O   s   y| j j|ddS  tk
r } zt| tjj|dddgd}| 	d}|
 rxLt|D ]:}|	|d|}	|	
 rdt|		d	}
t|
S Q R X qdW n td
W d d }~X Y nX d S )Nzchildren.page)expandr   zplugin.*zplugin.plugin.*)r   r$   r4   r6   z	info.jsonu,   Документ не попал в дамп)r   r   r9   r:   r;   r   r<   r%   r=   r>   r?   rT   rU   r@   rA   rB   )r   Zpage_idrD   r    r   rF   rG   rH   rC   Zdoc_dirrI   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_importrX   r   calc_import_settings)r   rG   rX   r   r   r   rZ      s    z(CmfPluginConfluence.calc_import_settingsc             C   s   ddl m} || j| S )u   
        Предварительный просмотр данных
        :param models.CmfImport cmf_import: Объект импорта.
        r   )rX   )rY   rX   r   preview)r   rG   rX   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)rY   rX   r   r   process_import)r   rG   rX   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   )rY   rX   r   download_data)r   rG   rX   r   r   r   r^      s    z!CmfPluginConfluence.download_datac             C   s   ddl m} || j| S )Nr   )rX   )rY   rX   r   download_files)r   rG   rX   r   r   r   r_      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webuirN   baser    )r+   r`   r%   rT   pathjoinr   r   ZschemeZnetlocr   calc_ext_href)r   r.   linkZself_url)r!   r   r   re      s    z!CmfPluginConfluence.calc_ext_hrefc                s2   | dg |jdkr&|jr&|jd S t |S )Nr`   )
CmfProjectCmfDocumentrc   )r+   r   r`   r   calc_dump_path)r   r.   )r!   r   r   ri      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  }x^t|	jD ]P}|	jj|	j d| |||
|dd}|!| |"  |	j#jd|  qW d}|
d}|st$|d d d}xj|	%|d ||D ]T}|d |d krq|d |	j&krq|d dkrԐq|d7 }|'| qW x|D ]}|'d qW |	j#jd x|D ]}|(  ~qW |	j#) rRt*  |	j#j+d  d S |j  | }|	j#jd!||,   d" d}x|- s||
 7 }qW |	j#jd#|  ||7 }W d Q R X W d Q R X |S )$Nr   )cmf_context)rX   r   r   )r   r$   
logic_typer`   zproject.agile:defaultZtree_parent_idz==r   u   Документы)r#   r$   r1   )Zsys_typeZtree_parentuD   Грузим документы в несколько потоков_process_document_fork)	obj_queue
done_queuerJ   archive_folder)targetr   r   u.   Параллельный обработчик homepager5   )r   rc   r   r0   ZtrashedrN   ZDONEu0   Ждем обработки документовu   Импорт прерванu*   ------------------------ скорость u'    документов в секундуuI   Закончили обработку документов, ошибок ).ZdatetimeZcmf.apprj   rY   rX   ZcmfutilZdisable_aclZdisable_notifyr   r<   r%   r   r   Z_load_selected_objsrg   rk   r   rh   r   r`   r,   root_parentZqueueZQueueZ	CmfFolderZloggerinfoZnowrangeZthreading_max_forksZ	threadingZThreadrl   r8   startrG   dictZ_get_documentsZ_selected_objsZputrd   Z	is_cancelZcommit_with_eventZwarningZtotal_secondsempty)rD   Z
project_idoffsetrM   Zdtrj   rX   errorsrG   Z
api_importrJ   rr   ZspaceZobj_processrm   rn   ro   siprocZcntrq   docZdiffZ
has_errorsr   r   r   process_document_fork   s    







z)CmfPluginConfluence.process_document_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   listrZ   r[   boolr\   r]   r^   r_   re   ri   staticmethodr~   __classcell__r   r   )r!   r   r      s2   	,	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   