
    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	 ed	d       Z
 G d dej                  j                  j                  j                        Zy)
    )contextmanager)Path)urlparse
urlunsplitN)*c              #      K   ddl }|j                         }|| k  r|j                  |        	 d |j                  |       y# |j                  |       w xY w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   	   sS      ))+My i(-m,m,s   +AA A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y 	 t        j                  d| j                  | j                  | j
                  |||d|}|j                          || _         y )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(   sY    ;;1!! gtyytdgg*1YR[g_eg    r   )depthr   r   r   c                d    | j                   r| j                  |||       t        |   |d|i|S )Nr*   )is_newr(   superr%   )r&   r*   r   r   r   argsr'   	__class__s          r   r%   zCmfPluginConfluence.save1   s5    ;;gy)<w|T99&99r)   F)forcec                    t         j                  j                  dd| j                  gg d      }|j	                          t        |   |d|i|S )Nr   ==)r   r   r   r   filterfieldsr0   )r    r!   getr$   deleter-   )r&   r0   r.   r'   r   r/   s        r   r7   zCmfPluginConfluence.delete6   sQ    !!%%gtTWW-E-[ & ]w~t;5;F;;r)   c                    | j                   sddlm} | j                  g d        || j                  j
                  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.apir9   load_fieldsr   r   valuer   ext_passworddecryptr   r=   r>   )r&   r9   s     r   r   zCmfPluginConfluence.confluence<   s      <   !.KK''--..441199;kk++335;;1177kk''--!D    r)   c           	         g }	 | j                   5 }|j                  |d      D cg c]  }| }}|j                  |dd      D cg c]  }| }}|r| ddddd	|iid
}	|j                  |	       d d d        |S c c}w c c}w # 1 sw Y   |S xY w# t        $ r}
t
        j                  |
       t        j                  j                  |g d      }|j                         j                  d      }|j                         r\t        |j                  |d            5 }t        j                  |      }|d   D ]k  }|j                  |d|d      }|j                         s(t        |      5 }|j                  t        j                  |             d d d        a# 1 sw Y   jxY w g }|j                  dg       D ]k  }|j                  |d|d      }|j                         s(t        |      5 }|j                  t        j                  |             d d d        a# 1 sw Y   jxY w |r| ddddd	|iid
}	|j                  |	       d d d        n# 1 sw Y   nxY w Y d }
~
|S d }
~
ww xY w)Nzchildren.pager   archived)status_archived_pagesarchiveu!   Архивные страницыpageresults)r$   r   titlechildrenr   zplugin.*zplugin.plugin.*r$   r5   projects	info.json
root_pages	documentsarchived_pages)r   get_root_pages_from_spaceget_all_pages_from_spaceappend	Exceptiongdebugr    	CmfImportr6   get_download_pathjoinpathexistsopenjsonload)r&   keycmf_import_idr.   r'   resr   objrI   rT   e
cmf_importdump_dirfprojectroot_page_iddoc_filef2archived_page_ids                      r   r   z#CmfPluginConfluence.get_space_pagesV   sp   (	 /J&0&J&J3P_&`assaa*4*M*McST]g*M*hi33ii!$_5 )!D%+i-A$B	&N JJ~./P 
O bi/P 
9  	GGAJ))--Gk-lJ!335>>zJH (++C=> 3!"iilG(/(= :#+#4#4S+|U`#a#??,!%h :2 #

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

>2)3 3 3, 
9	s   B B	A<B	B#B2B <
BBB B 
I-BI( AI#I.%F		IF%!AI%I0%H		IH'#)I	I(I	I((I-rc   c                    d}	 | j                   5 }|j                  ddd      }ddd       d   }|S # 1 sw Y   xY w# t        $ r}t        j	                  |       t
        j                  j                  |g d      }|j                         j                  d	      }	|	j                         r!t        d
 |	j                         D              }n Y d}~|S d}~ww xY w)uI    Получает общее количество пространств r   z
