
    6i{                         d dl mZ d dlmZ d dlmZmZ d dlZd dl	T ed
d            Z
 G d d	ej        j        j        j                  ZdS )    )contextmanager)Path)urlparse
urlunsplitN)*  c              #      K   ddl }|                                }|| k     r|                    |            	 dV  |                    |           dS # |                    |           w xY w)u  
    HACK: Временно устанавливает минимальный лимит рекурсии, если текущий ниже.

    Args:
        min_limit (int, optional): минимальное значение лимита рекурсии. Defaults to 3000.
    r   N)sysgetrecursionlimitsetrecursionlimit)	min_limitr
   current_limits      4./modules/confluence/models/cmf_plugin_confluence.pyensure_recursion_limitr   	   s       JJJ))++My  i(((-m,,,,,m,,,,s   A A)c                       e Zd Zej        j        j        j        j        dz   ZdZ	dZ
ej        j        j        j        j        g dz   Zd Zddddd fd
Zd	d
 fd
Zed             Zd ZdefdZd#defdZdefdZdefdZdefdZdefdZdefdZd Zd Z fdZ fdZed             Z ed             Z!d$dZ"d%dZ#d  Z$d! Z%d" Z& xZ'S )&CmfPluginConfluence)
confluenceNT)get_all_spacesget_space_pagesget_total_spacesget_page_by_idc           
          | j         rd S 	 t          j        d| 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    s         r   _init_secretz CmfPluginConfluence._init_secret(   si    ; 	F1! gtytdg*1YR[g g_eg g    r   )depthr   r   r   c                v    | j         r|                     |||            t                      j        |d|i|S )Nr+   )is_newr)   superr&   )r'   r+   r   r   r   argsr(   	__class__s          r   r&   zCmfPluginConfluence.save1   sE    ; 	=gy)<<<uww|T99&999r*   F)forcec                    t           j                            dd| j        gg d          }|                                  t                      j        |d|i|S )Nr   ==)r   r   r   r   filterfieldsr1   )r!   r"   getr%   deleter.   )r'   r1   r/   r(   r    r0   s        r   r8   zCmfPluginConfluence.delete6   sc    !%%gtTW-E-[-[-[ & ] ]uww~t;5;F;;;r*   c                 l   | j         sddlm} |                     g d            || j        j        j        | j        j        j        | j        j        	                                | j        j
        	                                | j        j        j        | j        j        j                  | _         | j         S )Nr   )ConfluenceApi)r    zplugin.ext_urlzplugin.ext_loginzplugin.ext_tokenzplugin.verify_sslzplugin.cloudzplugin.ext_password)urlusernamepasswordr   
verify_sslcloud) _CmfPluginConfluence__confluencemodules.confluence.apir:   load_fieldsr    r   valuer   ext_passworddecryptr   r>   r?   )r'   r:   s     r   r   zCmfPluginConfluence.confluence<   s      	<<<<<<       !.K'-.4199;;k+3355;17k'-! ! !D   r*   c           	         g }	 | j         5 }d |                    |d          D             }d |                    |dd          D             }|r#| ddd	d
d|iid}|                    |           d d d            n# 1 swxY w Y   n3# t          $ r%}	t
                              |	           t          j        	                    |g d          }
|

                                                    d          }|                                rt          |                    |d                    5 }t                              |          }|d         D ]}|                    |d|d          }|                                rTt          |          5 }|                    t                              |                     d d d            n# 1 swxY w Y   g }|	                    dg           D ]}|                    |d|d          }|                                rTt          |          5 }|                    t                              |                     d d d            n# 1 swxY w Y   |r#| ddd	d
