
    oj                    Z   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlZd dl d d	lmZ d d
lmZ d dlmZ d dlZd dlm Z  ejB                   G d d             Z"ejB                   G d d             Z# G d d      Z$y)    N)cmf_context)Path)urlparse)datetime)DictUnionListOptional)permutations)*)ConfluenceApi)CmfPluginImportMixin)BeautifulSoup)JQLNormalizerc                       e Zd ZU dZ ej
                  e      Zee	e
j                  f   ed<    ej
                  e      Zee	eee	e	f      f   ed<    ej
                  e      Zee	e
j                   f   ed<   y)	TotalDatauJ    Данные используемые в процессе импорта default_factoryuserslink_documentsresult_documentsN)__name__
__module____qualname____doc__dataclassesfielddictr   r   strmodels	CmfPerson__annotations__r   r	   r   CmfDocument     "./modules/confluence/api_import.pyr   r      s    T):):):4)PE4V%%%&P6Gk6G6GX\6]NDd4S>223]6Gk6G6GX\6]d3 2 223]r%   r   c                   t    e Zd ZU dZej
                  ed<   eed<    ej                  e
      Zeeef   ed<   y)DocDatauR    Данные используемые при создании документа documentdoc_idr   link_attachmentsN)r   r   r   r   r    r#   r"   r   r   r   r   r+   r   r$   r%   r&   r(   r(   $   s6    \   K'8{'8'8'Nd38nNr%   r(   c                      e Zd ZdZdZdedej                  fdZd Z	d Z
defd	Zed
edefd       ZdefdZd Zd ZddefdZdefdZd ZdededefdZd ZddZd Zd Zd Zd Zd Z d Z!d  Z"dd!Z#dd"Z$d# Z%dd$Z&d% Z'd& Z(d' Z)d( Z*d)efd*Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5defd5Z6d6 Z7ed7efd8       Z8d9 Z9dd:Z:d; Z;d< Z<d= Z=d> Z>d?efd@Z?edA        Z@dB ZAddCZBdD ZCeDj                  fdEZFdF ZGdGefdHZHdI ZIdJ ZJdK ZKdL ZLdM ZMddNZNdO ZOdP ZPdQ ZQdR ZRdS ZSdT ZTdU ZUdV ZVdW ZWdX ZXdY ZYdZ ZZedd[       Z[d\ Z\dd]Z]d^ Z^d_ Z_d` Z`da Zadb Zbdc Zcdd Zd	 	 ddeZedf Zfdg Zgdh Zhdi Zidj Zjdk Zkdl Zldm Zmdn ZndoefdpZodq Zpdr ZqddsedefdtZrdu Zsdv Ztdw ZudevfdxZwdy ZxddzZyd{ Zzd| Z{d} Z|defd~Z}ddZ~ddZddedefdZy)ConfluenceAPIImportu;   Класс загрузки объектов через API).meta.dirty.trashed.remote
confluence
cmf_importc                 F   || _         || _        t               | _        t        j
                  j                  d      | _        d| _        d| _	        t        j                  d      }| j                  j                  j                  |_        |j                  | j                  j                  j                         | j!                          d| _        | j                   j$                  rd| _        d| j                  _        d| j                  _        t+               | _        t/               | _        t        j2                  j4                  | _        t        j2                  j8                  | _        d| _        t>        j@                  | _!        d	d
d| _"        | jG                          y )Nzdefault.system:defaultcoder   zancestors,history,history.lastUpdated,history.ownedBy,body,body.editor,body.atlas_doc_format,body.view,body.styled_view,body.wiki,body.plain,body.dynamic,body.storage,body.editor2,body.export_view.webresourcezatlassian.rest_clientuserKey	accountIdFr#   	CmfFolder)pagefolder)$r2   r3   r   
total_datar    CmfWorkflowgetdefault_workflow
has_errorsexpandlogging	getLoggerloggerhandlerssetLevellevel_prepare_multiprocessinguser_keycloudimported_object_countjson_object_countr   treeset_selected_objsr#   get_random_str
random_strget_data_iddata_iddump_page_versionsconfig$IMPORT_CONFLUENCE_DUMP_LAST_PAGE_VERdump_last_page_vertype_model_map_set_fallback_person)selfr2   r3   rD   s       r&   __init__zConfluenceAPIImport.__init__5   s=   $$#+ & 2 2 6 6<T 6 U] ""#:;//0099..445%%'!??  'DM01-,-)F	!e ,,;;))55 #("("M"M "!

 	!!#r%   c                    | j                   j                  j                  j                  d      }t	        |      | _        | j
                  r&t        j                  j                  |      | _        yt        j                  | _        y)u   
        Устанавливает резервного пользователя,
        если пользователь не будет найден в методе _get_person()
        default_user_id)idN)r3   json_settingsvaluer>   bool_is_default_userr    r!   _fallback_persongsystem_user)rZ   r]   s     r&   rY   z(ConfluenceAPIImport._set_fallback_person[   sc    
 //77==AABST $_ 5  $*$4$4$8$8O$8$LD!$%MMD!r%   c                     dd l }dd l}|| _         || _        t        j                  | _        t        j
                  | _        | j                  j                         | _	        y )Nr   )
	threadingqueuerU   IMPORT_THREADSthreading_max_forks"IMPORT_CONFLUENCE_DOWNLOAD_THREADSdownload_threading_max_forksr3   get_max_processesmax_processes)rZ   rg   rh   s      r&   rH   z,ConfluenceAPIImport._prepare_multiprocessingg   sD    "
#)#8#8 ,2,U,U)!__>>@r%   returnc                     dt        t        j                  j                        t        t        j                  j                        dddg ddd dgS )Ncurrent_user)emailname)rs   fieldsselectedObjects)rs   r`   import_type)r   rd   current_personrr   rs   rZ   s    r&   calc_import_settingsz(ConfluenceAPIImport.calc_import_settingsp   sR    'SAQAQAWAW=X<?@P@P@U@U<V4X Y*R8&68 	8r%   settingsc                 4    | D ci c]  }|d   |
 c}S c c}w )uO   Преобразуем список с настройками в словарьrs   r$   )rz   ss     r&   _normalize_settingsz'ConfluenceAPIImport._normalize_settingsv   s      '//&	1///s   c                     g S )uo    Для импорта из Confluence предварительный просмотр не требуется r$   rx   s    r&   previewzConfluenceAPIImport.preview{   s    	r%   c                    g g d}d }| j                  |d         D ]P  }|d   dk(  r|d   d   d   D ]9  }d}| j                  || j                           }|s&|d   j                  |       ; |d   d	   d   D ]  }d}| j                  j
                  r5d
| j                  j                  j                  j                   d
|d    d
}	n4d
| j                  j                  j                  j                   d
|d    d
}	ddd|	 dg}
t        j                  j                  |
      }|s|d   j                  |        |d   dk(  s/|d   d   d   D ]>  }|dk7  rd}| j                  || j                           }|s+|d   j                  |       @ |d   d	   d   D ]  }|dk7  rd}| j                  j
                  r5d
| j                  j                  j                  j                   d
|d    d
}	n4d
| j                  j                  j                  j                   d
|d    d
}	ddd|	 dg}
t        j                  j                  |
      }|s|d   j                  |        S |j                  r|r||_        |j                  r|j                  d       |j                   j#                          dd|j                   gg dg}
t        j$                  j'                  |
       |d   r@t        j%                  |j                   | j                  d|d         j                  d       |d   rAt        j%                  |j                   | j                  d|d         j                  d       y y y y )N)readwritepath	operationr   restrictionsuserresultsprivategroup::r^   rs   ext_idLIKE%filterupdatereadonlyr   Tsave_importparent==r3   !=N)r   r3   access_levelsubjects)_get_restrictions_get_personrI   appendr2   rJ   r3   pluginsource_hashr    CmfPersonGroupr>   import_originalperm_policy
is_changedsaveperm_aclloadCmfAccessRulebulk_delete)rZ   docdoc_objpermsr   restrictionr   person
group_infor   _filterr   s               r&   _process_restrictionsz)ConfluenceAPIImport._process_restrictions   s   R(11#f+> '	5K;'61'7?	J 5D"+K!--d4==.ABFf,,V4	5
 #.n"=g"Fy"Q 4J"+K,,#%doo&<&<&C&C&O&O%PPRS]^bScRddf!g#%doo&<&<&C&C&O&O%PPRS]^dSeRffh!i'1VHA?G"1155W5EEf,,U34 ;'83'7?	J 6D"i/&0!--d4==.ABFg--f56 #.n"=g"Fy"Q 5J"i/&0,,#%doo&<&<&C&C&O&O%PPRS]^bScRddf!g#%doo&<&<&C&C&O&O%PPRS]^dSeRffh!i'1VHA?G"1155W5EEg--e459'	5P ""{"-G!!.!!# $(8(89;UVG  ,,G,<V}$$G,<,<04f.3Fm % ==ATdT=SW~$$G,<,<04g.3Gn % >>Bdtd>T  (3"r%   c                    |j                  d      dd  d   }t        |      j                  j                  d      }t        |      dk(  r|d   dk(  r|d   dk(  r|d	   d
k(  r|d   }|S t        |      d	k(  r|d   dk(  r|\  }}}}	 |j	                  dd      }| j
                  j                  ||      }|s,| j                  j                  j                  d| d|        y | j                  j                  j                  t        |             |d   }|S # t        $ r;}| j                  j                  j                  d| d| d| d|        Y d }~y d }~ww xY w)N/r         wiki   spaces   pages   display+ uC   Ошибка получения документа по pretty url : uo   Не смогли получить документ по pretty url (возможно не тот домен): r^   )splitr   r   lenreplacer2   get_page_by_title	Exceptionr3   rD   warninginfor   )	rZ   urlr6   splitted_url_spacetitlefind_confl_doces	            r&   _get_pageid_by_urlz&ConfluenceAPIImport._get_pageid_by_url   s   yy~bc"1%}))//4|!l1o&? Ox/ Ow.?DK |!l1o&B!-Aq%c3/!%!B!B5%!P
 "&&.. F  GJ  FK  KL  MY  LZ  [\OO""''N(;<!$'D  &&..YZ]Y^^_`e_ffghmgnnpqrpstvs   .D 	E!1EErs   c                    | j                   j                         j                  | d      }|j                  d      }|j	                         rt
        j                  |       t        |d      5 } |       D ]H  }| j                   xj                  dz  c_        |j                  t        j                  |      dz          J 	 d d d        |j                  |       | j                   j                  d       t                y # 1 sw Y   AxY w)N.jsonr/   a+r   
T	only_data)r3   get_download_pathjoinpathwith_suffixexistsosremoveopenrL   r   jsondumpsr   r   
cmf_commit)rZ   api_funcrs   	overwrite	file_pathfile_path_tmpfrows           r&   _simple_dumpz ConfluenceAPIImport._simple_dump   s    OO557@@D6P	!--h7IIi -& 	0!z 011Q61

3$./0	0 	i(t,	0 	0s   /ADDc              #     K   | j                   j                         j                  | d      }|j                         r5t	        |d      5 }|D ]  }t
        j                  |        	 d d d        y y # 1 sw Y   y xY ww)Nr   r+)r3   r   r   r   r   r   loads)rZ   rs   r   r   r   s        r&   _simple_getzConfluenceAPIImport._simple_get   sw     OO557@@D6P	i& *! *C**S/)** * s   A	BA5+
B5A>:Bc              #     K   | j                   j                         j                  d      }t        j	                  |      D ]<  }t        |j                  |            5 }t        j                  |       d d d        > y # 1 sw Y   IxY ww)Nr   r3   r   r   r   listdirr   r   r   )rZ   dir_pathfpr   s       r&   _list_users_from_dumpz)ConfluenceAPIImport._list_users_from_dump   sw     ??446??%I**X& 	#Bh''+, #iil"# #	## #s   ABB6BB
	Btextattachments_dirobjc                 x   |sy | j                   j                  j                  d       t        j                  j                  | j                  j                        }t        |d      j                  d       D ]r  }|j                  d      rdnd}|j                  |   s+	 g d}t        fd|D              rEt        j                  d      r\d	}j                  d
      st        j                  |      r)| j                   j                  j!                  d        t        j                  j                        }	|	j"                  s_|	j$                  sSt        j                  j'                  | j                  j                        t        j                  j                        }	|	j"                  j                  d      rG|	j$                  | j                  j                  v r%|	j(                  j                  |j(                        s*| j                   j                  j!                  d        t        j                  j+                  j-                  d      d   j-                  d      d         }
t/        j0                  |
      \  }}|s*| j                   j                  j!                  d|
        Kt2        j4                  j7                  |
      }|j9                  |      }| j                   j:                  j:                  j<                   d|d    }t2        j>                  jA                  || j                   j:                  j:                  j<                        }|sKt2        j?                  | j                   || j                   j:                  j:                  j<                        }||_        ||_!        d|_"        |jG                          tI                u y # tJ        $ r@}tM                | j                   j                  j!                  d d|        Y d }~d }~ww xY w)Nu/   Обработка ссылок в текстеlxmlc                 J    | j                  d      xs | j                  d      S Nhrefsrchas_attrtags    r&   <lambda>z1ConfluenceAPIImport._dump_links.<locals>.<lambda>   s"    CLLQWDXDo\_\h\hin\o r%   r   r   )z/attachments/z/thumbnails/z/thumbnail/z	/display/z/servlet/benryanconversionc              3   &   K   | ]  }|v  
 y wNr$   ).0url_partr   s     r&   	<genexpr>z2ConfluenceAPIImport._dump_links.<locals>.<genexpr>  s     A8x3As   /display/~([^/]+)(?:/)?$z3\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\bzmailto:u   Это почта: httpuH   Это внешняя ссылка, оставляем как есть: r   r   ?r   u   Это не файл: r   r^   )r   
obj_ext_idr   )r3   r   r  r   Fu6   Не удалось обработать ссылку r   )'r3   rD   r   urllibparser   r2   r   r   find_allr   attrsanyresearch
startswithr   schemenetlocurljoinr   unquoter   	mimetypes
guess_typer    r#   _get_filenamer   r   r   CmfImportDownloadr>   rs   
downloadedr   r   r   cmf_rollback)rZ   r   r   r   parsed_confluence_urlr   key	url_partsemail_pattern
parsed_urlrs   	mime_typeencoding	file_namer   r   download_jobr   r   s                     @r&   _dump_linkszConfluenceAPIImport._dump_links   s{   ##$UV & 5 5doo6I6I J v.778op >	tCLL0&eC))C.C8t	 AyAA998#> V>>),		-0MOO**225H3NO#\\2237
"))Z->-> ,,..t/B/BCHC!'!6!6s!;J"))44V<"))T__-@-@@&OO667L7Q7QR OO**225}  B  ~C  4D  E||++CIIcN2,>,D,DS,I!,LM&/&:&:4&@#	8 OO**225KD63RS"..<<TB	+44Y?	 OO2299EEFbTT%77;;GMHLH^H^HeHeHqHq  <  s $#)#;#;tADGMHLH^H^HeHeHqHq $< $sL %.!$-!*/'!!#w>	tx  t&&..1ghkgllnopnq/rssts:   %O0>O0AO0'DO0=BO0D(O00	P995P44P9c                    	 | j                  |      S #  d}| j                  j                  ||      s| j                  j                  ||      s| j                  j	                  ||      r| j                  j
                  r | j                  j                  d         }n| j                  j                  d         }j                  fd|j                         D               |j                  d      }t        |d      5 }|j                  t        j                        d	z          d d d        n# 1 sw Y   nxY w| j                  j                  j!                  d
| d       Y y Y y xY w)Nz%operations,status,email,personalSpacerA   r8   )usernamer$  c              3   >   K   | ]  \  }}|vs|d k7  r||f  yw) Nr$   )r   kv	user_infos      r&   r  z5ConfluenceAPIImport._get_user_info.<locals>.<genexpr>M  s0      !CDAq$%Y$6!r' #$Q !Cs   
users.jsonr   r   u4   Информация о пользователе ID u    добавлена в дамп)_get_user_info_from_dumpr2   get_user_infoget_user_info_by_keyget_user_info_by_usernamerJ   get_user_detailr   itemsr   r   r   r   r   r3   rD   r   )rZ   user_id	dump_pathrA   user_detail
users_pathr   r)  s          @r&   _get_user_infoz"ConfluenceAPIImport._get_user_info=  sm   	M0099	M<F55gf5MI OO@@QW@X	 OOEEgV\E]	??(("&//"A"A9U`Ka"A"bK"&//"A"A9U_K`"A"aK   !CK4E4E4G !C C '//=
*d+ :qGGDJJy1D89: : : &&++.bcjbk  lK  -L  M s"    C<E:(E8	E:E
	0E:Nc                    | j                  d      D ]c  }|j                  | j                        |k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  r|c S |j                  dd      j                         |j                         k(  sb|c S  t	        d	|       )
Nr   rs   r&  r$  userNamerr   displayNamefullNameuQ   Не нашли информацию по пользователю в дампе )r   r>   rI   lowerr   )rZ   r1  r   r)  s       r&   r+  z,ConfluenceAPIImport._get_user_info_from_dumpV  s>   ))'2 	!I}}T]]+w6  }}VR(..0GMMOC  }}Z,224G  }}Z,224G  }}Wb)//1W]]_D  }}]B/5577==?J  }}Z,224G  	! klsktuvvr%   c                 N   | j                   dk(  rdnd| j                    }| j                  j                  j                  d| d|        |j	                  d      }g }|j	                  d      }|j                         r*t        |d      5 }t        j                  |      }d d d        t        j                         }		 |j	                  d	      }
t        |
d      5 }t        j                  |      }d d d        |j	                  d
      }|j                         rt        j                  |       t        |d      5 }d}| j                  j                  r|dz  }| j                  j                  |d   d   || j                         D ]  }t!        |t"              r&| j                  j%                  d| d| ddd       9|j'                  t        j)                  |d      dz          | j                  xj*                  dz  c_        | j                  j-                  d       | j/                  |d   d   d   d   ||       |j1                  d      s|d   d    d!k7  s|d   |vs|j3                  |d           	 d d d        dd"<   t        |
d#      5 }t        j5                  ||d       d d d        t        j                         |	z
  }| j                  j                  j                  d| d&|d'd(       t        |d#      5 }t        j5                  ||d)d*       d d d        y # 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   xY w# t"        $ r/}| j                  j%                  d$| d| d%dd       Y d }~d }~ww xY w# 1 sw Y   y xY w)+Nr      Все версии.   Последние: u)   Дамп версий документа . attachmentsr*  r	info.jsonzversions.jsonr   zccontent.version,content.body.storage,content.body.view,content.body.editor,content.body.export_viewz,content.body.atlas_doc_formatversionnumber)current_versionrA   last_versions6   Не удалось сдампить документ r   zERR-0038r#   dump
error_codeobj_type
error_typeFensure_asciir   r   contentbodyexport_viewr`   bytype	anonymousrT   w+uE   Не удалось сдампить версии документа ERR-0025u    выполнен за .3f    сек.r   indentrM  )rW   r3   rD   r   r   r   r   r   r   timeperf_counterr   r   r2   rJ   get_page_versions
isinstancer   	log_errorr   r   rL   inc_statr!  r>   r   rG  )rZ   r*   doc_pathdoc_log_msgnum_ver_msgr   	doc_users
users_filer   t1	info_filedoc_dataversions_file_namerA   page_versionexct2users_fs                     r&   _dump_versionsz"ConfluenceAPIImport._dump_versionsh  s   040G0G20M,Uijn  kB  kB  jC  TD##&OP[}\^_j^k$lm"++M:	&&|4
j#& )! IIaL	)  7	; ))+6Ii% (99Q<( "*!2!2?!C!((*		,-($/ "A1C  ??((>>F$(OO$E$E$,Y$7$A!"&"9"9	 %F % AL ",	:11TU`Taabcobpq'1MV\ 2  !GGDJJ|%JH4OPOO55:5OO,,Y7$$$Y/7FwO'  $''-,t2DV2LP[2['-Y>%,,\$-?@5A"AZ .3H)*i& ;!		(AE	:;  2%##7}D[\^_b[cckl	
 *d# 	HwIIiIG	H 	HE) )( ("A "A\; ;  	OO%%WXcWddfgjfkl%&!	 &  	&	H 	Hs   L.?M  L;2A
M  <DMM"M*MM  MN.L8;M M  MM  M 	N)%NNN$c           	           fd} fd} fd}t        d      5  d}	 |j                         }||j                  |       n j                  j                  j                  d|j                                 d|d	    d
|d    d}	  j                  j                         rn|d   dk(  r0 j                  j                  d| dt        j                         t        d      D ]R  }		  ||d   |d   |        ||d   |d   |        ||d   |d   |       |d   r j                  |d   |d   |        n |j                  |       1d d d        y #  |	dk\  r  j                  j                  d| d|	 t        j                         Y xY w#   j                  j                  d| ddd       |dz  }Y xY w# 1 sw Y   y xY w)Nc                 @   j                   j                  j                  d|        j                  j	                  |       D cg c]  }| }}|j                  d      }t        |d      5 }t        j                  ||       d d d        y c c}w # 1 sw Y   y xY w)NuI   Дамп списка дочерних страниц документа 
pages.jsonrT  )	r3   rD   r   r2   get_childrenr   r   r   rG  )r*   r`  ra  r   children
pages_filer   rZ   s          r&   dump_child_pageszKConfluenceAPIImport._dump_documents_expand_worker.<locals>.dump_child_pages  s    OO""''*st  tA  )B  C'+'C'CF'KLLHL!**<8Jj$' '1		(A&' ' M' 's   	B/BBc                 Z   g }|j                  d      }|j                         r*t        |d      5 }t        j	                  |      }d d d        |j                  d      }|j                         rt
        j                  |       	j                  j                  j                  d|        t        |d      5 }	j                  j                  |       D ]x  }|j                  t        j                  |      dz          |d   d   d	   D ]A  }	j                  j                  j                  d
| d       ||vs1|j                  |       C z 	 d d d        t        |d      5 }t        j                  ||dd       d d d        y # 1 sw Y   CxY w# 1 sw Y   ExY w# 1 sw Y   y xY w)Nr*  r@  zrestrictions.jsonu%   Дамп прав документа r   r   r   r   r   zrestriction )rT  r   FrX  )r   r   r   r   r   r   r   r3   rD   r   r2    get_all_restrictions_for_contentr   r   r   rG  )
r*   r`  ra  rc  rd  r   restriction_filer   r   rZ   s
            r&   dump_restrictionszLConfluenceAPIImport._dump_documents_expand_worker.<locals>.dump_restrictions  s   I!**<8J  "*c* -a $		!I-  (001DE&&(		*+OO""''*OP[}(]^&- 3#'??#S#STZ#[ 3KGGDJJ{3d:; +N ;F CI N 3..33l4&4JKy0%,,T2333 j$' F1		)Qqu	EF F!- -3 3F Fs*   F9BF;F%F!FF!F*c                    |j                  d      }|j                         rt        j                  |       j                  j
                  j                  d|        t        |d      5 }j                  j                  |       D ])  }|j                  t        j                  |      dz          + 	 d d d        y # 1 sw Y   y xY w)Nlabels.jsonu'   Дамп тегов документа r   r   )r   r   r   r   r3   rD   r   r   r2   get_all_page_labelsr   r   r   )r*   r`  ra  lables_filer   labelrZ   s         r&   	dump_tagszDConfluenceAPIImport._dump_documents_expand_worker.<locals>.dump_tags  s    "++M:K!!#		+&OO""''*QR]Q^(_`k4( 6A!__@@H 6EGGDJJu-4566 6 6s   ,AB>>CFinit_views_and_dsr   uG   Осталось обработать примерно страниц: "r   " (r^   rv  statustrashed   Документ uW    был удален. Пропускаем дамп расширенных данныхrG   r   r   rT      uO   Повтор дампа расширенных данных документа    , попытка u\   Не удалось сдампить расширенные данные документа rU  r#   rG  rH  r   )r   r>   putr3   rD   r   qsize	is_cancellogrB   WARNINGrangerm  r^  )
rZ   
page_queueobjs_that_are_donert  ry  r  errors	page_datapage_log_msgis
   `         r&   _dump_documents_expand_workerz1ConfluenceAPIImport._dump_documents_expand_worker  sQ   	'	F.	6 51 +	/F&NN,	$NN9-&&++.u  wA  wG  wG  wI  vJ  -K  L!#Ig$6#7tIdO;LAN 002 *i7++/~  >U  V")// ,  !"1X ,Yt_i>OQ]^-ioy?PR^_%ioy7H,W()=> $ 3 3IdOYvEVXd e!, #&&v.S +	/ +	/: Av % OO//"qr~q  @Q  RS  QT  !U&-oo 0  OO--v  xD  wE  F#-RX .  aKFS+	/ +	/sU   A.GF&G'7FGF.AE<F?G9FF)GGGc                    d}| j                   j                         }| j                   j                         }d}|j                         D ]  }|j                         s|j                  j                  | j                        r:|dz  }|j                  d      }t        |d      5 }	t        j                  |	      }
d d d        
d   |
d   t        |
d         |
d   |
j                  d	      xs | j                  d
}|j                  |        |j                  d        | j                  j                   j#                  d|        g }t%        |      D ]|  }| j&                  j)                  | j*                  d|dz    ||d      }|j-                  |       |j/                          | j                  j                   j#                  d|        ~ |D ]  }|j1                          ~ |j                   j3                          |j5                         s$||j                         z  }|j5                         s$| j                  j                   j#                  d|        |S # 1 sw Y   xY w)Nr   r   rA  r@  r^   r   r   r  rT   )r^   r   r   r  rT   uC   Дамп расширенных данных документов: z_dump_documents_expand_worker )r  r  targetrs   kwargs   Форк proc=uR   Ошибок дампа расширенных данных документов: )rh   Queueiterdiris_dirrs   endswithexcluded_doc_dir_endingsr   r   r   r   r   r>   rT   r  r3   rD   r   r  rg   Threadr  r   startjoinclearempty)rZ   objs_dirmax_workersr  r  r  
page_countdoc_dirrf  r   	info_datadataprocessr  procs                  r&   _dump_documents_expandz*ConfluenceAPIImport._dump_documents_expand  sT   ZZ%%'
!ZZ--/
'') 	%G~~(=(=d>[>[(\a
#,,[9	)S) -Q $		!I- $D/&w/ 6!23'1 +4--8L*M*hQUQhQh	 t$!	%" 	t##&ijtiu$vw{# 	AA>>((995a!eW=",*< ) D NN4 JJLOO""''.(?@	A  	DIIK	 	 $**,(,,..F %**,##&xy  yA  %B  	CQ- -s   %I%%I/	c                 \     fd}t        d      5  d}	 |j                         }||j                  |       n|D ]  }	  j                  j	                  | j
                   dd      }|d   d	vr7d
|d    d|d    d}	 j                  j                         r nc j                  j                  j                  d|	        t        d      D ]  }
	  ||        n  j                  xj                  dz  c_         |j                  |       d d d        y #  |
dk\  r  j                  j                  d|	 d|
dz    dt        j                         Y xY w# t        $ r5} j                  j!                  d	 d| ddd       |dz  }Y d }~[d }~ww xY w# 1 sw Y   y xY w)Nc                    d| d    d| d    d}j                  t        | d               }|j                  d      }|j                  d       g }| d	   d
   |vr|j	                  | d	   d
          | d	   d   d   |vr|j	                  | d	   d   d          | d	   j                  d      }|r)|d   dk7  r!| d	   d   |vr|j	                  | d	   d          | d   dk(  rr|j                  d      }|j                  d      }j                  j                  | d   d      D cg c]  }| }	}t        |d      5 }
t        j                  |	|
       d d d        j                  j                  j                  j                   d| d    }|	D ]  }|d   }|d   }j                  j                  rd| d    d| d}n|d   d   }|d|v rdnddz   z  }j                  j                  j                  j                   |      }d|v r	|d   d    }n+t#        j$                  d!|      }|r|j'                  d"      nd"}|j                  | d#|       }|j                  d| d#|       }| d| }t(        j*                  j                  |j                  j                  j                  j                  g d$%      }|sJt(        j+                  |j                  j                  j                  j                  j                  &      }||_        ||_        ||_        |j2                  s|j5                         sd'|_        ||_        |j;                          t=                 j?                  | d(   d)   d*   ||        |j                  d+      }|j5                         rt@        jC                  |       j                  jD                  jG                  d,|        t        |d-      5 }
jH                   d.}j                  jK                  | d   |/      D ])  }|
jM                  t        jO                  |      d0z          j                  xjP                  d"z  c_(        j                  jS                  d1       j?                  |d(   d2   d*   ||        |d	   j                  d      r!|d	   d   |vr|j	                  |d	   d          |d	   j                  d
      r!|d	   d
   |vr|j	                  |d	   d
          |d	   j                  d      s|d	   d   d   |vs|j	                  |d	   d   d          , 	 d d d        d| d3<   |j                  d4      }t        |d      5 }
t        j                  ||
d5d'6       d d d        |jU                  |       t        |      | d7<   |j                  d8      }t        |d      5 }
t        j                  | |
d'9       d d d        | d   dk(  rj                  d       j                  jW                  d:| d;       j                  jS                  d<       y c c}w # 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)=Nr  r   r  r^   rv  r/   Texist_okhistory	createdBylastUpdatedrQ  ownedByrR  rS  r:   r?  attachments.jsonrB  )page_idrA   rT  )moder   zrest/api/content/z/child/attachment/z	/download_linksdownloadr  &zdownload=truerC  z[?&]version=(\d+)r   .)rs   r   r   )r  r   rt   )r  r   r3   FrO  viewr`   zcomments.jsonu5   Дамп комментариев документа r   z@,extensions.inlineProperties,extensions.resolution,children.pager#  r   commentrP  rT   r*  r   rX  r   rA  rL  r  u     успешно сдампленr)   ),r   r   r   mkdirr   r>   r2   get_all_attachmentr   r   rG  r3   r   r   rJ   
url_joinerr   r  r  r   r    r  rs   r   r   r   r   r  import_raw_jsonr   r   r!  r   r   rD   r   rA   get_page_commentsr   r   rL   r_  r   r  )r   ra  r  doc_dir_tmprc  ownerr   rf  r   attach_infor   
doc_ext_idattatt_idr  download_linkdownload_urlrB  attachment_pathattachment_path_tmp
att_ext_idr   comments_file_namerA   r  r4  	info_pathr  rZ   s                              r&   dump_doczAConfluenceAPIImport._dump_documents_main_worker.<locals>.dump_doc@  s   s7|nDT1=K''CI7G!--h7Kt, I9~k*);  Y!<=9~m,T2)C  Y!>t!DE	N&&y1Ev+5y>),I=$$S^I%>? 6{f$")"2"2="A'001CD	#'??#E#E #D	( $F $C  )$/ .1IIk1-. !% 6 6 = = I IJ"SQUYKX
& #!C YF #GI,,*;CI;FXY_X``i(j(+Hj(A%1E#3Ra)aa#'??#=#=doo>Q>QS`#aL C'"%i.":"$)),@-"P6='--"21&5&>&>&7)?T&UO*5*>*>}QWPXXYZaYbNc*d'$.<r&!:J#)#;#;#?#?#-$(OO$:$:$A$A$M$M7 $@ $L
 ('-'?'?'1(,(>(>(E(E(Q(Q'+ (@ (
 )2L%(4L%(7L%#..6I6P6P6R27/7:4$))+LG#!J   VV!4W!=PST &1%9%9/%J"%,,.II01&&++.cdocp,qr,d3 Vq $},lmF#'??#D#DSYW]#D#^ V

7 3d :;99Q>900;(()G)PRacfg#I.229=$+I$6y$A$R%,,WY-?	-JK#I.22;?$+I$6{$C9$T%,,WY-?-LM#I.22=A$+I$6}$Ed$KS\$\%,,WY-?-Nt-TU!VV, )-C$%$--l;Jj$' F1		)Qqu	EF (g,CK((5Ii& 6!		#qu	56 6{f$%%t%4OO"3K=@` abOO$$Z0. .dV V2F F6 6sC   '	Y?Y/D/Y Y/Y7Y*Y6YY'*Y36Y?Fr  r   z,versionr
  rA   r  r  currentarchivedr  r  r   r  r^   rv  u   Дамп документа r   r  u+   Повтор дампа документа r  r   u    из 3r  rF  r>  rU  r#   rG  rH  )r   r>   r  r2   get_page_by_idrA   r3   r  rD   r   r  r  rB   r  rL   r   r^  )rZ   r  bulk_page_queuer  r  r  page_idsr  r  r  r  rj  s   ``          r&   _dump_documents_main_workerz/ConfluenceAPIImport._dump_documents_main_worker?  s   v	1p 51 -	+F*..0##''1
  (  $G$$(OO$B$B#&*kk](#;#( %C %	
 %X.6XX$)+Ig,>+?tIdOCTTU'V??446!..336RS_R`4ab!&q 
"A	" ( 3 %
" 99Q>95 $ T ""6*[-	+ -	+>"#$6$) $ 3 3&QR^Q__pqruvqvpww~$*1// !4 !"
 % $11TUaTbbdehdij'1MV\ 2  !$O-	+ -	+se   -F"2E!5F"6)E!F"!6E!D "E!F"=E	E!!	F**FF"FF""F+c           	      t   d}| j                   j                         }g }t        |      D ]}  }| j                  j	                  | j
                  d|dz    |||d      }|j                  |       |j                          | j                  j                  j                  d|         |D ]  }|j                          ~ |j                   j                          |j                         s$||j                         z  }|j                         s$| j                  j                  j                  d|        |S )Nr   z_dump_documents_main_worker r   )r  r  r  r  r  u.   Ошибок дампа документов: )rh   r  r  rg   r  r  r   r  r3   rD   r   r  r  r  r>   )	rZ   r  r  r  r  r  r  r  r  s	            r&   _dump_documents_mainz(ConfluenceAPIImport._dump_documents_main  s/   !ZZ--/{# 	AA>>((773AE7; ('6*< ) D NN4 JJLOO""''.(?@	A  	DIIK	 	##%$**,(,,..F %**,##&TU[T\$]^r%   c                    d}| j                   }d}| j                  j                         }| j                  j                  j                  | j                   d| d       d}g }t        j                         }|j                         D ]  }	|	j                         r$t        |	j                        j                  d      s8|dz  }|	j                  j                  d      d   }
|j                  t        |
             t!        |      |k(  s|j#                  |       g } |r|j#                  |       |j#                  d        t        j                         |z
  }| j                  j                  j                  | j                   d|d	d
       | j                  j                  j                  | j                   d|        t        j                         }|| j%                  |||      z  }t        j                         |z
  }| j                  j                  j                  | j                   d|d	d
       t        j                         }|| j'                  ||      z  }t        j                         |z
  }| j                  j                  j                  | j                   d|d	d
       | j                  j)                         r%| j                  j                  j+                  d       |S )Nr   2   uV    Добавление страниц в очередь дампа пачками по u    страницr/   r   r  uZ    Добавление страниц в очередь дампа выполнено за rV  rW  u>    Дамп основных данных документов: uS    Дамп основных данных документов выполнен за uD    Дамп расширенных данных выполнен за    Импорт прерван)rl   rh   r  r3   rD   r   	log_spacerZ  r[  r  r  r   rs   r  r   r   r   r  r  r  r  r   )rZ   r  r  r  max_bulkr  r  	temp_listre  r  r  rk  s               r&   _dump_documentsz#ConfluenceAPIImport._dump_documents  s   77****,##~~tu}t~  N  O	
 
	 '') 	G>>#3w||+<+E+Eh+O!OJll((-a0GS\*9~)##I.		 	*D! 2%##~~xy{|  yA  AI  J	

 	##~~\]g\hi	
  $++Ho{SS 2%##~~qrtuxqy  zB  C	
  $--hDD 2%##~~bcefibjjrs	
 ??$$&OO""**+HIr%   c                    ddddddddd	d
d
ddddd}i }	 | j                   d   }t        |j                  d      d         }| j                  j	                  | j
                  d   |      }| j                  j                  r|D ]  }|d   d   |d   d   f}|j                  |      }|s(|j                  ||g g dd      }	|j                  d      r|d   j                  d      rO|d   d   d   d   d   }