type=spaceT)cqllimitinclude_archived_spacesN	totalSizerN   rO   rP   c              3   B   K   | ]  }|j                         sd   yw)   N)is_dir).0ps     r   	<genexpr>z7CmfPluginConfluence.get_total_spaces.<locals>.<genexpr>   s     H!QXXZAHs   )r   rp   rX   rY   rZ   r    r[   r6   r\   r]   r^   sumiterdir)
r&   rc   r.   r'   totalr   responserf   rg   rh   s
             r   r   z$CmfPluginConfluence.get_total_spaces   s    	 cJ%>>l!]a>bc[)E c c  	GGAJ))--Gk-lJ!335>>zJH Hx'7'7'9HH  	s*   A  4A  =A   	C	B	CCc           	         | j                  dg       g }	 | j                  5 }|j                  |      D ]  }|d   |d<   |d   }|d   dk(  r|dz  }n#|dt        |d	         j	                          d
z  }d| j
                  j                   d|d    d}	t        j                  j                  ddd|	 dgddg      }
|
r|dz  }||d<   |j                  |        	 d d d        |S # 1 sw Y   |S xY w# t        $ r}t        j                  |       t        j                  j                  |g d      }|j!                         j#                  d      }|j%                         rot&        j)                  |      D ]V  }t+        |j#                  |d            5 }|j                  t,        j/                  |             d d d        L# 1 sw Y   UxY w n Y d }~|S d }~ww xY w)Nzplugin.source_hash)slicer   original_namer   personalu(    (Личное пространство)z (rb   )::r$   ext_idLIKE%T--)r4   include_deletedr5   u    [импортирован]rN   rO   rP   rQ   )rA   r   r   strupperr   source_hashr    
CmfProjectsgetrW   rX   rY   rZ   r[   r6   r\   r]   r^   oslistdirr_   r`   ra   )r&   rc   r   r.   r'   rd   r   space
space_nameproject_ext_idrj   rf   rg   rh   rb   ri   s                   r   r   z"CmfPluginConfluence.get_all_spaces   s   ./0	 &J'66U6C &E-26]E/*!&vJV}
2"&PP
 #3uU|+<+B+B+D*EQ&GG
')$++*A*A)B"U4[MQS%TN$//44 (&An5EQ2GH(, $v 5 G
 "&CC
$.E&MJJu%#&&< 
=&< 
  
	GGAJ))--Gk-lJ!335>>zJH ::h/ 1Ch//[AB 1a

499Q<01 1 11 	1
 

	sN   C7 B=C* C7 *C4/C7 4C7 7	G" BG%G?	GG
GG"c                    	 | j                   5 }|j                  |dd      cd d d        S # 1 sw Y   y xY w# t        $ r}t        j	                  |       t
        j                  j                  |g d      }|j                         j                  d      }|j                         rt        j                  |      D ]q  }	|j                  |	d|      }
|
j                         s't        |
j                  d            5 }t        j                  |      cd d d        c cY d }~S # 1 sw Y   pxY w t        d	       d }~ww xY w)
NFT)detailedwith_childrenrN   rO   rP   rS   rQ   u,   Документ не попал в дамп)r   r   rX   rY   rZ   r    r[   r6   r\   r]   r^   r   r   r_   r`   ra   )r&   page_idrc   r.   r'   r   rf   rg   rh   rb   doc_dirri   s               r   r   z"CmfPluginConfluence.get_page_by_id   s   	L ^J!005X\0]^ ^ ^ 	LGGAJ))--Gk-lJ!335>>zJH ::h/ 0C&//['JG~~'!'"2"2;"?@ 0A#'99Q<0 0 0 00 JKK 	LsN   8 ,	8 58 8 
EB"D>%D>?D%D>E%D.*D>>Ereturnc                 P    ddl m}  || j                  |      j                         S )u   
        Инициализация настроек
        :param models.CmfImport cmf_import: Объект импорта.
        r   ConfluenceAPIImport)modules.confluence.api_importr   r   calc_import_settingsr&   rg   r   s      r   r   z(CmfPluginConfluence.calc_import_settings   s"    
 	F"4??J?TTVVr)   c                 P    ddl m}  || j                  |      j                         S )u   
        Предварительный просмотр данных
        :param models.CmfImport cmf_import: Объект импорта.
        r   r   )r   r   r   previewr   s      r   r   zCmfPluginConfluence.preview   s"    
 	F"4??J?GGIIr)   c                     ddl m} d|_        | j                  5 } |||      j	                         cddd       S # 1 sw Y   yxY w)ux   
        Процесс импорта
        :param models.CmfImport cmf_import: Объект импорта.
        r   r   u)   Импорт данных из ConfluenceN)r   r   r   r   process_importr&   rg   r   r   s       r   r   z"CmfPluginConfluence.process_import   sD    
 	FE