d|iid}|                    |           d d d            n# 1 swxY w Y   n Y d }	~	nd }	~	ww xY w|S )Nc                     g | ]}|S r   r   .0objs     r   
<listcomp>z7CmfPluginConfluence.get_space_pages.<locals>.<listcomp>Z   s    aaassaaar*   zchildren.pagec                     g | ]}|S r   r   rH   s     r   rK   z7CmfPluginConfluence.get_space_pages.<locals>.<listcomp>\   s    iii33iiir*   r   archived)status_archived_pagesarchiveu!   Архивные страницыpageresults)r%   r   titlechildrenr   zplugin.*zplugin.plugin.*r%   r6   projects	info.json
root_pages	documentsarchived_pages)r   get_root_pages_from_spaceget_all_pages_from_spaceappend	Exceptiongdebugr!   	CmfImportr7   get_download_pathjoinpathexistsopenjsonload)r'   keycmf_import_idr/   r(   resr   rP   r[   e
cmf_importdump_dirfprojectroot_page_iddoc_filef2archived_page_ids                     r   r   z#CmfPluginConfluence.get_space_pagesV   s   (	 /Jaaj&J&J3P_&`&`aaaii**M*McST]g*M*h*hiii /!$555 )!D%+i-A$B	& &N JJ~.../ / / / / / / / / / / / / / /  	 	 	GGAJJJ)--GkGkGk-llJ!3355>>zJJH   (++C==>> 3!"iillG(/(= : :#+#4#4S+|U`#a#a#??,, :!%h :2 #

499R== 9 9 9: : : : : : : : : : : : : : : G,3KK8H",M,M > >(#+#4#4S+GWYd#e#e#??,, >!%h >2 'tyy}} = = => > > > > > > > > > > > > > > 3%("9"9"9$-%H)/)W1E(F	* * 

>222)3 3 3 3 3 3 3 3 3 3 3 3 3 3 3, 7	8 
s   B A(A?3B ?BB BB J<BJ73A J%.G	J%GJ%GAJ%..I(	J%(I,,J%/I,0)J%J7%J)	)J7,J)	-J77J<rj   c                    d}	 | j         5 }|                    ddd          }ddd           n# 1 swxY w Y   |d         }n# t          $ r}t                              |           t
          j                            |g d          }|                                	                    d	          }	|	
                                r,t          d
 |	                                D                       }n Y d}~nd}~ww xY w|S )uI    Получает общее количество пространств r   z
type=spaceT)cqllimitinclude_archived_spacesN	totalSizerU   rV   rW   c              3   B   K   | ]}|                                 d V  dS )   N)is_dir)rI   ps     r   	<genexpr>z7CmfPluginConfluence.get_total_spaces.<locals>.<genexpr>   s/      HH!QXXZZHAHHHHHHr*   )r   rv   r_   r`   ra   r!   rb   r7   rc   rd   re   sumiterdir)
r'   rj   r/   r(   totalr   responserl   rm   rn   s
             r   r   z$CmfPluginConfluence.get_total_spaces   s\   	 cJ%>>l!]a>bbc c c c c c c c c c c c c c c[)EE 	 	 	GGAJJJ)--GkGkGk-llJ!3355>>zJJH   HHx'7'7'9'9HHHHH 	 s3   A 0A 4A 4A 
C=B%C88C=c           	      J   |                      dg           g }	 | j        5 }|                    |          D ]}|d         |d<   |d         }|d         dk    r|dz  }n.|dt          |d	                                                    d
z  }d| j        j         d|d          d}	t          j        	                    ddd|	 dgddg          }
|
r|dz  }||d<   |
                    |           	 d d d            n# 1 swxY w Y   n# t          $ r	}t                              |           t          j                            |g d          }|                                                    d          }|                                rt&                              |          D ]j}t+          |                    |d                    5 }|
                    t,                              |                     d d d            n# 1 swxY w Y   kn Y d }~nd }~ww xY w|S )Nzplugin.source_hash)slicer   original_namer   personalu(    (Личное пространство)z (ri   )::r%   ext_idLIKE%T--)r5   include_deletedr6   u    [импортирован]rU   rV   rW   rX   )rB   r   r   strupperr    source_hashr!   
CmfProjectsgetr^   r_   r`   ra   rb   r7   rc   rd   re   oslistdirrf   rg   rh   )r'   rj   r   r/   r(   rk   r   space
space_nameproject_ext_idrp   rl   rm   rn   ri   ro   s                   r   r   z"CmfPluginConfluence.get_all_spaces   s   ./000	 &J'66U6CC & &E-26]E/*!&vJV}
22"&PP

 #&G3uU|+<+<+B+B+D+D&G&G&GG