| j                  |
| j                  j                                |	d   j                  |
       |d   j                  d      r5|	d   j                  |d   d   d   d   d   |d   d   d   d   d   d        |d!   sd"|	d#<   
 nk|d$k\  r|D ]  }|d   d   |d   d%   f}|j                  |      }|s'|j                  ||g g dd      }	|d&   }|d'   }|dk(  rD|d(   }| j                  || j                  j                                |	d   j                  |       |dk(  r|	d   j                  d|d   i       |d#k(  sd"|	d#<    n|D ]  }|d)   D ]  }|j                  |d'   |d'   g g dd      }	|d*   rD| j                  |d*   | j                  j                                |	d   j                  |d*          |d+   r|	d   j                  d|d+   i       |d*   r|d+   rd"|	d#<     | j                  j                  d,      }|j                         rt         j#                  |       t%        |d-      5 }|j'                         D cg c]  }| c}|d.}t(        j+                  ||       d d d        y c c}w # 1 sw Y   y xY w# t,        $ r,}| j                  j/                  d/| d0d1d23       Y d }~y d }~ww xY w)4N	EDITSPACE
REMOVEPAGEEDITBLOG
REMOVEBLOGCOMMENTREMOVECOMMENTCREATEATTACHMENTREMOVEATTACHMENT	VIEWSPACEREMOVEOWNCONTENTSETPAGEPERMISSIONSSETSPACEPERMISSIONSEXPORTSPACE))r:   create)r:   delete)blogpostr  )r  r  )r  r  )r  r  )
attachmentr  )r  r  )r   r   )r   r  )r   
delete_own)r   restrict_content)r   restrict)r   
administer)r   exportrB  r  r   r  r   
targetTypeF)
permissionr   groupsrS  r   r   r   r8   r   r   r  r^   rs   )r^   rs   anonymousAccessTrS  
   operationKeysubjectrR  r7   spacePermissionsr7  	groupNamezpermissions.jsonr   )	convertedoriginalu@   Не удалось сдампить права доступа. zERR-0056
CmfProjectrG  )rJ  rK  )system_infointr   r2   get_space_permissions
space_datarJ   r>   
setdefaultr5  r3   r   r   project_dirr   r   r   r   r   valuesr   rG  r   r^  )rZ   mapping_typepermissions_dictconfluence_versionmain_versionpermissionsr  r   type_permr   r  subject_typerI   permission_typepermission_filer   r   permissions_datarj  s                       r&   _dump_permissionsz%ConfluenceAPIImport._dump_permissionsD  s    + ,$.$0#,#2&8&8*!3%7+?#7%:!.
$ l	!%!1!1)!<177<Q?@L//??&K
 $$"- 1J!+K!8!F
S^H_`kHl mI(,,Y7E  +66*/%'&().	D "~~j1%j155f=#-j#9&#A)#LQ#OP[#\D //doo6W6W6YZ M006%j155g> N11*4Z*@*I)*TUV*WX\*],6z,B7,KI,VWX,YZ`,a!" ""34,0[)=1> #"- 1J";/=";/?!I ),,Y7E  +66*/%'&().	D )3G#*6?L#v-#*9#5++Hdoo6W6W6YZW,,X6%0X--vwv.GH%4,0[)71: (3 5O&56H&I 5
/::&v..8.@)+*,-2	  &j1 //
:0FHiHiHkl M00J1GH%k2 N116:k;R2ST)*5j>U04D-#55* #..778JKO%%'		/*ot, /-=-D-D-F!G!!G +$  		*A./ /!G/ /  	OO%%RSVRWX%!	 &  	sc   E/N CN BN -N 3AN N	N	$N N 	NNN N 	O#"O

Oc           	         d}d}t        |d         }|d   }|d   }	|d   }
|	dk(  r|
dk7  r|d   d	   d
   r7| j                  j                  |d|d      D cg c]  }| }}||d   d	   d
<   |d   d   d
   r5| j                  j                  |d      D cg c]  }| }}||d   d   d
<   | j                  j                  rF|d   D ]>  }|d   dk(  s| j
                  5  | j                  j                  |d          ddd       @ d}|j                  | d      }|j                         r%t        |d      5 }|j                         }ddd       t        j                  |dd      }t        j                  |j!                  d            j#                         }||k(  r| j$                  s||fS |d}nd}t        |d      5 }|j'                  |       ddd       |j                  |      }|j)                  d      }|j)                  d      }|j)                  d      }|
dk(  r| j*                  j,                  j/                  d|	 d| d| d       |j                         r|j1                  |       ||fS |j                         r|j1                  |       ||fS |j                         r|j1                  |       ||fS |j                         r|j1                  |       ||fS |j                         r|j1                  |       ||fS |j                         r|j1                  |       ||fS |j3                  d       ||fS c c}w c c}w # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w) u  
        Получает минимальные данные контента с информацией о последнем изменении
        и зависимыми объектами(комментарии, вложения).
        Вычисляет хеш данных и сравнивает его с хешем предыдущей проверки,
        если хеши отличаются, то помечает каталог контента .dirty для повторного дампа
        Fr^   r   rR  r  r:   r  rr  r  r      )limitrA   rr  r  r  	ancestorsr;   Nz.hashr@  T)rM  	sort_keyszutf-8rT  r/   r0   r1      Контент  '' (uc   ) удален в корзину. Он не будет сдамплен и импортированr  )r   r2   r  r  rJ   _folder_lock_folder_setaddr   r   r   r   r   r   hashlibmd5encode	hexdigestrefresh_dumpr   r   r3   rD   r   r   r  )rZ   rN  content_hash_dirr  comment_expandis_new
is_updated
content_idcontent_titlecontent_typecontent_statusr  commentsr  r?  ancestorcurrent_hash	hash_filer   content_jsonnew_hashr  doc_tmp_dirdoc_trashed_dirdoc_remote_dirs                            r&   _check_content_hashz'ConfluenceAPIImport._check_content_hash  s    
'
(v * 6!n	&Az"9-i8 OO55"!-!&	 6  'G  =E
#I.y9z"<0; OO66"! 7 #-J  @K
#L1)< $$ ' 4 AH'83!.. A ,,00$@A AA
 $--E.BC	i% ( vvx( zz'zN;;|227;<FFH8#D,=,=:%%FJ)T" 	aGGH	 ##J/))(3!--j9 ,,Y7Y& OO""**!,r-J< PT U
 !!###O4 z!! !0 z!!  &&(&&7 z!! ~~, z!! !'')''4 z!!  &&(&&{3 z!! !!4!0z!!g A A( (	 	s0   	M	M!M<M$M1M!	$M.1M;c                    |j                  d      }|j                  d       d}| d}| d}	t        d      5  d	d	d	d	g d
}
	 | j                  5  | j                  }| xj                  |z  c_        d d d        	 | j
                  j                  |||d      }|sn|D ]  }|d   dvrt        |d         }|d   }|
dxx   dz  cc<   |
d   j                  |       	 | j                  ||||	      \  }}|
dxx   t        |      z  cc<   |
dxx   t        |      z  cc<    	 |j                  |
       d d d        y # 1 sw Y   xY w# t        $ rK}| j                  j                  | j                   d| d| d| ddd       |
dxx   dz  cc<   Y d }~d }~ww xY w# t        $ rA}| j                  j                  | j                   d d| d | d!| 	ddd       Y d }~d }~ww xY w# 1 sw Y   y xY w)"Nr:   Tr  ancestors,history.lastUpdatedz%,children.comment,children.attachmentz2,extensions.inlineProperties,extensions.resolutionFr  r   r  allnewupdatedcontent_idsr
  )r  r  rA   r  r  r  r^   r   r@  r   rC  rA  rB  uC    Не удалось проверить хеш документа "r  ). rU  r#   rG  rH  r  uV    Не удалось получить данные списка страниц: start=z, limit=z	, expand=r>  )r   r  r   _start_lock_startr2   get_all_pages_from_spacer   r   r<  r  r   r3   r^  r  r  )rZ   	space_keyr  hash_dirhash_stats_queuer  r+  rA   page_expandr,  
hash_statsr  r   r:   r  
page_titler-  r.  rj  s                      r&   _check_page_hashz$ConfluenceAPIImport._check_page_hash.  sy   #,,V4-0 EF"8#UV51 9	-!J %% ) KKEKK5(K)) OODD!eKX] E E ! % 6>1SS$"%d4j/%)']
"5)Q.)"=188A6151I1I $ 0 ( .	2.FJ 'u-V<-&y1S_D1#6 `   ,s9	- 9	-) ):  ) 6 OO55#'>>"2 377Al#gYcRUQV!X+5Z` 6 
 'x0A5006 ! 	OO-->>* +!!&xwi}B%! $.!.#) .  	]9	- 9	-s   G3"E4G3="F&G3 AF&"AE%F&'G3E	G3	F#AFF&F##F&&	G0/7G+&G3+G00G33G<c                    |j                  d      }|j                  d       t        d      5  ddddg d}	 |j                         }||j	                  |       n	 | j
                  j                  |dd	
      }|d   dvrL|dxx   dz  cc<   |d   j                  t        |             | j                  |||      \  }	}
|dxx   t        |	      z  cc<   |dxx   t        |
      z  cc<   |j	                  |       d d d        y # t        $ r<}| j                  j                  d| d| ddd       |dxx   dz  cc<   Y d }~[d }~ww xY w# 1 sw Y   y xY w)Nr:   Tr  Fr  r   r?  r>  r
  r  r  r  r@  r   rC  rA  rB  u9   Не удалось проверить хеш папки r>  rU  r9   rG  rH  r  )r   r  r   r>   r  r2   r  r   r   r<  r  r   r3   r^  )rZ   r  rI  folder_queuerJ  r+  rL  	folder_idr;   r-  r.  rj  s               r&   _check_folder_hashz&ConfluenceAPIImport._check_folder_hashq  s   #,,V4-51 +	-!J (,,.	$ $$Y/.!__;;!>$ < F h'/QQ u%*%}-44S^D)-)A)A( *&FJ
 u%V4%y)S_<)1 D   ,W+	- +	-D ! .OO--ST]S^^`ad`ef#-!,#)	 .  x(A-((.E+	- +	-sB   .E%DEA,D1E	E2EEEEEc                     | j                   j                         }d| _        | j                  j	                         | _        t               | _        | j                  j	                         | _        | j                  }|d   }t        |d    d      }|j                  d       t        j                         }g }	t        |      D ]~  }
| j                  j                  | j                   d|
dz    ||||d	
      }|	j#                  |       |j%                          | j&                  j(                  j+                  d|         |	D ]  }|j-                          ~ | j.                  j0                  r| j                   j                         }| j                  D ]  }|j3                  |        |j3                  d        g }t        |      D ]~  }
| j                  j                  | j4                  d|
dz    ||||d
      }|j#                  |       |j%                          | j&                  j(                  j+                  d|         |D ]  }|j-                           t        j                         |z
  }d}d}d}d}g }|j7                         sU|j9                         }||d   z  }||d   z  }||d   z  }||d   z  }|j;                  |d          |j7                         sU|j=                         D ]  }|j?                         r|j@                  jC                  d      r/|jD                  }||vs@|jG                  | d      }|jI                  |       | j&                  j(                  jK                  d| d        | j&                  j(                  j+                  | jL                   d|dd| d| d| d
       | j&                  j(                  j+                  | jL                   d|        |S )Nr   r  r   z/hashTr  z_check_page_hash r   )rH  r  rI  rJ  r  r  z_check_folder_hash )r  rI  rP  rJ  u   Запущен r  r@  rA  rB  rC  r.   r1   r   u    был полностью удален, либо перемещен в другое пространство. Каталог помечен '.remote'uD    Проверка хеша контента выполнена за rV  u8    сек. (всего/новых/обновленных: r   rv  u)    Ошибок хеша контента: )'rh   r  rF  rg   LockrE  rN   r$  r#  rl   r   r  rZ  r[  r  r  rN  r   r  r3   rD   r   r  r2   rJ   r  rR  r  r>   extendr  r  rs   r  stemr   r   r   r  )rZ   r   r  	dump_datarJ  r  rH  rI  re  r  r  r  rP  r;   threadsthreadrk  r  obj_allobj_newobj_updatedrC  rL  content_dirr/  content_remote_dirs                             r&   _check_hashzConfluenceAPIImport._check_hash  s     ::++->>..05 NN//177%L	5=//0%  {# 	AA>>((,,(Q0!* ( ((8	 ) 	D NN4 JJLOO""''.(?@	A  	DIIK	 ??  ::++-L** )  ()T"G;' H..22.q1ug6$,$,(4,<	 / 	 v&&&++ofX,FGH "   2%"((*)--/Jj**Fz%((Gz%((G:i00Kz-89 #((* $++- 	K%%';+;+;+D+DW+M$))J,%-%6%6*W7M%N"##$67&&..%j\ 2> ?	 	##~~bcefibj k>>EYayPQR]Q^^_a	

 	##t~~&66_`f_g$hir%   c                 x   | j                   j                  | j                   d       g }t               }|j	                  d      }|j                         rOt        |d      5 }t        j                  |      }|D ch c]  }t        || j                            }}ddd       t               }|j                         D ]  }	|	j                         r%|	j                  j                  | j                        r9|	j	                  d      }
|
j                         s[t        |
      5 }t        j                  |      D ]?  }|d   dk(  r|j!                  || j                            ||vs/|j#                  |       A 	 ddd       |
j%                           t        |d      5 }t        j'                  t)        |      |dd	
       ddd       |j+                  |      }|D ],  }| j-                  || j                   j/                                . yc c}w # 1 sw Y   |xY w# 1 sw Y   xY w# 1 sw Y   jxY w)us    Собирает пользователей из файла users.json в каталогах документов u>    Сбор пользователей из документовr*  r@  NrR  rS  rT  r   FrX  )r3   r  r  rN   r   r   r   r   r   r   rI   r  r  rs   r  r  r%  r   unlinkrG  list
differencer5  r   )rZ   r  r  current_userscurrent_user_idsrd  r   unew_user_idsr  r4  r   
diff_usersr1  s                 r&   _collect_usersz"ConfluenceAPIImport._collect_users  s   t~~..lmn 5 )),7
j#& R! $		!CP#QaC$--(8$9#Q #QR
 u'') 	$G>>#w||'<'<T=Z=Z'[ )),7J  "*% 7 $		! 7<;6$$((dmm)<=}4)00677 !!#	$ *d# 	LqIId=)1QUIK	L ",,-=>
! 	NG)J)J)LM	N/ $RR R7 7	L 	Ls=   "H<HH%AH$*H$$#H0HH!$H-	0H9c                     | j                   j                         j                  d      }t        | d| dd      5 }t        j                  |      }|cd d d        S # 1 sw Y   y xY w)Nprojectsr   z
/info.jsonr   )r3   r   r   r   r   r   )rZ   project_keyr  r   projects        r&   _get_projectz ConfluenceAPIImport._get_project5  s]    oo779BB:N[M;-z:DA 	QiilG	 	 	s   AA&c              #     K   | j                   j                         j                  d      }|j                         D ]  }|j                  j                  d      r|j                  d      }|j                         s*| j                   j                  j                  d| d       jt        |d      5 }t        j                  |       d d d         y # 1 sw Y   xY ww)Nrk  )r/   r.   rA  uN   Отсутствует файл info.json в каталоге проекта ''r@  )r3   r   r   r  rs   r  r   rD   r   r   r   r   )rZ   projects_dirr  rf  r   s        r&   _get_projectsz!ConfluenceAPIImport._get_projects;  s     88:CCJO'//1 	#K(()<=#,,[9I##%&&..depdqqrs i% #iil"# #	## #s   B0C!2C
C!C	C!c                 l   
 dt         dt        f
 fd
 j                   j                  j                  d         }|d   d   d   }|d   sy	|d
   D cg c]
  }|d   s	| }}|st j                         D ]a  }d|d<   g |d
<   |d   D ]  }|d
   j                  |dg d        |d   D ]  }|d
   j                  |dg d        |j                  |       c t               }|D ]  }	 |d   r|d
   s[ j                  |d   d         }|d   D ]  }|d
   j                  |dg d        |d   D ]  }|d
   j                  |dg d        |d
   D ]  }	|	d   s	|j                  |	d          |j                  d      sJt         j                  j                         j                  d      j                  |d   d               |d<    
|	|d         D ]  }|j                  |          | _        y	c c}w #   j                  j                  j                  d| d       Y JxY w)uJ   Прогружаем все выбранные документы
        doc_infor  c              3     K   | d   sy | d   sY	 j                  t        |      j                  d      | d         }|d   d   d   D ]  }| d   j                  |d   dg d        | d   D ]   }|d   s	 ||      E d {    |d    " y # t        $ r/}j                  j                  d|  d| ddd	
       Y d }~y d }~ww xY w7 Iw)N	isCheckedrr  	documentsr^   u'   Документ не загружен r>  zERR-0015r#   rG  rH  r:   r   Tr^   rv  rr  )_get_documentr   r   r   r3   r^  r   )rt  r  doc_dumprj  childrq  rZ   s        r&   rq  z=ConfluenceAPIImport._load_selected_objs.<locals>.get_childrenN  s    K(J'	 #11$w-2H2H2UW_`dWefH &j1&9)D hEZ(//uT{QUce0fgh!*- &%+E7;;;+%& !  OO--A(2cUS#-!.#)	 .     <s?   C-B 8C6CCC	C	%C?CC		Cimport_settingsru   r`   r   rv  Nrr  T
root_pagesrx  archived_pagesr   r  r^   r   rk  uc   Не удалось вычислить выбранные документы для проекта u4   , скорее всего он не сдамплен)r   r   r}   r3   r_   rr  r   rN   rn  r%  r>   r   r   rD   r   rO   )rZ   rz   rootsetting_objselected_spacesrm  r*   resultr   rt  rq  s   `         @r&   _load_selected_objsz'ConfluenceAPIImport._load_selected_objsK  s   	&4 	&# 	&* ++DOO,I,IJ[,\])*73A6K :>z:Jg;kZeNf;gg--/ 0'+$&(
#%l3 bFJ'..f4]_/`ab%&67 bFJ'..f4]_/`ab&&w/0 $ 	RER% ,"&"3"3E%L4G"H&-l&; hF!*-44FQUce5fgh&-.>&? hF!*-44FQUce5fgh$)*$5 3#K0"JJx~6#(99V#403DOO4U4U4W4`4`ak4l4u4uv{  }B  wC  DI  wJ  5K  1Lf*6xv*O 3 &

6 233	R$ %; h6R&&..  2U  V[  U\  \P  0Q  Rs    
H !H .A3H"BH+H3
applink_idc                     | j                   j                         j                  d      }t        |d      5 }t        j                  |      }d d d        j                  |      xs i S # 1 sw Y   xY w)Napplinks.jsonr   )r3   r   r   r   r   r   r>   )rZ   r  r   r   applinkss        r&   _get_applinksz!ConfluenceAPIImport._get_applinks  sa    OO557@@Q	)T" 	$ayy|H	$||J'-2-	$ 	$s   A))A2c                 V   ddl m} i }| j                  j                         D ]"  }|j	                  |d   d      |d<   |||d   <   $ | j
                  j                         j                  d      }t        |d      5 }t        j                  ||d	
       d d d        y # 1 sw Y   y xY w)Nr   )cmf_hashlibrpcUrlr   r   r^   r  rT  FrL  )cmf.utilr  r2   get_applinksshort_str_encr3   r   r   r   r   rG  )rZ   r  r  applinkr   r   s         r&   _dump_applinksz"ConfluenceAPIImport._dump_applinks  s    (335 	.G%0%>%>wx?PRS%TGM"&-HWT]#	. OO557@@Q	)T" 	7aIIhI6	7 	7 	7s   =BB(c                    | j                   j                  |      }|j                  d      }|j                         r|j	                  |       n|j                  d       || _        d }| j                  j                  d      }|j                         r;t        |d      5 }t        j                  |      }d d d        j                  d      }d }t        j                  D|+|dk7  r=t        j                  dk(  s|t        j                  k  rd| _        t        j                  }|xs |xs d| _        | j                  j!                  |      }	|	| _        g |	d	<   | j                  j%                  |      D ]  }
|	d	   j'                  |
d
           |	d	   st)        d|	d    d| d      g |	d<   | j                  j+                  |      D ]  }
|	d   j'                  |
d
           | j,                  j.                  j1                  | j2                   d       | j5                          t        |d      5 }t7        |      |	d<   | j                  |	d<   t        j9                  |	|       d d d        |j	                  |       || _        | j                  j                  d      }| j                  j                  d      }|j                  d       t;        j<                         }| j>                  r2| j,                  j.                  jA                  | j2                   d       | j,                  j.                  j1                  | j2                   d       | jC                  |	|       | xjD                  | jG                  |      z  c_"        t;        j<                         |z
  }| j,                  j.                  j1                  | j2                   d|dd       | jI                  ||       y # 1 sw Y   8xY w# 1 sw Y   xY w)Nr/   Tr  rA  r@  rW   r   r   r}  r^   u   Пустой проект 'rs   r"  u2   ), возможно нет прав доступаr~  u8    Дамп прав доступа (Разрешения)wr   rw  uA    Дамп всего контента будет обновленuD    Проверка хеша контента пространстваu1    Дамп контента выполнен за rV  rW  )%rq  r   r   r   r   r  r  r   r   r   r>   rU   rV   rT   rW   r2   	get_spacer
  get_root_pages_from_spacer   CmfError get_all_pages_from_space_archiver3   rD   r   r  r  r   rG  rZ  r[  r*  r   r_  r@   r  ri  )rZ   rH  r  project_dirty_dirprev_dump_last_page_verrf  r   current_dumpnew_dump_last_page_verr   r:   r  re  rk  s                 r&   _dump_spacezConfluenceAPIImport._dump_space  s   ''00;'33H= 12##T#2,"&$$--k:	i% ,#yy|, '3&6&67K&L#!%77C'/+r1CCrI2V5`5`` '+D#%+%P%P""8"X<S"XWX )))4 lOO==iH 	3D,&&tDz2	3\"8vs9+  VH  I  J  J"$OODDYO 	7D"#**4:6	7 	##t~~&66n$op )S! 	 Q,E&M*.*A*AE&'IIeQ	 
 	!!+.&$$--k:	##,,[9% OO""**dnn-==~+  A 	##t~~&66z${|) 	4//99 2%##t~~&66ghjkngoow$xy 	K2O, ,V	  	 s   !O-74O:-O7:Pc           	      r   | j                  | j                  j                  d         }|d   d   d   }|d   sy|d   D cg c]
  }|d   s	| c}| _        |d   rDt	        |d         dk(  r3| j
                  j                         D cg c]
  }||d   d	 c}| _        | j                  j                         j                  d
      | _	        | j                  j                  d       | j                  D ]  }| j                  j                         r y t        |d   d         }t        |d   d         }t        |d   d         }d| d| d| _        	 | j                  j                  j                  | j                   d| d       | j!                  |       | j                  xj"                  dz  c_        | j                  j%                  d       t'                 y c c}w c c}w # t(        $ r=}| j                  j+                  | j                   d| d| dddd       Y d }~:d }~ww xY w)Nr|  ru   r`   r   rv  Trr  r^   )r   r^   rk  r  r   r  original_namez[SPACE 'r"  z)]u$    Дамп пространства 'rp  r   r   u3    Ошибка дампа пространства ''. zERR-0026r  rG  )rI  rJ  rK  rollback)r}   r3   r_   r  r   r2   get_all_spacesr   r   rq  r  r  r   r  rD   r   r  rL   r   r   r   r^  )	rZ   rz   r  r  r   space_idrH  
space_namerj  s	            r&   _dump_spacesz ConfluenceAPIImport._dump_spaces  s+   ++DOO,I,IJ[,\])*73A6K ?CJ?OlS^_jSklT*%5!6!!;MQ__MkMkMm#ncCs4y$A#nD  OO==?HHT.// 	K((*;u-d34HK.u56I[/@AJ'	{#hZrBDN&&++t~~.>>bcmbnno,pq  +11Q61$$t$4!	  m $o*  ))~~&&YZdYeehilhmn))%! *  s+   
G&G&
G+BG00	H692H11H6c                 \   | j                   j                         j                  d      }|j                         ry |j	                  d       | j
                  j                         D ]  }| j
                  j                  rt        |d         }n.t        |d         j                  dd      j                  dd      }|j                  |      }|j	                  d       |j                  d	      }| j                   xj                  d
z  c_
        t        |d      5 }t        j                  ||       d d d        |j                  d      }| j                   j                         j                  d      }|j	                  d       |j	                  d       | j
                  j                  |d         D ]  }	|j                  |	| j                     dz         }
| j                   xj                  d
z  c_
        t        |
d      5 }t        j                  |	|       d d d        |j                  |	| j                     dz         }
|
j                         rt        |
d      5 }t        j                  |	|       d d d           y # 1 sw Y   WxY w# 1 sw Y   yxY w# 1 sw Y   xY w)Nr  Tr  r^   rs   r   r   r   rA  r   rT  r   r   )r3   r   r   r   r  r2   get_all_groupsrJ   r   r   rL   r   r   rG  get_group_membersrI   )rZ   
groups_dirr   r   	group_dir	data_filer   	users_dirall_users_dirr   user_data_files              r&   _dump_groupsz ConfluenceAPIImport._dump_groups  sA   __668AA(K
$'__335 	'E$$U4[)U6]+33C=EEc3O"++F3IOOTO*!**;7IOO--2-i& $!		%#$!**73I OO==?HHQMOOTO*.99%-H 	'!*!3!3D4G4O!P11Q61.$/ '1IIdA&'!.!7!7T]]8KG8S!T!((*.$/ '1IIdA&' '	'	'$ $' '
' 's$   J	J$J"	J	J"J+c                    | j                   j                  j                  d       | j                  j	                         | _        | j                   j                         j                  d      }t        |d      5 }t        j                  | j
                  |dd       d d d        | j
                  j                  dd      rdnd	}| j
                  d
   }| j
                  d   }| j                   j                  j                  d| d|        | j                   j                  j                  d| d       y # 1 sw Y   xY w)Nu-   Сведения о системе Confluencezsystem_info.jsonr  r   FrX  isCloudCloudServerrB  r   zConfluence r   zConfluence URL 'rp  )r3   rD   r   r2   get_system_infor  r   r   r   r   rG  r>   )rZ   system_info_filer   confluence_typer  confluence_urls         r&   _dump_system_infoz%ConfluenceAPIImport._dump_system_info2  s   ##$ST??::<??<<>GGHZ["C( 	IAIId&&!%IH	I &*%5%5%9%9)U%K'QY!--i8))%0##k/1B!DVCW$XY##&6~6Fa$HI	I 	Is   :$D99Ec                 d   | j                          t        t        dd      | _        | j                  j                         }t        j                  |      \  }}}||z  dz  }| j                  j                  j                  d| d       | j                  j                  j                  d       | j                  j                  j                  j                  dd      rL| j                  j                  j                  d	       | j                  | j                  j                  d
       n+| j                  j!                  dt"        j$                         | j'                          | j)                          d}| j+                  d
      D ]  }|dz  }	 | j                  j-                  d|       y )NIMPORT_REFRESH_DUMPFd   u   Свободно места: r   u$   Скачаем данные из API
load_usersTu'   Дампим пользователейr   uA   Не дампим пользователей из-за опцийr  r   r   r   )r`   )r  getattrrU   r*  r3   r   shutil
disk_usagerD   r   r_   r`   r>   r   r2   get_all_usersr  rB   r  r  r  r   r_  )rZ   download_pathtotalusedfreefree_percentuser_cntr   s           r&   download_dataz!ConfluenceAPIImport.download_dataA  sb     $F,A5I99;"--m<tTe|c)##&CL>QR$ST##$JK??((..22<FOO""''(QRdoo;;WEOO ckrkzkz{ 	 	!!'* 	AMH	  x 8r%   c                    d}t        d      5  	 | j                  j                         rn|j                         }|dk(  rnt        j
                  j                  |g d      }t        |j                        }t        |j                        }t        |j                        }t        |j                        j                  d      }	t        |	      d	kD  r	d
|	d	    dnd}
d| d}|j                  r |j                  d   d   }|dz  }| d|dd}| j                  j                  j                  |
 d| d| d       	 | j                   j#                  ||t$        j&                         | j                  j                  j                  |
 d| d| d       d|_        |j+                          t-                | j                  j/                  d       |j5                  |       d d d        y # t0        $ r6}| j                  j3                  |
 d| d| d| ddd|d       Y d }~Vd }~ww xY w# 1 sw Y   y xY w) Nr   Fr  TDONE)rs   r   r   r  r  )r^   rt   r   r   u   [Страница ID: z] r&  rp  
extensionsfileSizei    (z.2fz MB)u   Скачивание : ')timeoutu	   Файл u    сохранен в 'r  u"   Ошибка скачивания r  zERR-0027r  rG  )rI  rJ  rK  ext_hrefr  )r   r3   r  r>   r    r  r   rs   r   r   r  r   r   r  rD   r   r2   download_filerU   IMPORT_DOWNLOAD_TIMEOUTr  r   r   r_  r   r^  r  )rZ   download_queue
done_queuer  download_job_iddownload_objr  file_urlr   ext_id_splitpage_id_msg	file_sizefile_size_mbrj  s                 r&   _download_file_workerz)ConfluenceAPIImport._download_file_worker]  sl   51 9	#??,,."0"4"4"6"f,%77;;&  < 	    1 12	|001 1 12	"<#:#:;AA$GNQR^N_bcNc 6|A6GrJik	{!,	// , < <\ J: VI#,	#:L#,+RS/A FI&&++{m;PQZP[[^_g^hhi,jkOO11 ! & > > 2 
 OO**//&-y;QR[Q\\]^ /3L+ %%'LOO,,\:Y n NN6"s9	# 9	#^ ! OO--&-'I)TWX`Waadehdij#-!4#)!)!% .  _9	# 9	#s7   D4H8BG6H86	H5?,H0+H80H55H88Ic                    | j                   j                         }| j                   j                         }d}| j                  j                  dg       dd| j                  j                  j                  j
                  gg dg dg}| j                  j                         j                  d      }d}g }| j                  D ]  }t        |d   d	         }	|j                  |	      }
t        |
      j                  d
      st        |
      d
z   }
dd|
 dgg}t        j                  j                  ||z         }|s|||z  }|j                  ||z           |s'| j                  j                  j!                  d       |S | j                  j                  j!                  d|        g }t#        | j$                        D ]y  }| j&                  j)                  | j*                  d| ||d      }|j                  |       |j-                          | j                  j                  j!                  d|        { |D ]D  }t        j                  j/                  |dg      D ]  }|j1                  |j2                          F t5                |D ]  }|j1                  d        |j7                         s|D ]  }|j9                           | j                  j;                         r%| j                  j                  j=                  d       |j7                         s$||j?                         z  }|j7                         s$| j                  j                  j!                  d|        |S )Nr   zplugin.plugin.source_hashr   r   )r  r   F)rs   r   all_attachments.ziprk  r   r  r   r   r   r   r   u3   Нет вложений для скачиванияu'   Скачивание вложений: r  )r  r  r  u    Запустили задачу --r   rt   r  r  uC   Закончили скачивание файлов, ошибок ) rh   r  r3   load_fieldsr   r   r   r   r  r   r  r    r  countr   rD   r   r  rl   rg   r  r  r  slistr  r^   r   r  r  r  r   r>   )rZ   r  r  r@   main_filterprojects_pathattachment_countfiltersr   rH  project_pathpath_filterdownload_countprocsr  r  filter_r   s                     r&   download_filesz"ConfluenceAPIImport.download_files  s/   ))+ZZ%%'

##%@$AB D$//"8"8"?"?"K"KL'1	
 99;DDZP)) 		:EE%L/0I(11)<L|$--c2"<036"F|nA,>?@K#55;;;Q\C\;]N N2 {[89		:  OO""''*]_OO""''*QRbQc(det889 	SA>>((11,QC0&4", ) D LLJJLOO""''*J4&(QR	S  	4G & 8 8 > >gW[V\ > ] 4""<??34	4 	 	'Dv&	'##% 		 ??$$&OO""**-HJ""$*..**J ""$##&ijtiu$vwr%   c              #      K   | d}t        |d      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nz/comments.jsonr   r   r   r   rZ   r   comments_file_pathr   r   s        r&   _get_commentsz!ConfluenceAPIImport._get_comments  sQ      $v^4$d+ 	&q &jjo%&	& 	& 	&   A	=	A	AA	c              #      K   | d}t        |d      5 }|D ]  }t        j                  |        	 d d d        y # 1 sw Y   y xY ww)Nz/restrictions.jsonr   r  r  s        r&   r   z%ConfluenceAPIImport._get_restrictions  sR      $v%78$d+ 	&q &jjo%&	& 	& 	&r  c                 b      j                  d         D ]  }d fd	 |        y )Nr   c                 N   	 | d   dk(  rFj                   j                  j                  d|         	 j                   j                  dd       y j                   j                  j                  j
                   d| d    }t        j                  j                  |dg	      }|r*|j                  s	 j                   j                  dd       y |s#t        j                  |j                   
      }n|j                  dg       | d   j                  d      r8| d   d   d   dk7  r*j                  | d   d   j                           |_        na| d   j                  d      r8| d   d   d   dk7  r*j                  | d   d   j                           |_        nt        j                  |_        | d   d   |_        | d   j                  d      r8| d   d   d   dk7  r*j                  | d   d   j                           |_        n|j                  |_        | d   j                  d      rN| d   d   d   d   dk7  r=j                  | d   d   d   j                           |_        | d   d   d   |_        n"|j                  |_        |j                   |_        | d   d   d   }| d   d   d   }|r|rt)        |d      }t)        |d      }j+                  |||       j-                  ||       dj/                  |j0                  j2                  D cg c]  }t5        |       c}      |_        | |_        ||_        | d   d   dk(  rd|_        | d   d   d   d k(  rd!|_        |jA                  d"       | d#   D ]  }	 
