
    @iy                         d dl m Z  d dlmZmZ d dlmZ d dl d dlZ G d dej                  j                  j                  j                        Zy)    )cached_property)urlparse
urlunsplit)Path)*Nc                       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         4./modules/confluence/models/cmf_plugin_confluence.py_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.save   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fieldsr)   )r   r   getr   deleter&   )r   r)   r'   r   r   r(   s        r    r0   zCmfPluginConfluence.delete!   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.apir2   load_fieldsr   r   valuer   ext_passworddecryptr   r6   r7   )r   r2   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   r.   projects	info.json
root_pages	documentsarchived_pages)r
   get_root_pages_from_spaceget_all_pages_from_spaceappend	Exceptiongdebugr   	CmfImportr/   get_download_pathjoinpathexistsopenjsonload)r   keycmf_import_idr'   r   resr
   objrB   rM   e
cmf_importdump_dirfprojectroot_page_iddoc_filef2archived_page_ids                      r    r   z#CmfPluginConfluence.get_space_pagesA   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-r\   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	totalSizerG   rH   rI   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
   ri   rQ   rR   rS   r   rT   r/   rU   rV   rW   sumiterdir)
r   r\   r'   r   totalr
   responser_   r`   ra   s
             r    r   z$CmfPluginConfluence.get_total_spacesn   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 (r[   )::r   ext_idLIKE%T--)r-   include_deletedr.   u    [импортирован]rG   rH   rI   rJ   )r:   r
   r   strupperr   source_hashr   
CmfProjectsgetrP   rQ   rR   rS   rT   r/   rU   rV   rW   oslistdirrX   rY   rZ   )r   r\   rx   r'   r   r]   r
   space
space_nameproject_ext_idrc   r_   r`   ra   r[   rb   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_childrenrG   rH   rI   rL   rJ   u,   Документ не попал в дамп)r
   r   rQ   rR   rS   r   rT   r/   rU   rV   rW   r   r   rX   rY   rZ   )r   page_idr\   r'   r   r
   r_   r`   ra   r[   doc_dirrb   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   r`   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   r`   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webuirn   baser    )r:   r   r/   r   pathjoinr   r   schemenetlocr&   calc_ext_href)r   r^   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   )r:   r   r   r&   calc_dump_path)r   r^   r(   s     r    r   z"CmfPluginConfluence.calc_dump_path   sI    *+,>>::s?R?R&&v..w%c**r"   c                    dd l }ddlm} ddlm} d}t
        j                         5  t
        j                         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,                  j/                  d      }|	j,                  j/                         }t        j0                  j                  d|
      }|j2                  j5                  d       |j                   j7                         }t9        |	j:                        D ]{  }|	j<                  j?                  |	j@                  d| |||
|d      }|jC                  |       |jE                          |	jF                  j2                  j5                  d|        } d}|j                  d      }|stI        d       }|	jK                  |d   ||      D ]h  }|d   |	jL                  vr|d   dk(  r|dz  }|d   |d   |d   tO        |d         jQ                  d       |d   |d   k(  d!}|jS                  |       j |D ]  }|jS                  d"        |	jF                  j2                  j5                  d#       |D ]  }|jU                          ~ |	jF                  jW                         rAtY                |	jF                  j2                  j[                  d$       	 d d d        d d d        y |j                   j7                         |z
  }|	jF                  j2                  j5                  d%||j]                         z   d&       d}|j_                         s$||j                         z  }|j_                         s$|	jF                  j2                  j5                  d'|        ||z  }d d d        d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)(Nr   cmf_contextr   r   r   rH   )
logic_typer   descr_documentz#scheme_wf.default_document_workflowproject.agile:defaulttree_parent_idr+   r   r+      Документыr   r,      maxsizerB   )sys_typetree_parentuD   Грузим документы в несколько потоков_process_document_fork)	obj_queue
done_queuerc   archive_foldertargetr   r   .   Параллельный обработчик homepage)r   r   r   r@   trashedrn   rE   r   rL   )r   rE   r   r   is_homepageDONEu0   Ждем обработки документов   Импорт прерван*   ------------------------ скорость '    документов в секундуuI   Закончили обработку документов, ошибок )0datetimecmf.appr   r   r   cmfutildisable_acldisable_notifyr   rT   r/   r   r
   _load_selected_objsr   r   r   r   r   r   r;   root_parentqueueQueue	CmfFolderloggerinfonowrangethreading_max_forks	threadingThreadr   rP   startr`   dict_get_documents_selected_objsr   rV   putr   	is_cancelcommit_with_eventwarningtotal_secondsempty)r\   