%T$+*A%T%TU4[%T%T%TN$/44 (&2Gn2G2G2GH(, $v 5  G
  D"&CC
$.E&MJJu%%%%#&& & & & & & & & & & & & & & &&  
	 
	 
	GGAJJJ)--GkGkGk-llJ!3355>>zJJH   ::h// 1 1Ch//[AABB 1a

499Q<<0001 1 1 1 1 1 1 1 1 1 1 1 1 1 11 	1 1 1 1 1
	 
s`   D CC?3D ?DD DD H B7H.H<HHHHHH c                    	 | j         5 }|                    |dd          cd d d            S # 1 swxY w Y   d S # t          $ r1}t                              |           t
          j                            |g d          }|                                	                    d          }|
                                rt                              |          D ]}	|	                    |	d|          }
|

                                r[t          |
	                    d                    5 }t                              |          cd d d            c cY d }~S # 1 swxY w Y   n t          d	          d }~ww xY w)
NFT)detailedwith_childrenrU   rV   rW   rZ   rX   u,   Документ не попал в дамп)r   r   r_   r`   ra   r!   rb   r7   rc   rd   re   r   r   rf   rg   rh   )r'   page_idrj   r/   r(   r   rl   rm   rn   ri   doc_dirro   s               r   r   z"CmfPluginConfluence.get_page_by_id   s#   	L ^J!005X\0]]^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 	L 	L 	LGGAJJJ)--GkGkGk-llJ!3355>>zJJH   ::h// 0 0C&//['JJG~~'' 0!'"2"2;"?"?@@ 0A#'99Q<<0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 JKKK	LsX   ; .; 2; 2; E7C!E2'EE2E7EE2EE22E7returnc                 T    ddl m}  || j        |                                          S )u   
        Инициализация настроек
        :param models.CmfImport cmf_import: Объект импорта.
        r   ConfluenceAPIImport)modules.confluence.api_importr   r   calc_import_settingsr'   rm   r   s      r   r   z(CmfPluginConfluence.calc_import_settings   s8    
 	FEEEEE""4?J??TTVVVr*   c                 T    ddl m}  || j        |                                          S )u   
        Предварительный просмотр данных
        :param models.CmfImport cmf_import: Объект импорта.
        r   r   )r   r   r   previewr   s      r   r   zCmfPluginConfluence.preview   s8    
 	FEEEEE""4?J??GGIIIr*   c                     ddl m} d|_        | j        5 } |||                                          cddd           S # 1 swxY w Y   dS )ux   
        Процесс импорта
        :param models.CmfImport cmf_import: Объект импорта.
        r   r   u)   Импорт данных из ConfluenceN)r   r   r   r   process_importr'   rm   r   r   s       r   r   z"CmfPluginConfluence.process_import   s    
 	FEEEEEE
_ 	P
&&z:>>MMOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   A  AAc                     g S Nr   )r'   s    r   calc_models_settingsz(CmfPluginConfluence.calc_models_settings   s    	r*   c                     ddl m} | j        5 } |||                                          cd d d            S # 1 swxY w Y   d S Nr   r   )r   r   r   download_datar   s       r   r   z!CmfPluginConfluence.download_data   s    EEEEEE_ 	O
&&z:>>LLNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O   9= =c                     ddl m} | j        5 } |||                                          cd d d            S # 1 swxY w Y   d S r   )r   r   r   download_filesr   s       r   r   z"CmfPluginConfluence.download_files   s    EEEEEE_ 	P
&&z:>>MMOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Pr   c                 .   |                     dg           |j        r|j        d                             d          r|j        d                             d          dd          }|j        d                             d          r1t          j                            |j        d         d         |          S t          |j        d         d                   }t          |j        |j	        |ddf          S t                                          |          S )Nimport_raw_json_linkswebuir{   baser'    )rB   r   r7   r   pathjoinr   r   schemenetlocr.   calc_ext_href)r'   rJ   linkself_urlr0   s       r   r   z!CmfPluginConfluence.calc_ext_href   s    *+,,, 	T3#6x#@#D#DW#M#M 	T&x044W==abbAD"8,0088 Tw||C$7$A&$I4PPP#C$7$A&$IJJ!8?HOT2r"RSSSww$$S)))r*   c                     |                     dg           |j        dv r|j        r|j        d         S t                                          |          S )Nr   )r   CmfDocumentr   )rB   r$   r   r.   calc_dump_path)r'   rJ   r0   s     r   r   z"CmfPluginConfluence.calc_dump_path   sU    *+,,,>:::s?R:&v..ww%%c***r*   c                 ~	   dd l }ddlm} ddlm} d}t
                                          5  t
                                          5  t                      5  t          j
                            | ddg          } ||j        j        |          }	|	                                 t          j                            |g d          }