|	|        |j                   j                  dd       S c c}w #  j                   jC                  d$d%    d&|  d'd(       Y nxY w	 j                   j                  dd       y # j                   j                  dd       w xY w))Nr  draftuJ   Не обрабатываем черновики комментариев r  	processedr   r^   r   r   rt   )r   r   r3   **r  r  rR  rS  r  createdDater  rQ  whenrO  r  r`   editorr   r&  r  locationinlineT
resolutionresolvedclosedr   rr  u7   Ошибка обработки комментария r   r   zERR-0028rI  r   r  )"r3   rD   r   r_  r   r   r    
CmfCommentr>   r   r  r   rI   	cmf_ownerrd   anonymous_usercmf_created_at
cmf_authorcmf_modified_bycmf_modified_atr   _convert_mentions_convert_linksr  rO  rr  r   r   r  tree_parentr  r  r   r^  )r  r
  r   cmf_commentr  r  	view_soupeditor_soupxr{  r  r   r   rZ   s             r&   r  z9ConfluenceAPIImport._process_obj_comments.<locals>.create  sg   AEx(G3..66  :D  EL  DM  8N  O| OO,,YD{ !% 6 6 = = I IJ"WUY]O\F"("3"3"7"7vO`Na"7"bK";+F+Ft OO,,YDs '&,&7&7vfaeapap&7&q#//7	*..y9 '	 29 =f E T040@0@AST]A^_c_l_lAm0n-!),00= '	 2; ? G; V040@0@AST_A`aeananAo0p-010@0@-181CM1RK.	*..{; '	 2; ? G; V151A1A')BTU`BabfboboBp1q.1<1F1F.	*..}= '	 2= A$ G OS^ ^6:6F6FwyGYZgGhimGnoso|o|G}6~36=i6H6WX^6_36A6K6K36A6P6P3"6?627;D$V_X6w?F$1$$?	&3FF&C..{I{S++FI{K+-77INND[D[3\qCF3\+](29K/.9K+|,Z8HD-1*|,\:8D
R-5*  $$$6!(!4 3uk23 ' OO,,YD/ 4]OO--QRUV]R^Q__abiajk#-"!%	 .   OO,,YDDOO,,YDs8   0N9 A"N9 IN9 N40A'N9 4N9 9*O%#P P$)r  r   )r  )rZ   r   r   r  r  s   ``` @r&   _process_obj_commentsz)ConfluenceAPIImport._process_obj_comments  s=    ))#f+6 D	$GBE BEF 7#ID	$r%   c              #      K   t        |      j                  d      }|j                         D ]=  }|j                         s|j                  }|dk(  s|j                  d      r7||d ? y w)Nr?  r  r.   )r  r   )r   r   r  is_filers   r  )rZ   obj_pathattachments_pathr   r  s        r&   _get_obj_attachmentsz(ConfluenceAPIImport._get_obj_attachments.  st     >22=A)113 		I$$&!I11Y5G5G5P&& 		s   A,A.r  c                 6   t        j                  d|       }|r|d   nd }|r|d   nd }t        t        |      j	                  d            5 }t
        j                  |      }d d d        D ]  }d|v rt        |d   d         }ndt        j                  j                  |d   d         }	t        j                  j                  |	j                        }
|
j                  dd	g      d
   }|d   | k(  st        |d         |k(  s||k(  s|c S  y # 1 sw Y   xY w)Nz((?:att)?\d+)\.(\d+)r   r   r  rB  rC  r  r  1r   r   r^   )r  	fullmatchr   r   r   r   r   r   r  r  r   parse_qsqueryr>   )r  r  
file_matchfile_idfile_versionr   attach_info_listattachrB  r  query_paramss              r&   _get_confluence_attach_infoz/ConfluenceAPIImport._get_confluence_attach_info;  s    \\"99E
#-*Q-4(2z!}$w-(();<= 	,#yy|	,& 	FF"fY/9:#\\226(3CJ3OP
%||44Z5E5EF&**9se<Q?w9,t%0</ 		, 	,s   DDc                     d}g }d   D ]N  }t        |d         }|j                   j                  j                  j                  j                   d|        P |rLt
        j                  j                  ddgdd|gg d	g
      }|D ]  }|j                           t                 fd}	 j                  d         D ]0  }
| |	|
d   |
d         z  } j                  j                  dd       2 |S )Nr   r?  r^   r   r   =r   zNOT INr   r   c                    d}g d}d }	 j                  | d         }|r|d   nd}|r|d   n| }|rPj                  j                  j                  j                   d| }t        j
                  j                  ||      }|s.d	d
|gdd
gg dg}	t        j
                  j                  |	|      }|s5t        j                  |j                  d      }|j                  d       |j                  r+|r|_	        nd|_
        j                  |_        |r|j                  d      r|d   }
|
j                  d      |_        |
j                  d      r2|
d   d   dk7  r'j                  |
d   j                           |_        nt"        j$                  |_        |j                   |_        ||_        t+        |d      5 }|j-                  |j/                         dd       d d d        d|_        |j                  d       |r|d   d   }|j0                  |k(  sJ t3                |S # 1 sw Y   IxY w# t4        $ rE t3                j                  j7                  d d d|j0                   d d	d !       d"}Y |S t8        $ r, j                  j7                  d# d d$d d%       d"}Y |S w xY w# |c cY S xY w)&Nr   )r   r   url_preview_imgurl_previewr   r^   r&  r   r   r  rs   r"  r   r   r"  Nr  Trs   r   r3   r   r   rB  r  rQ  rR  rS  rbFsmart_backup
mark_dirtyr  r  u   Размер файла 'r"  u@   ) не соответствует размеру из меты: z	 bytes / z byteszERR-0029r   r   u;   Не удалось обработать вложение 'rv  r   r  )r   r3   r   r   r    CmfAttachmentr>   r   r   r   embeddedr   rm  r  r   rI   r  rd   r  r  r  r   upload_filer   st_sizer   AssertionErrorr^  r   )r  r   errorattachment_fieldsr  attachment_metaattachment_idattachment_nameattachment_ext_idattachment_filterattachment_versionr   file_size_metar   r   rZ   s                r&   _process_attachmentzIConfluenceAPIImport._process_obj_attachments.<locals>._process_attachmenti  s9    E! JP"&"B"B9cRXk"Z9H 5b>M/'":S\ +/??+A+A+H+H+T+T*UUWXeWf(g%!'!5!5!9!900 ": "J "o6!3/-)%
 "(!5!5!9!900 ": "J "!'!5!5,%#'??(,	 "6 "J OOO5-- %,=
).2
+)/J&&?+>+>y+I-<Y-G*4F4J4J64R
1.2248 24 8 @K O484D4DEWX\E]^b^k^kEl4mJ1454D4DJ1/9/D/D
,5D
2i. !"..FFH)-', /  26J.OOO5&)8)Fz)R)11^CCC& =  " ))//@M? S55?5G5G4H	R`Qaagi	 *     ))QRaQbbefsettuv!	 *   sJ   F9H; #H/'AH; /H84H; ;A
J<J? 0J<8J? ;J<<J? ?Kr   r  r   r  r  )r   r   r3   r   r   r    r.  rb  r  r   r  r_  )rZ   r   r   r  attachment_ext_idsatt_datar  attachments_to_deleter  r<  attachment_datas   ```        r&   _process_obj_attachmentsz,ConfluenceAPIImport._process_obj_attachmentsT  s-   M* 	`H$(F%%)?)?)F)F)R)R(SSUV\U]&^_	` $*$8$8$=$=sF+x);<. %> %! 4 $
!!#$L]	~  $88VE 	@O),, F OO$$\;?	@ r%   c                    |d   d   d   }|d   d   d   }|d   d   d   }|s|s|S |s|rd}	 t        |d      }t        |d      }t        |d      }	| j                  j                  rm	 | j                  j                  j                  d	       t        j                  |d   d
   d         }
| j                  ||
d   ||       | j                  |       | j                  ||       | j                  ||       | j                  |||	       | j!                  ||	       | j#                  ||	       | j%                  |||	       | j'                  |||	       | j)                  |||	|       | j+                  |||	       | j-                  |||	       | j/                  |||	       | j1                  |||	       | j3                  |||	       | j5                  |||	       | j7                  ||	       | j9                  ||	       | j;                  ||	       | j=                  |||	       | j?                  |||	       | jA                  ||       | jC                  ||       | jE                  ||	       | jG                  ||       | jI                  ||	       | jK                  |||	|       djM                  |jN                  jP                  D cg c]  }tS        |       c}      }|S # t        $ rW d|j                  d       d}|j                  d      r|d|d   d    dz  }| j                  j                  |d|       Y w xY wc c}w # t        $ r1}|}| j                  j                  d| d| d|       Y d }~|S d }~ww xY w)NrO  storager`   r  r  z<p></p>html.parserr   uC   Конвертация текста из atlassian разметкиatlas_doc_formatrN  )soupsubobjuT   Не удалось конвертировать разметку страницы "r   r  rB      (версия rC  rv  zERR-0031rI  r   rG  r&  uA   Ошибка обработки текста документа. r>  zERR-0039)*r   r2   rJ   r3   rD   r   r   r   _convert_atlas_docr   r>   r^  _convert_text_color_convert_code_convert_panelr  _convert_status_convert_status_handy_convert_plantuml_convert_drawio_convert_msoviewer_convert_childpages_convert_task_filter_convert_excerpt_include_convert_include_convert_content_by_label_convert_details_summary_convert_anchor_convert_toc_convert_livesearch_convert_recently_updatedr	  _convert_table_filter_convert_pivot_table_convert_tabs_convert_inline_comments_convert_excerpt_convert_detailsr  rO  rr  r   )rZ   obj_datar   rG  rC  r  r  storage_soupr  r  	atlas_rawexception_textr  r   rj  s                  r&   _convert_doc_textz%ConfluenceAPIImport._convert_doc_text  s   6"9-g6'0&!(+G4K D:	(-@L%dF3I'7K$$^OO**//2uw $

8F+;<N+OPW+X YI++C91EI^d+e ((3y,7	<8""3	;?  K8&&y+>""3	;?  i=##CK#O$$S)[A%%c9kB))#y+F!!#y+>**3	;G))#y+F  K8i5$$Y<**3	;G Y< &&y,?%%i>y+6))#y9!!)[9!!#y+f!M77INN,C,CDqCFDED c ! ^(}  G  K  K  LS  T  ~U  UW  'XN||I.&OHY<OPX<Y;ZZ[*\\OO--nY\-]	^P E 	DOO%%STWSXXZ[_Z`a% &   	sJ   :M *AK' HM M
M 'AMM MM 	N	&NN	c              #      K   t        | d      }|j                         r5t        |d      5 }|D ]  }t        j	                  |        	 d d d        y y # 1 sw Y   y xY ww)Nz/versions.jsonr   )r   r   r   r   r   )rZ   r   versions_file_pathr   r   s        r&   _get_versionsz!ConfluenceAPIImport._get_versions  sg     !TF."9:$$&($/ *1 *C**S/)** * s   +A#A
A#A A#c                     d|_         d|_        |j                  d       t        j                  j                  dd|gd       t                y)u8    Удаляет все версии документа. NTr   r   r"  )r   include_deleted)cur_published_versioncur_workflow_versionr   r    CmfDocumentHistoryr   r   )rZ   r   s     r&   _delete_all_versionsz(ConfluenceAPIImport._delete_all_versions$  sM    (,%'+$t$!!--c7+  	. 	
 	r%   c                    |d   }|j                  d      r-|d   d   dk7  r"| j                  |d   | j                           }nt        j                  }t        t        j                  j                  |j                  d            j                  d      d d       }|j                  di       }|j                  d	      d
k(  }	 |d   d   d    i d|d|d|d|d|j                  d      d|j                  d      d|d|d|j                  d      d|d|j                  d      d	|d|ddd|d |j                   d!| d"| j                  }	t!        j"                  d%i |	}
| j%                  |||
#      |
_        |
j)                  d$       |
S # t        $ rA | j                  j                  j                  d       |d   j                  dddii       Y w xY w)&NrC  rQ  rR  rS  r  %Y%m%d%H%M%S%frN  r  r  rO  rC  r`   u\   Некорректный дамп версии документа. Обновите дампr&  r   r  r  r  r  r  cmf_versiondoc_versionofficial_dateofficial_numberreasonmessagecur_workflowhas_publishedTr  r   r(  r3   rJ  r   r$   )r>   r   rI   rd   r  r  dateutilparserr  strftimer   r3   rD   r   r   r   r    rp  rh  r   r   )rZ   r   version_datar  version_numberversion_authorru  version_contentis_current_versiondocument_history_datacmf_document_historys              r&   _process_versionz$ConfluenceAPIImport._process_version/  s   %h/D!l4&8&@K&O!--l4.@.OPN--NOO!!,"2"26":;X&'-

 '**9b9,00:iG	GF#I.w7
!
g!
!
 .!
 ~	!

 l..v6!
 |//7!
 ;!
 ;!
 \--f5!
 ~!
 l&&y1!
 f!
 .!
 T!
 |!
  (.)9:!!
" $//#!
&  &88Q;PQ$($:$:' %; %
! 	!!d!3##C  	GOO""**  ,J  KF#**I}+EF	Gs   F AG%$G%c                 Z    t         j                  |ddd      }|j                  d       y)uL    Создает фейковую версию с текущей датой. FTr&  )r   r{  cmf_deletedr   r   N)r    rp  r   )rZ   r   fake_historys      r&   _create_fake_versionz(ConfluenceAPIImport._create_fake_versionc  s6    00	 1 
 	d+r%   rg  c                    | j                  |       d}|d   }|d   }|j                  j                  d      }d }t        | j	                  |d               D ]  \  }}	|t
        j                  k(  r n|	d   }
d| d	| d
|
 }	 | j                  j                  j                  d|        | j                  ||	|      }|j                  r|}t                |dz  }| j                  j!                  dd        ||_        |j$                  r|j'                  d       | j)                  |       t                t+        |d         j-                  d      }t/        |d      5 }|j1                  t3        |             d d d        y # t        $ r= | j                  j                  d| d|	 d|d       | xj                  dz  c_        Y w xY w# | j                  j!                  dd       w xY w# 1 sw Y   y xY w)Nr   r^   r   CLOSEDstatus_typer   rC  rp  r"  z): v.u3   Обработка версии документа r   u@   Ошибка обработки версии документа r>  zERR-0033Tr-  rB  r  r   z.success_versionr  )rq  workflowget_default_status	enumeraterk  rU   $IMPORT_CONFLUENCE_PROC_LAST_PAGE_VERr3   rD   r   r  r{  r   r   r^  r@   r_  ro  r   r   r  r   r   r   r   r   )rZ   rg  r   success_version_countr  rM  default_statusrD  version_countr  r  log_page_verdocument_history	flag_filer   s                  r&   _process_versionsz%ConfluenceAPIImport._process_versionsm  s   !!'* !4.g&
 ))<<<R+4T5G5GQWHX5Y+Z 	A'M< K KK)(3Nzl#gYeN;KLLA&&++.abnao,pq#'#8#8,P^#_ #00&6O%*% ((K@3	A6 (7$LLTL* 	!!'* &)*334FG	)S! 	0QGGC-./	0 	0/  %))VWcVddfgsftu!	 *  1$% ((K@	0 	0s2   AF$G2AGGGGG/2G;c                     | j                  |      }|j                         sC|j                  d      }|j                         rd| d}t        |      d| d}t        |      |j                  d      }|j                         st        d| d      t	        |d      5 }t
        j                  |      }d d d        g d	<   |j                  d
      }|j                         rDt	        |d      5 }|D ])  }	|d	   j                  t
        j                  |	             + 	 d d d        |j                  d      }
|
j                         r=t	        |
d      5 }t
        j                  |      }d|t        |      di|d<   d d d        g |d<   |j                  d      }|j                         r/t	        |d      5 }t
        j                  |      |d<   d d d        |S |S # 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   |S xY w)Nr1   r   un    был полностью удален, либо перемещен в другое пространство.u-   Не найден каталог дампа 'rp  rA  u)   Не найден файл данных 'r@  labelsr{  rp  r:   )r   sizerr  r?  r  )
r   r   r   FileNotFoundErrorr   r   r   r   r   r   )docs_dirr*   r  r;  	error_msgdoc_filer   reslabels_file	label_strrs  r   attachments_files                r&   ry  z!ConfluenceAPIImport._get_document  s#   ##F+~~$00;N$$&%fX .\ ]  $I.. LG9TUV	#I..##K0 #&OPXzYZ$[\\(C  	A))A,C	 H&&}5k3' @1!" @IM((I)>?@@ %%l3
j#& S!		!#)uc%j+Q"RJS  M"++,>?""$&, 2%)YYq\M"2 
s
-	 	@ @S S2 
s0   !G1/G+)G79HG(+G47H Hc              #      K   t        |      j                  d      }|j                         D ]=  }|j                         s|j                  j                  | j                        r:| ? y w)Nrw  )r   r   r  r  rs   r  r  )rZ   
space_pathdoc_dirsr  s       r&   _get_doc_dirsz!ConfluenceAPIImport._get_doc_dirs  sY     
#,,[9'') 	G~~(=(=d>[>[(\	s   >A.%A.'A.c              #      K   t        | d      }d}| j                  |      D ]9  }|dz  }||k  r|||z   dz
  kD  r y 	 | j                  ||j                         ; y # t        $ r Y Hw xY ww)Nz
/documentsr   r   )r   r  ry  rs   r   )rZ   r  offsetr  r  enum_dirr  s          r&   _get_documentsz"ConfluenceAPIImport._get_documents  s     ;-z23))+6 	GMH& &5.1,,((7<<@@	  s)   =A0 A!A0!	A-*A0,A--A0c                 D    t        d | j                  |      D              S )Nc              3       K   | ]  }d   ywr   Nr$   r   r   s     r&   r  z=ConfluenceAPIImport._count_space_documents.<locals>.<genexpr>  s     =1=   )sumr  )rZ   r  s     r&   _count_space_documentsz*ConfluenceAPIImport._count_space_documents  s    =d00<===r%   c           	      T   i }d}d}d}| j                  |      D ]a  }|dz  }||k\  r|}d}|j                  |d       ||xx   dz  cc<   t        d | j                  t	        |            D              }||dz   z  }c |j                         D 	cg c]	  \  }	}|	|f }}	}|S c c}}	w )Nr   r   r   c              3       K   | ]  }d   ywr  r$   r  s     r&   r  zCConfluenceAPIImport._get_offsets_for_execute_doc.<locals>.<genexpr>  s     LaLr  )r  r  r  rk  r   r0  )
rZ   r  r  offsetscurrent_offset	obj_countr  r  r  r  s
             r&   _get_offsets_for_execute_docz0ConfluenceAPIImport._get_offsets_for_execute_doc  s    	))*5 	+GMHE!!)	~q1N#q(#L4+=+=c'l+KLLM**I	+ 9@H}vuFE?HH Is   B$c           	         d}t        d      5  t        j                         5  	 |j                         }|dk(  rn+| j                  j                         rn	 d|d    d|d	    d
}t        j                  dk(  rd}ndt        j                   }| j                  j                  j                  d| d|        | j                  j                  j                  j                   d|d	    }t        j                  j                  |g d      }|st        d      |j                  r| j!                  ||       n(| j                  j                  j                  d|        B|j%                  |       d d d        d d d        y # t        $ r4}	| j                  j#                  d d|	 ddd       |dz  }Y d }	~	\d }	~	ww xY w# 1 sw Y   RxY w# 1 sw Y   y xY w)Nr   Fr  Tr  r  r   r  r^   rv  r   r<  r=  u3   Обработка версий документа r>  r   )r   r  ro  r   r  r  u4   Документ не найден в системеuQ   Документ изменен пользователем, пропускаем u@   Ошибка обработки версий документа zERR-0084r#   rI  rJ  r  r   )r   cmfutildisable_aclr>   r3   r  rU   r  rD   r   r   r   r    r#   r   r   r  r^  r  )
rZ   	obj_queuer  r  r   ra  rb  r   r   rj  s
             r&   _process_doc_versions_forkz.ConfluenceAPIImport._process_doc_versions_fork  s
   51 -	#73F3F3H -	#mmo&=??,,." $&s7|nDT1"EKBBbH&<(<V=h=h<i&jOO**//2efqerrt  vA  uB  1C  D $ 6 6 = = I IJ"SQUYKXF$0044%  5 	G #'(^__....sG<..33  7H  IT  HU  5V  WE X NN6"[-	# -	# -	#H !  OO--Z[fZggijmino#-!.!%	 .  aKF I-	# -	# -	# -	#sM   G5G
DF
&G
9G
	G*G=G
GG

G	GGr  c                 D   g }|D ]  }|d   }d| j                   j                  j                  j                   d| d}t        j                  j                  ddd| dg      }|r|j                  |       t| j                   j                  d| d| d	d
|        |S )u;  
        Возвращает список тегов документа

        Args:
            content_obj (CmfDocument): объект документа
            labels (list): список тегов страницы Confluence

        Returns:
            list: список тегов (CmfTag)
        r^   r   r   r   r   r   u   Не найден тег 'r"  rv  zERR-0017rI  )r3   r   r   r    CmfTagr>   r   r^  )rZ   content_objr  tagsr~  label_id
tag_ext_idr   s           r&   _get_obj_tagsz!ConfluenceAPIImport._get_obj_tags0	  s      	ET{Hdoo44;;GGH8*TVWJ--##Hf*Q>O+P#QCC ))0s8*AF)# * 	 r%   c                 :   | j                   j                  j                  j                   d|d    }t        j                  j                  |dg      }|s$t        j	                  |d|| j                   d      }|d   j                  d	      r7| j                  j                  | j                  j                  |d   d	         }n*| j                   j                  j                  j                  }|j                   d
| d| d|_        |j                  d       y)u#  
        Создает комментарий со ссылкой на оригинальную страницу в Confluence

        Args:
            content_obj (CmfDocument): объект документа
            content (dict): данные страницы Confluence
        z
::comment:r^   r   r  r   T)r   	log_levelr   r3   r   r  webuiu4    импортирован из Confluence: <a href="z" target="_blank">z</a>"r   N)r3   r   r   r    r  r>   r2   r  r   ext_urlverbose_namer   r   )rZ   r  rN  comment_ext_idr  r   s         r&   _add_external_link_commentz.ConfluenceAPIImport._add_external_link_commentJ	  s    !OO2299EEFjQXY]Q^P_`##''!8 ( 
 ''"%?? $ ( G 8  )??--##!'*D
 ??))0088D''( )v/vU< 	 	&r%   c                    d}t        d      5  t        j                         5  	 |j                         }|dk(  rn0| j                  j                         rn|d   }|d   }|d   }	| j                  j                  |	d	      }
t        t              |
   }|	 d
| d| d}	 | j                  |d   |      }| j                  j                  j                  j                   d| }| j                  j                  d|        |d   xr | j                  j                  dk(  }|r|j                  j                   }n,|j                  |dg      }|s ||| j                  d|      }|j"                  sN| j                  j                  | dt$        j&                  d       	 | j                  j)                  dd       |d   d   }| j                  j*                  j-                  d| d|        |d   dk(  rt.        j0                  }n| j3                  || j4                           }|s+| j                  j*                  j7                  d| d|        |d   j                  d      }|rc| j                  j*                  j-                  d | d|        |d   dk(  rt.        j0                  }n!| j3                  || j4                           }n|}|d   d!   d"   }| j                  j*                  j-                  d#| d|        |d   dk(  rt.        j0                  }n| j3                  || j4                           }|	d$k(  r|j8                  j:                  }n| j<                  }|j?                  tA        jB                  |d%         &      }||||||||d   d!   d'   |d   d(   tE        |jF                  d)k(        ||d*}|jH                  s|jK                  d+d,g       |D ]  }tM        ||||           |jN                  r|jQ                  d-       | jS                  ||       |	d$k(  r|| jU                  ||      z  }| jW                  ||       tY        |jZ                  j                   j]                  d.      d d/       |_/        | ja                  ||d0         |_1        d|_2        | jg                  ||      |_4        |jN                  r|jQ                  d-       |jH                  r| jk                  ||       tm                to        |d1         jq                  d2      }ts        |d3      5 }|ju                  d4       d d d        | j                  j)                  dd       G|j                  |       d d d        d d d        y # 1 sw Y   IxY w# tv        $ rE | j                  jy                  d5| d6d7|
d8       | j                  j{                          |d9z  }Y t|        $ rH | j                  jy                  d5| d:| d;d7|
d8       | j                  j{                          |d9z  }Y t~        $ rE | j                  jy                  d5| d7|
d8       | j                  j{                          |d9z  }Y 4w xY w# | j                  j)                  dd       w xY w# 1 sw Y   ,xY w# 1 sw Y   y xY w)<Nr   Fr  Tr  r^   r   rR  r#   r!  r"  rv  r  r   u   Обработка is_homepager  r   r  rs   r3   r   r   u|    был изменен пользователем. Изменения из импорта не будут примененыrG   rS  r)   r  r  r  u"   Определяем автора r   rS  u   Не найден автор r  u(   Определяем владельца r  rQ  =   Определяем последнего редактора r:   r  r  r  r  r  )rs   r   r  r  r  r  r  r  r  cmf_archivedr   r  r  r  r   rs  rt  r  r   z.success_pager  r  u   Ошибка создания uS   . Попробуйте очистить дамп и повторить импортzERR-0018r  r   u^   . Попробуйте отменить импорты связанные с проектом uY   , чтобы он удалился из системы и повторите импорт)Ar   r  r  r>   r3   r  rX   varsr    ry  r   r   r  root_parent
class_namedescr_documentr`   r   rB   r  r_  rD   r   rd   r  r   rI   r   	scheme_wfdefault_document_workflowr?   r  r   get_status_typera   r  r-  r  setattrr   r   r   rA  r  r  r  r  ru  r  r  full_screenrh  r   r  r   r   r   r   r   r  r^  
log_detailAttributeErrorr   r  )rZ   rm  archive_folderr  r  r  content_datar/  r0  r1  content_model_namecontent_modelcontent_descriptionrN  r   wiki_project_homepager  authorr  r  r  modifiedr  r  r  content_dictr  r  r   s                                r&   _process_document_forkz*ConfluenceAPIImport._process_document_forkl	  s2   51 j	#73F3F3H j	#(}}6)??,,.)$/
 ,W 5+F3%)%8%8%<%<\=%Y" $V-? @)5bs:,VW&X#YF"00i1H*UG $ 6 6 = = I IJ"ZLYFOO''-.A-BC
 %]3 H ,,77<G * -&-&<&<&B&B&3&7&7#)$,: '8 '  +*7%2+/??04'-	+K '66++*m ,h i")//&*	 ,  !n OO,,ZEk %Y/<FOO**//2TUhTiiklrks0tuf~4%&%5%5
%)%5%5fT]]6K%L
%..669VWjVkkmntmu7vw#I.229=E..336^_r^ssuv{u|4}~ =K7()(8(8I(,(8(8t}}9M(NI$.	&y1-@FHOO**//2o  qD  pE  EG  HP  GQ  1R  S';6*+*:*:*.*:*:8DMM;R*S#v-#*#4#4#N#N#'#8#8%88$8$H$HQYIZ$[ 9 F
 !.")$,"(%.&0+:+29+=m+LV+T*1)*<]*K(,V-?-?8-K(L"(+2$L '--#//v?+ ES,s2CDE #--#((T(:..wD#v-$"?"?W"UU 22;H25k6Q6Q6W6W6`6`aq6rsvtv6w2x/+/+=+=k7S[K\+](26/+/+A+A';+W(&11',,,>&-- ;;KQL !%WV_ 5 > > OIi- %%B OO,,ZEQ R NN6"Uj	# j	# j	#P% %( 	 OO--89L8M Nl m#-!3!% .  OO..0aKF% 
 OO--89L8M Nww~v @rs $.!3!% .  OO..0aKF   OO--89L8MN#-!3!%	 .  OO..0aKF  OO,,ZESj	# j	# j	# j	#s   Z5A=Z("DV%Z(M2V5VV/Z(>Z5VVAZ&Z(AZ5Z7A	Z ZZZZ%%Z((Z2	-Z55Z>c                 f   d}ddg}	 |j                  dd|i      D ]  }t        j                  d|j                  d         }|j	                  d	      }t
        j                  j                  ||
      }	|	s%| j                  j                  d| d| d|       t
        j                  j                  dd|gdd| dggdg      }
d}t        j                  d|j                  d         }|r|j	                  d	      }d}t        j                  d|j                  d         }|r|j	                  d	      }|	j                  j                  |	j                  j                  ||d}|
r|
j                  |d<   nd|d<   t         |j                  dd      j                   d"i |d      }|j                  d|i      D ]D  }|j#                  dd|j                  d     i      s(|j%                  |j&                            y #  | j                  j                  d!| d|       Y y xY w)#Nu  
        <div data-drawio-title="{name}" data-drawio-type="diagram" data-attach-id="{attach_id}" class="drawio-content" contenteditable="false">
            <div class="header">Диаграмма: "{name}"</div>
            <div class="content">
                <img cmf_converted=True src="{img_src}" alt="" data-mce-src="{img_src}" width="{width}" height="{height}">
            </div>
        </div>
        drawiozdrawio-sketchimgdata-macro-namer	  zdiagramName=([^|]+)data-macro-parametersr   rs   r   u#   Диаграмма с именем u@    не найдена во вложениях документа zERR-0019rI  r   r   rs   r   %.pngr   r  100%zdiagramWidth=([^|]+)zdiagramHeight=([^|]+)rs   	attach_idwidthheightimg_srcr&  r   rD  r^   zdrawio-macro-content-data-macro-iduU   Неудалось конвертировать диаграмму из текста r$   )r  r  r  r	  r   r    r.  r>   r3   r^  rs   r`   r^   r   r   r   formatfindreplace_with
currentTag)rZ   r   r  r  TAG_TMPL
macro_namer   matchr  r  
attach_imgr  r  r  r|   
drawio_tags                   r&   rR  z#ConfluenceAPIImport._convert_drawio
  sr    0
$	H"++E:KZ9X+Y  		"8#))D[:\]"[[^	--11y1MOO--0ST]S^  __  `c  _d  /e;E3 . P#1155xs>S5;V	{RWEX4Y>[dicj 6 l
		"9399E\;]^!KKNE		":CIIF]<^_"[[^F & 1 1%+YY__!&"(
 &0nnDO$&DO!"C("2"24"<"C"C"Kd"K]["+"4"4<Mz;Z"4"[ J!d5J399UdKeJf3g-hi"//=; B	HOO%%(}  J  ~K  'L3=3 & Hs   GH ("H #H0c                    d}|j                  ddi      D ]  }	 t        j                  j                  |j                  |j
                  j                        }t        |j                  d
|j                  |      d      }|j                  ddi      D ]  }	|	j                  |          y # t        $ r:}d}| j                  j                  d| d|j                   d|	       Y d }~d }~ww xY w)Nu  
        <div class="macros-panel plantuml" contenteditable="false" data-macros-parameters="{params}"
            style="display: inline-flex; flex-direction: column; position: relative; width: 100%;"
            data-rendered="true" data-macros="plantuml">
            <div data-layout="default" class="extension-container" contenteditable="false">
                <span role="img" aria-label="Макрос PlantUML">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="16" height="16">
                        <path d="M22,15h2v7h-7v-2h5v-5Zm2-10v6.731l-2-1.976v-.755H7v11h4.738c.033,.036,.057,.078,.092,.113l1.887,1.887H0V5c0-1.654,1.346-3,3-3H21c1.654,0,3,1.346,3,3ZM2,5v2h3v-3H3c-.551,0-1,.448-1,1Zm3,4H2v11h3V9Zm17-2v-2c0-.552-.448-1-1-1H7v3h15Zm-9.715,9.292c-.38,.391-.38,1.025,0,1.416l2.715,2.792v-2.5h2c1.654,0,3-1.346,3-3v-2.023h2.455l-2.756-2.711c-.386-.386-1.012-.386-1.398,0l-2.756,2.711h2.455v2.023c0,.552-.448,1-1,1h-2v-2.5l-2.715,2.792Z"></path>
                    </svg>
                </span>
                <span class="extension-title">
                    <span class="excerpt-title">PlantUML</span>
                </span>
                <span class="macros-actions">
                    <span class="macros-refresh">
                        <svg viewBox="0 0 24 24" style="width: 14px; height: 14px; color: rgb(32, 32, 32);"><path fill="#202020" d="M12,2a10.032,10.032,0,0,1,7.122,3H16a1,1,0,0,0-1,1h0a1,1,0,0,0,1,1h4.143A1.858,1.858,0,0,0,22,5.143V1a1,1,0,0,0-1-1h0a1,1,0,0,0-1,1V3.078A11.981,11.981,0,0,0,.05,10.9a1.007,1.007,0,0,0,1,1.1h0a.982.982,0,0,0,.989-.878A10.014,10.014,0,0,1,12,2Z"></path><path fill="#202020" d="M22.951,12a.982.982,0,0,0-.989.878A9.986,9.986,0,0,1,4.878,19H8a1,1,0,0,0,1-1H9a1,1,0,0,0-1-1H3.857A1.856,1.856,0,0,0,2,18.857V23a1,1,0,0,0,1,1H3a1,1,0,0,0,1-1V20.922A11.981,11.981,0,0,0,23.95,13.1a1.007,1.007,0,0,0-1-1.1Z"></path></svg>
                    </span>
                    <span class="macros-edit" style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div data-fabric-macro="null" data-macro-body="" class="ak-renderer-wrapper" contenteditable="true">
                <textarea class="puml-code">{uml}</textarea>
            </div>
            <div class="macros-preview" contenteditable="true">
                {svg}
            </div>
        </div>
        r  plantumlr  r3  u)   Ошибка конвертации UML: u0   . Не удалось получить svg из zERR-0002rI  z{})paramsumlsvgrD  )r  r    r#   convert_uml2svgr   r^   r`   r   r3   r^  r   r  r  )