__ 	P
&z:>MMO	P 	P 	Ps	   ;Ac                     g S Nr   )r&   s    r   calc_models_settingsz(CmfPluginConfluence.calc_models_settings   s    	r)   c                     ddl m} | j                  5 } |||      j                         cd d d        S # 1 sw Y   y xY wNr   r   )r   r   r   download_datar   s       r   r   z!CmfPluginConfluence.download_data   s:    E__ 	O
&z:>LLN	O 	O 	O   4=c                     ddl m} | j                  5 } |||      j                         cd d d        S # 1 sw Y   y xY wr   )r   r   r   download_filesr   s       r   r   z"CmfPluginConfluence.download_files   s:    E__ 	P
&z:>MMO	P 	P 	Pr   c                    |j                  dg       |j                  r|j                  d   j                  d      r|j                  d   j                  d      dd  }|j                  d   j                  d      r0t        j                  j                  |j                  d   d   |      S t        |j                  d   d         }t        |j                  |j                  |ddf      S t        | -  |      S )Nimport_raw_json_linkswebuiru   baser&    )rA   r   r6   r   pathjoinr   r   schemenetlocr-   calc_ext_href)r&   re   linkself_urlr/   s       r   r   z!CmfPluginConfluence.calc_ext_href   s    *+,3#6#6x#@#D#DW#M&&x044W=abAD""8,008ww||C$7$7$A&$I4PP#C$7$7$A&$IJ!8??HOOT2r"RSSw$S))r)   c                     |j                  dg       |j                  dv r|j                  r|j                  d   S t        |   |      S )Nr   )r   CmfDocumentr   )rA   r#   r   r-   calc_dump_path)r&   re   r/   s     r   r   z"CmfPluginConfluence.calc_dump_path   sI    *+,>>::s?R?R&&v..w%c**r)   c                 4	   dd l }ddlm} ddlm} d}t
        j                         5  t
        j                         5  t               5  t        j                  j                  | ddg      } ||j                  j                  |      }	|	j                          t        j                  j                  |g d      }
|
}|
j                   j"                  dk(  r3t        j$                  j                  d	d
|
j&                  gg dgdg      }|j(                  j*                  }||	_        g }|	j.                  j1                  d      }|	j.                  j1                         }t        j2                  j                  d|
      }|j4                  j7                  d       |j                   j9                         }t;        |	j<                        D ]{  }|	j>                  jA                  |	jB                  d| |||
|d      }|jE                  |       |jG                          |	jH                  j4                  j7                  d|        } d}|j                  d      }|stK        d       }|	jM                  |d   ||      D ]h  }|d   |	jN                  vr|d   dk(  r|dz  }|d   |d   |d   tQ        |d         jS                  d       |d   |d   k(  d!}|jU                  |       j |D ]  }|jU                  d"        |	jH                  j4                  j7                  d#       |D ]  }|jW                          ~ |	jH                  jY                         rIt[                |	jH                  j4                  j]                  d$       	 d d d        d d d        d d d        y |j                   j9                         |z
  }|	jH                  j4                  j7                  d%||j_                         z   d&       d}|ja                         s$||j                         z  }|ja                         s$|	jH                  j4                  j7                  d'|        ||z  }d d d        d d d        d d d        |S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |S xY w)(Nr   cmf_contextr   r   r   rO   )