|
}|
j        j        dk    r.t          j                            d	d
|
j        gg dgdg          }|j        j        }||	_        g }|	j                            d          }|	j                                        }t          j                            d|
          }|j                            d           |j                                         }t;          |	j                  D ]w}|	j                             |	j!        d| |||
|d          }|"                    |           |#                                 |	j$        j                            d|            xd}|                    d          }|stK          d           }|	&                    |d         ||          D ]}|d         |	j'        vr|d         dk    r|dz  }|d         |d         |d         tQ          |d                   )                    d           |d         |d         k    d!}|*                    |           |D ]}|*                    d"           |	j$        j                            d#           |D ]}|+                                 ~|	j$        ,                                rQt[                       |	j$        j        .                    d$           	 d d d            d d d            d d d            d S |j                                         |z
  }|	j$        j                            d%||/                                z   d&           d}|0                                s+||                                z  }|0                                +|	j$        j                            d'|            ||z  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )(Nr   cmf_contextr   r   r    rV   )
logic_typer   descr_documentz#scheme_wf.default_document_workflowproject.agile:defaulttree_parent_idr3   r   r3      Документыr   r4      maxsizerP   )sys_typetree_parentuD   Грузим документы в несколько потоков_process_document_fork)	obj_queue
done_queuerp   archive_foldertargetr   r(   .   Параллельный обработчик homepage)r%   r   r%   rN   trashedr{   rS   r   rZ   )r%   rS   r   r   is_homepageDONEu0   Ждем обработки документов   Импорт прерван*   ------------------------ скорость '    документов в секундуuI   Закончили обработку документов, ошибок )1datetimecmf.appr   r   r   cmfutildisable_acldisable_notifyr   r!   rb   r7   r    r   _load_selected_objsr   r   r#   r   r%   r   rC   root_parentqueueQueue	CmfFolderloggerinfonowrangethreading_max_forks	threadingThreadr   r^   startrm   dict_get_documents_selected_objsr   rd   putr   	is_cancelcommit_with_eventwarningtotal_secondsempty)rj   
project_idoffsetrw   dtr   r   errorsrm   
api_importrp   r   r   obj_processr   r   r   siproccntr   docdoc_datadiff
has_errorss                             r   process_document_forkz)CmfPluginConfluence.process_document_fork  s   ''''''EEEEEE  "" `	! `	!G$:$:$<$< `	! `	!>T>V>V `	! `	!)--X-WWJ,,Z->-I:VVJ**,,,'++   ,  G "K!&*AAA$044-tWZ@BfBfBfg-. 5  
  /5E%0J"K"(..s.;;I#)//11J#-119RY1ZZN ""#ijjj!!A:9:: k k!+22%<5!55%.&0#**8	  3 	 	 ""4(((

%,112icg2i2ijjjjCyy,,H )4===!00vNN ( (t9J$===x=I--qd) \K#E&M22;;KHH#&t9#>  h''''# & &f%%%%!(--.`aaa#  		D$..00 !###%,445RSSSi`	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	!l ;??$$q(D!(-- AS4CUCUCWCW=W  A  A  A   J &&(( /jnn...
 !&&(( / !(--  /G  {E  /G  /G  H  H  Hj FA`	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	! `	!D sm   R2RMRR$R2<B<R8RRRRRR2R	R2"R	#R22R69R6c                    dd l }ddlm} ddlm} d}t
                                          5  t
                                          5  t                      5  t          j
                            | ddg          } ||j        j        |          }	|	                                 t          j                            |ddg          }
|
}|
j        j        d	k    r.t          j                            d
d|
j        gg dgdg          }|j        j        }||	_        g }|	j                            d          }|	j                                        }|j                            d           |j                                         }t9          |	j                  D ]u}|	j                            |	j         d| ||d          }|!                    |           |"                                 |	j#        j                            d|            vd}|	$                    |d         ||          D ]^}|d         dk    r|d         |	j%        vr|d         dk    r,|dz  }|d         |d         |d         d}|&                    |           _|D ]}|&                    d           |	j#        j                            d           |D ]}|'                                 ~|	j#        (                                rQtS                       |	j#        j        *                    d            	 d d d            d d d            d d d            d S |j                                         |z
  }||+                                z  }|	j#        j                            d!|d"d#           d}|,                                s+||                                z  }|,                                +|	j#        j                            d$|            ||z  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )%Nr   r   r   r   r    rV   r   r   r   r   r3   r   r4   r   r   u_   Обрабатываем версии документов в несколько потоков_process_doc_versions_fork_)r   r   r   r   r   r   rQ   r%   rN   r   r{   rS   )r%   rS   r   r   u=   Ждем обработки версий документовr   r   z.3fr   uW   Закончили обработку версий документов. Ошибок: )-r   r   r   r   r   r   r   r   r   r!   rb   r7   r    r   r   r   r   r#   r   r%   r   rC   r   r   r   r   r   r   r   r   r   r   _process_doc_versions_forkr^   r   rm   r   r   r   r   r   r   r   r   r   )rj   r   r   rw   r   r   r   r   rm   r   rp   r   r   r   r   r   r   r   r  r  r  r  r  speedr  s                            r   process_doc_versions_forkz-CmfPluginConfluence.process_doc_versions_forkr  s&   ''''''EEEEEE  "" R	! R	!G$:$:$<$< R	! R	!>T>V>V R	! R	!)--X-WWJ,,Z->-I:VVJ**,,,'++z<QbBc+ddG!K!&*AAA$044-tWZ@BfBfBfg-. 5  
  /5E%0J"K"(..s.;;I#)//11J ""  $E  F  F  F!!A:9:: k k!+22%@:q::%.&0  3   ""4(((

%,112icg2i2ijjjjC!00vNN ( (v;&((t9J$===x=I--qd) \K 
 h''''# & &f%%%%!(--.mnnn#  		D$..00 !###%,445RSSSKR	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	!N ;??$$q(D$,,...E!(--oUoooo   J &&(( /jnn...
 !&&(( / !(--  /U  IS  /U  /U  V  V  Vj FeR	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	! R	!h sm   Q P)KP$P)/Q B?PP)PP)PP)Q )P-	-Q 0P-	1Q  QQr   c           
      Z   dt                      d}dt                      dd}t                      }t          |j        j                            d                    }|                    |          }|                                rt          |d          5 }	|	D ]Q}
t          	                    |
          |
                    t          d                            f           |dz  }R	 ddd           n# 1 swxY w Y   n|                                r|                                D ]}|                                s|                    d          }|                                sBt          |d          5 }	t                              |	          ddd           n# 1 swxY w Y   d	         d
k    r|
                    t          d                            f           |dz  }|dk    r|                    d          }t          |d          5 }	t                              |	          }|D ]H}|d         
                             t          |d                   f           |dxx         dz  cc<   I	 ddd           n# 1 swxY w Y   |                    d          }t          |d          5 }	|	D ]/}
t          	                    |
          }fd |           0	 ddd           n# 1 swxY w Y   ||d}|dk    r
||d<   |d<   |S )u  
        Возвращает информацию о дампе сущности,
        общее количество объектов и множество объектов в виде кортежей (id, name/key).
        Для документов дополнительно добавляется информация об их вложениях
        и комментариях с множеством кортежей вида (key, id/name)

        Args:
            project (object): объект CmfProject
            entity (str): название сущности (название каталога или файла)
            field (str, optional): дополнительное поле сущности 
                                   для добавления в кортеж объекта вместе c id.
                                   Defaults to "name".

        Returns:
            dict: _description_
        r   countobjsr   zr+r%   r{   NrX   r   rQ   rZ   zattachments.jsonr  rS   r  zcomments.jsonc                     d                                       t          | d                   f           dxx         dz  cc<   | d         D ]} |           d S )Nr  r%   r  r{   rT   )addr   )commentchild_commentcomment_statsdump_stats_commentfieldobj_datas     r   r  zICmfPluginConfluence._get_dump_stats_by_entity.<locals>.dump_stats_comment  s     -f 5 9 98E?CPWX\P]L^L^:_ ` ` ` -g 6 6 6! ; 6 6 65<Z5H !F !FM$6$6}$E$E$E$E!F !Fr*   attachmentscomments)setr   r   rC   r7   rd   is_filerf   rg   loadsr  r   r|   r   re   rh   )r'   rp   entityr  attachment_statsdumped_countdumped_objsproject_dir	objs_pathro   rowobj_dirobj_data_fileattach_filer  attcomment_data_filecomment_datastatsr  r  r  s      `               @@@r   _get_dump_stats_by_entityz-CmfPluginConfluence._get_dump_stats_by_entity  s|   $ EE
 

 EE
 

 ee728<<VDDEE((00	 '	=i&& &! & &C#zz#HOOS$%8%8(5/$JKKK A%LL&& & & & & & & & & & & & & & &
   	=$,,.. = =~~''  ' 0 0 = =$++-- -.. ,!#yy||H, , , , , , , , , , , , , , ,F#v--Xd^!4!4huo FGGG![((")"2"23E"F"FKk400 ;A&*iill#. ; ;C,V488(5/3sSZ|K\K\9]^^^,W555:5555;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; )0(8(8(I(I%/66 =!#$ = =C+/::c??LF F F F F F F F
 /.|<<<<== = = = = = = = = = = = = = = "
 
 [  #3E-  -E*sJ   AC>>DDF--F1	4F1	&A&JJ	 J		3L		L	L	c           	      &   dd|gg dg}|r|                     |           t                              |          }|                    |d          }t	                      }d}	t          d||	          D ]}
|                    |g dd|
|
|	z   g	          }|D ]}|j        r |j                            d
          d         nd}|j	        }|j
        r4t          |j
        d                   }|j
                            |          }|dk    r'|                    |j        j	        |j	        f           |dk    r"|                    |j        j	        |f           |r|                    ||f           |                    |           ||d}|S )u  
        Возвращает информацию об обработанных объектах сущности

        Args:
            project (object): объект CmfProject
            entity (str): название cmf модели
            filter_by (list, optional): дополнительный фильтр. Defaults to None.
            field (str, optional): дополнительное поле сущности 
                                   для добавления в кортеж объекта вида (id, name/key).
                                   Defaults to None.

        Returns:
            dict: _description_
        rp   =)rm   z!=NT)r5   include_archivedd   r   )r   r   r   zparent.namer   )r5   r6   r/  r   r   r{   Nr%   CmfAttachment
CmfCommentr  )r^   r   get_model_by_namer  r  r   slistr   splitr   r   r   r7   r  parent)r'   rp   r  	filter_byr  filter_modelprocessed_countprocessed_objsstepr   r  rJ   obj_id	obj_fieldr+  s                   r   _get_process_stats_by_entityz0CmfPluginConfluence._get_process_stats_by_entity"  s     W%&&&
  	&NN9%%%))&11++Wt+LL1ot44 	/ 	/E;;QQQ!%edl+	   D  / /69jJ))$//22dH	& ? !4T!:;;F # 3 7 7 > >I_,,"&&
'BCCCC|++"&&
'@AAAA /"&&	':;;;;"&&v..../  %"
 
 r*   c                 f    |                     |          }||z
  }|sdndt          |          d}|S )u  
        Возвращает результат проверки сдампленных и обработанных объектов
        в виде статуса и множества необработанных объектов в виде кортежей

        Args:
            dump_objs (set): сдампленные объекты
            process_objs (set): обработанные объекты
        u   ОКu   НЕКОРРЕКТНО)rN   unprocessed)intersectionlist)r'   	dump_objsprocess_objsrB  rA  results         r   _check_consistencyz&CmfPluginConfluence._check_consistencyY  sL     !--l;;,.$/Mff5M,,
 
 r*   c                    | j                             d           |                     |dd          }| j                             d|d                     | j                             d|d         d                     | j                             d	|d
         d                     | j                             d           |                     |dd          }| j                             d|d                     d|d         |d         d}| j                             d           |                     |dd          }| j                             d|d                     d|d         d         |d         d}| j                             d           |                     |dg d          }| j                             d|d                     d|d
         d         |d         d}| j                             d           |                     |d         |d                   }	| j                             d|	d                     |                    |	           | j                             d           |                     |d         d         |d                   }
| j                             d |
d                     |                    |
           | j                             d!           |                     |d
         d         |d                   }| j                             d"|d                     |                    |           |||gS )#u$  
        Возвращает статистику по документам проекта, их вложениям и комментариям

        Args:
            project (object): объект CmfProject

        Returns:
            dict: данные статистики
        uz   Сбор информации о сдампенных документах, вложениях и комментарияхrZ   rS   )r  u)   Сдамплено документов: r  u%   Сдамплено вложений: r  u-   Сдамплено комментариев: r  uP   Сбор информации об обработанных документахr   u+   Обработано документов: r   )r  dumped	processeduN   Сбор информации об обработанных вложенияхr1  r   u'   Обработано вложений: u   ВложенияuT   Сбор информации об обработанных комментарияхr2  )	log_levelr.  r   )r7  u/   Обработано комментариев: u   Комментарииu   Проверка консистентности между сдампленными и обработанными документамиr  u   Документы: rN   u   Проверка консистентности между сдампленными и обработанными вложениямиu   Вложения: u   Проверка консистентности между сдампленными и обработанными комментариямиu   Комментарии: )r   ra   r,  r?  rG  update)r'   rp   
dump_statsprocess_statspage_stats_dataattach_process_statsattachment_stats_datacomment_process_statscomment_stats_datapage_resultattachment_resultcomment_results               r   _get_project_page_statsz+CmfPluginConfluence._get_project_page_statsj  s    	  W  	X  	X  	X33 4 
 


 	[jQXFY[[\\\f*]B[\cBdffgggk*U_J`ahJikkllllmmm99 : 
 

 	`V]H^``aaa* )&w/
 
 	jkkk#@@  A  
  

 	cDXY`Daccddd( /8-g6!
 !
 	pqqq $ A A+++ !B !
 !

 	lLabiLjllmmm. ,W5.w7
 
 	 W	
 	
 	
 --v&!
 
 	HX1FHHIII{+++ U	
 	
 	
 !33}%f- (
 
 	L/@/JLLMMM$$%6777 [	
 	
 	
 00z"6*!&)
 
 	O^H5MOOPPP!!.111!68JKKr*   c                 h    g }|                      |          }|D ]}|                    |           |S )u   
        Возвращает отчет сдампленных и обработанных объектов

        Args:
            project (object): объект CmfProject
        )rW  r^   )r'   rp   r+  rO  
stats_datas        r   project_statsz!CmfPluginConfluence.project_stats  sG      66w??) 	% 	%JLL$$$$r*   r   )r   )NN)(__name__
__module____qualname__modulesr   r6   cmf_plugin_confluencer   ui_meta_skipr@   	api_allowapi_methodsr)   r&   r8   propertyr   r   r   r   r   rC  r   r   boolr   r   r   r   r   r   staticmethodr  r  r,  r?  rG  rW  rZ  __classcell__)r0   s   @r   r   r      s       %,BVcfuuLLI$+AUa e
 e
 e
 
K   !"444 : : : : : : :
 #( < < < < < < < ! ! X!2+ + +Zc    $" "C " " " "HLS L L L L&W$ W W W WJT J J J JPD P P P Pd    O O O
P P P

* 
* 
* 
* 
*+ + + + + j j \jX \ \ \\|O O O Ob5 5 5 5n  "XL XL XLt      r*   r   )r   )
contextlibr   pathlibr   urllib.parser   r   /modules.confluence.fields.cmf_plugin_confluencer^  cmf.includer   r   r6   r_  r   r   r*   r   <module>rl     s    % % % % % %       - - - - - - - - 6 6 6 6     - - - -&u
 u
 u
 u
 u
',3I] u
 u
 u
 u
 u
r*   