rZ   r   r  r  TMPr   r  rj  new_tagold_tags
             r&   rQ  z%ConfluenceAPIImport._convert_plantumlJ
  s   &P ''/@*.M'N 	C((887::CSCST $CJJdcJ$RTabG$--5F
4S-T $$W-	  ))?uDtuxu}u}t~) *  s   >B//	C280C--C2c           	         d}|j                  dg       |j                  }t        |j                        }|j	                         }|j                  d        g }t        |      D ]<  \  }	}
|	| d|	dz    |
d   dk7  r|
d   nd	|	dz    |
d
   |d}|j                  |       > dddddgdddddddgddd}dt        |j                        ||d   dt        |      d}|j                  |j                  |             t        |j                  t        j                  |d      |||d         d       }|j                  S )!u8    Создает тег макроса Word или Excel u  
            <div
                class="macros-panel mso-viewer"
                contenteditable="false"
                data-id
                data-macros="msoviewer"
                data-macros-parameters='{params}'
                data-rendered="1"
            >
                <div class="extension-container" contenteditable="false" data-id data-layout="default">
                    <span aria-label="Макрос {plugin_title}" data-id role="img">
                        <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewbox="0 0 24 24" width="16" height="16">
                            <path d="M22,15h2v7h-7v-2h5v-5Zm2-10v6.731l-2-1.976v-.755H7v11h4.738c.033,.036,.057,.078,.092,.113l1.887,1.887H0V5c0-1.654,1.346-3,3-3H21c1.654,0,3,1.346,3,3ZM2,5v2h3v-3H3c-.551,0-1,.448-1,1Zm3,4H2v11h3V9Zm17-2v-2c0-.552-.448-1-1-1H7v3h15Zm-9.715,9.292c-.38,.391-.38,1.025,0,1.416l2.715,2.792v-2.5h2c1.654,0,3-1.346,3-3v-2.023h2.455l-2.756-2.711c-.386-.386-1.012-.386-1.398,0l-2.756,2.711h2.455v2.023c0,.552-.448,1-1,1h-2v-2.5l-2.715,2.792Z"></path>
                        </svg>
                    </span>
                    <span class="extension-title" data-id>
                        <span class="excerpt-title" data-id>{plugin_title}</span>
                    </span>
                    <span class="macros-actions" data-id>
                        <span class="macros-edit" data-id>
                            <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                            </svg>
                        </span>
                        <span class="macros-delete" data-id>
                            <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            </svg>
                        </span>
                    </span>
                </div>
                <div class="macros-preview" data-id>
                    <div class="mso-preview-wrapper" data-id>
                        <img class="mso-preview-image" data-id id="mso-img_{attach_id}_1" src="{url_preview_img}"/>
                    </div>
                </div>
            </div>
        r$  c                     | d   S )Nr   r$   )r'  s    r&   r   zAConfluenceAPIImport._create_msoviewer_macro_tag.<locals>.<lambda>
  s
    !E( r%   r  r   r   
sheet_namer&  u   Листr   )numr^   r   r   imgUrlzOffice Wordwordz
.doc,.docxz.docz.docx)pluginTitle
pluginTypeacceptTypesacceptTypesList	pageScalezOffice Excelexcelz
.xlsx,.xlsz.xlsxz.xlsr   )viewdocviewxlsr   r   )verparentIdr   currentPageRefslicePageNum
pagesCountFrL  r  )r  r  r$  plugin_titlerD  )r  r^   r   r$  get_fullviewsortr  r   r   r   r>   r   r  r   r   r  )rZ   r   r  plugin_typeTMPLr  r$  fullview_pagesr   r  fullview_pager:   param_typesr  r	  s                  r&   _create_msoviewer_macro_tagz/ConfluenceAPIImport._create_msoviewer_macro_tag
  s   'R 	-./II	f445,,. 23"+N"; 	C"1S1WI.8El8SWY8Y|4aijmpqjqir_s$U+)D LL	  -$+$*G#4  .%+$+V#4
$ GJJ#Ahe*
 	kook234::fSX:3Y6?<K9?9N !, !P !.	/ !!!r%   c           
         ddg}|D ]  }|j                  d|i      D ]  }	 |j                  d      }t        d |j                  d      D              }|d   }	t        j
                  j                  ||		      }
|
st        d
|	 d      |j                  d|i      }|r"|j                  | j                  ||
|               y# t        $ r}d| d|j                   d|j                  d    d}t        |t        j                        r|d|j                   dz  }|d| z  }| j                  j!                  |d|xs |       Y d}~3d}~ww xY w)u7    Конвертирует макросы Word и Excel r  r  r  r  r  c              3   @   K   | ]  }|j                  d d        ywr"  r   Nr   r   params     r&   r  z9ConfluenceAPIImport._convert_msoviewer.<locals>.<genexpr>
  s     *g55;;sA+>*g   |rs   r   rs   &   Не найдено вложение 'rp  0   Ошибка обработки макроса '   ' в документе 'r"  r^   rv  rH  r>  ERR-0012rI  N)r  r>   r   r   r    r.  r   r  r  r'  rs   r  r]  rp  rx  r3   r^  )rZ   r   r  r  rG  macro_types
macro_typer   original_paramsr  r  r
  rj  
error_texts                 r&   rS  z&ConfluenceAPIImport._convert_msoviewer
  s    ),% 	J"++3Dj2Q+R &)gg.E&FO&**gOLaLabeLf*g&gO / 7I#1155W95UF!'*PQZP[[\(]^^'nn4Ez3RnSG,,T-M-MgW]_i-jk	 ! J:, W229,,s7CZCZ[_C`Baabd  "&&*C*CD"8N8N7Oq&QQ
Bse*,JOO--"#-"-g .  s   B!C	EA:EEc                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
}|j                  ddi      D ]V  }d}|j                  d      }|j                  dd      }dt        |j                        ddddd}	t        d |j                  d      D              }
|
j                  d      rd|	d<   nd|	d<   |
j                  d      r|
d   |	d<   |
j                  d      r|
d   |	d<   |
j                  d       r|
d    |	d!<   |
j                  d"      rdd#d#d$}|j                  |
d"         |	d%<   |
j                  d&      rd'd(d)d*}|j                  |
d&         |	d+<   |
j                  d,      rd|	d-<   d}|
j                  d.      rM|
d.   d/k(  rDt        |j                  j                        |	d0<   t        |j                  j                        }d1}nnd1}t        |j                  t        |j                        |t        j                  |	dd23      j                  d4d5      ||6      j                  d7d      d8      }|r|j                  d|i      nd9}|s|j                  ddi      }|s<|j                  |j                          Y y9):ua   
        Конвертирует макрос "Отображение дочерних"
        z
            <div
                class="macros-panel"
                contenteditable="false"
                data-children-docs="{doc_id}"
                data-id="a  "
                data-macro-parameters="{params}"
                data-macros="children-docs"
                original-data-macro-parameters="{original_params}"
                cmf_converted="{cmf_converted}"
            >
                <div class="extension-container" data-id="uW   " data-layout="default">
                    <span aria-label="Макрос " data-id="aq  " role="img">
                        <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="20" height="20">
                            <path d="M22.485,10.975,12,17.267,1.515,10.975A1,1,0,1,0,.486,12.69l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                            <path d="M22.485,15.543,12,21.834,1.515,15.543A1,1,0,1,0,.486,17.258l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                            <path d="M12,14.773a2.976,2.976,0,0,1-1.531-.425L.485,8.357a1,1,0,0,1,0-1.714L10.469.652a2.973,2.973,0,0,1,3.062,0l9.984,5.991a1,1,0,0,1,0,1.714l-9.984,5.991A2.976,2.976,0,0,1,12,14.773ZM2.944,7.5,11.5,12.633a.974.974,0,0,0,1,0L21.056,7.5,12.5,2.367a.974.974,0,0,0-1,0h0Z"></path>
                        </svg>
                    </span>
                    <span class="extension-title" data-id="u   ">Макрос "Отображение дочерних"</span>
                    <span class="extension-object-name" data-id="zQ"> | {doc_name}</span>
                    <span class="macros-actions" data-id="z>">
                        <span class="macros-edit" data-id="a  " style="margin-right: 7px;">
                            <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                            </svg>
                        </span>
                        <span class="macros-delete" data-id="aD  ">
                            <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            </svg>
                        </span>
                    </span>
                </div>
                <div class="ak-renderer-wrapper" data-fabric-macro="null" data-id="z7" data-macro-body=""></div>
            </div>
        r  rr  r  falser  r  r&  F50none)isShowChildrenr  childrenAmountrG   includeViewTypeisOrderByDeskc              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywr"  r   r   Nr   r   r,  s     r&   r  z:ConfluenceAPIImport._convert_childpages.<locals>.<genexpr>?  ;      $u{{3*+q0 C#$   :<r/  r@  Tr=  r  rG   firstr>  depthstyle
headerTypeexcerptTyperN  r<  simplezrich contentr?  r!  rs   r  r  r   creationr  sortTypereverser@  r:   r   
documentIdtrue,:rM  
separatorsr  &quot;)r*   doc_namer  r7  cmf_convertedr   rD  N)rS   r  r>   r   r^   r   r   r   rs   r   r  r   r   r   r  r  r  )rZ   r   r  r  r#  r   rZ  macro_iddata_macro_parametersr  macro_parametersview_type_mapsort_type_maprY  r	  r
  s                   r&   rT  z'ConfluenceAPIImport._convert_childpages  sv   
 ,,.) *; <@<<>:J K??C||~>N O< =ALLN;K LBBF,,.AQ R;;?<<>:J K<<@LLN;K L>
 ?Clln=M 	NT UYT`T`TbSc d	I&P ''/@*.M'N N	9C#Mww/H$'GG,CR$H! #(

O"&#)!&F  $ $288=$  
  ##E*+/'("%w##G,+;G+D'(##G,"27";w##G,'7'@|$##M2"'$-!
 -:,=,=>N}>],^()##F+# 0 1!
 &3%6%67G7O%Pz"##I.*.'H##F+#F+s2+.w~~/@/@+AF<("7>>#6#67H$*M $#wzz?%::%*#- &  gc8,$9"/  
 '$#G LTinnOX+FnGY]G#..0A:/N.O$$W%7%78]N	9r%   c           
         d}|j                  ddi      D ]  }|j                  d      }|j                  dd      }t        d |j                  d	      D              }|j                  d
d      }|r|j	                  d|i      nd}|s|j	                  ddi      }|st        |j                  |dj                  d |j                  D                    d      }	|j                  |	j                          y)uH   
        Конвертирует макрос "Выборка"
        u~  
        <div
            class="macros-panel macros-excerpt-block"
            contenteditable="false"
            data-id
            data-macros="exceprt"
            data-param-name="{name}"
        >
            <div class="extension-container" contenteditable="false" data-id data-layout="default">
                <span aria-label="Макрос Include. 'Создать выборку'" data-id role="img">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="14" height="14">
                        <path d="M19.949,5.536,16.465,2.05A6.958,6.958,0,0,0,11.515,0H7A5.006,5.006,0,0,0,2,5V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V10.485A6.951,6.951,0,0,0,19.949,5.536ZM18.535,6.95A4.983,4.983,0,0,1,19.316,8H15a1,1,0,0,1-1-1V2.684a5.01,5.01,0,0,1,1.051.78ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V5A3,3,0,0,1,7,2h4.515c.164,0,.323.032.485.047V7a3,3,0,0,0,3,3h4.953c.015.162.047.32.047.485Z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id>Макрос Include. 'Создать выборку' <span class="excerpt-title" data-id>| name = {name}</span></span>
                <span class="macros-actions" data-id>
                    <span class="macros-edit" data-id style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete" data-id>
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" contenteditable="true" data-fabric-macro="null" data-id data-macro-body="">{content}</div>
        </div>
        r  excerptr  r  r  r&  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrB  rC  r,  s     r&   r  z7ConfluenceAPIImport._convert_excerpt.<locals>.<genexpr>  rD  rE  r/  rs   &   Выборка без названияNc              3   2   K   | ]  }t        |        y wr   r   r   rN  s     r&   r  z7ConfluenceAPIImport._convert_excerpt.<locals>.<genexpr>  s     'UG'U   rs   rN  rD  )r  r>   r   r   r  r   r  r  contentsr  r  )
rZ   r  r  r#  r   r[  r]  excerpt_namer
  r	  s
             r&   rb  z$ConfluenceAPIImport._convert_excerpt  s    D ''/@).L'M 	9Cww/H"ww'>C# $-33C8$  
 ,//8`aLKSinnOX+FnGY]G#..0A9/M.N'KK) "'UGDTDT'U U    " $$W%7%78-	9r%   c                 l   d}|j                  ddi      D ]  }|j                  d      }|j                  d      }d|v r|j                  dd      \  }}	nat        |t        j
                        r|j                  j                         d	   }n'|j                  j                  j                         d	   }|}	|j                  d
      }
|
r4t        d |
j                  d      D              }
|
j                  dd      }nd}t        |j                  |t        j                  |	      j                  dd      t        j                  |      j                  dd            d      }|r|j                  d|i      nd}|s|j                  ddi      }|s|j!                  |j"                          y)u~   
        Конвертирует макрос "Включить выборку"("Вставить фрагмент")
        u  
        <div
            class="macros-panel macros-include-block"
            contenteditable="false"
            data-id
            data-macros="include-excerpt"
            data-param-excerpt="{excerpt_name}"
            data-param-pageid=""
            data-param-pagename="{page_name}"
            data-param-projectkey="{space_key}"
        >
            <div class="extension-container" contenteditable="false" data-id data-layout="default">
                <span aria-label="Макрос Include. " data-id role="img">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="14" height="14">
                        <path d="M19.949,5.536,16.465,2.05A6.958,6.958,0,0,0,11.515,0H7A5.006,5.006,0,0,0,2,5V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V10.485A6.951,6.951,0,0,0,19.949,5.536ZM18.535,6.95A4.983,4.983,0,0,1,19.316,8H15a1,1,0,0,1-1-1V2.684a5.01,5.01,0,0,1,1.051.78ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V5A3,3,0,0,1,7,2h4.515c.164,0,.323.032.485.047V7a3,3,0,0,0,3,3h4.953c.015.162.047.32.047.485Z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id>Макрос Include. "Вставить выборку" <span class="excerpt-title" data-id>| Имя = {excerpt_name}</span></span>
                <span class="macros-actions" data-id>
                    <span class="macros-edit" data-id style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete" data-id>
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" data-id></div>
        </div>
        r  excerpt-includer  r  data-macro-default-parameterrU  r   r  r  c              3   @   K   | ]  }|j                  d d        ywr*  r+  r,  s     r&   r  z?ConfluenceAPIImport._convert_excerpt_include.<locals>.<genexpr>  s     'eC(;'er.  r/  rs   rc  	&#9;rj  	page_namerH  rD  N)r  r>   r   r]  r    r  r  r   r   r   r   r  htmlescaper   r  r  r  )rZ   r   r  r  r#  r   r[  macro_default_parameterrH  rr  r]  rj  r	  r
  s                 r&   rV  z,ConfluenceAPIImport._convert_excerpt_include  s   #J ''/@BS.T'U !	9Cww/H&)gg.L&M#--'>'D'DS!'L$	9c6#4#45 # 3 3 8 8 :5 AI #

 : : ? ? A% HI3	"ww'>?#''eIYI_I_`cId'e#e /33F<deG#!-"kk)4<<T6J"kk)4<<T6J  
 G LTinnOX+FnGY]G#..0ACT/U.V$$W%7%78C!	9r%   c           
         d}|j                  ddi      D ]P  }|j                  d      }|j                  d      }d|v r|j                  dd      \  }}	nat        |t        j
                        r|j                  j                         d	   }n'|j                  j                  j                         d	   }|}	t        |j                  t        j                  |	      j                  d
d      t        j                  |      j                  d
d            d      }
|r|j                  d|i      nd}|s|j                  ddi      }|s6|j                  |
j                          S y)u[   
        Конвертирует макрос "Включить страницу"
        uM  
        <div
            class="macros-panel macros-include-page"
            contenteditable="false"
            data-macros="include-page"
            data-param-pageid=""
            data-param-page-label="{page_label}"
            data-param-projectkey="{space_key}"
            data-rendered="true"
        >
            <div data-layout="default" class="extension-container" contenteditable="false">
                <span role="img" aria-label="Макрос Include. ">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="14" height="14">
                        <path d="M19.949,5.536,16.465,2.05A6.958,6.958,0,0,0,11.515,0H7A5.006,5.006,0,0,0,2,5V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V10.485A6.951,6.951,0,0,0,19.949,5.536ZM18.535,6.95A4.983,4.983,0,0,1,19.316,8H15a1,1,0,0,1-1-1V2.684a5.01,5.01,0,0,1,1.051.78ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V5A3,3,0,0,1,7,2h4.515c.164,0,.323.032.485.047V7a3,3,0,0,0,3,3h4.953c.015.162.047.32.047.485Z"></path>
                    </svg>
                </span>
                <span class="extension-title">Макрос Include. "Вставить страницу" <span class="excerpt-title">| Имя = {page_label}</span></span>
                <span class="macros-actions">
                    <span class="macros-edit" style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper"></div>
        </div>
        r  includer  r  rm  rU  r   r  ro  rp  
page_labelrH  rD  N)r  r>   r   r]  r    r  r  r   r   r   r  rs  rt  r   r  r  r  )rZ   r   r  r  r#  r   r[  ru  rH  ry  r	  r
  s               r&   rW  z$ConfluenceAPIImport._convert_include
  sX   "H ''/@).L'M 	9Cww/H&)gg.L&M#--(?(E(Ec1(M%	:c6#4#45 # 3 3 8 8 :5 AI #

 : : ? ? A% HI4
##{{:6>>tVL"kk)4<<T6J   G LTinnOX+FnGY]G#..0A9/M.N$$W%7%783	9r%   c                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
| j                          d}|j                  ddi      D ]  }|j                  dd      }t        d |j	                  d      D              }|j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      d|j                  dd       d|j                  d d!       |j                  d"      |j                  d#      |j                  d$d%      |j                  d&d%      |j                  d'      d(}t
        j                  |dd)*      j                  d+d,      }t        |j                  ||-      d.      }|j                  d/      }	|	r|j                  d/|	i      nd0}
|
s|j                  d1ddi      }
|
s|
j                  |j                          y0)2uN   
        Конвертирует макрос "Оглавление"
        zr
        <div 
            class="macros-panel wiki-toc"
            contenteditable="false"
            data-id="z"
            data-macros="wikitoc"
            data-macros-parameters="{params}"
            data-macro-parameters-original="{original_params}"
        >
            <div class="extension-container" contenteditable="false" data-id="R   " data-layout="default">
                <span aria-label="Макрос" data-id="a  ">
                    <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="14px" height="14px">
                        <path d="M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 110-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 110-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 010-2zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 110-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 010-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2z" fill="var(--theme-hack-color, black)"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id="<">
                    <span class="excerpt-title" data-id="u{   ">Макрос "Оглавление"</span>
                </span>
                <span class="macros-actions" data-id="<">
                    <span class="macros-action" data-id="a	  " data-macros-action="macros-edit">
                        <svg viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-action macros-delete" data-id="ao  " data-macros-action="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" data-id="z">
                <p data-id="z1"></p>
            </div>
        </div>
        r  tocr  r  r&  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrB  rC  r,  s     r&   r  z3ConfluenceAPIImport._convert_toc.<locals>.<genexpr>z  ;      u{{3*+q0 C#rE  r/  rR  rb  outlineF	separatorbracketsrY  40pxrH  mixedhminLevelr  maxLevel6excluderw  	printableTabsoluteUrlclass)rR  r  r  rY  rH  r  r  r  rw  r  r  r  rS  rV  r  rX  r  r7  rD  r  Ndiv)rS   r  r>   r   r   r   r   r   r   r  r  r  r  )rZ   r  r  r#  r   r]  r  
parametersr	  r[  r
  s              r&   r[  z ConfluenceAPIImport._convert_tocM  s    lln% &O
 PT||~N^ _::>,,.9I J8
 9=7G H::>,,.9I J77;||~6F G::>,,.9I JH
 IMGW 	X7 8<||~6F G!\\^, -	E%N ''/@%.H'I *	9C"ww'>C -33C8 F 

662!::i7#ZZZ@ **Xv6GW5

:s ;<=

:s ;<=!::i0!::i0#ZZT:%zz->G,J "% $  gc8$	  $%$4   G ww/HKSinnOX+FnGY]G#..7H%6P.Q$$W%7%78U*	9r%   c                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
}|j                  ddi      D ]  }d}|j                  dd      }t        d |j	                  d      D              }|j                  dd      }|j                  d      }	|	rkt
        j                  j                  ddd| j                  j                  j                  j                   dgddd|	 dggdg      }
|
r|
j                  }	nd }|	|j                  d!d      j	                  d"      D cg c]  }|r|j                          c}||j                  d#d$      d%}t        j                  |d&d'(      j                  d)d*      }t!        |j#                  ||||+      d,      }|j                  d-      }|r|j%                  d-|i      nd.}|s|j%                  d/ddi      }|s|j'                  |j(                          y.c c}w )0uj   
        Конвертирует макрос "Livesearch" (Динамический поиск)
        #
        <div
            data-id="a>  "
            class="macros-panel wiki-live-search"
            contenteditable="false"
            data-macros-parameters="{params}"
            data-macro-parameters-original="{original_params}"
            data-macros="wikilivesearch"
            cmf_converted="{cmf_converted}"
        >
            <div data-id="l" data-layout="default" class="extension-container" contenteditable="false">
                <span data-id="u  " aria-label="Макрос">
                    <svg viewbox="0 0 24 24" width="12px" height="12px" class="ng-star-inserted">
                        <path fill="currentColor" d="M23.707,22.293l-5.969-5.969a10.016,10.016,0,1,0-1.414,1.414l5.969,5.969a1,1,0,0,0,1.414-1.414ZM10,18a8,8,0,1,1,8-8A8.009,8.009,0,0,1,10,18Z" ></path>
                    </svg>
                </span>
                <span data-id="zT" class="extension-title">
                    <span class="excerpt-title" data-id="us   ">Макрос "Динамический поиск"</span>
                </span>
                <span data-id="=" class="macros-actions">
                    <span data-id="'  " class="macros-action" data-macros-action="macros-edit">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path _ngcontent-aiw-c17="" fill="var(--color-gray-222, #222)" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span data-id="ax  " class="macros-action macros-delete" data-macros-action="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;" >
                            <path fill="var(--color-gray-222, #222)" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div data-id="u  " class="ak-renderer-wrapper" contenteditable="false">
                <div class="search-preview-wrapper temporary-element search-preview-wrapper_large">
                    <div class="search-preview-icon">
                        <svg viewbox="0 0 24 24" width="14px" height="14px" class="ng-star-inserted">
                            <path fill="currentColor" d="M23.707,22.293l-5.969-5.969a10.016,10.016,0,1,0-1.414,1.414l5.969,5.969a1,1,0,0,0,1.414-1.414ZM10,18a8,8,0,1,1,8-8A8.009,8.009,0,0,1,10,18Z"></path>
                        </svg>
                    </div>
                    <input class="search-preview" placeholder="{placeholder}" type="text" /> <button class="search-button">Поиск</button>
                </div>
            </div>
        </div>
        r  
livesearchr  rR  r  r&  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrB  rC  r,  s     r&   r  z:ConfluenceAPIImport._convert_livesearch.<locals>.<genexpr>  r  rE  r/  placeholderu
   ПоискspaceKeyr   r   %::::%r  ILIKE%"key":""%r  r  r:  r  rT  r  medium)currentSpaceKeyr  r  r  FrS  rV  r  rX  )r  r7  r  rZ  rD  r  Nr  )rS   r  r>   r   r   r    r  sgetr3   r   r   r^   stripr   r   r   r   r  r  r  r  )rZ   r  r  r#  r   rZ  r]  r  r  rH  rm  labler  r	  r[  r
  s                   r&   r\  z'ConfluenceAPIImport._convert_livesearch  s   lln% &  <<>* +  $/ 0 
 !%/ 0::>,,.9I J  $/ 0$$(LLN#3 4$
 %)LLN#3 	4  <<>* +	E-^ ''/@,.O'P 9	9C"M"ww'>C -33C8 F !**]LAK

:.I ++00!6S1G1G1N1N1Z1Z0[[^+_`*Gx	{"5MN !6 1   '

I$+M $- "(Hb!9!?!?!D KKM
  +

684	J "% $  gc8$	  $%$4 +"/	   G ww/HKSinnOX+FnGY]G#..7H,6W.X$$W%7%78s9	96s   I8c                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	}|j                  d
ddi      D ]  }d}|j                  dd      }t        d |j	                  d      D              }d}	|j                  dd      j                  dd      j	                         }
|
r|
d   }t        j                  j                  ddd| j                  j                  j                  j                   dgddd| dggd g!      }|r|j                  }	nFd"|
v r t        |j                  j                        }	n"d#}nt        |j                  j                        }	|j                  d$d      j                  dd      j	                         }|s|j                  d%       nd&d'g}|D cg c]	  }||vs| }}d}|j                  d(d      j                  dd      j	                         }t!        |      d)k(  r.	 | j#                  |d   d*+      }|rt        |j                        }t)        |j                  d/d0            d1||	xs d|j                  d2d3      |xs d|j                  d4d      j                  dd      j	                         |j                  d5d6      |j                  d7d1      d8	}t*        j-                  |d1d9:      j                  d;d<      }t/        |j1                  |||=      d>      }|j                  d?      }|r|j3                  d?|i      nd}|s|j3                  d@ddi      }|s |j5                  |j6                          yc c}w # t$        $ r*}| j                  j'                  |d,|d-.       Y d}~gd}~ww xY w)Aut   
        Конвертирует макрос "Recently Updated Macro" (Недавно обновлено)
        r  aW  "
            class="macros-panel mceNonEditable wiki-recently-updated"
            contenteditable="false"
            data-macros-parameters="{params}"
            data-macro-parameters-original="{original_params}"
            data-macros="wikirecentlyupdated"
            cmf_converted="{cmf_converted}"
        >
            <div data-id="zT" data-layout="default" class="extension-container">
                <span data-id="uO  " aria-label="Макрос">
                    <svg viewbox="0 0 24 24" width="14px" height="14px" class="ng-star-inserted">
                        <path fill="currentColor" d="M12,0A11.972,11.972,0,0,0,4,3.073V1A1,1,0,0,0,2,1V4A3,3,0,0,0,5,7H8A1,1,0,0,0,8,5H5a.854.854,0,0,1-.1-.021A9.987,9.987,0,1,1,2,12a1,1,0,0,0-2,0A12,12,0,1,0,12,0Z"></path>,
                        <path fill="currentColor" d="M12,6a1,1,0,0,0-1,1v5a1,1,0,0,0,.293.707l3,3a1,1,0,0,0,1.414-1.414L13,11.586V7A1,1,0,0,0,12,6Z"></path>
                    </svg>
                </span>
                <span data-id="u   " class="extension-title">
                    <span class="excerpt-title">Макрос "Недавние обновления"</span>
                </span>
                <span data-id="r  r  aw  " class="macros-action macros-delete" data-macros-action="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div data-id="z<" class="ak-renderer-wrapper"></div>
        </div>
        r  r  zrecently-updatedr  rR  r  r&  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrB  rC  r,  s     r&   r  z@ConfluenceAPIImport._convert_recently_updated.<locals>.<genexpr>A  r  rE  r/  Nr   rT  r   r   r   r   r  r  r  r  r  r  r  r  z@selfr:  typesr@  r  newsr  r   T)raise_on_errorzERR-0133r!   rI  r   rJ  max   Fthemeconciser  r  r  hideHeading)	r  	maxToggler  r   r  r  r  r  r  rS  rV  r  rX  )r  r7  rZ  rD  r  r  )rS   r  r>   r   r   r   r    r  r  r3   r   r   r^   r   rm  r   r   r   r   r^  r  r   r   r   r  r  r  r  )rZ   r   r  r  r#  r   rZ  r]  r  r   
space_keysrH  rm  r  unsupported_typesr  r  authorsr   rj  r  r	  r[  r
  s                           r&   r]  z-ConfluenceAPIImport._convert_recently_updated  s   lln% &  <<>* +  $/ 0  !%/ 0  !%/ 0$$(LLN#3 4$
 %)LLN#3 	4  <<>* +	G%N ''6GI[5\'] \	9C"M"ww'>C -33C8 F EHb199#sCIIKJ&qM	 ++00!6S1G1G1N1N1Z1Z0[[^+_`*Gx	{"5MN !6 1  #JJE
*/E$+MCKKNN+JJw+33C=CCEEU#%/$8!,1T5UBS5STT Fjj2.66sC@FFHG7|q 
!--gaj-NF!$VYY 6::eR01""GY7 ,B **Xr2::3DJJLGV4%zz-?
J "% $  gc8$	  $%$4"/  
 G ww/HKSinnOX+FnGY]G#..7HJ\6].^$$W%7%78y\	9N U ! OO--#-!,	 .  s$   	O O -O	O8O33O8c                 	   d}|j                  d      }t        |      D ]  }|j                  dd| dd      } g d}g d}g d}d	d
ddd}	ddd}
dddddddd}ddddd}|j                  ddd i!      D ]  }|j	                  d"      }i }d#d$i}|j                  d%      D ]  }|j	                  dd&      }|j
                  r|j
                  j                         nd'}|||<   ||v rH|	j	                  |      xs |}|-||v r;t        j                  d(|      }|d)k(  r |D cg c]  }|j                         d*k(   }}||v r5t        |t              r|D cg c]  }t        |       }}nt        |      }nz|d	k(  r1|D cg c]  }|j	                  ||       }}dj                  |      }nD|d+k(  r|j	                  |      }n-|d,k(  r|
j	                  |      }n|d-k(  r|j	                  |      }t        |t              r+|j                         d*k(  rd$}n|j                         d.k(  rd/}|||<    g }d0d1d2d3d4d2d5d6d2d7d8d2d9d:d2d;d<d2d=d>d2d?}t        |j!                         d      D ]{  \  }\  }}|j	                  |      }|s|d@v r!|j#                  |dA   dB|dA   |dC   |dD       Bt        j                  d(|      }|D ]  }|j#                  |dB|dA   |dC   |dD       ! } d'gt%        |      z  }|j	                  dE      xs g }t        |      D ]  \  }}||   ||<    |}||dF<   |r|j'                  dG|i!      nd'}|s|j'                  dHd i!      }|st        |      D ci c]  }dI| | j)                          } }dJ| j+                  dK       | dL<   t,        j/                  |d/dMN      j                  dOdP      | dQ<   t,        j/                  |d/dMN      j                  dOdP      | dR<   |j'                  dSdTdUi!      }!d&j                  dV |!j0                  D              | dW<    |j2                  dYi | }"t5        |"dX      }#|j7                  |#j8                          y'c c}w c c}w c c}w c c}w )ZuS   
        Конвертирует макрос 'Фильтр таблиц'
        u  
        <div
            id="{macro_id}"
            data-id="{data_id}"
            class="macros-panel table-filters"
            contenteditable="false"
            original-data-macro-parameters='{original_params}'
            data-macros-parameters='{params}'
            data-rendered="true"
            data-macros="tablefilters"
        >
            <div data-layout="default" class="extension-container" contenteditable="false" data-id="{data_id}">
                <span role="img" aria-label="Макрос Фильтры таблиц" data-id="{data_id}">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" height="16" viewbox="0 0 24 24" width="16" data-name="Layer 1">
                        <path d="m14 24a1 1 0 0 1 -.6-.2l-4-3a1 1 0 0 1 -.4-.8v-5.62l-7.016-7.893a3.9 3.9 0 0 1 2.916-6.487h14.2a3.9 3.9 0 0 1 2.913 6.488l-7.013 7.892v8.62a1 1 0 0 1 -1 1zm-3-4.5 2 1.5v-7a1 1 0 0 1 .253-.664l7.268-8.177a1.9 1.9 0 0 0 -1.421-3.159h-14.2a1.9 1.9 0 0 0 -1.421 3.158l7.269 8.178a1 1 0 0 1 .252.664z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id="{data_id}">
                    <span class="excerpt-title" data-id="{data_id}">Фильтры таблиц</span>
                </span>
                <span class="macros-actions" data-id="{data_id}">
                    <span class="macros-edit" style="margin-right: 7px;" data-id="{data_id}">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path _ngcontent-aiw-c17="" fill="var(--color-gray-222, #222)" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete" data-id="{data_id}">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div data-fabric-macro="null" data-macro-body="" class="ak-renderer-wrapper" contenteditable="true" data-id="{data_id}">
                {content}
            </div>
            <div class="macros-preview" data-id="{data_id}"></div>
        </div>
        	{data_id}	{data_id_}r   )r^   customNoTableMsgTextcustomNoTableMsgenabledInEditorhideFilters)orderinverser  totalRow)	fixedColslimitHeightr  rowsPerPageignoreFirstNRowsheightValueshowNRowsifNotFilteredr  