project_idoffsetrj   dtr   r   errorsr`   
api_importrc   r   r   obj_processr   r   r   siproccntr   docdoc_datadiff
has_errorss                             r    process_document_forkz)CmfPluginConfluence.process_document_fork   sd   'E  " `	!G$:$:$< `	!))--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 s6   Q&MQ=Q&BQ-QQ&Q#	Q&&Q0c           
      .   dd l }ddlm} ddlm} d}t
        j                         5  t
        j                         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,                  j/                  d      }|	j,                  j/                         }|j0                  j3                  d       |j                   j5                         }t7        |	j8                        D ]y  }|	j:                  j=                  |	j>                  d| ||d      }|jA                  |       |jC                          |	jD                  j0                  j3                  d|        { d}|	jG                  |d   ||      D ]K  }|d   dk7  r|d   |	jH                  vr|d   dk(  r'|dz  }|d   |d   |d   d}|jK                  |       M |D ]  }|jK                  d        |	jD                  j0                  j3                  d       |D ]  }|jM                          ~ |	jD                  jO                         rAtQ                |	jD                  j0                  jS                  d        	 d d d        d d d        y |j                   j5                         |z
  }||jU                         z  }|	jD                  j0                  j3                  d!|d"d#       d}|jW                         s$||j                         z  }|jW                         s$|	jD                  j0                  j3                  d$|        ||z  }d d d        d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)%Nr   r   r   r   r   rH   r   r   r   r   r+   r   r,   r   r   u_   Обрабатываем версии документов в несколько потоков_process_doc_versions_fork_)r   r   r   r   r   r   rC   r   r@   r   rn   rE   )r   rE   r   r   u=   Ждем обработки версий документовr   r   z.3fr   uW   Закончили обработку версий документов. Ошибок: ),r   r   r   r   r   r   r   r   r   rT   r/   r   r
   r   r   r   r   r   r   r   r;   r   r   r   r   r   r   r   r   r   r   _process_doc_versions_forkrP   r   r`   r   r   r   r   r   r   r   r   r   )r\   r   r   rj   r   r   r   r   r`   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   speedr   s                            r    process_doc_versions_forkz-CmfPluginConfluence.process_doc_versions_fork]  s   'E  " R	!G$:$:$< 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	!N ;;??$q(D$,,..E!!((--<U3KGno J &&(jnn..
 !&&( !!((--  1H  IS  HT  /U  Vj FeR	! R	!h iR	! R	! R	!h s6   P
K"O>P
/BO>?-O>,P
>P	P

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       nz|j                         ri|j                         D ]U  }|j                         s|j                  d      }|j                         s7t        |d      5 }	t        j                  |	      |j                  t        d            f       |dz  }ddd       |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       X ||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   rn   NrJ   rL   zattachments.jsonr  rE   r  zcomments.jsonc                     d   j                     t        | d         f       dxx   dz  cc<   | d   D ]
  } |        y )Nr  r   r  rn   rF   )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   r;   r/   rV   is_filerX   rY   loadsr  r   ro   rt   rW   rZ   )r   rc   entityr  attachment_statsdumped_countdumped_objsproject_dir	objs_pathrb   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OOS$%8(5/$JK A%L& [(")"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
 /|<== =)=> "
 [ #3E-  -E*Y& && &; ;= =s2   AI%9=I1!AI=-J	%I.1I:	=J		J	c                 "   dd|gg dg}|r|j                  |       t        j                  |      }|j                  |      }t	               }d}	t        d||	      D ])  }
|j                  |g 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_
        rc   =)r`   z!=N)r-   d   r   )r   r}   r   zparent.namer   )r-   r.   rx   r|   rn   Nr   CmfAttachment
CmfCommentr  )rP   r   get_model_by_namer  r  r   slistr}   splitr   r   r   r/   r  parent)r   rc   r  	filter_byr  filter_modelprocessed_countprocessed_objsstepr   r  r^   obj_id	obj_fieldr  s                   r    _get_process_stats_by_entityz0CmfPluginConfluence._get_process_stats_by_entity  s     W%&
 NN9%))&1++W+5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   НЕКОРРЕКТНО)r@   unprocessed)intersectionlist)r   	dump_objsprocess_objsr5  r4  results         r    _check_consistencyz&CmfPluginConfluence._check_consistencyA  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   Сбор информации о сдампенных документах, вложениях и комментарияхrL   rE   )r  u)   Сдамплено документов: r  u%   Сдамплено вложений: r  u-   Сдамплено комментариев: r  uP   Сбор информации об обработанных документахr   u+   Обработано документов: r   )r  dumped	processeduN   Сбор информации об обработанных вложенияхr$  r   u'   Обработано вложений: u   ВложенияuT   Сбор информации об обработанных комментарияхr%  )	log_levelr"  r   )r*  u/   Обработано комментариев: u   Комментарииu   Проверка консистентности между сдампленными и обработанными документамиr  u   Документы: r@   u   Проверка консистентности между сдампленными и обработанными вложениямиu   Вложения: u   Проверка консистентности между сдампленными и обработанными комментариямиu   Комментарии: )r   rS   r   r2  r:  update)r   rc   
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_statsR  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
        )rJ  rP   )r   rc   r  rB  
stats_datas        r    project_statsz!CmfPluginConfluence.project_stats  s=      66w?) 	%JLL$	% r"   r   )r   )NN)(__name__
__module____qualname__modulesr
   r.   cmf_plugin_confluencer	   ui_meta_skipr8   	api_allowapi_methodsr!   r   r0   propertyr   r   r   r   r   r6  r   r   boolr   r   r   r   r   r   staticmethodr   r   r   r2  r:  rJ  rM  __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 \ \|M^4l"XLtr"   r	   )r   urllib.parser   r   pathlibr   cmf.include/modules.confluence.fields.cmf_plugin_confluencerQ  r
   r.   rR  r	   r   r"   r    <module>r^     s:    + -   6r
',,33II]] r
r"   