logic_typer   descr_documentz#scheme_wf.default_document_workflowproject.agile:defaulttree_parent_idr2   r   r2      Документыr   r3      maxsizerI   )sys_typetree_parentuD   Грузим документы в несколько потоков_process_document_fork)	obj_queue
done_queuerj   archive_foldertargetr   r'   .   Параллельный обработчик homepage)r$   r   r$   rG   trashedru   rL   r   rS   )r$   rL   r   r   is_homepageDONEu0   Ждем обработки документов   Импорт прерван*   ------------------------ скорость '    документов в секундуuI   Закончили обработку документов, ошибок )1datetimecmf.appr   r   r   cmfutildisable_acldisable_notifyr   r    r[   r6   r   r   _load_selected_objsr   r   r"   r   r$   r   rB   root_parentqueueQueue	CmfFolderloggerinfonowrangethreading_max_forks	threadingThreadr   rW   startrg   dict_get_documents_selected_objsr   r]   putr   	is_cancelcommit_with_eventwarningtotal_secondsempty)rc   
project_idoffsetrq   dtr   r   errorsrg   
api_importrj   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  " `	!G$:$:$< `	!>T>V `	!))--X-WJ,Z->->-I-I:VJ**,''++ , G "K!!&&*AA$0044-tWZZ@Bfg-. 5 
  //55E%0J"K"((..s.;I#))//1J#--119RY1ZN ""#ij!A:99: k!++22%<<1!5%.&0#**8	 3 	 ""4(

%%,,114bcgbh2ijk Cyy,H4=!00vN (t9J$=$==x=I-qd) \K#E&M2;;KH#&t9#> h'(" $ &f%&!!((--.`a# 		 $$..0!#%%,,445RSi`	! `	! `	! `	!l ;;??$q(D!!((--<S4CUCUCW=W<XX  A J &&(jnn..
 !&&( !!((--0y  {E  zF  /G  Hj FA`	! `	! `	!D E`	! `	! `	! `	! `	!D sT   RRMQ5RR!BQ5.-Q5R#R5Q>:RR
	RRc                 |   dd l }ddlm} ddlm} d}t
        j                         5  t
        j                         5  t               5  t        j                  j                  | ddg      } ||j                  j                  |      }	|	j                          t        j                  j                  |ddg      }
|
}|
j                   j"                  d	k(  r3t        j$                  j                  d
d|
j&                  gg dgdg      }|j(                  j*                  }||	_        g }|	j.                  j1                  d      }|	j.                  j1                         }|j2                  j5                  d       |j                   j7                         }t9        |	j:                        D ]y  }|	j<                  j?                  |	j@                  d| ||d      }|jC                  |       |jE                          |	jF                  j2                  j5                  d|        { d}|	jI                  |d   ||      D ]K  }|d   dk7  r|d   |	jJ                  vr|d   dk(  r'|dz  }|d   |d   |d   d}|jM                  |       M |D ]  }|jM                  d        |	jF                  j2                  j5                  d       |D ]  }|jO                          ~ |	jF                  jQ                         rItS                |	jF                  j2                  jU                  d        	 d d d        d d d        d d d        y |j                   j7                         |z
  }||jW                         z  }|	jF                  j2                  j5                  d!|d"d#       d}|jY                         s$||j                         z  }|jY                         s$|	jF                  j2                  j5                  d$|        ||z  }d d d        d d d        d d d        |S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |S xY w)%Nr   r   r   r   r   rO   r   r   r   r   r2   r   r3   r   r   u_   Обрабатываем версии документов в несколько потоков_process_doc_versions_fork_)r   r   r   r   r   r   rJ   r$   rG   r   ru   rL   )r$   rL   r   r   u=   Ждем обработки версий документовr   r   z.3fr   uW   Закончили обработку версий документов. Ошибок: )-r   r   r   r   r   r   r   r   r   r    r[   r6   r   r   r   r   r   r"   r   r$   r   rB   r   r   r   r   r   r   r   r   r   r   _process_doc_versions_forkrW   r   rg   r   r   r   r   r   r   r   r   r   )rc   r   r   rq   r   r   r   r   rg   r   rj   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  " R	!G$:$:$< R	!>T>V R	!))--X-WJ,Z->->-I-I:VJ**,''++z<QbBc+dG!K!!&&*AA$0044-tWZZ@Bfg-. 5 
  //55E%0J"K"((..s.;I#))//1J ""  $E  F!A:99: k!++22%@@6qc:%.&0 3  ""4(

%%,,114bcgbh2ijk C!00vN (v;&(t9J$=$==x=I-qd) \K
 h'!($ $ &f%&!!((--.mn# 		 $$..0!#%%,,445RSKR	! R	! R	! R	!N ;;??$q(D$,,..E!!((--<U3KGno J &&(jnn..
 !&&( !!((--  1H  IS  HT  /U  Vj FeR	! R	! R	!h iR	! R	! R	! R	! R	!h sT   P1P%K"P)P%1P1BP-P?P%P1P"P%%P.	*P11P;c           
      @   dt               d}dt               dd}t               }t        |j                  j                  j	                  d            }|j                  |      }|j                         r[t        |d      5 }	|	D ]>  }
t        j                  |
      |j                  t        d            f       |dz  }@ 	 ddd       n|j                         rr|j                         D ]^  }|j                         s|j                  d      }|j                         s7t        |d      5 }	t        j                  |	      ddd       d	   d