iconFilterr  thousandSeprator)totalrow
iconfilterignoreFirstNrowsthousandSeparatorr  rT  )	Point (.)	Comma (,)r  averagemuiltiplicationminr  r  nonemptyCount)SumAverageMultiplicationMinMaxCountzCount not empty
dynamicAscdynamicDesc	staticAsc
staticDesc)zDynamic AscendingzDynamic DescendingzStatic AscendingzStatic Descendingac:structured-macroac:nameztable-filterr  ac:macro-idddSeparatorsTac:parameterr&  Nu   (?<!\s)[,‚](?!\s)r  rR  totalcolr  	numberingr:  Fcolumnu!   Выпадающий список)r^   r~  
userfilteru   Текстовой списокnumberfilteru   Числовой фильтр
datefilteru   Фильтр по датамvisualu!   Визуальный фильтрglobalu!   Глобальный фильтрhiddensu   Скрыть столбцы)r  r  r  r  r  globalFilterhideColumns)r  r  r~  r   r^   )
columnNamecolumnIndexfilterLabel
filterTypefilterIdr  r  r  r  data_id_ztable-filter-r   r[  rS  rV  rp  &apos;r7  r  r  r  ztablefilter-table-wrapperc              3   2   K   | ]  }t        |        y wr   re  rf  s     r&   r  z<ConfluenceAPIImport._convert_table_filter.<locals>.<genexpr>g       )U7#g,)Urg  rN  rD  r$   )r  r  r   r  r>   r   r  r  r   r:  r]  rb  r  r  r   r  r0  r   r   r  rS   rQ   r   r   ri  r  r   r  r  )$rZ   r  re  r#  data_id_countr  unknown_paramslist_params
int_params
params_mapseparator_map	total_mapnumbering_maptable_filterr[  r7  r  r-  
param_nameparam_valuer(  r  filter_typesfilter_typefilter_datafilter_valuecolumn_nameordered_filtersr  	old_index	new_indexr
  r  tablenew_htmlr	  s$                                       r&   r^  z)ConfluenceAPIImport._convert_table_filter  s}   (T 

;/}% 	DA<<z!B-?CD	D



 #& 2!3	

 

  /.
	 "."/ +!-	
 )112GPY[iOj1k m	9L#''6H OF &..~> &1"YYy"5
49JJejj..0D.9
+/'^^J7E:
*![0 ')hh/E{&S%2HS*T11779+>*TK*T!Z/%k48;F*Ga3q6*GK*G*-k*:K#z1DO&Pqy}}Q':&P&P&)hh{&;#z1&/mmK&@#{2&3&7&7&D#{2&3&7&7&D!+s3&,,.&8*.K(..0G;*/K%0z"M&1R G!)4WX%1<]^'5@_ `%1<Z[%-8[\'/:] ^&/:WXL 2;<;M;M;OQR1S --K%zz+6#"AANN&1'&:'('27';&1$&7$%$  $&88,BL#QL'3 *5+,+6w+?*5d*;()( ,  $fs7|3OJJw'-2E(1%(8 @$	9-4Y-?	*@%G 'F9 LTinnOX+FnGY]G#..0A>/R.S@Em@TU1(1#6UU%24??13E2F#GZ *.**#!&) +5 + '#x(	 &'
 "&!&) ", " '#x(	 X  U7<W2XY"$'')Uenn)U"UY&4;;..'-@$$W%7%78[m	9* +U +H 'Q| Vs   (Q9Q>R8Rc                 ,   d}|j                  d      }t        |      D ]  }|j                  dd| dd      } g d}ddg}d	d
ddd}|j                  dddi      D ]-  }	|	j	                  d      }
i }ddi}|	j                  d      D ]  }|j	                  dd      }|j
                  r|j
                  j                         nd}|||<   ||v rG|v|j                         dk(  rd}n|j                         dk(  rd}t        |t              rd|v r|j                  dd
      }||v rt        |      }n|dv r|j	                  |      }|||<    |
r|j                  d|
i      nd}|s|j                  ddi      }|s$t        |      D ci c]  }d| | j                          }}d | j                  d!       |d"<   t        j                  |dd#$      j                  dd%      |d&<   t        j                  |dd#$      j                  dd%      |d'<   |j                  d(d)d*i      }dj!                  d+ |j"                  D              |d,<    |j$                  d.i |}t'        |d-      }|j)                  |j*                         0 yc c}w )/uW   
        Конвертирует макрос 'Сводная таблица'
        ul  
        <div        NOTE: 
            id="{macro_id}"
            data-id="{data_id}"
            class="macros-panel pivot-table"
            contenteditable="false"
            original-data-macro-parameters='{original_params}'
            data-macros-parameters='{params}'
            data-rendered="true"
            data-macros="pivottable"
        >
            <div data-layout="default" class="extension-container" contenteditable="false" data-id="{data_id}">
                <span role="img" aria-label="Макрос Сводные таблицы" data-id="{data_id}">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewbox="0 0 24 24" width="16" height="16">
                        <path d="M22,15h2v7h-7v-2h5v-5Zm2-10v6.731l-2-1.976v-.755H7v11h4.738c.033,.036,.057,.078,.092,.113l1.887,1.887H0V5c0-1.654,1.346-3,3-3H21c1.654,0,3,1.346,3,3ZM2,5v2h3v-3H3c-.551,0-1,.448-1,1Zm3,4H2v11h3V9Zm17-2v-2c0-.552-.448-1-1-1H7v3h15Zm-9.715,9.292c-.38,.391-.38,1.025,0,1.416l2.715,2.792v-2.5h2c1.654,0,3-1.346,3-3v-2.023h2.455l-2.756-2.711c-.386-.386-1.012-.386-1.398,0l-2.756,2.711h2.455v2.023c0,.552-.448,1-1,1h-2v-2.5l-2.715,2.792Z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id="{data_id}">
                    <span class="excerpt-title" data-id="{data_id}">Сводные таблицы</span>
                </span>
                <span class="macros-actions" data-id="{data_id}">
                    <span class="macros-edit" style="margin-right: 7px;" data-id="{data_id}">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path _ngcontent-aiw-c17="" fill="var(--color-gray-222, #222)" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete" data-id="{data_id}">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div data-fabric-macro="null" data-macro-body="" class="ak-renderer-wrapper" contenteditable="true" data-id="{data_id}">
                {content}
            </div>
            <div class="macros-preview" data-id="{data_id}"></div>
        </div>
        r  r  r  r   )r^   r  r  r!  rB  collapseAll
cumulativedecimalsnumberaccuracyr  rT  rp  r   )r  r  zApostrophe (')z	Space ( )r  r  zpivot-tabler  r  showrawdataFr  r&  NrR  Tr:  u   ‚)decimalseparatorr  r  r  r  zpivot-table-r   r[  rS  rV  r  r7  r  r  r  zoriginal-tablec              3   2   K   | ]  }t        |        y wr   re  rf  s     r&   r  z;ConfluenceAPIImport._convert_pivot_table.<locals>.<genexpr>  r  rg  rN  rD  r$   )r  r  r   r  r>   r   r  r:  r]  r   r  r  rS   rQ   r   r   r  ri  r  r   r  r  )rZ   r  re  r#  r  r  r  r  r  pivot_tabler[  r7  r  r-  r  r  r
  r  r  r  r	  s                        r&   r_  z(ConfluenceAPIImport._convert_pivot_tablem  s   (T 

;/}% 	DA<<z!B-?CD	D
 

 !	
 (001FyZgNh0i 5	9K"}5H OuF %--n= 1"YYy"5
49JJejj..0D.9
+/*"((*f4&*$**,7&+!+s38L&1&9&9%&E!Z/&)+&6#'HH&3&7&7&D%0z"-12 LTinnOX+FnGY]G#..0A=/Q.R@Em@TU1(1#6UU%1$//!2D1E#FZ *.**#!&) +5 + '#x(	 &'
 "&!&) ", " '#x(	 X  U7<L2MN"$'')Uenn)U"UY&4;;..'-@$$W%7%78k5	9F Vs   Jc                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
}|j                  dddi      D ]  }|j                  dd      }t        d |j	                  d      D              }|j                  d      }g }t        |j                  dddi            D ]#  \  }	}
|
j                  dd      }t        d |j	                  d      D              }|j                  d      }d|dddd|	dk(  |dk(  rdndddd 
}|
j                  d!      }|r|j                  d!|i      nd"}|s|j                  d#d|d$      }|st        |j                  t        j                  |d%      j                  d&d'      |dj                  d( |j                  D              )      d*      }|j                  |j                         & |j                  d!      }|r|j                  d!|i      nd"}|s|j                  d#ddi      }|s|s|j!                  |d          |d   }|d+d" D ]  }|j#                  |       |}  y"),uu   
        Конвертирует макрос "Composition - deck of cards" (макрос "Вкладки")
        zr
        <div
            class="macros-panel wiki-tabs"
            contenteditable="false"
            data-id="z"
            data-macros="wikitabs"
            data-macros-parameters="{params}"
        >
            <div class="extension-container" contenteditable="false" data-id="r{  a  ">
                    <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="14px" height="14px">
                        <path d="M11.25,7.99874576 L18.75,7.99874576 L18.9896379,8.00744644 L18.9896379,8.00744644 C20.6119031,8.125678 21.9036924,9.43468674 21.9948552,11.0643219 L22,11.2487458 L22,18.7487458 C22,20.4817772 20.6435452,21.8979917 18.9344239,21.993601 L18.75,21.9987458 L11.25,21.9987458 C9.51696854,21.9987458 8.10075407,20.642291 8.00514479,18.9331697 L8,18.7487458 L8,11.2487458 C8,9.5157143 9.35645477,8.09949983 11.0655761,8.00389055 L11.25,7.99874576 Z M9.5,18.7487458 L9.50455771,18.8760231 L9.50455771,18.8760231 L9.52290455,19.0326048 C9.65099554,19.8179147 10.30178,20.427623 11.1064728,20.4929446 L11.25,20.4987458 L18.75,20.4987458 C19.6681734,20.4987458 20.4211923,19.7916355 20.4941988,18.892273 L20.5,18.7487458 L20.5,11.2487458 C20.5,10.2822474 19.7164983,9.49874576 18.75,9.49874576 L11.25,9.49874576 C10.3318266,9.49874576 9.57880766,10.205856 9.5058012,11.1052186 L9.5,11.2487458 L9.5,18.7487458 Z M15.75,5 C15.8305982,5 15.9105112,5.00293389 15.9896379,5.00870069 C17.236948,5.09952529 18.2890659,5.89453789 18.7501004,6.99804043 L16.9722957,6.99760388 C16.6889259,6.72100274 16.3120424,6.5397745 15.8935272,6.5058012 L15.75,6.5 L8.25,6.5 C7.3318266,6.5 6.57880766,7.20711027 6.5058012,8.10647279 L6.5,8.25 L6.5,15.75 L6.51083386,15.9458258 C6.55524501,16.3446817 6.73371018,16.7030658 7.00015022,16.974899 L7.0000564,18.7509418 C5.87931902,18.283597 5.07631822,17.2067274 5.00514479,15.9344239 L5,15.75 L5,8.25 C5,6.51696854 6.35645477,5.10075407 8.06557609,5.00514479 L8.25,5 L15.75,5 Z M12.75,2 C14.0497736,2 15.1713376,2.76300581 15.691219,3.86554427 L15.75,4 L13.9733002,3.99858514 C13.6898169,3.72143138 13.3125371,3.53981466 12.8935272,3.5058012 L12.75,3.5 L5.25,3.5 C4.3318266,3.5 3.57880766,4.20711027 3.5058012,5.10647279 L3.5,5.25 L3.5,12.75 C3.5,13.2269035 3.69076499,13.6592514 4.00015022,13.974899 L4.0000564,15.7509418 C2.87931902,15.283597 2.07631822,14.2067274 2.00514479,12.9344239 L2,12.75 L2,5.25 C2,3.51696854 3.35645477,2.10075407 5.06557609,2.00514479 L5.25,2 L12.75,2 Z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id="r|  u   ">Макрос "Вкладки" | {tab_name}</span>
                </span>
                <span class="macros-actions" data-id="r}  a  " data-macros-action="macros-edit">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-action macros-delete" data-id="aA  " data-macros-action="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" contenteditable="true" data-id="zG">
                {content}
            </div>
        </div>
        r  r  deckr  r  r&  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrB  rC  r,  s     r&   r  z4ConfluenceAPIImport._convert_tabs.<locals>.<genexpr>  s;      u{{3*+q0 C#rE  r/  tabLocationcardc              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrB  rC  r,  s     r&   r  z4ConfluenceAPIImport._convert_tabs.<locals>.<genexpr>!  s;      #5;;sA./14 KKQ'#rE  r~  r   z#254dcbDefaultFr   leftvertical
horizontalBasic)
r  tabsPageTitlecolorcolorPalettes	hasBorderfixed
primaryTab	directiontextAlignmentheaderStyler  Nr  )r  r~  rL  r  rX  c              3   2   K   | ]  }t        |        y wr   re  rf  s     r&   r  z4ConfluenceAPIImport._convert_tabs.<locals>.<genexpr>C  s     +\WCL+\rg  )r  tab_namerN  rD  r   )rS   r  r>   r   r   r  r  r   r  r   r   r   r  ri  r   r  r  insert_after)rZ   r  r  r#  r  deck_macro_parametersdeck_paramstab_locationtabsr  r  card_macro_parameterscard_params
card_lable
tab_paramscard_macro_id
card_macro	tab_macrodeck_macro_id
deck_macror  tabs                         r&   r`  z!ConfluenceAPIImport._convert_tabs  s%    lln% &O PT||~N^ _::>,,.9I J8
 9=7G H::>,,.9I J77;||~6F G::>,,.9I JH
 IMGW 	XN OSllnM] ^	A$L  ((9JF8S(T =	"D$(HH-Db$I! 288= K
 '??=9LD$T]]7CTV\B]]%^_ (/4(,1H"(M%" #!6!<!<S!A# 
 )__W5
%/&%.!&""#q&/;v/E<%+#*
 !% 9WdY^^?M2R^Sjn
!!*/5%/ "0 "J  -#'::ju:#M#U#UVY[c#d%/$&GG+\
H[H[+\$\ $ 
 &!I KK	.Q(/T !HH_5MS`.NOfjJ&^^E:KV9T^U
d''Q0q'8 "C((-!G"w=	"r%   c           	      r   d}|j                  dddi      D ]  }|j                  d      }|j                  dd      }t        d	 |j                  d
      D              }|j                  dd      }|j                  d|      }	t	        |j                  |	|	xs d|j                         xs d      d      }
t        j                  |
      }|j                  |
j                         |r|j                  d|i      nd}|s|j                  ddi      }|s|j                  |j                          y)uF   
        Конвертирует макрос 'Статус'
        a  
        <span
            data-macros="wiki-status"
            text="{text}"
            color="{color}"
            class="statusView-content-wrap"
            contenteditable="false"
        >
            <span>{text_span}</span>
        </span>
        r  r  r  r  r  r  r&  c              3   D   K   | ]  }|r|j                  d d        ywr*  r+  r,  s     r&   r  z6ConfluenceAPIImport._convert_status.<locals>.<genexpr>g  &       C#    r/  colourr      Задать статусneutral)r   	text_spanr  rD  N)r  r>   r   r   r   r  r:  copyr  r  r  )rZ   r  r  r#  r   r[  r]  r  r  r   r	  new_tag_viewr
  s                r&   rO  z#ConfluenceAPIImport._convert_statusT  s>   
 ''6G5R'S 	>Cww/H"ww'>C -33C8 F
 JJx,E::gu-D#"A&A++-49  
 G  99W-L
 W//0KSinnOX+FnGY]G#..0A8/L.M$$\%<%<=?	>r%   c                 "   d}|j                  dddi      D ]  }|j                  d      }|j                  dd      }t        d	 |j                  d
      D              }|j                  dd      }t	        |j                  ||xs d      d      }	t        j                  |	      }
|j                  |	j                         |r|j                  d|i      nd}|s|j                  ddi      }|s|j                  |
j                          y)uF   
        Конвертирует макрос 'Handy Status'
        a  
        <span
            data-macros="wiki-status"
            text="{text}"
            color="neutral"
            class="statusView-content-wrap"
            contenteditable="false"
        >
            <span>{text_span}</span>
        </span>
        r  r  zstatus-handyr  r  r  r&  c              3   D   K   | ]  }|r|j                  d d        ywr*  r+  r,  s     r&   r  z<ConfluenceAPIImport._convert_status_handy.<locals>.<genexpr>  r8  r9  r/  Statusr;  )r   r=  rD  N)
r  r>   r   r   r   r  r>  r  r  r  )rZ   r  r  r#  r   r[  r]  r  r   r	  r?  r
  s               r&   rP  z)ConfluenceAPIImport._convert_status_handy  s    
 ''6G5X'Y 	>Cww/H"ww'>C -33C8 F
 ::h+D#"A&A   G  99W-L
 W//0KSinnOX+FnGY]G#..0A>/R.S$$\%<%<=;	>r%   c                    ddl m} t               }t               }t	        | j                  d            }	 |D ]k  }|dk(  rt        |      }t        |      }	|dk(  r|	j                  d      g}
nA|dk(  r<|	j                  d      j                  d	      D cg c]  }|j                  d       }
}t               }t               }
D ]#  }|j                  dd
      j                  dd      } ||dd      }	 t        j                  j                  dddd| dgdd|gddd| dggddg      }|s(t        j                  |      }|j                  d       |j                   j"                  |vs|j%                  |j                   j"                         |j%                  |j&                  j"                  |j(                  j"                  |j                   j"                  dd       & |s|j%                  dd|g       ||d<   |dk(  st        |      }t        |      }	|dk(  r|	j                  d      g}nA|dk(  r<|	j                  d      j                  d	      D cg c]  }|j                  d       }}t               }t               }D ]  }|d k(  r|r|}n3t        j*                  j                  d!d"d#| d$gd%d"d&| dggddg      }|st        j                  d'| d(       \|j                   j"                  |vsu|j%                  |j                   j"                         |j%                  |j&                  j"                  |j(                  j"                  |j                   j"                  d)d        |sS|j%                  d*d|g       ||d*<   n 	 ||fS c c}w # t        $ r&}t        j                  d| d|        Y d }~d }~ww xY wc c}w # t,        $ r Y ||fS w xY w)+Nr   translitr   r~  z\=r  inz()rT  r   #r&  ruTlanguage_codereversedORaliasr  r  rs   r6   r  rs   r   *   Не удалось создать тег r   r  )rs   r6   r^   	classNamer  INr   zcurrentSpace()r   r   r  r  r  r  u.   Не удалось найти проект «   »r  r   )transliteraterE  rb  r   iterr   nextr  r   r    r  r>   r   r   rB   r   r^   r`   r   rs   r6   r  StopIteration)cqlr   r   rE  bql_listbql_dict	cql_partscql_partopr  r  r~  tags_ids	tags_listlabel_aliasr   r   r   r|   
parent_idsparent_listr   rm  s                          r&   _bql_from_cqlz!ConfluenceAPIImport._bql_from_cql  s   *663(	H	% E9w&iB!)_FU{"(,,s"3!4t@FT@R@X@XY\@]!^u%++c"2!^!^#vH $I!'  %c3 7 ? ?R H&.uDSW&X%"(--"3"3D%,g5'}$E%+We$<%,g;-r7J$K<" ,26*:	 #4 #<C
 $'&,mmm&? #T : 66<<x7$OOCFFLL9%,,(+(+&)ffll-5	. #.   x(@A+4((iB!)_FU{"(,,s"3!4t8>T8J8P8PQT8U!V1!''#,!V!V!%J"&&K!'  $44&,G&,&7&7&;&;%-v[M7M$N%6(5'QS@T$U(" )/'7 '< 'G  '#OO.\]b\cce,fg$"::++:=&--gjj.>.>?'..(/(:(:(/(:(:&-jj&6&6-9	0 !, " 4(DE-8*KE9P !!C "_  ) %#OO.XY^X__abcad,ef$%( "W8  	!!	s~   A!O( N,/A	O( 9A"N1O( 4A<O( 2 O( AO( )O#BO( A;O( O( ,O( 1	O :OO( O  O( (	O76O7c                 @   d}|j                  ddi      D ]  }|j                  d      }t        |j                  d            }	 |j                  d      }t	        |D 	cg c]  }	|	j                  dd	       c}	      }
| j                  |
j                  d
d      | j                  j                  j                  j                        \  }}ddd|
j                  dd      dv t        |
j                  dd            |
j                  dd      dv |
j                  dd      dv d||j                  dg       d
}t        |j                  t              j                  dd      j                  dd      j                  d d!      j                  d"d#      $      d%      }|r|j                  d|i      nd&}|s|j                  ddi      }|s|j                  |j                           y&c c}	w #  | j                  j                  d| d| d|       Y xY w)'u`   
        Конвертирует макрос "Содержимое по меткам"
        u  
        <div
            class="macros-panel content-by-label"
            contenteditable="false"
            data-id
            data-macros="contentbylabel"
            data-macros-parameters="{parameters}"
        >
            <div class="extension-container" contenteditable="false" data-id data-layout="default">
                <span aria-label="Макрос Содержимое по тегам" data-id role="img"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="14" height="14">
                    <path d="M20.457,4.555,12.486.126a1,1,0,0,0-.972,0L3.543,4.555A3,3,0,0,0,2,7.177V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V7.177A3,3,0,0,0,20.457,4.555ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V7.177A1,1,0,0,1,4.515,6.3L12,2.144,19.486,6.3A1,1,0,0,1,20,7.177Z"></path><circle cx="12" cy="7" r="1.5"></circle></svg>
                </span>
                <span class="extension-title" data-id><span class="excerpt-title" data-id>Содержимое по тегам</span></span>
                <span class="macros-actions" data-id>
                    <span class="macros-action" data-id data-macros-action="macros-edit">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-action macros-delete" data-id data-macros-action="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path><path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path><path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="macros-preview" data-id></div>
        </div>
        r  contentbylabelr  r  r  r/  r"  r   rW  r&  r   defaultrP  FTrR  Truer  r  
showLabelsT	showSpacer<  r  )
r  modelr!  rP  r  rh  ri  rJ  bqlr  ui   Не удалось конвертировать макрос «Содержимое по меткам»     с параметрами: ERR-0034rI  rp  rX  r   z:Truez:truez:Falsez:falser  rD  N)r  r>   r   r   r   rb  r3   r   r   r  r^  r   r  r   r  r  r  )rZ   r   r  r  r#  r   r[  r]  all_parameterspr  rk  rY  r  r	  r
  s                   r&   rX  z-ConfluenceAPIImport._convert_content_by_label  s"   < ''/@BR.S'T &	9Cww/H"377+B#CD8!1!7!7!<G1qwwsAGH $ 2 26::eR3H$//J`J`JgJgJsJs tX&%%zz)U;?UUvzz%45"(**\4"@DZ"Z!'K!>BX!X#)$LL4
" $": h/ b) '2 84   	G LTinnOX+FnGY]G#..0ACS/T.U$$W%7%78M&	9
 H8))  AH  @I23C2DF)w * 8s   G5!G0
:C G50G55&Hc                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
}i }|j                  ddi      D ]  }|j                  d      }t        |j                  d            }	t	               }
	 |	r?|	dk7  r:|	j                  d      }t	        |D cg c]  }|j                  dd       c}      }
|
j                  d      |
j                  dd      dv d}| j                         }t        j                  |d      j                  dd      }d j                  |j                  D cg c]  }t        |       c}      }t        |j                  ||r|nd ||d   rd!nd "      d#      }|d   r'|j                  j!                  d$|j"                         n|r|j%                  d|i      nd%}|s|j%                  ddi      }|rgd j                  d& |j                  D              }t        |j                  ||r|nd ||d   rd!nd "      d#      }|j'                  |j"                         t)        |t*        j,                        ri }	 t        |d'      j%                  d(      }|st/        d)      |j                  d*      d$   j%                  d+d,i      s|j                  d*      d$   j                  d+d-i      D cg c]  }d.|j                  d$     }}|j                  d*      d   j                  d+d,i      D cg c]$  }d j                  d/ |j                  D              & }}t	        t1        ||            }n~t	        |j                  d*      D cg c]Z  }d.|j%                  d+d-i      j                  d$    d j                  d0 |j%                  d+d,i      j                  D              f\ c}      }t)        |t*        j2                        s|||<    |r	 |j8                  j;                          |j8                  j<                  i |_        ||j8                  d<   |j>                  j;                          |j>                  j<                  i |_        ||j>                  d<   |jA                  d23       y%y%c c}w #  | j                  j                  d| d|	 d|       Y xY wc c}w c c}w c c}w c c}w # t.        $ rP}t)        |t*        j2                        s+| j                  j4                  j7                  d| d1|        Y d%}~d%}~ww xY w# t.        $ r2}| j                  j                  d| d4| d5| d6|d27       Y d%}~y%d%}~ww xY w)8u[   
        Конвертирует макрос "Свойства страницы"
        aS  
        <div
            class="macros-panel details{details_hidden}"
            contenteditable="false"
            data-macros="details"
            data-macros-parameters="{parameters}"
            data-id="{macro_data_id}"
        >
            <div class="extension-container" contenteditable="false" data-layout="default" data-id="ui   ">
                <span aria-label="Макрос Свойства страницы" role="img" data-id="  ">
                    <svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewbox="0 0 24 24" width="16" height="16">
                        <path d="M22,15h2v7h-7v-2h5v-5Zm2-10v6.731l-2-1.976v-.755H7v11h4.738c.033,.036,.057,.078,.092,.113l1.887,1.887H0V5c0-1.654,1.346-3,3-3H21c1.654,0,3,1.346,3,3ZM2,5v2h3v-3H3c-.551,0-1,.448-1,1Zm3,4H2v11h3V9Zm17-2v-2c0-.552-.448-1-1-1H7v3h15Zm-9.715,9.292c-.38,.391-.38,1.025,0,1.416l2.715,2.792v-2.5h2c1.654,0,3-1.346,3-3v-2.023h2.455l-2.756-2.711c-.386-.386-1.012-.386-1.398,0l-2.756,2.711h2.455v2.023c0,.552-.448,1-1,1h-2v-2.5l-2.715,2.792Z"></path>
                    </svg>
                </span>
                <span class="extension-title" data-id="r|  uy   ">Свойства страницы</span>
                </span>
                <span class="macros-actions" data-id="U">
                    <span class="macros-edit" style="margin-right: 7px;" data-id="  ">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete" data-id="J  ">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
            <div class="ak-renderer-wrapper" contenteditable="true" data-fabric-macro="null" data-macro-body="" data-id="za">
                {content}
            </div>
            <div class="macros-preview" data-id=" "></div>
        </div>
        r  detailsr  r  r  Noner/  r"  r   ud   Не удалось конвертировать макрос «Свойства страницы» rl  zERR-0035rI  r^   hiddenFrf  )r^   ry  rL  r  rX  r&  z details-hidden)macro_data_idr  rN  details_hiddenrD  r   Nc              3   2   K   | ]  }t        |        y wr   re  rf  s     r&   r  z7ConfluenceAPIImport._convert_details.<locals>.<genexpr>  s     *XG3w<*Xrg  r   r  u5   Отсутствует таблица свойств.trr  confluenceTdconfluenceThzkey_details c              3   >   K   | ]  }|d k7  s	t        |        ywr   Nre  r   cs     r&   r  z7ConfluenceAPIImport._convert_details.<locals>.<genexpr>  s     I1qDyAI   
c              3   >   K   | ]  }|d k7  s	t        |        ywr  re  r  s     r&   r  z7ConfluenceAPIImport._convert_details.<locals>.<genexpr>  s     'w1mnrvmvA'wr  r   Tr   uE   : не удалось сохранить значения macro_db «u   »: zERR-0037r   )!rS   r  r>   r   r   r   r3   r^  r   r   r   r  ri  r   r  rO  insertr  r  r  r]  r    r  r   ziprp  rD   r   	macros_dbr   r`   macros_db_draftr   )rZ   r   r  r  rG  r#  rw  r   r[  r]  r  ro  rp  r  rz  prmr  contents_strr	  r
  
propertiescontents_tableth	first_rowtd
second_rowr}  r   s                               r&   rc  z$ConfluenceAPIImport._convert_detailsO  s   e fjeqeqesdt uggkgsgsgufv w8
 9=7G H::>,,.9I J77;||~6F GSSWS_S_SaRb c:
 ;?,,.9I 	Jz {  {G  {G  {I  zJ J2 37,,.1A B	G%N ''/@).L'M [	jCww/H"377+B#CDVF8#(8F(B%5%;%;C%@N!N"Kq1773?"KLF jj& **Xu59OOJ !LLNM**Ze*<DDS(SC77CLL#AqCF#ABL#"/&0sb(8B88L#4RT	   G (#
 %%a););< PX)../J.K]a'nn4Ey3QnRG#%77*XwGWGW*X#XL+*7.8sb$0@J8@T+<Z\	 $  &G ((););<'6#4#45  Jj!.|V!D!I!I'!R%#&[]]%..t4Q7<<G^C\<] #1"9"9$"?"B"K"KSZ\jRk"K"l" 'r{{1~&67"I " #1"9"9$"?"B"K"KSZ\jRk"K"l" III"J " "&c)Z&@!AJ "& '5&=&=d&C
 !# #/rwwg~=Vw/W/`/`ab/c.d e "'wwP^F_8`8i8i'w w"J "&&*C*CD-7GM*q[	j| !!&&($$**2(*G%/6!!),'',,.**008.0G+5<''	2. o #L8))z  |C  {D23C2DF)w * 8 $B`""  j!&&*C*CDOO**22  6Z  [b  Zc  ce  fg  eh  4i  jj   ))z  |C  {D D[[bZccghigjl)! *  s   -!TT
'T$T7
	A6U?T<*U)U+0UAU
:&U&BV' T&T4<U	V$AVV$'	W"0(WW"c                 ,   d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
| j                          d}|j                  ddi      D ]  }|j                  d      }t        |j                  d            }	 |j	                  d      }t        |D 	cg c]  }	|	j	                  dd       c}	      }
| j                  |
j                  dd      | j                  j                  j                  j                  |j                        \  }}|
j                  dd      j	                  d      D cg c]  }|j                          }}|
j                  dd      dv dd|
j                  dd      dv dd|
j                  dd      dv t        |
j                  dd            d|
j                  d       |
j                  d!      dj                  |      ||d"}t        j!                  d'      j#                  d(d)      }t%        |j'                  |*      d+      }|r|j)                  d|i      nd}|s|j)                  ddi      }|s |j+                  |j,                          yc c}	w c c}w #  | j                  j                  d#| d$| d%|&       Y xY w),um   
        Конвертирует макрос "Отчёт по свойствам страницы"
        a6  
        <div
            class="macros-panel details-summary"
            contenteditable="false"
            data-macros="detailssummary"
            data-macros-parameters="{parameters}"
            style="display: inline-flex; flex-direction: column; position: relative; width: 100%;"
            data-id="zp"
        >
            <div class="extension-container" contenteditable="false" data-layout="default" data-id="u{   ">
                <span aria-label="Макрос Отчёт по свойствам страницы" role="img" data-id="rr  z;>
                    <span class="excerpt-title" data-id="u   ">Отчёт по свойствам страницы</span>
                </span>
                <span class="macros-actions" data-id="rs  rt  ru  z:"></div>
            <div class="macros-preview" data-id="rv  r  detailssummaryr  r  r  r/  r"  r   rW  r&  headingsrT  showCommentsCountFrf  showLikesCountreverseSortpageSize   NsortByfirstcolumn)r  showCreatorshowLastModifiedr  showPageLabelsshowUnresolvedCommentsCountr  r  r^   r  r  r  settingsParamsrk  uv   Не удалось конвертировать макрос «Отчёт по свойствам страницы» rl  zERR-0036rI  rL  r  rX  rn  rD  )rS   r  r>   r   r   r   rb  r3   r   r   r   r  r  r  r^  r   r   r   r   r  r  r  r  )rZ   r   r  r  r#  r   r[  r]  ro  rp  r  rk  rY  r  r  r  r  r	  r
  s                      r&   rY  z,ConfluenceAPIImport._convert_details_summary  si    lln% &eeieqeqesdt uyy}  zF  zF  zH  yI I8
 9=7G H::>,,.9I J77;||~6F GSSWS_S_SaRb c:
 ;?,,.9I 	Jz {  {G  {G  {I  zJ J226,,.1A B	E$L ''/@BR.S'T (	9Cww/H"377+B#CD8!1!7!7!<G1qwwsAGH $ 2 26::eR3H$//J`J`JgJgJsJsu|  vD  vD  !EX/5zz*b/I/O/OPS/TU!AGGIUU)/4G)OSi)i#((-&,jj1A5&IMc&c&+38#)::mU#CG]#] #FJJz2$> ?$jj2#)::m#< # 2&.
* **Ze*<DDS(SC#"   	G LTinnOX+FnGY]G#..0ACS/T.U$$W%7%78Q(	9
 HU"8)) M  NU  MV23C2DF)w * 8s,   2K+K!
%BK+'K&>BK+!
K++&Lc                    d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d	| j                          d
}|j                  ddi      D ]  }|j                  d      }t        |j                  d            }t	        |j                  t        j                  j                  |            d      }|r|j                  d|i      nd}|s|j                  ddi      }|s|j                  |j                          y)uD   
        Конвертирует макрос "Якорь"
        a:  
        <span
            class="macros-panel anchor-macros"
            contenteditable="false"
            style="display: inline-flex; flex-direction: column; position: relative;"
            data-param-name="{param_name}"
            data-rendered="true"
            data-macros="anchor"
            data-id="z'"
        >
            <span data-id="r  ur  " role="img" aria-label="Макрос Якорь">
                    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewbox="0 0 204.851 204.851" style="enable-background: new 0 0 204.851 204.851;" xml:space="preserve" width="16" height="16">
                        <path xmlns="http://www.w3.org/2000/svg" style="fill: #010002;" d="M139.518,128.595l16.834,16.336c0,0-20.644,29.877-42.725,30.473 c0.479,0,0.117-84.092,0.039-104.472c14.694-4.797,25.402-18.182,25.402-34.117c0-20.009-16.697-36.218-37.273-36.218 c-20.615,0-37.312,16.209-37.312,36.208c0,15.671,10.376,28.929,24.748,33.961l0.098,104.277 c-26.643-1.837-42.061-27.474-42.061-27.474l17.997-17.41L0,120.505l9.887,63.301l17.362-16.795 c15.036,12.105,32.017,37.244,72.876,37.244c51.332-1.309,63.184-28.939,76.344-39.804l18.993,18.514l9.389-63.907 L139.518,128.595z M82.558,36.208c0-10.298,8.608-18.661,19.218-18.661s19.257,8.363,19.257,18.661 c0,10.327-8.647,18.681-19.257,18.681S82.558,46.535,82.558,36.208z"></path>
                    </svg>
                </span>
                <span data-id="u^   " class="extension-title">Якорь
                    <span class="excerpt-title" data-id="z>">| {param_name}</span></span>
                <span data-id="r  u  " class="anchor-copy" role="img" title="Скопировать ссылку" area-label="Скопировать ссылку">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="14" height="14">
                            <path d="M22,4.145,17.986,0H10A3,3,0,0,0,7,3V4H5A3,3,0,0,0,2,7V24H18V19h4ZM16,22H4V7A1,1,0,0,1,5,6H7V19h9ZM9,17V3a1,1,0,0,1,1-1h6V6h4V17Z"></path>
                        </svg>
                    </span>
                    <span data-id="a  " class="macros-edit" style="margin-right: 7px;">
                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span data-id="a   " class="macros-delete">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </span>
        </span>
        r  anchorr  r  rm  )r  rD  N)rS   r  r>   r   r   r  r  r  quoter  r  r  )	rZ   r  r  r#  r   r[  macro_param_namer	  r
  s	            r&   rZ  z#ConfluenceAPIImport._convert_anchorB  sz    lln% & LLN+ ,  $/ 0 
 !%/ 0::>,,.9I J  $/ 0$$(LLN#3 4$
 %)LLN#3 4$
 %)LLN#3 
4	;'R ''/@(.K'L 	9Cww/H"377+I#JK#%||112BC   	G LTinnOX+FnGY]G#..0A8/L.M$$W%7%78	9r%   c                 &   d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d| j                          d}|j                  d	d
i      D ]  }|j                  d      }|j                  d      }i }t        j                  d|      D ]8  }	|	j	                  dd      \  }
}|j                         ||
j                         <   : |j                  d      s|d   j                  dd      }t        j                  dd|      }t        j                  dd|      }||d<   | j                  |d         }||d<   g }|j                  d      rR|d   j	                  d      }|D ]9  }	 t        j                  ||j                  d            }|j                  |       ; |j                    d| }t"        j$                  j                  |d d!g"      }|s"t"        j%                  || j                  d#$      }|j&                  r||_        |j+                  d#%       g d&}d'|xs ||j                  d(d)      dddt-        |j.                        d#d*}t0        j3                  |d'd+,      j                  d-d.      }t0        j3                  |d'd+,      j                  d-d.      }t5        |j7                  ||/      d0      }|r|j9                  d|i      nd}|s|j9                  d1d	d
i      }|s|j;                  |j<                          y# t        $ r5}| j                  j                  j                  | d|        Y d}~d}~ww xY w)2u   
        Конвертиация макроса "Результаты фильтра" ("Вставить фильтр/проблему Jira")
        zw
        <div
            class="macros-panel wiki-task-list"
            contenteditable="false"
            data-id="z"
            data-macro-parameters="{params}"
            data-macro-parameters-original="{original_params}"
            data-macros="bql-task-filter"
        >
            <div class="extension-container" data-id="ui   " data-layout="default">
                <span aria-label="Результаты фильтра" data-id="uo   " role="img">Результаты фильтра</span>
                <span class="extension-title" data-id="z@"></span>
                <span class="macros-actions" data-id="z:">
                    <span class="macros-edit" data-id="a  " style="margin-right: 7px;">
                        <svg viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                        </svg>
                    </span>
                    <span class="macros-delete" data-id="a  ">
                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                            <path fill="var(--color-gray-222, #222)" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                            <path fill="var(--color-gray-222, #222)" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                        </svg>
                    </span>
                </span>
            </div>
        <!--div data-fabric-macro="null" data-macro-body class="ak-renderer-wrapper"></div-->
        </div>
        r  jirar  r  r  z	(?<!\\)\|r"  r   jqlQuery\r&  z\|\|?rL  z&&?ANDserverIdr  	columnIdsrT  r   r>  Nr   r   r  r  T)r   r3   r   r   )
logic_typer6   rs   responsibler  priorityr  r  r  r  deadlineFmaximumIssues   )bordercolumns	itemsSizer  
filterNamefilterParentNameuserFilterIduseCustomFilterrS  rV  r  rX  r  rD  r  )rS   r  r>   r  r   r  r   subr  r   convert_fieldr   r   r3   rD   r   r   r    CmfBqlFilterr   r  r   r   r^   r   r   r   r  r  r  r  )rZ   r   r  r  r#  r   r[  r]  r  r-  r  r`   	jql_queryr  r  
column_ids	column_idr  rj  	tf_ext_idtfdefault_columnsr  r	  r
  s                            r&   rU  z(ConfluenceAPIImport._convert_task_filter~  s    lln% &7
 8<||~6F GQQUQ]Q]Q_P` a88<7G H77;||~6F G88<7G H:
 ;?,,.9I J	%> ''/@&.I'J ]	9Cww/H"ww'>?F,0@A 4"[[a0
U&+kkmsyy{#4 ::j)z*224<Ixy9Ivui8I!*F:((
);<G 'F9Gzz+&#K066s;
!+ LIL!.!<!<YTaHb!cv.L #>>*"XJ7I$$(( )+<= ) B (($#$( ) 
 !!%+"GGG%O  "5o#ZZ< "$( #BEE
#'	J "% $  gc8$	   $zz "%  *   gc8$	  $%$4   G LTinnOX+FnGY]G#..7H&6Q.R$$W%7%78{]	94 % L..66'"SE7JKKLs   (6M	N*NNc           
      H   t         j                  j                  dd|gg dg dgg d      D ]6  }	 |j                  d   d   d	   r|j	                  d
|j                  d   d   d	   i      D ]  }dj                  |j                  D cg c]  }t        |       c}      }t        |j                        dk(  r}| j                         |j                  d<   t        |j                        |j                  d<   dg|j                  d<   d|j                  d<   d|j                  d<   d|j                  d<   n|j                          ||_        |j                  d        9 y c c}w #  | j                  j!                  d| d|j"                   d|       Y sxY w)Nr   r   )r  r   T)r  r   N)r  r   r  html_contextr  r  inlineProperties	markerRefzdata-refr  r&  r   zdata-idzdata-object-idzinline-highlightr  inlineCommentzdata-mark-annotation-type
annotationzdata-mark-typeTrZ  r   uO   Не удалось конвертировать inline комментарий r   zERR-0020rI  )r    r  rb  r  r  r  rr  r   r  rS   r	  r^   unwrapr  r   r3   r^  r   )rZ   r   r  r  r   r   tag_contexts          r&   ra  z,ConfluenceAPIImport._convert_inline_comments   s   ((--4%&/
 . 
 "	JGJ**<89KL[Y(11#-w/F/F|/TUg/hit/u"v  2  x 7&(ggs||.L!s1v.L&Mw~~.&837<<>CIIi0:=gjj/CII&672D1ECIIg.ETCII&AB:FCII&679=CIIo6  JJL/:,6!7"	J" /MJ)),{|  |A  AC  DK  DP  DP  CQ  +R5?S * Js   AE.E)CE.)E..0F!c                 z   dd l }ddd}|j                  |      }|\  }}	| j                  j                  j	                  d| d| d|j
                   d| d	|	 d
       |j                  dddd| j                  j                  j
                   d| d| j                  j
                   d|j
                   d| d|	 d| dgddt        dd      t        dd            }
| j                  j                  d| d| d|j
                   d| d	|	 d|
j                   d       | j                  j                          |
S )Nr   process_document_forkprocess_doc_versions_forkr:   rB  [u   ]: запуск z
 (project=z offset=z limit=z)...z/usr/bin/python3z	manage.pyshellz,plugin = models.CmfPluginConfluence.get(id="z");retcode = plugin.z("z", "z", , z, "z");Tz"/var/log/eva-import-subprocess.logr   z&/var/log/eva-import-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderru   ]: запущен z) [PID: ])
subprocessr>   r3   rD   r   r^   Popenr   r   r  pidr  )rZ   itemrm  
page_chunk	worker_idr  	item_funcfuncr  r  r  s              r&   _start_workerz!ConfluenceAPIImport._start_worker&  s|    ,2
	 }}T""##	{*4& 1

|8F875'G	

 "K>t?U?U?X?X>Y Z$$(6DOO,>,>+?tGJJ<sSYRZZ\]b\ccfgpfqqtv
 d<dC@$G   	
 		{,TF 3

|8F875'$((STV	
 	""$r%   c                    	 t                _        |j                  d      }|r j                  j                  dk(  rd}n
|d   |d   f}i } j                  |d    j                  |d               D ]L  }d }|d   r|d   d	   d   }n|d
   dk(  r|\  }}|d   d   }|dk(  r|d   }|t        |      |d   d||d   <   N d 		 fd ||d       y )Nhomepager#   NNr^   rR  r   r  r  r   r  r  r  positionr<  r   )r   r  rR  c                     t        j                  d|       D cg c]-  }|j                         rt        |      n|j	                         / c}S c c}w )Nz(\d+))r  r   isdigitr  r:  )r|   r   s     r&   natsortz<ConfluenceAPIImport._prepare_documents_tree.<locals>.natsorti  s:    NPhhW_abNcddCITZZ\Addds   2Ac                 2    |\  }} j                         D cg c]  \  }}|d   |k(  r||d   f }}}|j                   fd       |}g }	|D ]*  }|\  }
}|dz   }|	j                  |
||f         ||      }, |	r|	j                  |<   |S c c}}w )Nr   rR  c                 &     | d      d         S )Nr   r  r$   )r{  r  r  s    r&   r   zQConfluenceAPIImport._prepare_documents_tree.<locals>.build_tree.<locals>.<lambda>t  s    GDqN:4N,O r%   r  r  )r0  r!  r   rM   )r  r   orderno	parent_idr   r{  r   rr  current_ordernochildren_in_orderchild_id
child_typenext_orderno
build_treer  rZ   s   `            r&   r  z?ConfluenceAPIImport._prepare_documents_tree.<locals>.build_treel  s    !LIq $(::<E4>Y. V%H  MMOMP &O "! H',$*.3!(((J)MN",T5,"G	H !$5		&!""'s   Bi )r   rM   r>   r  r  r  r  r   )
rZ   r   r  r   r   r   r   r  r  r  s
   `       @@r&   _prepare_documents_treez+ConfluenceAPIImport._prepare_documents_treeI  s   F	99Z(**m;#H (89H&&uV}D<W<WX]^dXe<f&g 	CF;[)"-d3X*,$	 <(4H6!w< !MF E#d)	&	e	#. 	5(G,r%   c                    d| }d}d}| j                  |      D ]  }|dk(  rJd}| j                  t        |            D ]!  }|t        j                  k(  r n|dz  }|dz  }# |dk(  r ||fS |j                  |      }	t        |	d      5 }
|
j                  t        |dk(  rnd             d d d        |dz  } ||fS # 1 sw Y   xY w)N.processing_r   rB  r   r  )r  rk  r   rU   r  r   r   r   )rZ   r  r  processing_filetotal_pagestotal_versionpage_dirr  r   r  r   s              r&   _mark_for_processingz(ConfluenceAPIImport._mark_for_processing  s   (/**:6 	Hy  !++CM: 'A$(S(SS!Q&M!Q&M	'
 !A% M)) !))/:Ii% HTY->MAFGH 1K!	$ M))H Hs   
"B??C	c                 f   ddl }||k  rd|fgS |j                  ||z        }t        d|j                  ||z              }t	        |t        ||            }t        ||      }	||	z  }
||	z  }g }d}t        |	      D ]2  }|
}||k  r|dz  }t	        ||      }|j                  ||f       ||z  }4 |S )u  
        Рассчитывает распределение страниц между процессами

        Args:
            total_pages (int): количество страниц
            max_processes (int): максимальное количество одновременных процессов
            threads_per_process (int, optional): количество потоков в процессе. Defaults to 25.
            max_pages_per_process (int, optional): максимальное количество страниц
                обрабатываемых в процессе. Defaults to 1000.

        Returns:
            list[tuple]: список кортежей (offset, limit)
        r   Nr   )mathceilr  floorr  r  r   )rZ   r  rn   threads_per_processmax_pages_per_processr  min_processes_by_limitprocesses_by_threadsmin_processes_to_useprocesses_to_use
base_pages	remainderdistributionr  r  r  s                   r&   _calc_page_distributionz+ConfluenceAPIImport._calc_page_distribution  s    ( 	 --$%% "&;9N+N!O  #1djj?R1R&ST  #=#6LNb2cd35KL !$44
"22	'( 	AE9}
45E0eOF	 r%   c           	         d| }d| }d}d}| j                  |      D ]'  }d}d}	d}
|j                  |      }|j                         r@t        |d      5 }t	        |j                               }	ddd       |j                  d       |j                  |      }|j                         r@t        |d      5 }t	        |j                               }ddd       |j                  d       ||	k7  rM||	z
  }
|dk(  rd	nd
}| j                  j                  d|j                   d| d|dk(  rdndt        |             ||	z  }||
z  }* ||fS # 1 sw Y   xY w# 1 sw Y   xY w)u   
        Получает количество успешно и неуспешно обработанных элементов.
        r  z	.success_r   r@  NT)
missing_okr:   u   документаu   версий документаr  u*   ] Неуспешная обработка zERR-0134r#   rp  )rI  rJ  r2  )r  r   r   r   r  r   ra  r3   r^  rs   r   )rZ   r  r  processing_file_namesuccess_file_nametotal_successtotal_failedr  processing_countsuccess_countfailed_countsuccess_filer   r  	item_names                  r&   _get_processed_countz(ConfluenceAPIImport._get_processed_count  s    ".dV4'v.**:6 	)H ML#,,->?L""$,, 2$'MM2##t#4&//0DEO%%'/3/ 51'*1668}$5&&$&7=0/-?48FN0Hi	))&PQZP[\).2fn]BV!(m	 *  ]*ML(L9	)< l**/2 25 5s   E8EE	E$	c                  
   ddd}|j                  |      }|d   }d|d    d| d|d	    d
}| j                  ||d         \  }}	|dk(  r|n|	}
| j                  j                         }| j                  j                  j                  | d|
 d| d| d       | j                  ||| j                  t        j                        }t        j                  }|D ci c]  }|d }}|j                         }i }d}t        j                         }|s|rt        |      |k  r|r|dz  }d| }|j                  d      }||   dz   }| j                  j                  j                  d| d| d| d|        	 |||<   | j!                  ||||      }|||f||<   t        j*                  d!       t        |      |k  r|rg }|j-                         D ]  \  }\  }}}|j/                         }||j'                  |       |dk(  r3| j                  j1                  d| d| d"| d#|j2                   d
	       g||k  rr| j                  j                  j%                  d| d| d$| d|        | j                  j                  j%                  d| d|dz    d%       |j'                  |       | j                  j)                  d| d| d| d&| d        	 |D ]  }||=  |s|rt        j*                  d'       |r|rt        j                         }||z
  }t5        |d(      \  }}t5        |d)      \  }}| j7                  ||d         \  } }!| j                  j                  j                  | d| d*t9        |      d+d,t9        |      d+d,|d-	       | j                  j                  j                  d.| d/|  d|!        | j                  j                  j                  d0|
|z  d1d| d2       | j                  j                  j                  d3||
z  d1d4       | j                  j                  j                  d5| d6|
        y c c}w # t"        $ r}||k  rr| j                  j                  j%                  d| d| d| d|        | j                  j                  j%                  d| d|dz    d       |j'                  |       n)| j                  j)                  d| d| d| d| d        Y d }~od }~ww xY w)7Nu   документовu!   версий документовr  r^   u   Проект 'rs   r"  r  r  rv  r   r:   u   . Обработка r   u    с ограничением u,    одновременных процессаr   r   worker_r  z	][chunk: u   ] Попытка: r   u   ] Ошибка попытки r   z[chunk: u3   ] Повторный запуск, попытка: r  uC   ] Процесс завершился с ошибкой после u    попыток: rm  )rI  g      ?uF   ] Процесс завершился успешно. Попытка: z (PID: u)   ] Код возврата попытки r>  u*    попыток. Код возврата: r   i  <   u    завершена за 02drU  z06.3fu   Обработано u&    (успешно/неуспешно): u%   Скорость обработки: rV  u   /секu=   Время обработки одного элемента: rW  u   Всего u    в проекте: )r>   r  r3   rm   rD   r   r  rj   rU   IMPORT_OBJ_CNTIMPORT_PROCESS_RETRYr>  rZ  r[  r   popr  r   r   r   r^  sleepr0  pollr  r  divmodr  r  )"rZ   r  r   rm  r0  r  
project_idproject_msgr  r  
item_countrn   r  max_retriesr  page_chunk_attemptspending_page_chunksactive_processesworker_countr  r  attemptr  rj  processes_to_removereturn_codeenddiffhoursr  minutessecondssuccess_itemsfailed_itemss"                                     r&   _run_parallel_processesz+ConfluenceAPIImport._run_parallel_processes  s   *:
 IIdO	 4[
&uV}oSBuU|nTUV$($=$=dE&M$R!
M#'6>Z}
99;##m0Ai[ I++8/9eg	

 33$$!!	
 11 @LLz1}LL +//1!!#!%5&'-7<O!%l^4	044Q7
-j9A=&&++	{)J<7I'RST_S`a
6='
3"00w
IVG3=w2P$Y/  

3? &'-7<OD #%=M=S=S=U 9	9J%lln*'..y9"a'++	{)J< @//6iww{{m1N
 #[0 OO22::"#I;i
| DJJQRTU`Ta!c !OO22::"*:,6ijqtujuivvx y 066zB OO55"#I;i
| D..5Y6`al`m!o+5 6 )6 1 0	$Y/0  #6

1M "%5P !U{!$-y!)R0&*&?&?eFm&T#|##m0;T5z#aGS175/C	
 	###I;.ToQ|n.	
 	##&KZZ^M^`cKddefoeppw$xy##&ceilvevx{c|  }E  %F  	G##k)<PQ[P\$]^G M: ! ,..66	{)J<?]^e]ffhilhmn ..66&zl2efmpqfqerrst ,22:>11	{)J< @**12CC5J'1 2 s   
Q8!Q 	T"B TTc           	         | j                   j                  j                  d       |j                  dg       |j                  j
                  }| j                  j                         D ]  \  }}|\  }}	 | j                   j                         r y d }|r| j                  j                  |d      }t        t              |   }	| j                   j                  j                  j                   d| }
|	j                  |
ddgd      }|s.| j                   j                  d	| d
| j                    d|       |r||k(  r| j                   }|D ]  \  }}}| j                  j                  |d      }t        t              |   }| j                   j                  j                  j                   d| }|j                  |g dd      }|s&| j                   j                  d| d| dd|       |j"                  s||_        ||_        |j)                  d        dd|g}|g dg}t        j*                  j-                  |dgd      }t        j.                  j-                  |dgd      }t1        |xs |      |_        |j2                  rd|_        nXt        j*                  j-                  |dg      }t        j.                  j-                  |dg      }t1        |xs |      |_        |j6                  dk(  r|j2                  rd|_        |j)                  d       t;                 y # t<        $ r' | j                   j                  d| dddd       Y w xY w)Nu6   Построение дерева документовr  r#   r   tree_node_is_branchhas_children_archivedT)r   rt   include_archivedu    Не найден предок 'u>   '. Потомки будут помещены в корень zERR-0120rI  rJ  )r   r
  r   r  u"   Не найден потомок 'u   ' у предка 'rp  zERR-0003r   r
  r"  )r  r"  Tr  )r   rt   r2  r  r  u7   Не получилось привязать ноду 'zERR-0024r  )r3   rD   r   r  r  r`   rM   r0  r  rX   r>   r  r    r   r   r^  r  r   r
  r  r   r#   r  r9   ra   r1  r0  r  show_archiver   r   )rZ   rm  project_homepager   rr  r  parent_typer
  parent_model_nameparent_modeltree_parent_ext_idr  r  r  child_model_namechild_modelchild_ext_idr{  tree_parent_filterarchived_filterarchived_documentsarchived_foldersrw  folderss                           r&   _process_documents_treez+ConfluenceAPIImport._process_documents_tree  s   ##$\]-./"1177 $		 1 V	FH%+"I{T??,,."(,(;(;(?(?]([%#'<0A#BL,0OO,B,B,I,I,U,U+VVXYbXc)d&"."2"2113  *. #3 #K '11>yk JZZ^ZjZjYkm'1%6	 2  #k5E&E"&"2"2K5= 51Hj''+':':'>'>z='Y$"&v,/?"@K&*oo&<&<&C&C&O&O%PPRS[R\#]L'OO+V)- , E
 !11@
J]^g]hhij'1%5 2 
 !,,,7)(/

t
4'5* '4S+%F"&/# &,%7%7%<%<* 6%) &= &"
 $*#3#3#8#8* 6%) $9 $ 
 599K9_O_4`1446:K3 & 2 2 7 7?Q[_Z` 7 aI$..33;MW[V\3]G6:9;O6PK3))\9k>_>_/3K,  T 2_V	`  ))MfXUVW)*!	 * s    5L1E*L1<D1L11,M! M!c                 :   g d}|ddgz   }t         j                  j                  ||      D ]l  }|j                  sg |_        |D ]  }t        ||d        |j                  j                  dv rd|_        | j                  |_	        |j                  d       n y	)
u   
        Сброс настроек правил схемы прав доступа

        Args:
            perm_scheme (CmfProjectPermScheme): Схема проектных прав доступа
        )access_local_useraccess_owneraccess_owner_assistantaccess_authoraccess_spectatorsaccess_executorsaccess_responsibleaccess_list_owneraccess_project_owner_assistantaccess_project_spectatorsaccess_project_executorsaccess_sdesk_clientaccess_anonymousaccess_guestaccess_sharelink_anonymousproject_permissionaccess_members)r   rt   F)PPP-DOC-DELETEzPPP-OBJ-DELETETr   N)r    CmfProjectPermSchemeRulerb  r   rT  r  rS  r6   rG  r3   r   )rZ   perm_schemerule_bool_fieldsrule_fieldsruler   s         r&   _reset_rulesz ConfluenceAPIImport._reset_rules  s    
" '*>@P)QQ3388T_8` 	,D##&(#- 0ED%/0**//3WW)-D&"&//		d	+	,r%   c                    g ddgg ddgdgdgdgdgg d	gd

}	 |j                  |d   d       }|)| j                  j                  j                  d|        y |D ]  }t        j
                  j                  |d      }|s;| j                  j                  d| d| d|       | xj                  dz  c_         y t        j                  j                  ||ddg      }|s;| j                  j                  d| d| d|       | xj                  dz  c_         y |j                  s y |d   D ]j  }| j                  |      }	|	r|j                  j                  |	       2| j                  j                  d| d| d|       | xj                  dz  c_        l |d   D ]x  }
|
d   }| j                  j                  r5d| j                  j                  j                  j                    d|
d    d}n4d| j                  j                  j                  j                    d|
d    d}t        j"                  j                  d d!d"| d"gd g#      }|s%t        j"                  j                  dd$|gd g#      }|rf|j$                  s||_        n#||j$                  vr|j$                   | |_        |j'                  d%       |j                  j                  |       @| j                  j                  d&| d| d'|       | xj                  dz  c_        { |d(   rd|_        |j'                  d%        y #  | j                  j                  d)| d*|       | xj                  dz  c_        Y y xY w)+N)zPPP-DOC-CREATEzPPP-DOC-EDITzPPP-DOC-PUBLISHzPPP-DOC-TREEMOVEzPPP-OBJ-ORDERrU  )zPPP-COM-ADDzPPP-COM-EDIT-OWNzPPP-COM-DELETE-OWNzPPP-COM-DELETE-ALLzPPP-ATT-CREATEzPPP-ATT-DELETE-ALLzPPP-PR-BROWSEzPPP-ATT-DELETE-OWNzPPP-PR-ADMIN)
r  r  r  r  r  r  r  r  r  r  r  u8   Не найдено соответствие права T)r6   rm  u    Не найдено право "u	   " для zERR-0059r,  r   r   rT  )rS  r   rt   u2   В схеме не найдено правило "r   u)   Не нашли пользователя u    для прав zERR-0060r  rs   r   r^   r   r   r   r  r  r   u   Не нашли группу zERR-0061rS  u>   Не удалось импортировать правило zERR-0063)r>   r3   rD   r   r    CmfProjectPermPermissionr^  r@   rV  r   r   rT  r   r2   rJ   r   r   r   r   r   rP  )rZ   	perm_dictrW  mapping_permr  r  r  scheme_ruler   r   r   
group_namer   	group_objs                 r&   _process_permissionsz(ConfluenceAPIImport._process_permissions  s    t+,P23!1 2!5 6)*!5 6"$$2#3
Z	!&**9\+BDIK"&&..1ijsit/uv) M3
66::#$( ;  OO--::,iPY{["' . 
 OOq(O$==AA'+&!12 B 
 #OO--LZLXabkalm"' . 
 OOq(O"22%g. 
-D!--d3F#2299&A11GvM^_h^ij& + 2 
 1,
- 'x0 -E!&vJ,,#%doo&<&<&C&C&O&O%PPRSXY]S^R__a!b#%doo&<&<&C&C&O&O%PPRSXY_S`Raac!d & 5 5 9 9 (&AfXQ-@ (z !: !I %$*$9$9$=$=$*GZ#@$,: %> %	 !(///5I,#9+;+;;2;2B2B1CF8/LI,!48#2299)D11;J<GXYbXcd& + 2 
 1,;-> [)37K0  T 2[M3\	!OO%%PQZP[\ & 
 OOq Os&   ?M A#M >A M M -HM 8M<c                    | j                   j                  j                  j                   d|d    }t        j                  j                  |      }|s"t        j	                  |d| j                         }|d    d|d    |_        |j                  d	       d }t        |d
    d      }|j                         r*t        |d      5 }t        j                  |      }d d d        |rS| j                  |       |j                  dg       D ]  }| j                  ||        ||_        |j                  d	       |S # 1 sw Y   `xY w)Nr   r^   )r   T)r   r   r3   r  u?   : Схема проектных прав доступа для rs   r   r   z/permissions.jsonr@  r  )r3   r   r   r    CmfProjectPermSchemer>   rs   r   r   r   r   r   r   r[  rc  r  )rZ   r   perm_scheme_ext_idrW  	perm_listr  r   r^  s           r&   _process_perm_schemez(ConfluenceAPIImport._process_perm_schemet  sT    $ 6 6 = = I IJ"USW[MZ1155=O5P 55) $?? 6 K
 $El^+jkpqwkxjyzT*	%-0ABC!!#os+ )q IIaL	)k*&]];; B	)))[AB +4K'.) )s   
D??Ec           	      $   g }|}|}d}t         j                  j                  g dddd|gdd|gggdg d	      }|D ]  }|j                  j	                         |j	                         k(  r|d
z  }|j                  d       |j                  j                         |j                         k(  sp|dz  }|j                  d        |rGd}| j                  j                  ddj                  |       d| d| dt        j                  d       |||fS )u8  
        Добавляет суффикс 'Wiki' к названию или коду импортируемого проекта,
        если есть существующие НЕ Wiki-проекты с аналогичными названиями или кодами

        Args:
            space_name (str): название проекта
            space_key (str): код проекта

        Returns:
            tuple[str, str, bool]: новые названия и код проекта и флаг добавления суффикса
        F)logic_prefixr   project.wikirL  rs   r  task_code_prefixT)r  rs   rl  r   rm  rt   z Wikiu   названиеWIKIu   кодu   В u    и u9    проекта добавлен суффикс 'Wiki': 'r"  rv  r  )r    r  r  rs   r:  r   rl  upperr3   r  r  rB   r  )	rZ   r  rH  rB  new_space_namenew_space_key
has_suffixmatching_projectsmatching_projects	            r&   _add_project_suffixz'ConfluenceAPIImport._add_project_suffix  sD    #!
 #--336Wj1')< ! 4 
  !2 	)$$**,
0@0@0BB')1200668IOO<MM'x(	) JOOfkk'*+ ,"#3}oQ8oo	    }j88r%   c           	      n   dddd| dgg dg}t         j                  j                  |dd|ggg d	      }|rpd
}|j                  r'd|j                  j                   d|j
                   d}|d| dz  }| j                  j                  d|j                   d| d| ddd       |}d}t         j                  j                  |dd|ggddg      r4|dz  }| | }t         j                  j                  |dd|ggddg      r4||k7  r%| j                  j                  d| d| ddd       ||fS ) ue  
        Проверяет унакальность названия и кода проекта

        Args:
            space_name (str): название проекта
            space_key (str): код проекта

        Returns:
            space_name, space_key (tuple[str, str]): новые названия и код проекта
        rL  r   NOT LIKEr   r&  rs   r  )r  rs   r3   r   r  r&  u    (импорт z
, ext_id 'z')r  rv  u   Проект с именем 'u   ' уже существуетuG   . Импортируемый проект переименован в 'rp  zERR-0131r  r3  r   rl  Tr  rm  r   u   Проект с кодом 'ug   ' уже существует. Код импортируемого проекта изменен на 'zERR-0132)r    r  r  r3   r6   r   r^  rs   )	rZ   r  rH  r   ext_id_filterrm  from_importoriginal_space_keycounters	            r&   _check_project_uniquenessz-ConfluenceAPIImport._check_project_uniqueness  s    zQvha=1!
 ##((!FGZ#@A9 ) 
 K!! /0B0B0G0G/H
SZSaSaRbbdeBvha.(JOO%%0>[\g[h iXXbWccdf%%	 &  '$$!$6#KL 6 % 

 qLG-.wi8I $$!$6#KL 6 % 
 *OO%%./A.B C[[dZeefh%%	 &  9$$r%   c                    | j                  | j                  j                  d         }|d   d   d   }| j                  j                  j                  j	                  d      }| j                          | j                         D 	]!  }i }d}	 | j                  j                         r y |d   | j                  D cg c]  }|d   	 c}vrHd|d    d	|d    d
|d    d}| j                  j                  j                  d|        t        |d         j                  d      }	d }
|j	                  d      r|d   d   }
	 | j                  |	|
      }nU| j                  j                  j!                  d| d       |d   D ]  }	 | j                  |	|      }|r n t        d      |d   d   }| j                  j                  j                  d|        |d   d k(  rt"        j$                  |d!<   n!| j'                  || j(                           |d!<   |d   j	                  d"      }|rf| j                  j                  j                  d#|        |d   d k(  rt"        j$                  |d$<   n*| j'                  || j(                           |d$<   n|d!   |d$<   |d   d%   d&   }| j                  j                  j                  d'|        |d   d k(  rt"        j$                  |d(<   n!| j'                  || j(                           |d(<   |d   d)   |d*<   |d   d%   d+   |d,<   |d   }|d   d-k(  r
|d.z  }d/|d0<   d1| j                  j*                  j*                  j,                   d1|d    d1}| j                  j/                  |d   |      }t0        j2                  j	                  d2d3d4| d4gt5        |j7                               g d5z   6      }|rAd7}d8| }|j8                  d9k(  rd:| d;| d| d}| j                  j;                  |d<       n=|d=v rd>| d| d}d?t0        j<                  j	                  d@A      dB}|dCk(  rdD| d| dE}|j?                  dFdGdGdH       | j                  j;                  |d<       t0        j3                  || j                  |dI      }n|d?k(  rt0        j2                  j	                  g dJdKdLdM|gddM|gggg dN6      }|st        dO      | j                  j;                  dP| d| dQ| d<       |j@                   d1| |_         |jC                  dR       tE                nt        dS|       |j8                  d9k(  rqt0        jF                  j	                  dTdU|jH                  gg dVgd2g6      }|st        dW|       |jJ                  r||_&        |jC                  dR       || _'        n\|jJ                  rtQ        |jL                  xr% |jL                  j                  j	                  dX            }|s|r| jS                  ||      \  }}}||dX<   | jU                  |||      \  }}||d<   ||dL<   | jW                  |      }|r||dY<   ||dZ<   |D ]  }tY        ||||           |jZ                  j\                  r|j_                         |_0        |jC                          tE                |j	                  d      rC| jc                  ||       n0| j                  j;                  d[| d\td        jf                  d]       || _'        || _4        |rt0        jF                  j	                  dTdU|jH                  gg dVg^      }|j8                  d9k(  r8t0        jF                  j	                  |d_`      }|r"|jk                  da       n|j8                  dbk(  rt0        jF                  j	                  |d_`      }t0        jF                  j	                  |dc`      }|r|jk                  da       |r|jk                  da       |r|jk                  da       |jm                  ddg       |jn                  j                  }|
r4| j                  j*                  j*                  j,                   d1|
 |_         | j                  |_        |jC                  dR       tE                | jq                  ||       | js                  |       | ju                  de||       | jw                  |       tx        jz                  rbtx        jz                  }tx        jz                  dfk(  rdg}| j                  j                  j                  dh| di       | ju                  dj||       n%| j                  j                  j                  dk       	$ y c c}w # t        $ r}t        d|d   d    d|
 d|       d }~ww xY w# t        $ r9}| j                  j                  j!                  d| d| d|        Y d }~d }~ww xY w# t        $ r9}| j                  j}                  dl|d    d|d    d| dmdndo       Y d }~	d }~ww xY w)pNr|  rv   r`   r^   
add_suffixTrp  rs   z' (id: z, key: r  rv  u0   Импортируем пространство r   rw  r  uE   В дампе не найдена домашняя страница 'r   r"  rD  u   У пространсва u    нет домашней страницы. Сведения о создателе и дате создания пространства будут взяты из первой корневой страницы.r}  uW   Не удалось получить данные корневой страницы id=u(    в дампе пространства r>  uS   В дампе не найдено ни одной корневой страницыr  r  uD   Определяем автора домашней страницы rR  rS  r  r  uJ   Определяем владельца домашней страницы r  r  rQ  r  r  r  r  r  r  personalu(    (Личное пространство)u%   Личное пространствоdescriptionr   r   r   r   )rj  rl  r  r  FuI   Найден ранее импортированный Wiki-проект project.agileu    Найден Agile-проект u_    с импортированным в раздел 'Документы' Wiki-проектом ')rS  )project_wikir   u3   Создание нового Wiki-проекта 'rm  zproject.wiki:defaultr5   )project_typer  r   u,   Создание нового раздел 'u-   ) в портале 'Моя компания'sectionzCmfWiki:Class)r  r  tree_parent_id)rs   r3   r   r   )rj  r   r  rL  rl  r  )rj  rl  r   u   Не найден Agile-проект для объединения. Создайте или импортируйте одноименный Agile-проект и повторите импорт проектаu"   Импорт Wiki-проекта 'u<   ) в раздел 'Документы' Agile-проекта r   u8   Неизвестный тип опции импорта r  r   )rs   r   u   ДокументыuL   Не найден раздел 'Документы' в Agile-проекте rr  project_perm_schemer  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыr  r   u   Документ1)r
  rs   )TEXKOM_db_deleterk  u   Документ2r  r:   r   u   ВсеuY   У документов будет обработано последних версий: u   . Для изменения, поменяйте значение параметра IMPORT_CONFLUENCE_PROC_LAST_PAGE_VER в config.rB  u   Обработка версий документов отключена параметром IMPORT_CONFLUENCE_PROC_LAST_PAGE_VER в config.u6   Ошибка импорта пространства 'zERR-0032r  r  )?r}   r3   r_   r`   r>   r  rr  r  r  rD   r   r   r   ry  r   r  r   rd   r  r   rI   r   r   get_correct_keyr    r  rb  keysrj  r  CmfLogicTyper   r   r   r   r#   r^   r   r  r  ra   ru  r|  rh  r  rs   r   gen_coder6   r   rB   r  rm  r  r  r  _process_project_tagsr  r.  rB  rU   r  r^  )rZ   rz   rv   r~  r   project_fieldsproject_is_newr   space_full_namer  homepage_idr  rj  	root_pager  r  r  r  r   rH  rm  log_msg