k7  rj|j                  t        d            f       |dz  }|dk(  s|j                  d      }t        |d      5 }	t        j                  |	      }|D ]4  }|d   j                     t        |d         f       |dxx   dz  cc<   6 	 ddd       |j                  d      }t        |d      5 }	|	D ]'  }
t        j                  |
      }fd |       ) 	 ddd       a ||d}|dk(  r
||d<   |d<   |S # 1 sw Y   xY w# 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   xY w)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$   ru   NrQ   r   rJ   rS   zattachments.jsonr  rL   r
  zcomments.jsonc                     d   j                     t        | d         f       dxx   dz  cc<   | d   D ]
  } |        y )Nr  r$   r
  ru   rM   )addr   )commentchild_commentcomment_statsdump_stats_commentfieldobj_datas     r   r  zICmfPluginConfluence._get_dump_stats_by_entity.<locals>.dump_stats_comment  sY     -f 5 9 98E?CPWX\P]L^:_ ` -g 6! ; 65<Z5H !FM$6}$E!Fr)   attachmentscomments)setr   r   rB   r6   r]   is_filer_   r`   loadsr  r   rv   r{   r^   ra   )r&   rj   entityr  attachment_statsdumped_countdumped_objsproject_dir	objs_pathri   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   $ E

 E

 e72288<<VDE((0	i& &! &C#zz#HOOS$%8(5/$JK A%L&& &
 $,,. =~~' ' 0 0 =$++--. ,!#yy|H,F#v-Xd^!4huo FG![(")"2"23E"FKk40 ;A&*iil#. ;C,V488(5/3sSZ|K\9]^,W5:5;; )0(8(8(I%/6 =!#$ =C+/::c?LF
 /|<== =-=B "
 [ #3E-  -E*]& &, ,; ;= =s2   AI.9I:*AJ-J.I7:J	J	J	c           	      &   dd|gg dg}|r|j                  |       t        j                  |      }|j                  |d      }t	               }d}	t        d||	      D ]*  }
|j                  |g dd|
|
|	z   g	      }|D ]  }|j                  r|j                  j                  d
      d   nd}|j                  }|j                  r3t        |j                  d         }|j                  j                  |      }|dk(  r2|j                  |j                  j                  |j                  f       |dk(  r(|j                  |j                  j                  |f       |r|j                  ||f       |j                  |        - ||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_
        rj   =)rg   z!=NT)r4   include_archivedd   r   )r   r   r   zparent.namer   )r4   r5   r*  r   r   ru   Nr$   CmfAttachment
CmfCommentr	  )rW   r   get_model_by_namer
  r  r   slistr   splitr   r   r   r6   r  parent)r&   rj   r  	filter_byr  filter_modelprocessed_countprocessed_objsstepr   r  re   obj_id	obj_fieldr&  s                   r   _get_process_stats_by_entityz0CmfPluginConfluence._get_process_stats_by_entity"  s     W%&
 NN9%))&1++Wt+L1ot4 	/E;;Q!%edl+	  D  /69jj))$/2dHH	&& !4!4T!:;F # 3 3 7 7 >I_,"&&

'BC|+"&&

'@A"&&	':;"&&v./	/. %"
 r)   c                 V    |j                  |      }||z
  }|sdndt        |      d}|S )u  
        Возвращает результат проверки сдампленных и обработанных объектов
        в виде статуса и множества необработанных объектов в виде кортежей

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

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

        Returns:
            dict: данные статистики
        uz   Сбор информации о сдампенных документах, вложениях и комментарияхrS   rL   )r  u)   Сдамплено документов: r
  u%   Сдамплено вложений: r  u-   Сдамплено комментариев: r  uP   Сбор информации об обработанных документахr   u+   Обработано документов: r   )r  dumped	processeduN   Сбор информации об обработанных вложенияхr,  r   u'   Обработано вложений: u   ВложенияuT   Сбор информации об обработанных комментарияхr-  )	log_levelr)  r   )r2  u/   Обработано комментариев: u   Комментарииu   Проверка консистентности между сдампленными и обработанными документамиr  u   Документы: rG   u   Проверка консистентности между сдампленными и обработанными вложениямиu   Вложения: u   Проверка консистентности между сдампленными и обработанными комментариямиu   Комментарии: )r   rZ   r'  r:  rB  update)r&   rj   
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  sg    	  W  	X33 4 


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

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

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