doc_folderrr  rW  r  rm_doc_folderrm_doc1rm_doc2r5  rb  s                                  r&   _process_spacesz#ConfluenceAPIImport._process_spaces  s   ++DOO,I,IJ[,\]}-g6t<__2288<<\J
  "'') ^	EN!NZ??,,.;D<P<P&QSs4y&QQ$%eFm_GE$K=PUV[P\~]^"_&&++.^_n^o,pquV}-66{C"99Z("'
"3D"9K#'#5#5g{#K OO**224_4E Fe f &+<%8 ~	'+'9'9'9'MH' %  (~ ''|}}!),[9&&++.rsyrz,{|&>[0343C3CN<0373C3CF4==DY3ZN<0 +//	:OO**//2|  ~C  }D  1E  FV}3787G7G{36:6F6FuT]]G[6\{32@2NN;/#I.}=dC&&++.kltku,vwF#{2898H8HN#458<8H8HRVR_R_I`8aN#453;I3F}3U/04<Y4G4VW]4^01"6]
=J."LLJ4[N=1doo44;;GGH5QU;-WYZ OO;;E%L&Q	 !++//$f&m< 3 3 56 :  0  %*N ijqirsG++>>wi H66@\YKqR   OO''4'@"&>>$WXbWccfgpfqqr"s,5*0*=*=*A*AG]*A*^* '&0"NzlZ]^g]h iN !O $ +1109-<2A3 
 ++Gt+D"("3"3!+'+#),0	 #4 # %	1 #)"3"3"7"7 G$(%7)$L%+Wj$A!C$$ #8 #  '"*!T# 
 ++@CPY{ [YY`Xac&* , 
 -4NN+;2fX)F6"&)abman'opp''?:!'!3!3!7!7!14 DFjk (z "8 "J &&)uv}u~'  A  A!115:
2"D9'1D$..%)#33 P ' 7 7 = = A A, O&
 & AE@X@X * )A=J	: 3=E,/040N0N&%"1-
I 2<v.=F'9:&*&?&?&F&DON+@A<A'89#1 GC#GS.2EFG"<<22+2+;+;+=GL" !99Z0 66xI++@	 Jh i")//&*	 ,  (/D$&!$*$6$6$:$:-tWZZ@@  %; %M ++>"("4"4"8"8]Yl"8"m"#NNDNA --?"("4"4"8"8WSf"8"g"("4"4"8"8]Yl"8"m"#NNDNA"#NNDNA()00$0G++-=,>?+2+A+A+G+G(&9=9O9O9V9V9b9b8ccefqer6s,36:oo(3(--$-? **5':,,U3,,
 ,,W5>>"("M"MKBBbH&.OO**//st  tA A\ ] 00! OO**// gk^	 'R % &  %j 1' :;3{m3seU &  )  OO22::"y  {D  zE EJJYIZZ\]`\a!c d  ))LUSY]O[^_dej_k^llopsotu))!	 *  s   h(h:f)hA5hf.2hg`h)h.	g7ggh	h".hhhh	i '.ii r   c           	      Z   ddl m} t               }| j                  |d   | j	                  |d               D ]8  }| j
                  j                         r y |d   D ]  }|d   |vs|||d   <    : |j                         D ]z  }| j
                  j                         r y |d   j                  dd	      j                  d
d      } ||dd      }	 d| j
                  j                  j                  j                   d|d    d}	t        j                  j                  ddd|	 dgdg      }
|
s9dddd| dgdd|gddd| dgg}t        j                  j                  |dg      }
|
s#t        j                  || j
                  d|	      }
|
j                  s|	|
_        n#|	|
j                  vr|
j                   |	 |
_        ||
_        ||
_        |
j"                  r|
j%                  d       t'                } y #  | j
                  j)                  d| d|d       Y xY w)Nr   rD  r   r  r  r^   rs   r   r   rG  r&  rH  TrI  r   r   r   r   r   r  rL  rM  r  r  r  r  r   rO  zERR-0022r   )rS  rE  r   r  r  r3   r  r  r   r   r   r    r  r>   r   rs   r  r   r   r   r^  )rZ   r   rm  rE  r  r   r   tag_name
name_aliasr   tag_objr   s               r&   r  z)ConfluenceAPIImport._process_project_tags$  sG   *v&&uV}D<W<WX]^dXe<f&g 	*C((*8} *t9D(&)DTO*	* ;;=  	C((*6{**34<<S"EH!($NJdoo44;;GGH3t9+UWX --++Hf&QRm3T^a]b+c#$g8*B/?@#Wh7$g:,b/ABDG %mm//wu/MG$mmdoogktzm{G~~%+GN7>>1(/'7x%@GN'*-'%%LLTL21 	2))@
K)!	 *  s   D*H$H*c              #   "  K   | j                   j                         j                  d      }t        j	                  |      D ]>  }t        |j                  |d      d      5 }t        j                  |       d d d        @ y # 1 sw Y   KxY ww)Nr  rA  r@  r   )rZ   r  group_idr   s       r&   _get_groupszConfluenceAPIImport._get_groupsP  s{     __668AA(K


:. 	#Hj))(K@#F #!iil"# #	## #s   AB B8BB	Bc              #      K   |j                  d      }t        j                  |      D ]=  }t        |j                  |      d      5 }t        j                  |       d d d        ? y # 1 sw Y   JxY ww)Nr   r@  )r   r   r   r   r   r   )rZ   
group_path	user_pathr1  r   s        r&   _get_group_membersz&ConfluenceAPIImport._get_group_membersV  sl     ''0	zz), 	#Gi((137 #1iil"# #	## #s   AA6A*A6*A3	/A6r)  c           
      v   |s|r(| j                   j                  j                  d|        |j                  d      }|s| j                   j                  j	                  d|        t
        j                  j                  j                  t        t        j                        z
  dz
  }t        j                  |d         d |  dt        j                   }t        |d   |t        |j                  dd             	      }d
| j                   j                   j                   j"                   d
|| j$                      d
}d}|d   j'                  dd      }	t        |	      dk(  r|	d   |d<   d|d<   d|d<   nJt        |	      dk(  r|	d   |d<   |	d   |d<   d|d<   n&t        |	      dk\  r|	d   |d<   |	d   |d<   |	d   |d<   ddg}
t(        j*                  j                  ddd| dg|
      }|r@|j,                  j.                  j1                  d
| j                   j                   j                   j"                   d
      dkD  r|r| j                   j                  j3                  d| d|j,                          t5        j6                  d
| j                   j                   j                   j"                   dd|j,                  j.                        |_        |j9                  d       d }nD| xj:                  dz  c_        | j                   j=                  d| d|j,                   d d!d"#       |s%d$dd%d&| j                   j                   j                   j"                   d'gg d(g}t(        j*                  j                  d)d*|d   g|g|
      }|st(        j*                  j?                  dd*|d   g|g|
      }t        |      dkD  rG| j                   j=                  d+|d    d,t        |       d!d"#       | xj:                  dz  c_        g }|sd-d*|d-   g|g}t(        j*                  j?                  ||
      }|sd$g}tA        |	t        |	            D ]|  }t        |	      dk(  r	dd*|d   g}t        |	      dk(  r |jC                  dd*|d   gdd*|d   gg       Ht        |	      dk(  sW|jC                  dd*|d   gdd*|d   gdd*|d   gg       ~ ||g}t(        j*                  j?                  ||
      }t        |      dkD  rE| xj:                  dz  c_        | j                   j=                  d.|d-    d,t        |       d!d"#       |r|d   }d}|s|rd}d}|d   }t(        j*                  j                  d)d*|jE                         g|
      r| j                   jG                  d/| d0tH        jJ                         |d   j'                  d      \  }}| d1| d| }|dz  }t(        j*                  j                  d)d*|jE                         g|
      r| j                   jG                  d2|        t(        j+                  ||| j                   d3      }nd |fS |r,|jL                  s|jN                  r|D ]  }tQ        ||||           |jS                  g d4       |j,                  r$||j,                  vr|j,                   | |_        n||_        t(        jT                  jW                         }t(        jT                  jY                         }||jZ                  vr|jZ                  jC                  |       ||jZ                  vr|jZ                  jC                  |       d|_.        |j^                  r|j9                  d       | j                   xj`                  dz  c_0        ||fS )5Nu2   Обрабатываем пользователя rr   u8   Не указан Email для пользователя r   r8  @
operationsT)rs   rr   does_not_workr   Fr   r   r   	last_namer&  
first_namesecond_namer  r   rg_member_ofr   r   r   r  u    ext_id пользователя uN    содержит несколько ID из одного источника: z::.+?::r   uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0004r   r3  rL  rw  r  r  )r   r   Nloginr  u+   Пользователей с почтой z > rs   u+   Пользователей с именем uQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифруr   u1   Создадим пользователя ext_id=)r   r  r3   r   )r   r  
user_local)1r3   rD   r   r>   warncmfrt   CmfEmail
max_lengthr   rU   
ORG_DOMAINr  translit_stripr   ra   r   r   rI   r   r    r!   r   r`   r  r   r  r  r   r@   r^  rb  r   r   r:  r  rB   r  r   r-  r  r  r   confluence_group
user_groupr  r  r   rK   )rZ   r)  r  r   rr   max_len	user_dictr   
is_created	full_namert   r   not_source_hash_filterpersonsr   
name_combonr  prefix_emaildomainr  
conf_groupr  s                          r&   _process_personz#ConfluenceAPIImport._process_person\  sD   VOO""''*\]f\g(hig&OO""''*bclbm(nojj))44s6;L;L7MMPQQG--i.FGQRRSTZTeTeSfgEi6e.29==t3T.U*UW	doo,,33??@9T]]C[B\\^_
m,223:	y>Q%.q\Ik"&(Il#')Im$^q %.q\Ik"&/lIl#')Im$^q %.q\Ik"&/lIl#'0|Im$~&!!%%f&m4 & 
 fmm))//"T__5K5K5R5R5^5^4__a0bcfgg &&..6vh ?SSYS`S`Rac !#$//0077CCDGLMM''!
 -1$))fgmfn oz {A  {H  {H  zI IFG  *# *   :T__-C-C-J-J-V-V,WWZ'[\&&"
 %%))gy'9:*  * F  **// '9W+=>. " 0  w<!#OO--0[\efm\n[oorsvw~s  sA  /B9Cf . WOOq(O G)F*;<.G %..33763RG"#'&*6y#i.*Q #J"9~2+6A*O!$Y1!4 '%17JqM$J%0':a=$I0" !# "%Y1!4 '%0':a=$I%17JqM$J%2GZ]$K0" !## $2# #)"2"2"7"7wv"7"Vw<!#OOq(OOO--0[\efl\m[nnqruv}r~q  /A9Cf . V$QZF
!
(&&**77EKKM2R[a*bOO''*{  }B  |C  Cb  )c  el  et  et  u+4W+=+C+CC+H(L&+nAaS&:EFA	 &&**77EKKM2R[a*b
 ##&WX^W_$`a))27DOO<@ * B Z''%%$ 9CFC389 GH}}.'-}}ofX$>FM &..??AJ..99;J!4!44##**:6!4!44##**:6 $F  ---2-z!!r%   c           	         | j                   j                  j                  j                  dd      s,| j                   j	                  dt
        j                         y t               }| j                  d      D ]M  }| j                   j                  dd       | j                   j                         r y | j                  |      \  }}|j                  r|j                  d       |rX|j                  j                  j                  t         j"                        s%|j%                  |j                  j                         |j                  d	g       D ]H  }d
}| j&                  j(                  rd}d| j                   j*                  j*                  j,                   d||    d}t.        j0                  j                  ddd| dgdg      }|s(t.        j0                  j                  d
d|d
   gdg      }|s(t.        j1                  || j                   |d
   d|      }n|j2                  r
|d
   |_        |j6                  s||_        n#||j6                  vr|j6                   | |_        |j                  d       |j8                  j;                  |       K |j                  r|j                  d       t=                P |r| j                   j                  j                  j                  dd      rd| j                   j>                  jA                  dtC        |       d|        tE        t.        jF                  jH                  tK        |      g       y y y )Nr  TuA   Не грузим пользователей из-за опцийr  r   r   r  r   r  rs   r^   r   r   r   r   r   r  r   r   r3   rs   r   r  send_invitesu,   Отправляем приглашения u    пользователям: )args)&r3   r_   r`   r>   r  rB   r  rN   r   r_  r  r  r   r   rr   r  rU   r  r%  r2   rJ   r   r   r    r   r   rs   r   r  r   r   rD   r   r   schedule_deferred_jobr!   register_personsrb  )	rZ   r  r)  r   r  r   r  r   r   s	            r&   _process_personsz$ConfluenceAPIImport._process_persons  s   ,,2266|TJOO ckrkzkz{u))'2 	IOO$$V[9((*!%!5!5i!@FJ  -&,,"4"4"="=f>O>O"P  !3!34'mmHb9 2
??((Cdoo44;;GGH:VY?J[[]^--11(FaPVxWXM9Zdgch1i"1155fdJW]L^=_ilhm5nE"11DOOblmsbt@DV` 2 bE**!+F!3EJ||#)EL5<</&+ll^F8#<EL

t
,##**51'2(   -L?	@ DOO99??CCNTXYOO""''*VWZ[gWhVi  jG  HT  GU  )V  W!&"2"2"C"C4P\K]J^_ Z<r%   c                    | j                         D ]  }d}| j                  j                  rd}d| j                  j                  j                  j
                   d||    d}t        j                  j                  ddd| dgdg      }|s(t        j                  j                  dd	|d   gdg      }|s(t        j                  || j                  |d   d
|      }n|j                  r
|d   |_
        |j                  s||_        n#||j                  vr|j                   | |_        |j                  d
       t                | j                  | j                  j                         j!                  d||               D ]T  }| j#                  |d      \  }}|s|j$                  j'                  |       |j(                  sC|j                  d
       V t                 y )Nrs   r^   r   r   r   r   r   r  r   Tr  r   r  F)r  r2   rJ   r3   r   r   r    r   r>   r   rs   r   r   r   r  r   r   r  r  r   r   )rZ   r   r  r   r   r)  r   r   s           r&   _process_groupsz#ConfluenceAPIImport._process_groups*  s   **, 	JC$$$//0077CCDBzRUFWWYZF))--h!F8ST5V`c_d-eE--11&$
SYHZ9[ehdi1j--V^hio^p>BT^ . `&&'/
<<%u||+"',,x8JJ4J(L!44T__5V5V5X5a5abjlvwzl{5|} 2	 00EB	##**51$$KKDK12 L7	r%   c           
         t        t        dd      }|s&| j                  j                  j	                  d       y| j                  j                  j                  d       t               }t        j                         }t        j                  j                  g dg dg dgg d	
      }|D ]  }d|j                   d|j                   d}|j                  j                  j!                  d      }|sI|j                  j                  j!                  d      xs i }|j!                  d      xs d}		 | j                  j#                  d       | j                  j#                  d|        |j%                  ||	      \  }
}|
|_        t(        j+                  |d      |_        |j/                  d       | j                  j#                  d|        | j                  j#                  d|
        | j                  j#                  d|        |j0                  D ]'  }| j                  j                  j	                  |       )  t        j                         |z
  }| j                  j                  j                  d |d!d"       y# t2        $ r3}| j                  j5                  d| d| d| ddd       Y d}~d}~ww xY w)#u   
        Пост обработка JQL в фильтрах задач макроса "Результаты фильтра"
        IMPORT_CONVERT_JQLTu   Конвертация JQL в фильтрах отключена. Для включения, измените значение параметра 'IMPORT_CONVERT_JQL'Nuj   Обработка JQL в фильтрах задач макроса 'Результаты фильтра')r  r   z%"jqlQuery":"%r   )r   r   T)r  ubqlrk  rs   r  r  r  rv  r  r  r   r   2--------------------------------------------------u   ФИЛЬТР: FrL  r   zJQL:	zUBQL:	zBQL:	u   Фильтр u0   : ошибка преобразования JQL r>  zERR-0066r  )rJ  r  uC   Обработка JQL в фильтрах выполнена за rV  rW  )r  rU   r3   rD   r   r   r   rZ  process_timer    r  rb  rs   r6   r  r`   r>   r  get_modifiedr  r   r   rk  r   r  r   r^  )rZ   convert_jqljqlre  task_filterstask_filter
filter_msgr  r  r   r  rk  r  rj  rk  s                  r&   _process_jql_in_filtersz+ConfluenceAPIImport._process_jql_in_filtersH  s    f&:DAOO""**w ##x	
 o **//=*/
 > 0 
 ( 	K[--.c+2B2B1C1EJ//5599*EE!1177;;IFL"G!++m4;K##H-##nZL$AB,,UK@	c#' "&**Su*"E  T 2##fUG$45##gdV$45##fSEN3!$ >IOO**229=>'	:  2%##&ijlmpiqqy$z{  ))#J</_`e_ffhilhmn+!	 *  s   3DJ	K(KKc                 
   t        d      D ]g  }|dkD  r;| j                  j                  d| j                   d| t        j
                         d| _        | j                          | j                  rg n t        d      D ]N  }d}|dkD  r1| j                  j                  d| d| t        j
                         | j                         }|rN n | j                  j                          | xj                  z  c_        | j                          | j                          | j                          | j                  j                  j                  j                  dd      r.| xj                  | j                  j!                         z  c_        n%| j                  j"                  j%                  d	       t'                | j                  j                  d
       | j)                         D ]  }|d   | j*                  D cg c]  }|d   	 c}vr&| j                  j"                  j-                  d|d    d       t.        j0                  sc	 d| j                  j2                  j2                  j4                   d|d    d}| j                  j7                  || j                  j"                          | j                   S c c}w # t8        $ r3}| j                  j"                  j;                  d|        Y d}~d}~ww xY w)u   
        Запуск импорта

        :return bool: Истина в случае успешного импорта
        r  r   uB   При дампе данных обнаружены ошибки (u0   ), попыка повторного дампа r  uF   При дампе вложений обнаружены ошибки (process_linksTu2   Отключена обработка ссылокr  r^   u'   Импортирован проект 'rs   rp  r   )rD   uC   Не удалось создать отчет по проекту. N)r  r3   r  r@   rB   r  r  r  r2   closer  r  r  r_   r`   r>   process_cross_linksrD   r   r   rr  r  r   rU   IMPORT_COLLECT_STATSr   r   project_statsr   r3  )rZ   r  r@   rm  r   project_ext_idrj  s          r&   process_importz"ConfluenceAPIImport.process_import  s    q 	A1u##&himixixhy  zj  kl  jm  %n  v}  vE  vE#  FDO ??	 q 	AJ1u##&lmwlx  yi  jk  il  %m  u|  uD  uD#  E,,.J	 	:%$$&??((..22?DIOOtBBDDOOO""**+_`H%))+ 	zGt}$:N:N$O3SY$OOOO""''*QRYZ`RaQbbc(de..z#%doo&<&<&C&C&O&O%PPRSZ[_S`Raac!d--nT__E[E[-\	z ??"" %P  z&&,,/rsvrw-xyyzs   >KA%K	L(K==Lc                     |j                  dt        j                  d      i      s |j                  dk(  s|j                  d      r|j	                  |j                                |S )uS   
        Из документов MS создаем наши превью
        rH  
backgroundr  r  )r  r  compilers   r  create_preview_tag)rZ   r   r  s      r&   _create_previewz#ConfluenceAPIImport._create_preview  sV     887BJJ|$<=8>#((eBSWZW_W_`eWfV6689
r%   c                    t         j                  j                  | j                  j                        }|j                  d       D ]|  }	 |j                  j                  d      r)| j                  j                  j                  d|        I|j                  d      r!|j                  dd      j                         }n |j                  dd      j                         }|st         j                  j                  |      }|j                  rI|j                  | j                  j                  v r%|j                  j                  |j                        s|j                   r|j                   j                  d      s;|j                   s|j                  rU| j                  j                  j                  d| d	|        d }	|j#                  |
      }
|j                  d      r|j                  d      r|
r}t         j                  j%                  |
j                  dd      j'                  d            }|r*| j                  j                  j)                  d|        "|j*                   d| }	nd|v rp|j-                  d      d   j-                  d      d   }| j/                  |      }|s*| j                  j                  j)                  d|        |j*                  }	nd|v rt1        j2                  d|      }|r|j                  d      }|s.t         j                  j5                  |j7                  d            }|rI| j/                  |      }|s*| j                  j                  j)                  d|        E|j*                  }	|	r[|	|j                  d<   ||j                  d<   d|j                  d<   | j                  j                  j                  d| d|	 d       |
rc|
j                  d      rR|
j                  d      dk7  r>|
j                  d      |d<   |
j                  d       |d <   |
j                  d      |d<   |}t         j                  j5                  |      j-                  d      d   j-                  d      d   }|}|j                  j                  d!      }|j8                  d"k(  r|r||j:                  j-                  d#      d   k7  rt=        | j>                  j@                  jC                         d$         }t=        | j>                  j@                  jC                         d%         }tE        | j                  jG                               jI                  d&|d'|d(      }| j                  jJ                  jJ                  jL                   d#| }tN        jP                  j                  |d)g*      }|r|}|jS                         sX|rVtE        | j                  jG                               jI                  d&t=        |jT                  j@                  d$         d'|d(      }|jS                         s-| j                  jW                  d+| d,| d-| d.| d/	d0|1       :tN        jX                  j[                  d%d2|gd3d4| d5gg d6gg d78      }|rtE        |j                        jS                         rqtN        j\                  j                  ||9      }|stN        j]                  ||| j                  d:      }|j@                  r|j@                  j                  d;      r|j@                  d;   }|j                  d<      |_/        |j                  d=      r2|d=   d>   d?k7  r'| j/                  |d=   | j`                           |_1        ntd        jf                  |_1        |jb                  |_4        |jk                  d@       tm        tE        |j                        dA      5 }|jo                  |jq                         ddBC       d|_9        |jk                  d@       d d d        n*| j                  jW                  dD| dE| dF| ddG|1       -tN        j\                  j                  |g dH|I      }|r|j                  d      r9|j                  d   |j                  dJ<   |j                  jt                  |j                  d<   d|j                  d<   |j                  dK      r)|j                  dK   |j                  dL<   |j                  dK= tw        jx                  |j                  d   j-                  d      d         }|rN|d   rI|d   j                  dM      r5dM|_=        dN|j                  dN<   dO|j                  dP<   dO|j                  dQ<   n-|r|d   r&|d   j                  dR      s| j}                  ||       |j                  d      r,|j                  d   |j                  d<   |j                  jt                  |j                  d<   d|j                  d<   tw        jx                  |j                  d   j-                  d      d         \  }}|r|j                  dM      rdM|_=        dN|j                  dN<   dO|j                  dP<   dO|j                  dQ<   |j                  dS      }|j                  d   |j                  d<   ||j                  d><   |j                  |       n| j}                  ||       | j                  j                  j                  dT|j                          |j                  j                  d      dk(  r#| j                  jW                  dU| dV|1       R| j                  j                  j)                  d| dW|         y # 1 sw Y   ^xY w# t        $ r,} | j                  jW                  dX|  dY|1       Y d } ~ d } ~ ww xY w)ZNc                 J    | j                  d      xs | j                  d      S r   r   r   s    r&   r   z4ConfluenceAPIImport._convert_links.<locals>.<lambda>  s    #,,v2F2]#,,W\J] r%   rZ  u   Уже обработали r   r&  r   r  r  u#   ] Обработка ссылки: )r   rG  zdata-anchoru1   Не найден якорь для ссылки z##z/people/r   r   r  r   u?   Пользователь не найден для ссылки z
/display/~r  zdata-usernamer   	href_origTu   Заменили 'u   ' на 'rp  data-linked-resource-typer  zdata-linked-resource-idz!data-linked-resource-container-idr#   r   r  rs   rk  rw  r?  zparent.import_raw_jsonr  u   Документ ID u)    с каталогом вложений 'u<   ' не найден в дампе пространства 'r"  u~   ). Возможно он находится в пространстве, которое еще не импортированоzERR-0005rI  r"  r  r   r  r  r"  Tr  r   r  r  r  r'  rB  r  rQ  rR  rS  r   r(  Fr)  u   Не найден файл '   ' страницы ID r  zERR-0006)r   r%  r$  )rs   rt   r   src_origsrcsetsrcset_origvideocontrolsr  r  r  imagesourceu   Заменили на u%   Не найдено вложение zERR-0007u*   ] Не обработана ссылка: u.   Ошибка обработки ссылки: zERR-0008)Br  r  r   r2   r   r  r	  r>   r3   rD   r   r   r  hostnamer   r  r  r  r  lstripr   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  rI   r  rd   r  r  r   r   r0  r   r   r`   r  r  rs   r  r	  r   r   )!rZ   r   r  r  make_previewr  r   r   r  new_urlraw_taganchor_name
account_idr   r  	user_nameattach_parentrs   r  resource_container_idrH  r  r  resource_ext_iddoc_with_attachdownloaded_file
attach_objr:  r   r  r(  r  rj  s!                                    r&   r	  z"ConfluenceAPIImport._convert_links  s    & 5 5doo6I6I J%%&]^ k	Cj99==1OO**//2Nse0TU <<'''&"-335C''%,224C#\\2237
 ''"++t/B/BB&OO667L7Q7QR  $$Z->->-I-I&-Q "((Z-@-@&&++ax7Z[^Z_,`a%***4<<'CNN3,?G"(,,"4"4W[[PR5S5Z5Z[^5_"`K"..669jknjo7pq !'R}=G3&!$3!3!9!9#!>q!AJ!--j9F!..669xy|x}7~ $kkG!S(II&A3GE$'GGO$<	((.(<(<U[[^(LI$%)%5%5i%@F#) $ 6 6 > >&efiej$k!" !)&,kkG(/CIIf%-0CIIk*15CIIo.OO**//2DSERYQZZ[0\]
 $?@$?@LP7>{{C^7_C345<[[AZ5[C12)0])CC& &||++C066s;B?EEcJ1M 	(+		6Y(Z%$$5-2G6==K^K^_cKdefKg2g #D$4$4$D$D$I$I$KE$R SI!$T%5%5%E%E%J%J%LV%T!UJ'+DOO,M,M,O'P'Y'Y"!#-%($ *.)?)?)F)F)R)R(SSUVkUl&mO&,&8&8&<&<. 89 '= 'O '(7+224+/0Q0Q0S+T+]+]& 6 6 F Fu MN'1),( ,2241123H2I JGGWFX YYYcXddghqgr sTU
 (2 & 2  ! '-&>&>&C&C#S$/)6o5Fc3JK5 
  A 'D 'O '40D0D+E+L+L+N%+%9%9%=%=!*#0 &> &
  *)/)=)=%.'4+/??04	 *> *J  />>?CbCbCfCfgpCq5D5T5TU^5_ 2<N<R<RSY<Z
 9$6$:$:4$@(:4(@(HK(W<@<L<L(:4(@(O=&J$9 =><L<LJ$97A7L7L
 4&OOO=!$';';"<dC >q&22 !-1+0 3 
 :>J6&OOO=> > 11:4& A33H2IM]L^^_a'1 &	 2  !#11559<O;H 6 J
 ||E*03		%0@		*-+5>>+?+?		%(59		/2<<17:yy7JCIIm4 #		( 3$-$8$859I9O9OPS9TUV9W$X	$1)A,:Q:QRY:Z'.CH4>CIIj117CIIg.28CIIh/!*il9Q<CZCZ[bCc 00jA||F+1461B		+.,6NN,@,@		&)59		/2,5,@,@6ARAXAXY\A]^_A`,a)	6$)=)=g)F'.CH4>CIIj117CIIg.28CIIh/%.%6%6x%@F25))F2CFLL/3<FLL0JJv. 00jAOO**//2HHX0YZYY]]#>?<OOO--0UVYUZ.[hr28 . :&&..6(:dehdi/jkKk	R> >z  ))DSEJ) *  s   AoAo$A2o'ooCo(A8o"B'oA'o4A#oH%o Fo<o 1o3K"o?o+oo	o	p	!pp	c                 z   i }|j                  d      D ]N  }|j                  sd}t        j                  ||j                        }|D ]  \  }}|j	                         ||<    P |j                  dddi      D ]?  }|d   }||v s||   }	d|	 }
|j                  dd       d	|
 j                  d
      |d<   A y)ub   
        Добавляет стиль цвета для текста в Confluence Cloud
        rH  z5\[data-colorid=([^\]]+)\]\s*\{\s*color:\s*([^;\}\n]+)spanzdata-coloridTr  zcolor: r&  ; ;N)r  stringr  findallr  r>   r  )rZ   r  color_rules	style_tagpatternmatchescoloridcolor_valuer   r  
text_colors              r&   rL  z'ConfluenceAPIImport._convert_text_color  s    
 "++G4 	?IR**Wi.>.>?,3 ?(G[+6+<+<+>K(?		? &&vnd5K&L 	UD>*G+%#G,&ug.
#'88GR#8"9J< H O OPS TW	Ur%   c           
         g dddgdddg ddddg d	dd
ddgddddgddddgdddg ddddddgdddg ddddg dddddgddddgddd d gdd!d"g d#dd$d%d%d&gdd'd(d(gdd)d*d*gdd+d,d,gdd-d.d.gdd/d0d0d1gdd2d3d3gdd4d5d5gdd6d7d7gdd8d9d9d:gdd;d<d<gdd=d>g d?dd@dAdAgddBdCg dDddEdFdFdGgddHdIg dJddKdLg dMddNdOdOgddPdQdQgddRdSdSdTgddUdVdWdVgddXdYdYgddZd[g d\dd]d^d^gdd_d`d`gddadbg dcddddeg dfddgdhdhgddidjdjdkgddldmg dnddodpdpgddqdrdrdsgddtdududvgddwdxdxdygddzd{d{d|gdd}d~d~gdddddgdddddgdddddgd}|j                  dddi      D ]a  }|j                  d      }|r|j                  dd|i      nd}|s|j                  ddi      }|sGi }|j                  d      D ]a  }|j                  d      }	|j                  r|j                  j	                         nd|	dk(  rt        fd|D        ddi      }
|
d   ||	<   c d}|j                  d      }|r!|j                  rt        |j                        }t        d      }|j                  ddd|j                  dd       i      }|j                  d      }||_        |j                  |       |j                  |       d y)uF   
        Конвертирует "Фрагмент кода"
        ABAPabap)rs   r`   rM  ActionScriptactionscript)r  actionscript3asAdaada)r  ada95ada2005AppleScriptapplescriptArduinoarduinoAutoItautoitBashbash)r  r  shkshzshCr  cppzC#csharp)r$  zc#cszC++)zc++r#  clikeCSScssClojureclojureDiffr(  Elixirelixir)r-  exexsErlangerlangerlFortranfortranGogoGraphQLgraphqlGroovygroovyHaskellhaskellhsJavajavaJSONr   Kotlinkotlin
LiveScript
livescriptzlive-scriptLualuazObjective-C
objectivec)zobjective-crG  zobj-cobjcOCamlocamlPascalpascal)pasrL  objectpascaldelphiPerlperlplPHPphp)rT  php3php4php5
PowerShell
powershell)rY  poshps1psm1PrologprologPuppetpuppetPythonpythonpyQMLqmlqbsRr@  Racketracket)ri  rktlispJSXjsxTSXtsxreSTrest)restructuredtextrstrq  Rubyruby)ru  r(  dubyRustrustSchemer  scmSQLsql)r|  
postgresqlpostgresplpgsqlpsqlzpostgresql-consolezpostgres-consoletsqlzt-sqlmysqlsqliteTcltcl
Typescript
typescriptts
JavaScript
javascriptjsValavalavapiVerilogverilogr(  VHDLvhdlzVisual Basiczvisual-basicvisualbasicYAMLyamlymlzHTML/XMLmarkuprs  xmlr  r  r6   r  r  r  r  Nr  r  languagec              3   2   K   | ]  }|d    v s|  yw)rM  Nr$   )r   langr  s     r&   r  z4ConfluenceAPIImport._convert_code.<locals>.<genexpr>  s     ^$PTU\P]A]^s   r`   r<  r&  zac:plain-text-bodyrD  featuresprer  z	language-)r  r>   r  r   r  rU  r  r   r   r	  r   r  )rZ   r  re  supported_languages
code_macror[  r
  r  r-  r  supported_languagerN  	cdata_tagnew_souppre_tagcode_tagr  s                   @r&   rM  z!ConfluenceAPIImport._convert_code  s   J
 J
 ''@J
 4J
" &&'!J
, ""#+J
6 !!"5J
@ >?J
J uIJ
T !/SJ
^ 0]J
h gJ
r ""#qJ
|  {J
F !!0EJ
P !!"E*OJ
Z ""#YJ
d cJ
n ""#mJ
x !!"wJ
B ""#T*AJ
L  KJ
V  UJ
` !!"_J
j %%&6iJ
t sJ
~ &%G}J
H   !GJ
R !!DQJ
\  $[J
f 8eJ
p %%>oJ
z !!"yJ
D !!"CJ
N !!"D)MJ
X WJ
b aJ
l !!2kJ
v uJ
@ J
J <IJ
T /SJ
^  ]J
h !!"E*gJ
r  \qJ
| {J
F %%&-EJ
P %%&-OJ
Z  &)YJ
d ""#S)cJ
n  mJ
x '''8wJ
B  %AJ
L #! %KJ
X '//0EiY_M`/a "	*J!~~m4HRZinnU?H2MnN`dG#..0A6/J.KF#,,^< 	1"YYy1
49JJejj..0D+)-^*=^ &)*& #5W"=K%0z"	1 G"(<=IY--i../$m<H&&)FJJz6,J+K LM ' G  ''/H%HONN8$  )E"	*r%   c                 	   dddddd}dddd	d
dddddddddddddddddddddddddddddddddddddddddddddd}ddd}d  }|j                  |      }|D ]  }d!}	d!}
d!}|j                  }|d"k(  r|j                  d#      }|j                  |      }|j                  d$      }
|j                  d%      }i }|j                  d&      D ]@  }|j                  d#      }|j                  r|j                  j	                         nd!}|||<   B n|d'k(  r{d(}i }|j                  d)      D ]@  }|j                  d*      }|j                  r|j                  j	                         nd!}|||<   B |j                  d+      }
|j                  d,      }n8|
r|j                  d-d.|
i/      }	|	s|r|j                  d-d0|i/      }	|	s|j                  d1|i/      }	|	st        d23      }|j                  d-d4d5|d6/      }|j                  d-d7d5d8/      }|j                  d-d9d:i/      }|dk(  rR|j                  d;      }|r|j                  d<      r|t        d<      d! }|j                  ||      }|j                  |      }|j                  d=|d>   /      }|j                  d?|d@   /      }|j                  |       |j                  |       nX|j                  dA      }|D  cg c]  } | st        t        | dB             }!} dCj                  |!      }|j                  |       |j                  dD      }"|"r.dE|" }#|j                  dFdC       dG|# j                  dH      |dF<   |	j                  d9dIi/      }$n|j                  dJ      d5k7  r_|j                  |      }|j                  d=|d>   /      }|j                  d?|d@   /      }|j                  |       |j                  |       |d"k(  r|	j                  d9dKi/      }$n|d'k(  r|	j                  d9dIi/      }$|j                  dL      }%|%rT|j                  dM      }&|j                  dN      }'t!        |%      |'_        |&j                  |'       |j                  |&       |j%                  $j&                         |j                  |       |j                  |       |	j)                  |        y!c c} w )Ou9   
        Конвертирует "Панель"
        r   successr   r3  customr   tipnoter   panel20z	0 0 24 24)r  r  viewboxzM12,24A12,12,0,1,0,0,12,12.013,12.013,0,0,0,12,24ZM12,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12,5Zm-1,5h1a2,2,0,0,1,2,2v6a1,1,0,0,1-2,0V12H11a1,1,0,0,1,0-2Zzrgb(1,82,204))dfill)	svg_attrs
path_attrszLayer 1)r  r  r  z	data-namea  m19 3.022c0-.008 0-.014 0-.022v-2a1 1 0 0 0 -2 0v1.1a5 5 0 0 0 -1-.1h-1v-1a1 1 0 0 0 -2 0v1h-2v-1a1 1 0 0 0 -2 0v1h-1a5 5 0 0 0 -1 .1v-1.1a1 1 0 0 0 -2 0v2 .022a4.979 4.979 0 0 0 -2 3.978v12a5.006 5.006 0 0 0 5 5h8a5.006 5.006 0 0 0 5-5v-12a4.979 4.979 0 0 0 -2-3.978zm-7 13.978h-4a1 1 0 0 1 0-2h4a1 1 0 0 1 0 2zm4-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zz#5243aaz0 0 1000 10000pxpreserve)r  r  r  r  yz	xml:spacea9  M500,990c270.6,0,490-219.4,490-490S770.6,10,500,10S10,229.4,10,500S229.4,990,500,990z M483.7,678c-0.4,0.4-0.7,0.8-1.1,1.2c-19.1,19.1-50.2,19.1-69.3,0L239.9,505.9c-19.1-19.1-19.1-50.1,0-69.3c19.1-19.1,50.2-19.1,69.3,0l138.7,138.7L695,328.1c19.1-19.1,50.2-19.1,69.3,0c19.1,19.1,19.1,50.2,0,69.3L483.7,678L483.7,678zz#01875az0 0 554.2 554.199a!  M538.5,386.199L356.5,70.8c-16.4-28.4-46.7-45.9-79.501-45.9c-32.8,0-63.1,17.5-79.5,45.9L12.3,391.6   c-16.4,28.4-16.4,63.4,0,91.8C28.7,511.8,59,529.3,91.8,529.3H462.2c0.101,0,0.2,0,0.2,0c50.7,0,91.8-41.101,91.8-91.8   C554.2,418.5,548.4,400.8,538.5,386.199z M316.3,416.899c0,21.7-16.7,38.3-39.2,38.3s-39.2-16.6-39.2-38.3V416   c0-21.601,16.7-38.301,39.2-38.301S316.3,394.3,316.3,416V416.899z M317.2,158.7L297.8,328.1c-1.3,12.2-9.4,19.8-20.7,19.8   s-19.4-7.7-20.7-19.8L237,158.6c-1.3-13.1,5.801-23,18-23H299.1C311.3,135.7,318.5,145.6,317.2,158.7zzrgb(255,153,32)z0 0 208.891 208.891zM0,170l65.555-65.555L0,38.891L38.891,0l65.555,65.555L170,0l38.891,38.891l-65.555,65.555L208.891,170L170,208.891  l-65.555-65.555l-65.555,65.555L0,170zzrgb(216, 64, 64))r   r  r  r   r3  )
check_mark
cross_markc                     d}| j                   dk(  r| j                  d      |v S | j                   dk(  r| j                  d      dk(  S y)Nr  r  r  ac:adf-noderR  r  F)rs   r>   )r   panel_namess     r&   find_panelsz7ConfluenceAPIImport._convert_panel.<locals>.find_panelsL  sN    K xx00wwy)[88xx=(wwv'11r%   Nr  r  zac:local-idr  r  r  r  zac:adf-attributer  zlocal-idz
panel-typer  data-local-idr  r  r  rD  r  zak-editor-panel eva_convertedr:  )r  contentEditablezdata-panel-typezak-editor-panel__icon)r  r  r  z$ak-editor-panel__content mceEditablepanelIconIdz
atlassian-r  r  r   r  -   r&  bgColorzbackground-color: rH  r  r  panelContenticonz!confluence-information-macro-bodyr   rp  strong)r  rs   r>   r   r  r  r   r	  r  r   r   r   chrr  r  r  r   r  rU  ri  r  )(rZ   r  re  panel_typespanel_iconsicon_mapr  panel_macrospanel_macror
  local_idr[  panel_element
panel_name
panel_typer  r-  r  r  attrattr_key
attr_valuer  	panel_tagpanel_icon_tagpanel_content_tagicon_id	icon_typer  svg_tagpath_tagpartspart
icon_charspanel_colorbg_colorcontent_tagpanel_titlep_tag
strong_tags(                                           r&   rN  z"ConfluenceAPIImport._convert_panel  s   
 
 #!* w+
 #!*!*	 `% #!.!+ U%  #!2!+ }-  #!4!+ r.iB
H $!

	 $,,[9' l	,KGHH',,M 55(__Y7
(__Z8
&??=9&??=9(11.A 5E!&9!5J8=

%**"2"2"4K)4F:&5 -/$
'001CD 2D#xxH6:ii!2TJ'1F8$2 "::j1#ZZ5
#..6Q.Rx#..6Q.R#..0A:/N.O$m<H ((<'.'1 ) I &--4'. . N !) 0 0C !1 ! X% **]3)),7$+C,=,>$?	$,LLI$F	*y9"*"2"25[@Q"2"R#+#3#3F$|BT#3#Ux0&--g6 'c 2EJ%STdc#dB-&8%S
%S!wwz2&--d3$jj3!3K=AH,5MM'2,F+Gr()T)[)[\_)`Ig&%ll'>1JlK::f%0&??:6D&..uD<M.NG'//d<>P/QHNN8,"))'2 $99"),,g?b5c,"dK"m3"),,g~5N,"OK **W-K ((-%--h7
$'$4
!Z(!((/$$[%9%9:^,./  +Yl	,R &Ts   7S/?S/c                    |j                   dv rd}nd}| j                  j                  j                  d       |j	                  ddi      D ]  }	 |j                  d      r| j                  |d         }nt        d	      t        |j                  t        |j                        t        |j                        t        |j                        t        |j                        
      d      }t        j                  |      }|j!                  |j"                         |j%                  d|d         }	|	r|	j!                  |j"                          y# t        $ r,}
| j                  j'                  d| d|       Y d}
~
8d}
~
ww xY w)u]   
        Упоминания пользователей
        confluence-userlink
        r  z
                <a cmf_converted="true" class="external" href="{person_href}" rel="noopener" target="_blank" data-macros="mentions" data-mention-type="person" data-object-id="{person_id}">@{person_name}</a>
            u	  
                <span class="macros-panel mentions-macros" contenteditable="false" data-id style="display: inline-flex; flex-direction: column; position: relative;">
                    <span class="extension-container" contenteditable="false" data-id data-layout="default">
                        <span class="extension-title" data-id>
                            @Упоминания <span class="excerpt-title" data-id>| {person_login}</span>
                        </span>
                        <span class="macros-actions" data-id>
                            <span class="macros-delete" data-id>
                                <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                    <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                </svg>
                            </span>
                        </span>
                    </span>
                    <span class="ak-renderer-wrapper" data-id>
                        <a cmf_converted="true" class="external" data-id data-macros="mentions" data-mention-type="person" data-object-id="{person_id}" rel="noopener">
                            <span class="lds-ring" data-id>
                                <span data-id></span>
                                <span data-id></span>
                                <span data-id></span>
                                <span data-id></span>
                            </span>
                        </a>
                    </span>
                </span>
            uH   Конвертируем упоминания пользователейr  userinfor  userkeyu]   Не найдены аттрибуты для определения пользователя)	person_idperson_loginperson_hrefperson_namerD  zuser-mentionr   )class_r   uZ   Не удалось преобразовать ссылку на пользователя zERR-0009rI  N)r  r3   rD   r   r  r>   r   r   r   r  r   r^   r  r   rs   r>  r  r  r  r^  )rZ   r   r  r  r#  r   r   r	  r?  r
  r   s              r&   r  z%ConfluenceAPIImport._convert_mentions  s   
 .DD: 	##$no''/JJ.W'X 	MCM779%!--c)n=F#  %D  E  E'c&))nADV\\AR@CFKK@P@CFKK@P )4 )R )6	7  $yy1
   !3!34#..S[.Q(()@)@A-	M.  M))  -G  HK  GL  +M5?V * M MMs   C?E	F
!FF
c                 >   |dk(  ry	 | j                  |      }| j                  |dd      \  }}|st        d|       	 |S # t        $ rQ}|r | j                  }| j                  rd| nd}| j
                  j                  | d| d|d	
       Y d}~|S d}~ww xY w)u  
        Возвращает пользователя по какому-либо идентификатору (id, имя, логин, email и др.).

        Args:
            user_id (str): Идентификатор пользователя для поиска.
            obj (optional): Объект в контексте которого был поиск пользователя. Defaults to None.
            raise_on_error (bool, optional): Вызвать исключение при ошибке поиска
                или вернуть резервного пользователя ('Система' или пользователь по умолчанию).
                Defaults to False.

        Raises:
            Exception: Исключение при ошибке поиска пользователя.

        Returns:
            CmfPerson: Объект пользователя.
        unknownNFue   Пользователь с указанными данными не найден в системе: u   по умолчанию u   'Система'u;   . Будет установлен пользователь zERR-0023r!   r  )r+  r  r   rc   rb   r3   r^  )	rZ   r1  r   r  r   r   r   rj  
person_msgs	            r&   r   zConfluenceAPIImport._get_person  s    $ i	009D,,T5%@IFA  #H  IM  HN  !O  P  P    	..DHDYDY7x@_q
))eVWaVbc)(	 *   	s   7A 	BABBc                    	 |d   d   d   d   d   }t         j                  j                  ||      }|st        d| d      |j	                  | j                  |||             y# t        $ r}d	|d   d
    d|j                   d|j                  d    d}	t        |t         j                        r|	d|j                   dz  }	|	d| z  }	| j                  j                  |	d|xs |       Y d}~yd}~ww xY w)u_    Конвертирует макрос Word или Excel через atlas_doc разметку r	  r  macroParamsrs   r`   r0  r1  rp  r2  extensionKeyr3  r"  r^   rv  rH  r>  r4  rI  N)r    r.  r>   r   r  r'  rs   r  r]  rp  rx  r3   r^  )
rZ   r   elemr   r6  rG  r  r  rj  r8  s
             r&   _convert_msoviewer_in_atlas_docz3ConfluenceAPIImport._convert_msoviewer_in_atlas_doc6  s+   	Wl3MB6J7SI))--Sy-IF"HST UVVT==c6:VW 	B4=Q_C`Ba b**-((3s7J7J47P6QQRT  &&";";<0F0F/GqII
Bse*$JOO%%%Mc &  	s   A%A( (	C;1B C66C;rf  c                 l   dd l }t        |      }d}t        |      D ]  }| j                  j	                         r y |dz  }|d   dk(  r2|j                  ddddd	
      }	|j                  ddi
      D cg c]&  }d|j                  d   vrd|j                  d   vr|( c}j                         }
g }|
j                  D ]  }|dk(  r	|j                  |        t        |d         D ]{  \  }}|d   d   }|j                  d| ddd| dd
      }|j                  ||   j                  D cg c]  }t        j                  |       c}       |	j                  |       } |
j                  |	       na|d   dk(  r[d }
|d   j                  d      rU|j!                  d|d   d   i
      }
|
s| j                  j"                  j%                  d|d   d    d|d   d           d|d   d   v r=|d   d   d   j                  d      r#|j!                  d|d   d   d   d   d    i
      }
|d   d   d!k(  r\d"}|j!                  d|d   d   i
      }
|
r{|d   d   d#   d$   d    }d%|v r|j'                  d%d      \  }}nat)        t*        j,                        r|j.                  j1                         d&   }n'|j2                  j.                  j1                         d&   }|}|d   d   d#   j                  d'      }|rt5        |j7                  dd$      j9                  |d    t;        j<                  |      j7                  d(d)      t;        j<                  |      j7                  d(d)      *      d+      }|
j                  |j>                         n>|d   d   d,k(  r>d-}|j!                  d|d   d   i
      }
|
r|d   d   d#   d$   d    }|
rd%|v r|j'                  d%d      \  }}nat)        t*        j,                        r|j.                  j1                         d&   }n'|j2                  j.                  j1                         d&   }|}t5        |j7                  dd$      j9                  t;        j<                  |      j7                  d(d)      t;        j<                  |      j7                  d(d)      .      d+      }|
j                  |j>                         	n|d   d   jA                  d/      r|d   d   d#   d0   d    }|}t*        jB                  j                  |1      }d2}|s|d   d   d#   d3   d    }| j                  jD                  jD                  jF                   d4| }t*        jH                  jK                  d'd5|gd6d7| d8gg d9gg d:;      }|rtM        |jN                        jQ                         rt*        jC                  ||| j                  d<=      }|j.                  r|j.                  j                  d>      r|j.                  d>   }|j                  d?      |_)        |j                  d@      r2|d@   d   dAk7  r'| jU                  |d@   | jV                           |_,        ntZ        j\                  |_,        |jX                  |_/        |ja                  d<B       tc        tM        |jN                        dC      5 }|je                  |jg                         d<dDE       d<|_4        |ja                  d<B       d d d        t*        jH                  jK                  d'd7| dFgd6d7| d8gg d9gg dG;      }|rtM        |jN                        jQ                         r~|jj                  } t*        jB                  j                  d'd5| gdHdI|ggJ      }!|!sVt*        jC                  | ||jR                  |jX                  |jX                  | j                  d<K      }!|!ja                  d<B       tc        tM        |jN                        dC      5 }|!je                  |jg                         d<dDE       d<|!_4        |!ja                  d<B       d d d        ntM        | j                  jm                               jo                  dLtq        | jr                  j.                  j1                         d&         dM|dN      }"| j                  ju                  dO| dP| dQ|" dRdS|T       |}t*        jB                  j                  dHdI|gd'd7| dFggdUg;      }!dV}dV}#|d   d   d#   j                  d      r|d   d   d#   d   d    }|d   d   d#   j                  dW      r|d   d   d#   dW   d    }#|jj                  jv                  |jx                  jv                  ||#dX}$|!r|!jz                  |$dY<   nd$|$dY<   t5         |j7                  dd$      j8                  di |$d+      }|
j                  |j>                         n|d   d   dZk(  rd[}%tq        jx                        }&tq        |jj                        }'dD|&|&d\d$d]dDd^}(|d   d   d#   })|)r|)j                  d_      r,t|        j                  |)d_   d    j                               |(d`<   |)j                  da      r|)da   d    }t*        j                  j                  |j                  |1      }*|*s t*        j,                  j                  |b      }*|*r.tq        |*jx                        |(dc<   tq        |*jj                        }'n+| j                  j"                  j%                  dd|d           |)j                  de      r|)de   d    |(df<   |)j                  dg      r|)dg   d    |(dh<   |)j                  di      r|)di   d    |(dj<   |)j                  dk      r d]dddl}+|+j                  |)dk   d          |(dm<   |)j                  dn      r d'dodpdq},|,j                  |)dn   d          |(dr<   |)j                  ds      r,t|        j                  |)ds   d    j                               |(dt<   duj                  dv |)j                         D              }-t5        |%j9                  |&|'t|        j                  |(dDw      |-x      j7                  dd$      d+      }.|
j                  |.j>                         n|d   d   dyk(  r|j                  ddyddz
      }/|j                  d{dd|i
      }0|0j                  |d   d   d#   d|   d           |/j                  |0       |j                  d}d~ddd
      }1|1j                  |d   d   d#   d   d           |/j                  |1       |
j                  |/       nC|d   d   dk(  r| j                  ||
d|       n |d   d   dk(  r| j                  ||
d|       n|d   dk(  r|d   d   dk(  r|d   d   d#   j                  d'      r|d   d   d#   d'   d    }d}|j!                  d|d   d   i
      }
|
ryt5        |j7                  dd$      j9                  |d$j                  |
j                  D cg c]  }tq        |       c}            d+      }|
j                  |j>                         n(| j                  j"                  j%                  d|        |j                  d      s| j                  |d   ||        y c c}w c c}w # 1 sw Y   xY w# 1 sw Y   5xY wc c}w )Nr   r   rR  layoutSectionr  r:  rR  zmceNonEditable selected)contenteditablezdata-layout-sectionr  r  r  columnLayoutzfixed-widthsingler   rN  r	  r  r   zflex-basis: )zdata-column-widthzdata-layout-columnrH  	extensionlocalIdr  u&   Не удалось найти тег u    для r  macroMetadatar  macroIdr  r`   rl  uU  
                    <div
                        class="macros-panel macros-include-block"
                        contenteditable="false"
                        data-id
                        data-macros="include-excerpt"
                        data-param-excerpt="{excerpt_name}"
                        data-param-pageid=""
                        data-param-pagename="{page_name}"
                        data-param-projectkey="{space_key}"
                    >
                        <div class="extension-container" contenteditable="false" data-id data-layout="default">
                            <span aria-label="Макрос Include. " data-id role="img">
                                <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="14" height="14">
                                    <path d="M19.949,5.536,16.465,2.05A6.958,6.958,0,0,0,11.515,0H7A5.006,5.006,0,0,0,2,5V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V10.485A6.951,6.951,0,0,0,19.949,5.536ZM18.535,6.95A4.983,4.983,0,0,1,19.316,8H15a1,1,0,0,1-1-1V2.684a5.01,5.01,0,0,1,1.051.78ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V5A3,3,0,0,1,7,2h4.515c.164,0,.323.032.485.047V7a3,3,0,0,0,3,3h4.953c.015.162.047.32.047.485Z"></path>
                                </svg>
                            </span>
                            <span class="extension-title" data-id>Макрос Include. "Вставить выборку" <span class="excerpt-title" data-id>| Имя = {excerpt_name}</span></span>
                            <span class="macros-actions" data-id>
                                <span class="macros-edit" data-id style="margin-right: 7px;">
                                    <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                        <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                                    </svg>
                                </span>
                                <span class="macros-delete" data-id>
                                    <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                        <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    </svg>
                                </span>
                            </span>
                        </div>
                        <div class="ak-renderer-wrapper" data-id></div>
                    </div>
                    r  r&  rU  r  rs   ro  rp  rq  rD  rw  u  
                    <div
                        class="macros-panel macros-include-page"
                        contenteditable="false"
                        data-macros="include-page"
                        data-param-pageid=""
                        data-param-page-label="{page_label}"
                        data-param-projectkey="{space_key}"
                        data-rendered="true"
                    >
                        <div data-layout="default" class="extension-container" contenteditable="false">
                            <span role="img" aria-label="Макрос Include. ">
                                <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="14" height="14">
                                    <path d="M19.949,5.536,16.465,2.05A6.958,6.958,0,0,0,11.515,0H7A5.006,5.006,0,0,0,2,5V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V10.485A6.951,6.951,0,0,0,19.949,5.536ZM18.535,6.95A4.983,4.983,0,0,1,19.316,8H15a1,1,0,0,1-1-1V2.684a5.01,5.01,0,0,1,1.051.78ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V5A3,3,0,0,1,7,2h4.515c.164,0,.323.032.485.047V7a3,3,0,0,0,3,3h4.953c.015.162.047.32.047.485Z"></path>
                                </svg>
                            </span>
                            <span class="extension-title">Макрос Include. "Вставить страницу" <span class="excerpt-title">| Имя = {page_label}</span></span>
                            <span class="macros-actions">
                                <span class="macros-edit" style="margin-right: 7px;">
                                    <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                        <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                                    </svg>
                                </span>
                                <span class="macros-delete">
                                    <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                        <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    </svg>
                                </span>
                            </span>
                        </div>
                        <div class="ak-renderer-wrapper"></div>
                    </div>
                    rx  r  diagramNamer0  u  
                    <div data-drawio-title="{name}" data-drawio-type="diagram" data-attach-id="{attach_id}" class="drawio-content" contenteditable="false">
                        <div class="header">Диаграмма: "{name}"</div>
                        <div class="content">
                            <img cmf_converted=True src="{img_src}" alt="" data-mce-src="{img_src}" width="{width}" height="{height}">
                        </div>
                    </div>
                    pageIdr   r"  r  r   r  r  r  r  Tr'  rB  r  rQ  rS  r   r(  Fr)  r  )r  rs   r   r   r   r   )rs   r   r  r  r  r3   r   rk  rw  r?  u7   Не найден файл Draw.io диаграммы 'r  r  rp  zERR-0010rI  r   r  r  r  r  rr  u  
                        <div
                            class="macros-panel"
                            contenteditable="false"
                            data-children-docs="{doc_id}"
                            data-id
                            data-macro-parameters='{params}'
                            data-macros="children-docs"
                            original-data-macro-parameters="{original_params}"
                        >
                            <div class="extension-container" data-id data-layout="default">
                                <span aria-label="Макрос " data-id role="img">
                                    <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="20" height="20">
                                        <path d="M22.485,10.975,12,17.267,1.515,10.975A1,1,0,1,0,.486,12.69l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                                        <path d="M22.485,15.543,12,21.834,1.515,15.543A1,1,0,1,0,.486,17.258l11,6.6a1,1,0,0,0,1.03,0l11-6.6a1,1,0,1,0-1.029-1.715Z"></path>
                                        <path d="M12,14.773a2.976,2.976,0,0,1-1.531-.425L.485,8.357a1,1,0,0,1,0-1.714L10.469.652a2.973,2.973,0,0,1,3.062,0l9.984,5.991a1,1,0,0,1,0,1.714l-9.984,5.991A2.976,2.976,0,0,1,12,14.773ZM2.944,7.5,11.5,12.633a.974.974,0,0,0,1,0L21.056,7.5,12.5,2.367a.974.974,0,0,0-1,0h0Z"></path>
                                    </svg>
                                </span>
                                <span class="extension-title" data-id>Макрос "Отображение дочерних"</span>
                                <span class="extension-object-name" data-id>| {doc_name}</span>
                                <span class="macros-actions" data-id>
                                    <span class="macros-edit" data-id style="margin-right: 7px;">
                                        <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                            <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                                        </svg>
                                    </span>
                                    <span class="macros-delete" data-id>
                                        <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                            <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                            <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                            <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        </svg>
                                    </span>
                                </span>
                            </div>
                            <div class="ak-renderer-wrapper" data-fabric-macro="null" data-id data-macro-body=""></div>
                        </div>
                    r;  r<  )r=  r  rQ  r>  rG   r?  r@  r@  r=  r:   rN  rQ  uE   Не удалось обработать тег оглавления rF  r>  rG  rG   rH  rI  rJ  rK  r?  r!  r  r  rM  rO  rP  r@  r/  c              3   6   K   | ]  \  }}| d |d      yw)r"  r`   Nr$   )r   r'  r(  s      r&   r  z9ConfluenceAPIImport._convert_atlas_doc.<locals>.<genexpr>  s#     2k41aaS!G*3F2ks   rL  )r*   rY  r  r7  zpaste-code-macro)r  rZ  rp  r   r  zlanguage-markupr  )r  r  zdata-mce-selected__bodyContentr  rJ  r  bodiedExtensionra  u  
                    <div
                        class="macros-panel macros-excerpt-block"
                        contenteditable="false"
                        data-id
                        data-macros="exceprt"
                        data-param-name="{name}"
                    >
                        <div class="extension-container" contenteditable="false" data-id data-layout="default">
                            <span aria-label="Макрос Include. 'Создать выборку'" data-id role="img">
                                <svg xmlns="http://www.w3.org/2000/svg" id="Outline" viewbox="0 0 24 24" width="14" height="14">
                                    <path d="M19.949,5.536,16.465,2.05A6.958,6.958,0,0,0,11.515,0H7A5.006,5.006,0,0,0,2,5V19a5.006,5.006,0,0,0,5,5H17a5.006,5.006,0,0,0,5-5V10.485A6.951,6.951,0,0,0,19.949,5.536ZM18.535,6.95A4.983,4.983,0,0,1,19.316,8H15a1,1,0,0,1-1-1V2.684a5.01,5.01,0,0,1,1.051.78ZM20,19a3,3,0,0,1-3,3H7a3,3,0,0,1-3-3V5A3,3,0,0,1,7,2h4.515c.164,0,.323.032.485.047V7a3,3,0,0,0,3,3h4.953c.015.162.047.32.047.485Z"></path>
                                </svg>
                            </span>
                            <span class="extension-title" data-id>Макрос Include. 'Создать выборку' <span class="excerpt-title" data-id>| name = {name}</span></span>
                            <span class="macros-actions" data-id>
                                <span class="macros-edit" data-id style="margin-right: 7px;">
                                    <svg _ngcontent-aiw-c17="" viewbox="0 0 24 24" class="ng-star-inserted" style="width: 14px; height: 14px; color: #444444;">
                                        <path _ngcontent-aiw-c17="" fill="#444" d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                                    </svg>
                                </span>
                                <span class="macros-delete" data-id>
                                    <svg viewbox="0 0 18 18" class="ng-star-inserted" style="width: 14px; height: 14px; color: #222222;">
                                        <path fill="#222" d="M16.5 3H12.75V1.5C12.75 1.10218 12.592 0.720644 12.3107 0.43934C12.0294 0.158035 11.6478 0 11.25 0L6.75 0C6.35218 0 5.97064 0.158035 5.68934 0.43934C5.40804 0.720644 5.25 1.10218 5.25 1.5V3H1.5V4.5H3V15.75C3 16.3467 3.23705 16.919 3.65901 17.341C4.08097 17.7629 4.65326 18 5.25 18H12.75C13.3467 18 13.919 17.7629 14.341 17.341C14.7629 16.919 15 16.3467 15 15.75V4.5H16.5V3ZM6.75 1.5H11.25V3H6.75V1.5ZM13.5 15.75C13.5 15.9489 13.421 16.1397 13.2803 16.2803C13.1397 16.421 12.9489 16.5 12.75 16.5H5.25C5.05109 16.5 4.86032 16.421 4.71967 16.2803C4.57902 16.1397 4.5 15.9489 4.5 15.75V4.5H13.5V15.75Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        <path fill="#222" d="M8.25 7.5H6.75V13.5H8.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                        <path fill="#222" d="M11.25 7.5H9.75V13.5H11.25V7.5Z" stroke="none" stroke-width="1" class="ng-star-inserted"></path>
                                    </svg>
                                </span>
                            </span>
                        </div>
                        <div class="ak-renderer-wrapper" contenteditable="true" data-fabric-macro="null" data-id data-macro-body="">{content}</div>
                    </div>
                    rh  u   Не нашли тег для r$   )Hzipfiler   rK  r3   r  r	  r  r	  r  ri  r   r  rU  r>  r  r>   r  rD   r   r   r]  r    r  r  r   r   r   r   r  rs  rt  r  r  r.  r   r   r  r  r   r   r   r  r   rI   r  rd   r  r  r   r   r0  r   r   rs   r   r   r   r  r^  r`   r^   r   r   r   r:  r#   r  r  r0  r   r  rK  )2rZ   r   rf  rF  rG  r   cntr  r  tag_layout_sectionr   ri  r  colr  tag_layout_colr  macro_paramsrH  rr  rj  r|   ry  rs   r  r  r  r  r  r:  r   
drawio_imgfile_name_imgr   r2  r  r  r#  r  rY  r  r7  parent_pager^  r_  original_params_strr  
code_blockr   r`   s2                                                     r&   rK  z&ConfluenceAPIImport._convert_atlas_docN  s    )nY' j	SD((*FAF|.%)\\%SZW]Ib@d\ &e" '+mm7N:Sm&T js'syy/AAhVYV_V_`gVhFh  jjmjmjo  'ADy OOA&' (Y8 >FAsL1E%)\\%X]W^^_U`V\KWX]W^^_I`@b\ &cN #))!AUAU*VA499Q<*VW&--n=>   !34f,=$$Y/))?DM)<T*U)VC..669_`del`mnw`x_y  zB  CG  HO  CP  Q_  C`  Ba  8b  c $Wl(CCWVbHcdsHtHxHx  zC  ID)).Wl0KO0\]f0gho0pq $ sC=04EE# HJ ))?DM)<T*U)VC'+G}\'B='QRT'UV]'^,.3?3E3Ec13M0Iy)#v/@/@A,/,?,?,D,D,Fu,M	,/JJ,F,F,K,K,Me,T	(4I'+G}\'B='Q'U'UV\']' - ( 0 0r : A A1=g1F.2kk).D.L.LTSY.Z.2kk).D.L.LTSY.Z !B !"
 !.!A  ,,Q\\:']>2i?" HF ))?DM)<T*U)VC'+G}\'B='QRT'UV]'^'"l28D8J8J3PQ8R 5	:#-c63D3D#E030C0C0H0H0J50QI03

0J0J0O0O0QRW0XI-9
 - ( 0 0r : A A/3{{:/F/N/NtU[/\.2kk).D.L.LTSY.Z !B !" !.!A  ,,Q\\:']>2;;HE=6}EmTU\]D $I#1155Sy5QF H ""&w-"=m"LX"VW^"_(,(>(>(E(E(Q(Q'RRTU\T]%^
!'!9!9!>!>!'d 3!-v*S7I J 9$
 $E "? " "d6;;&7&>&>&@%+%9%9%.'*+/??04	 &: &F  &55&:P:P:T:TU^:_5;5K5KI5V 28J8N8Nv8V 5$6$:$:4$@(:4(@(HK(W8<8H8H(:4(@(O9&F$5 9:8H8HF$5393D3D 0"KKDK9!%d6;;&7!> >! & 2 2$%FFH15/4 !3 !"
 :> 6 & => *0)A)A)F)F%+VvU^$D%16j\;M$N$=("
 (> *G *J  *d:??.C.J.J.L0:-3-A-A-E-E)/m(D)14(=,& .F ."
 (2171E1E-:/27=7L7L393D3D282C2C37??8< 2F 2&J %/OOO$E%)$z*?%F !F!$.$:$:()5938 %; %&
 BFJ$>$.OOO$E!F !F )-T__-N-N-P(Q(Z(Z * #D$4$4$D$D$I$I$KE$R S + ' -)I !OO55"YZ^Y_ `77>is9+Q!P+5$'	 6  % $I!'!5!5!9!98TSVBWCI6V_U``eSfBgBirwqx ": "zJ"E#FG}\2=AEEgN $Wl ;M J7 ST[ \G}\2=AEEhO!%g|!<]!KH!UV]!^$*KK$5$5)/%*&,D
 "*4..Y(*Y%&Gh&6&6tR&@&G&G&O$&OQ^_A$$Q\\2']>2j@%DN !$CFFI"388}H +0$-&/*.!#+1).F '+7mL&A-&PO&*..u57;zz/RWBXY`BaBgBgBi7jF#34*..v6(7(?(HI*0*<*<*@*@\e*@*fK#..4.?.?.C.C.C.S*7:;>>7J| 4+.{/?/?+@ $ 6 6 > >  BG  HL  MT  HU  GV  @W  !X*..w77Fw7OPW7XF#34*..w7.=g.Fw.OF7O*..w73B73KG3TF<0*..}=5;ybk,lM8E8I8I/ZgJhipJq8rF#45*..v66<JZhy,zM1>1B1B?SYCZ[bCc1dF:.*..y96:jjQZA[\cAdAjAjAl6mF?3*-((2kSbShShSj2k*k',T[[	BJ@D

6`e
@fI\ .9 .^ _f^efjln^o-:	 <H
 $$X%8%89']>26HH!%eEWjp;q!rJ LLWg4FLGELLg|!<]!KG!TU\!]^%%e, LL@QfmLO7QL RELLg|!<]!KO!\]d!ef%%e,$$Z0']>2i?88dC[a8b']>2i?88dC[a8bf!22=0I=$w-P\B]^kBlBpBpqwBx#'=#>}#Mf#UV]#^L  HB ))?DM)<T*U)VC)(*:*:4*D*K*KQ]gigngn  EH  EQ  EQ  pR  ~Apstwpx  pR  hS*K  +T  Vc  d((6..669WX\W]7^_xx	"''T)_d6'RUj	Sj +W`> >H!F !Fx pRs*   8+|4|<|&<|$7|1|!	$|.	)Fr   )r  )r     )   r  )TT)T)NFr  )r   r   r   r   r  r   r    	CmfImportr[   rY   rH   rb  ry   staticmethodr	   r   r}   r   r   r   r   r   r   r   r   r!  r5  r+  rm  r  r  r  r  r  r  r<  rN  rR  r_  ri  rn  rr  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   rA  rh  rk  rq  r  r  r  ry  r  r  r  rU   r  r  r  r  r  r  rR  rQ  r'  rS  rT  rb  rV  rW  r[  r\  r]  r^  r_  r`  rO  rP  rb  rX  rc  rY  rZ  rU  ra  r  r  r  r  r  r.  rB  r[  rc  rh  ru  r|  r  r  r  r  r  r  r  r  ra   r  r  r	  rL  rM  rN  r  r   r  rK  r$   r%   r&   r-   r-   ,   s   E $$= $$f>N>N $$L
2A8d 8 0d 0t 0 0 9UvB3  #Et Etd Et EtNM2w$LH\S/j2hf+P><|AFe"NA-F/-bl\#NJ# 9%v. .
7S3j$L'>J98;#z?B&&E$ E$N   0{zIV	2$h,40$ 40l ' 'R"> >D=R=R ./#b 4 'Dl#\.H`7r_"B@z9x<9|J9XA9FU9nl9\G9RP9d|9|g"R/>b->^ N" N"`H9T]~R9h:9x@9D$JL!F:-x*< "6p(+TC_J\|",Hj!X:39j6%pdL	*4 *X##c" c"D c"J'`R<;|z2# 2#hn`U(r*h	N,`BM3 BMH'R0pS pSRU pSr%   r-   )%r>  r  r  r  rZ  r&  rs  r}  cmf.appr   pathlibr   urllib.parser   r   typingr   r   r	   r
   	itertoolsr   r   cmf.includemodules.confluence.apir   %common.models.cmf_plugin_import_mixinr   bs4r   r  modules.jira.jql.parserr   	dataclassr   r(   r-   r$   r%   r&   <module>r     s      	        !  . . "   0 F   1 ^ ^ ^ O O ORsS RsSr%   