
    LMi                    J   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j>                   G d d             Z ej>                   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                   B   e 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drdefdZdefdZd ZdededefdZd ZdsdZd Zd Zd Zd Zd Zd Z d Z!dsd Z"dtd!Z#d" Z$dsd#Z%d$ Z&d% Z'd& Z(d' Z)d(efd)Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2defd2Z3d3 Z4ed4efd5       Z5d6 Z6dsd7Z7d8 Z8d9efd:Z9ed;        Z:d< Z;dud=Z<d> Z=e>j~                  fd?Z@d@ ZAdAe
fdBZBdC ZCdD ZDdE ZEdF ZFdG ZGdsdHZHdI ZIdJ ZJdK ZKdL ZLdM ZMdN ZNdO ZOdP ZPedsdQ       ZQdR ZRdsdSZSdT ZTdU ZUdV ZVdW ZWdX ZXdY ZYdsdZZZd[ Z[d\ Z\d] Z]d^ Z^d_ Z_d` Z`daefdbZadc Zbdd ZcdvdeedefdfZddg Zedh Zfdi ZgdehfdjZidk ZjdwdlZkdefdmZldxdnZmdsdoZndydpedefdqZoy)zConfluenceAPIImportu;   Класс загрузки объектов через API
confluence
cmf_importc                    || _         || _        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/               | _        d| _        t4        j6                  | _        d	d
d| _        | j=                          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)r.   r/   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_objsdump_page_versionsconfig$IMPORT_CONFLUENCE_DUMP_LAST_PAGE_VERdump_last_page_vertype_model_map_set_fallback_person)selfr.   r/   r@   s       r&   __init__zConfluenceAPIImport.__init__-   s   $$#+ & 2 2 6 6<T 6 U] ""#:;//0099..445%%'!??  'DM01-,-)F	!e #("("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)r/   json_settingsvaluer:   bool_is_default_userr    r!   _fallback_persongsystem_user)rR   rU   s     r&   rQ   z(ConfluenceAPIImport._set_fallback_personP   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queuerM   IMPORT_THREADSthreading_max_forks"IMPORT_CONFLUENCE_DOWNLOAD_THREADSdownload_threading_max_forksr/   get_max_processesmax_processes)rR   r_   r`   s      r&   rD   z,ConfluenceAPIImport._prepare_multiprocessing\   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)rk   fieldsselectedObjects)rk   rX   import_type)r   r\   current_personrj   rk   rR   s    r&   calc_import_settingsz(ConfluenceAPIImport.calc_import_settingse   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   Преобразуем список с настройками в словарьrk   r$   )rr   ss     r&   _normalize_settingsz'ConfluenceAPIImport._normalize_settingsk   s      '//&	1///s   c                     g S )uo    Для импорта из Confluence предварительный просмотр не требуется r$   rp   s    r&   previewzConfluenceAPIImport.previewp   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	operationry   restrictionsuserresultsprivategroup::rV   rk   ext_idLIKE%filterupdatereadonlyrz   Tsave_importparent==r/   !=N)r   r/   access_levelsubjects)_get_restrictions_get_personrE   appendr.   rF   r/   pluginsource_hashr    CmfPersonGroupr:   import_originalperm_policy
is_changedsaveperm_aclloadCmfAccessRulebulk_delete)rR   docdoc_objpermsr   restrictionr~   person
group_infor   _filterr   s               r&   _process_restrictionsz)ConfluenceAPIImport._process_restrictionst   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 (возможно не тот домен): rV   )splitr   r{   lenreplacer.   get_page_by_title	Exceptionr/   r@   warninginfor   )	rR   urlr2   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rk   c                 :   | j                   j                         j                  | d      }| j                   j                         j                  | d      }|j                         r|sy t	        |d      5 } |       D ]H  }| j                   xj
                  dz  c_        |j                  t        j                  |      dz          J 	 d d d        t        j                  ||       | j                   j                  d       t                y # 1 sw Y   FxY w)N.jsonz.json.dirtya+r   
T	only_data)r/   get_download_pathjoinpathexistsopenrH   rz   jsondumpsshutilmover   
cmf_commit)rR   api_funcrk   	overwrite	file_pathfile_path_tmpfrows           r&   _simple_dumpz ConfluenceAPIImport._simple_dump   s    OO557@@D6P	99;DDv[EYZi-& 	0!z 011Q61

3$./0	0 	M9-t,	0 	0s   8A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+)r/   r   r   r   r   r   loads)rR   rk   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   r/   r   r   oslistdirr   r   r   )rR   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                    |sy | j                   j                  j                  d       t        |d      j	                  d       D ]J  }d}|j                  d      rd}|j                  |   t        j                  j                        }	 g d}t        fd|D              rat        j                  d      rxd	}j                  d
      st        j                  |      r)| j                   j                  j                  d        |j                  s_|j                   sSt        j                  j#                  | j$                  j&                        t        j                  j                        }|j                  j                  d      r"|j                   | j$                  j&                  vr*| j                   j                  j                  d        t        j                  j)                  j+                  d      d   j+                  d      d         }	t-        j.                  |	      \  }
}|
s*| j                   j                  j                  d|	        #t0        j2                  j5                  |	      }|j7                  |      }| j                   j8                  j8                  j:                   d|d    }t0        j<                  j?                  || j                   j8                  j8                  j:                        }|sKt0        j=                  | j                   || j                   j8                  j8                  j:                        }||_         ||_!        d|_"        |jG                          tI                M 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/c              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   rV   )r   
obj_ext_idr   )r/   r   r   r   Fu0   Не удалось скачать ссылку r   )'r/   r@   r   r   find_allr   attrsurllibparser   anyresearch
startswithr   schemenetlocurljoinr.   r   unquoter   	mimetypes
guess_typer    r#   _get_filenamer   r   r   CmfImportDownloadr:   r{   rk   
downloadedr   r   r   cmf_rollback)rR   r   r   r   r   key
parsed_url	url_partsemail_patternrk   	mime_typeencoding	file_namer   r   download_jobr   r   s                    @r&   _dump_linkszConfluenceAPIImport._dump_links   s?   ##$UV v.778op 8	nCC||F#))C.C..s3J2n	 AyAA998#> V>>),		-0MOO**225H3NO"))Z->-> ,,..t/B/BCHC!'!6!6s!;J"))44V<!((0C0CC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 %.!$-!*/'!!#k8	nl  n&&..1abeaffhijhk/lmmns:   N'N>ANCN"BN)D(N	O5OO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r=   r4   )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>:  s0      !CDAq$%Y$6!r' #$Q !Cs   
users.jsonr   r   u4   Информация о пользователе ID u    добавлена в дамп)_get_user_info_from_dumpr.   get_user_infoget_user_info_by_keyget_user_info_by_usernamerF   get_user_detailr   itemsr   r   rz   r   r   r/   r@   r   )rR   user_id	dump_pathr=   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   rk   r  r  userNamerj   displayNamefullNameuQ   Не нашли информацию по пользователю в дампе )r   r:   rE   lowerr   )rR   r(  r   r   s       r&   r"  z,ConfluenceAPIImport._get_user_info_from_dumpC  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   zNcontent.version,content.body.view,content.body.editor,content.body.export_viewz,content.body.atlas_doc_formatversionnumber)current_versionr=   last_versions6   Не удалось сдампить документ r   zERR-0038r#   dump
error_codeobj_type
error_typeFensure_asciir   r   contentbodyexport_viewrX   bytype	anonymousrL   w+uE   Не удалось сдампить версии документа ERR-0025    выполнен за .3f    сек.r   indentrD  )rO   r/   r@   r   r   r   r   r   r   time	monotonicr   remover.   rF   get_page_versions
isinstancer   	log_errorrz   r   rH   inc_statr  r:   r   r>  )rR   r*   doc_pathdoc_log_msgnum_ver_msgr   	doc_users
users_filer   t1	info_filedoc_dataversions_file_namer=   page_versionexct2users_fs                     r&   _dump_versionsz"ConfluenceAPIImport._dump_versionsU  s   040G0G20M,Uijn  kB  kB  jC  TD##&OP[}\^_j^k$lm"++M:	&&|4
j#& )! IIaL	) ^^4	; ))+6Ii% (99Q<( "*!2!2?!C!((*		,-($/ A1i??((>>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T .3H)*i& ;!		(AE	:; ^^"##7}D[\^_b[cckl	
 *d# 	HwIIiIG	H 	H) )( (A AV; ;  	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.jsonrK  )	r/   r@   r   r.   get_childrenr   r   r   r>  )r*   rY  rZ  r   children
pages_filer   rR   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!  r7  zrestrictions.jsonu%   Дамп прав документа r   r   r}   r~   r   zrestriction )rK  r   FrP  )r   r   r   r   r   r   rT  r/   r@   r   r.    get_all_restrictions_for_contentrz   r   r   r>  )
r*   rY  rZ  r\  r]  r   restriction_filer   r~   rR   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   rT  r/   r@   r   r   r.   get_all_page_labelsrz   r   r   )r*   rY  rZ  lables_filer   labelrR   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   " (rV   ro  statustrashed   Документ uW    был удален. Пропускаем дамп расширенных данныхrC   r   r{   rL      uO   Повтор дампа расширенных данных документа    , попытка u\   Не удалось сдампить расширенные данные документа rL  r#   r>  r?  r   )r   r:   putr/   r@   r   qsize	is_cancellogr>   WARNINGrangerf  rW  )
rR   
page_queueobjs_that_are_donerm  rr  rx  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t	        |j
                        j                  d      r9|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   .dirty.trashed.metar   r8  r7  rV   r   r{   r}  rL   )rV   r   r{   r}  rL   uC   Дамп расширенных данных документов: z_dump_documents_expand_worker )r  r  targetrk   kwargs   Форк proc=uR   Ошибок дампа расширенных данных документов: )r`   Queueiterdiris_dirr   rk   endswithr   r   r   r   r   r:   rL   r  r/   r@   r   r  r_   Threadr  r   startjoinclearempty)rR   objs_dirmax_workersr  r  r  
page_countdoc_dirr_  r   	info_datadataprocessr  procs                  r&   _dump_documents_expandz*ConfluenceAPIImport._dump_documents_expand  sT   ZZ%%'
!ZZ--/
'') 	%G~~GLL(9(B(BCb(c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    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(  rA|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   }|d   d   }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                         }||_        ||_        ||_        |j.                  s|j1                         sd!|_        ||_        |j7                          t9                 j;                  | d"   d#   d$   ||        |j                  d%      }|j1                         rt<        j?                  |       j                  j@                  jC                  d&|        t        |d'      5 }
jD                   d(}j
                  jG                  | d   |)      D ])  }|
jI                  t        jK                  |      d*z          j                  xjL                  dz  c_&        j                  jO                  d+       j;                  |d"   d,   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| d-<   |j                  d.      }t        |d      5 }
t        j                  ||
d/d!0       d d d        tQ        jR                  ||       t        |      | d1<   |j                  d2      }t        |d      5 }
t        j                  | |
d!3       d d d        | d   dk(  rj                  d       j                  jU                  d4| d5       j                  jO                  d6       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)7Nr{  r   r|  rV   ro  r  Texist_okhistory	createdBylastUpdatedrH  ownedByrI  rJ  r6   r6  attachments.jsonr9  )page_idr=   rK  )moder   _linksdownloadr:  z[?&]version=(\d+)r   .)rk   r   r{   )r   r   rl   )r   r   r/   FrF  viewrX   zcomments.jsonu5   Дамп комментариев документа r   z@,extensions.inlineProperties,extensions.resolution,children.pager  r   commentrG  rL   r!  r   rP  r{   r8  rC  r  u     успешно сдампленr)   )+r   r   mkdirr   r:   r.   get_all_attachmentr   r   r>  r/   r   r   
url_joinerr   r  r  r   r    r  rk   r   r{   r   r   r  import_raw_jsonr   r   r  r   rT  r@   r   r=   get_page_commentsrz   r   rH   rX  r   r   r  )r   rZ  r  doc_dir_tmpr\  ownerr   r_  r   attach_infor   
doc_ext_idattatt_idr  download_linkdownload_urlr9  attachment_pathattachment_path_tmp
att_ext_idr  comments_file_namer=   r  r+  	info_pathr  rR   s                              r&   dump_doczAConfluenceAPIImport._dump_documents_main_worker.<locals>.dump_doc*  sx   s7|nDT1=K''CI7G"++s4yk,@AK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$'M*$=M#'??#=#=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$))+L?!B   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 KKW-g,CK((5Ii& 6!		#qu	56 6{f$%%t%4OO"3K=@` abOO$$Z0w. .\V V2F F6 6sC   -	X%X*D/X75X7X7Y/Y*X47YYYFry  r   z,versionr  r=   r}  r}  currentarchivedr~  r{  r   r|  rV   ro  u   Дамп документа r   r  u+   Повтор дампа документа r  r   u    из 3r  r=  r5  rL  r#   r>  r?  )r   r:   r  r.   get_page_by_idr=   r/   r  r@   r   r  r  r>   r  rH   r   rW  )rR   r  bulk_page_queuer  r  r  page_idsr  r  r  r  rc  s   ``          r&   _dump_documents_main_workerz/ConfluenceAPIImport._dump_documents_main_worker)  s   r	1h 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.   Ошибок дампа документов: )r`   r  r  r_   r  r  r   r  r/   r@   r   r  r  r  r:   )	rR   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}|d   }| j                   }d}| 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                  d	|d
d       | j                  j                  j                  d| d|        t        j                         }
|| j#                  |||      z  }t        j                         |
z
  }| j                  j                  j                  d| d|d
d       t        j                         }
|| j%                  ||      z  }t        j                         |
z
  }| j                  j                  j                  d|d
d       | j                  j'                         r%| j                  j                  j)                  d       |S )Nr   r  2   uU   Добавление страниц в очередь дампа пачками по u    страницr  r   r  uY   Добавление страниц в очередь дампа выполнено за rN  rO  uU   Дамп основных данных документов пространства r   rM  uC   Дамп расширенных данных выполнен за    Импорт прерван)rd   r`   r  r/   r@   r   rR  rS  r  r  r   rk   r  r   r   r   r  r  r  r  r   )rR   r   r  r  	space_keyr  max_bulkr  r  	temp_listr^  r  r  rd  s                 r&   _dump_documentsz#ConfluenceAPIImport._dump_documents  s   %L	77****,##&{  }E  |F  FU  %V  	W
	^^'') 	G>>#3w||+<+E+Eh+O!OJll((-a0GS\*9~)##I.		 	*D!^^"##&  AC  DG  @H  HP  %Q  	R 	##&{  }F  |G  GI  JT  IU  %V  	W^^$++Ho{SS^^"##&{  }F  |G  G^  _a  be  ^f  fn  %o  	p
 ^^$--hDD^^"##&ijlmpiqqy$z{??$$&OO""**+HIr%   c                 l   i }| j                   j                  |d         }	 | j                   j                  rdddddddd	d
ddddd}|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!<   
 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!<     t        |d+    d,      }|j                         rt        j                  |       t        |d-      5 }|j                         D cg c]  }| c}|d.}t         j#                  ||       d d d        y #  | j                  j                  d&d'd(d)*        xY wc c}w # 1 sw Y   y xY w)/Nr  	EDITSPACE
REMOVEPAGEEDITBLOG
REMOVEBLOGCOMMENTREMOVECOMMENTCREATEATTACHMENTREMOVEATTACHMENT	VIEWSPACEREMOVEOWNCONTENTSETPAGEPERMISSIONSSETSPACEPERMISSIONSEXPORTSPACE))r6   create)r6   delete)blogpostr  )r  r  )r  r  )r  r  )
attachmentr  )r  r  )r   ry   )r   r  )r   restrict_content)r   
administer)r   exportr|   
targetTypeF)
permissionr   groupsrJ  r   r~   r   r   r4   r   r   r  rV   rk   )rV   rk   anonymousAccessTrJ  spacePermissionsrI  r.  	groupNameu>   Не удалось сдампить права доступаzERR-0056
CmfProjectr>  )rA  rB  r{   /permissions.jsonr   )	convertedoriginal)r.   get_space_permissionsrF   r:   
setdefaultr,  r/   r   r   rW  r   r   r   rT  r   valuesr   r>  )rR   r   permissions_dictpermissionsmapping_typer  r|   type_permr~   permission_typepermission_filer   r   permissions_datas                  r&   _dump_permissionsz%ConfluenceAPIImport._dump_permissions!  sJ   oo;;E%LIN	$$ )4(4,6,8+4+:.@.@'2);3G-B)6   #. 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@ (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: %-0ABC!!#IIo&/4( 	+A)9)@)@)BCAaC'  II&*	+ 	+	OO%%P%!	 &   D	+ 	+s=   D*J  BJ  .J  4	J  ?J*	J%J* "J"%J**J3c           	      b   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||fS |d}nd}t        |d      5 }|j%                  |       ddd       |j                  |      }|j                  | d      }|j                  | d      }|
dk(  r| j&                  j(                  j+                  d|	 d| d| d       |j                         rt-        j.                  ||       ||fS |j                         rt-        j.                  ||       ||fS |j                         rt-        j.                  ||       ||fS |j                         rt-        j.                  ||       ||fS |j1                  d       ||fS c c}w c c}w # 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   YxY w)u  
        Получает минимальные данные контента с информацией о последнем изменении
        и зависимыми объектами(комментарии, вложения).
        Вычисляет хеш данных и сравнивает его с хешем предыдущей проверки,
        если хеши отличаются, то помечает каталог контента .dirty для повторного дампа
        FrV   r   rI  r}  r6   r~  rk  r  r      )limitr=   rk  r  r  	ancestorsr7   Nz.hashr7  T)rD  	sort_keyszutf-8rK  r  r  u   Контент  '' (uQ   ) удален. Он не будет сдамплен и импортированr  )r   r.   r  r  rF   _folder_lock_folder_setaddr   r   r   ry   r   r   hashlibmd5encode	hexdigestrz   r/   r@   r   r   r   r  )rR   rE  content_hash_dirr  comment_expandis_new
is_updated
content_idcontent_titlecontent_typecontent_statusr  commentsr  r6  ancestorcurrent_hash	hash_filer   content_jsonnew_hashr  doc_tmp_dirdoc_trashed_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#:%%FJ)T" 	aGGH	 ##J/'':,f(=>"++zl(,CDY& OO""**!,r-J< PT U
 !!#K9 z!! !G_5 z!! ~~G[1 z!! !'')O[9 z!! !!4!0z!!] A A( (	 	s0   	L 	L!L
<L;L$
L	L!$L.c                    |j                  d      }|j                  d       d}| d}| d}	t        d      5  d	d	d	d	d
}
	 | j                  5  | j                  }| xj                  |z  c_        d d d        | j
                  j                  |||d      }|snt|D ]n  }|d   dvrt        |d         }|d   }|
dxx   dz  cc<   	 | j                  ||||	      \  }}|
dxx   t        |      z  cc<   |
dxx   t        |      z  cc<   p |j                  |
       d d d        y # 1 sw Y   xY w# t        $ r?}| j                  j                  d| 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)Nr6   Tr  ancestors,history.lastUpdatedz%,children.comment,children.attachmentz2,extensions.inlineProperties,extensions.resolutionFry  r   r  allnewupdatedr  )r  r  r=   r}  r}  r  rV   r   r-  r   r.  r/  uB   Не удалось проверить хеш документа "r|  ). rL  r#   r>  r?  r  )r   r  r   _start_lock_startr.   get_all_pages_from_spacer   r)  intr   r/   rW  r  )rR   r  r  hash_dirhash_stats_queuer  r  r=   page_expandr  
hash_statsr  r   r6   r  
page_titler  r  rc  s                      r&   _check_page_hashz$ConfluenceAPIImport._check_page_hash  s   #,,V4-0 EF"8#UV51 +	-	J %% ) KKEKK5(K) @@U%TY A  ! 2DH~-OO !$t*oG!%gJu%*%2-1-E-E ,$*	.*
 #5)S[8)"9-Z@-!2 F   ,W+	- +	-) )6 % 211`ak`llopwoxx{|  |A  B'1MV\ 2  #8,1,,2I+	- +	-sO   F"D,3AFAD8F,D5	1F8	F 5E;6F;F  FFc                    |j                  d      }|j                  d       t        d      5  ddddd}	 |j                         }||j	                  |       nw	 | j
                  j                  |dd	
      }|d   dvrL|dxx   dz  cc<   | 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)Nr6   Tr  Fry  r   r,  r+  r  r  r}  r  r-  r   r.  r/  u9   Не удалось проверить хеш папки r5  rL  r5   r>  r?  r  )r   r  r   r:   r  r.   r  r)  r4  r   r/   rW  )rR   r  r5  folder_queuer6  r  r8  	folder_idr7   r  r  rc  s               r&   _check_folder_hashz&ConfluenceAPIImport._check_folder_hash  s   #,,V4-51 )	-	J (,,.	$ $$Y/.!__;;!>$ < F h'/QQ u%*%)-)A)A( *&FJ
 u%V4%y)S_<)/ B   ,S)	- )	-@ ! .OO--ST]S^^`ad`ef#-!,#)	 .  x(A-((.A)	- )	-sB   -D6%C.D6AC.D6.	D372D.)D6.D33D66D?c                 d   | 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}|j7                         sA|j9                         }||d   z  }||d   z  }||d   z  }||d   z  }|j7                         sA| j&                  j(                  j+                  d|dd| d| d| d	       | j&                  j(                  j+                  d|        |S )Nr   r  r{   z/hashTr  z_check_page_hash r   )r  r  r5  r6  r  r  z_check_folder_hash )r  r5  r<  r6  u   Запущен r  r-  r.  r/  uC   Проверка хеша контента выполнена за rN  u8    сек. (всего/новых/обновленных: r   ro  u(   Ошибок хеша контента: )r`   r  r2  r_   Lockr1  rJ   r  r  rd   r   r  rR  rS  r  r  r:  r   r  r/   r@   r   r  r.   rF   r  r>  r  r:   )rR   r   r  	dump_datar6  r  r  r5  r^  r  r  r  r<  r7   threadsthreadrd  r  obj_allobj_newobj_updatedr8  s                         r&   _check_hashzConfluenceAPIImport._check_hashF  sE     ::++->>..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 "  ^^""((*)--/Jj**Fz%((Gz%((G:i00K #((* 	##&ijlmpiq rVV]U^^_`g_hhijuivvw%y 	z 	##&Nvh$WXr%   c                    | j                   j                  d       g }t               }|j                  d      }|j	                         rOt        |d      5 }t        j                  |      }|D ch c]  }t        || j                            }}ddd       t               }t        j                  |      D ]  }	|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   LxY w# 1 sw Y   xY w# 1 sw Y   jxY w)us    Собирает пользователей из файла users.json в каталогах документов u=   Сбор пользователей из документовr!  r7  NrI  rJ  rK  r   FrP  )r/   r  rJ   r   r   r   r   r   r   rE   r   r   r  r   unlinkr>  list
differencer,  r   )rR   project_dirr  current_userscurrent_user_idsr]  r   unew_user_idsr*   r+  r~   
diff_usersr(  s                 r&   _collect_usersz"ConfluenceAPIImport._collect_users  s   [\ 5 )),7
j#& R! $		!CP#QaC$--(8$9#Q #QR
 ujj* 
	$F!**6<@J  "*% 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=   G/GG(AG'-G''#G3GG$'G0	3G<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   
/info.jsonr   )r/   r   r   r   r   r   )rR   project_keyrL  r   projects        r&   _get_projectz ConfluenceAPIImport._get_project  s]    oo779BB:N[M;-z:DA 	QiilG	 	 	s   AA&c              #     K   | j                   j                         j                  d      }t        j	                  |      D ]  }|j                  d      r|j                  d      r,| j                   j                  j                  d| d|        Rt        | d| dd      5 }t        j                  |      }d d d          y # 1 sw Y   xY ww)NrT  r  r  u(   Пропускается каталог r   rU  r   )r/   r   r   r   r   r  r@   r   r   r   r   )rR   rL  rV  r   rW  s        r&   _get_projectsz!ConfluenceAPIImport._get_projects  s     oo779BB:N::k2 	K##H-##G,&&..1YZeYffghsgt/uvQ{m:>E '))A,'M	' 's   B#C%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   r  K   | d   sy | d   s}j                  t        |      j                  d      | d         }|s#j                  j	                  d|  ddd	       y |d   d
   d   D ]  }| d   j                  |d   dg d        | d   D ]   }|d   s	 ||      E d {    |d    " y 7 w)N	isCheckedrk  	documentsrV   u'   Документ не загружен zERR-0015r#   r>  r?  r6   r   TrV   r^  rk  )_get_documentr   r   r/   rW  r   )r\  r  doc_dumpchildrj  rR   s       r&   rj  z=ConfluenceAPIImport._load_selected_objs.<locals>.get_children  s     K(J'--d7m.D.D[.QS[\`SabOO--0WX`Wa.b;EP]jp . r%j1&9)D hEZ(//uT{QUce0fgh!*- &%+E7;;;+%&;s   BB7B7&B5'B7import_settingsrm   rX   r   r^  Nrk  T
root_pagesr`  archived_pagesr   r  rV   r{   rT  uc   Не удалось вычислить выбранные документы для проекта u4   , скорее всего он не сдамплен)r   r   ru   r/   rW   rZ  r   rJ   rX  r  r:   r   r   r@   r   rK   )rR   rr   rootsetting_objselected_spacesrW  r*   resultr   r\  rj  s   `         @r&   _load_selected_objsz'ConfluenceAPIImport._load_selected_objs  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   )r/   r   r   r   r   r   r:   )rR   rl  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   rV   rn  rK  FrC  )cmf.utilrr  r.   get_applinksshort_str_encr/   r   r   r   r   r>  )rR   rr  ro  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         }|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                  d       | j                  D ](  }t        |d   d         }| j
                  j                  |      }	 | j                  j                         r y | j                  xj                  dz  c_        |j                  |      }|j                  d      }	d }
d }|j                         rLt        |	d      5 }t         j#                  |      }|j%                  d      }
|j%                  d      }d d 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.                  j1                  d|d           |j                         s:t        |j                  | d            |d<   t2        j5                  |d   d       g |d<   | j
                  j7                  |d         D ]  }|d   j9                  |d           |d   st;        d      g |d<   | j
                  j=                  |d         D ]  }|d   j9                  |d           |j                         st?        j@                  |d   |       t        |      |d<   t        |	d      5 }|
|d<   | j,                  |d<   t         jC                  ||       d d d        | j                  j.                  j1                  d       | jE                  |       tG        |d    d      }|j                  d       | j                  j.                  j1                  d|        t        tI        jJ                         jM                         jO                               }| jQ                  |||
      }|s0||d<   t        |	d      5 }t         jC                  ||       d d d        | xjR                  | jU                  ||      z  c_)        | jW                  ||       | j                  jY                  d        t[                + y c c}w c c}w # 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   xY w#  t]                | j                  j_                  d!| d"d#d$%       Y xY w)&Nrd  rm   rX   r   r^  Trk  rV   )r   rV   rT  r  r   r  r   r8  r7  	dump_daterO   r   u&   Дампим пространство rk   r  r{   re  uJ   Пустой проект, возможно нет прав доступаrf  rK  u=   Дампим права доступа (Разрешения)
/documentsuD   Проверка хеша контента пространства )rA  r   u1   Ошибка дампа пространства zERR-0026r  r>  r?  )0ru   r/   rW   ri  r   r.   get_all_spacesr   r   r  r   	get_spacer  rH   r   r   r   r   r:   rM   rN   rL   rO   r@   r   r   makedirsget_root_pages_from_spacer   CmfError get_all_pages_from_space_archiver   r   r>  r	  r   r   now
astimezonedaterG  r<   r  rR  r   r   r  rW  )rR   rr   rg  rh  r   projects_dirr  r   rL  r_  last_dump_dateprev_dump_last_page_verr   current_dumpnew_dump_last_page_verr   archived_docr  new_dump_datehash_errorss                       r&   _dump_spacesz ConfluenceAPIImport._dump_spaces  s0   ++DOO,I,IJ[,\])*73A6K ?CJ?OlS^_jSklT*%5!6!!;MQ__MkMkMm#ncCs4y$A#nD 88:CCJOD)// a	kKK.u56IOO--i8E]k??,,.11Q61*33I>'00=	!%*.'%%'i- Y'+yy|)5)9)9+)F2>2B2BCW2X/Y *.&??K/73r9 & K Kr Q#:V=h=h#h /3D+-3-X-X**@*`D[*`_`' &&++.TUZ[aUbTc,de"))+$'(=(=6>R(S$TE&MKKfK=&(l#??DDU5\R :C,'..s4y9:\*"#opp*,&'$(OO$T$TUZ[`Ua$b GL*+22<3EFG #))+KKf{; #K 0f)T* (a)7E+&262I2IE./IIeQ'(
 &&++,kl&&u-5=/ <=- &&++.rs|r},~ #HLLN$=$=$?$D$D$F G"..uh..Y #)6E+&i. ,!		%+, 4#7#7x#HH ##K:$$t$4{a	k  m $o$Y Yb( (&, ,k)),]^c]d*e5?,ci * ksp   
TT
TU5A!U8TF3U+T,,C)UT9,A%UT)	$U,T6	1U9U	>U.U6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  rV   rk   r   r   r   r8  r   rK  r   r   )r/   r   r   r   r  r.   get_all_groupsrF   r   r   rH   r   r   r>  get_group_membersrE   )rR   
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                         }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 )Nd   u   Свободно места: r   u$   Скачаем данные из API
load_usersTu'   Дампим пользователейr   uA   Не дампим пользователей из-за опцийr  r   r   r~   )rX   )r/   r   r   
disk_usager@   r   rW   rX   r:   r   r.   get_all_usersr  r>   r  rx  r  r   rX  )rR   download_pathtotalusedfreefree_percentuser_cntr   s           r&   download_dataz!ConfluenceAPIImport.download_data  sB   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       |j7                  |       d d d        y # t0        $ r?}t3                | j                  j5                  |
 d| d| d| ddd|       Y d }~_d }~ww xY w# 1 sw Y   y xY w) Nr   Fry  TDONE)rk   r   r{   r   r  )rV   rl   r   r   u   [Страница ID: z] r  '
extensionsfileSizei    (z.2fz MB)u   Скачивание : ')timeoutu	   Файл u    сохранен в 'r  u"   Ошибка скачивания z'. zERR-0027r  r>  )r@  rA  rB  ext_href)r   r/   r  r:   r    r  r   rk   r   r{   r   r   r   r  r@   r   r.   download_filerM   IMPORT_DOWNLOAD_TIMEOUTr  r   r   rX  r   r  rW  r  )rR   download_queue
done_queuer  download_job_iddownload_objr  file_urlr   ext_id_splitpage_id_msg	file_sizefile_size_mbrc  s                 r&   _download_file_workerz)ConfluenceAPIImport._download_file_worker  sn   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	#^ !  NOO--&-'I)TWX`Waadehdij#-!4#)!) .  _9	# 9	#s7   D4IBG6I6	H>?5H94I9H>>I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)rk   r   all_attachments.ziprT  r   r  r   r{   r   r   r   u3   Нет вложений для скачиванияu'   Скачивание вложений: r  )r  r  r  u    Запустили задачу --r   rl   r  r  uC   Закончили скачивание файлов, ошибок ) r`   r  r/   load_fieldsr   r   r   r   ri  r   r  r    r  countr   r@   r   r  rd   r_   r  r  r  slistr  rV   r   r  r  r  r   r:   )rR   r  r  r<   main_filterprojects_pathattachment_countfiltersr   r  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   rR   r{   comments_file_pathr   r   s        r&   _get_commentsz!ConfluenceAPIImport._get_commentsA  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_restrictionsG  sR      $v%78$d+ 	&q &jjo%&	& 	& 	&r  c                 b      j                  d         D ]  }d fd	 |        y )Nr{   c                 `   	 | 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 #  tC                j                   jE                  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   rV   r   r   rl   r   r   r/   **r  r  rI  rJ  r  createdDater  rH  whenrF  r  rX   editorr   r  r  locationinlineT
resolutionresolvedclosedr   rk  u7   Ошибка обработки комментария r   r   zERR-0028r@  r   )#r/   r@   r   rX  r   r   r    
CmfCommentr:   r   r  r   rE   	cmf_ownerr\   anonymous_usercmf_created_at
cmf_authorcmf_modified_bycmf_modified_atr   _convert_mentions_convert_linksr  rF  rk  r   r   r  tree_parentr  r}  r   r  rW  )r  r  r   cmf_commentr  r  	view_soupeditor_soupxrc  r  r   r   rR   s             r&   r  z9ConfluenceAPIImport._process_obj_comments.<locals>.createO  sq   >Ex(G3..66  :D  EL  DM  8N  Ov OO,,YDu !% 6 6 = = I IJ"WUY]O\F"("3"3"7"7vO`Na"7"bK";+F+Fn OO,,YDm '&,&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]S NOO--0ghklshtguuwx  xA  /B;E6 . S S OO,,YDDOO,,YDs8   0N9 A"N9 IN9 N40A'N9 4N9 93O.,P P-)r  r   )r  )rR   r   r   r  r  s   ``` @r&   _process_obj_commentsz)ConfluenceAPIImport._process_obj_commentsM  s;    ))#f+6 A	$G?E ?E@ 7#CA	$r%   c              #      K   t        |      j                  d      }t        j                  |      D ]  }|dk(  r	||j                  |      d   y w)Nr6  r  )r  r   )r   r   r   r   )rR   obj_pathattachments_pathr  s       r&   _get_obj_attachmentsz(ConfluenceAPIImport._get_obj_attachments  s[     >22=A$45 	I11&-66yA 	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  r9  r:  r  r  1r   r   rV   )r  	fullmatchr   r   r   r   r   r   r   r  r   parse_qsqueryr:   )r  r  
file_matchfile_idfile_versionr   attach_info_listattachr9  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} fd} j                  d         D ]0  }| ||d   |d         z  } j                  j                  dd       2 |S )Nr   c                 j   d}	 j                  | 
d         }|r|d   nd}|r|d   n| }t        j                  j                  |g d      }|s5t        j                  |j                  d	      }|j                  d
       |j                  r|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|_        |j                  d
       |r|d   d   }	|j"                  |	k(  sJ d d d        |S 	 |S # 1 sw Y   |S xY w# t$        $ r; j                  j'                  d d dj"                   d	 d	d       d}Y |S t(        $ r5 t+                j                  j'                  d d dd       d}Y |S w xY w# |c cY S xY w)Nr   r{   rV   r  r   )r   r   url_preview_imgurl_preview)rk   r   rl   Trk   r   r/   r   r   r9  r  rH  rI  rJ  rbFsmart_backup
mark_dirtyr  r  u   Размер файла 'r  u@   ) не соответствует размеру из меты: z	 bytes / z byteszERR-0029r   r   u;   Не удалось обработать вложение 'ro  )r  r    CmfAttachmentr:   r/   r   r   r  r   rE   r  r\   r  r  r   upload_filery   st_sizeAssertionErrorrW  r   r  )r  r   errorattachment_metaattachment_idattachment_namer  attachment_versionr   file_size_metar   r   rR   s             r&   _process_attachmentzIConfluenceAPIImport._process_obj_attachments.<locals>._process_attachment  s    E?"&"B"B9cRXk"Z9H 5b>M/'":S\#1155(! 6 	
 "!'!5!5,%#'??(,	 "6 "J OOO5--&?+>+>y+I-<Y-G*4F4J4J64R
1.2248 24 8 @K O484D4DEWX\E]^b^k^kEl4mJ1454D4DJ1/9/D/D
,i. 
H!"..FFH)-', / 
 6:
2"D9*-<\-J:-VN#-#5#5#GG#G
H8 S .R 9
H8 # " ))//@M? S55?5G5G4H	R`Qaagi	 *     ))QRaQbbefsettuv * 
  sP   D2F( 7AFF( F% F( %F( (A H((H+ +9H($H+ 'H((H+ +H2r{   r  r   r  r  )r  r/   rX  )rR   r   r   r  r  attachment_datas   ```   r&   _process_obj_attachmentsz,ConfluenceAPIImport._process_obj_attachments  sp    D	L  $88VE 	@O),, F OO$$\;?	@ r%   c                 .   t         j                  j                  | _        |d   d   d   }|d   d   d   }|s|s|S |s|rd}	 t	        |d      }t	        |d      }| j
                  j                  r\	 | j                  j                  j                  d       t        j                  |d   d   d         }| j                  ||d	   ||
       | j!                  |||       | j#                  ||       | j%                  |||       | j'                  |||       | j)                  ||||       | j+                  |||       | j-                  |||       | j/                  |||       | j1                  |||       | j3                  |||       | j5                  |||       | j7                  ||       | j9                  ||       | j;                  ||       | j=                  |||       | j?                  |||       | jA                  ||       | jC                  ||       | jE                  ||||       djG                  |jH                  jJ                  D 
cg c]  }
tM        |
       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)NrF  r  rX   r  z<p></p>r   uC   Конвертация текста из atlassian разметкиatlas_doc_formatrE  )soupsubobjuT   Не удалось конвертировать разметку страницы "r   r{  r9      (версия r:  ro  zERR-0031r  r  r  uA   Ошибка обработки текста документа. r5  zERR-0039)'r    r#   get_data_iddata_idr   r.   rF   r/   r@   r   r   r   _convert_atlas_docr   r:   rW  r  _convert_status_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_inline_comments_convert_excerpt_convert_detailsr  rF  rk  r   )rR   obj_datar   r  r  r  r  r  	atlas_rawexception_textr  r   rc  s                r&   _convert_doc_textz%ConfluenceAPIImport._convert_doc_text  sO   ))55'0&!(+G4K D0	%dF3I'7K$$^OO**//2uw $

8F+;<N+OPW+X YI++C91EI^d+e ""3	;?  K8""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9!!)[9!!#y+f!M77INN,C,CDqCFDED S ! ^(}  G  K  K  LS  T  ~U  UW  'XN||I.&OHY<OPX<Y;ZZ[*\\OO--nY\-]	^@ E 	DOO%%STWSXXZ[_Z`a% &   	sK   .K 2AI2 F
K K)K 2AKK KK 	L#&LL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   )rR   r{   versions_file_pathr   r   s        r&   _get_versionsz!ConfluenceAPIImport._get_versionsH  sg     !TF."9:$$&($/ *1 *C**S/)** * s   +A#A
A#A A#r`  c                      fd}t         j                  j                  ddgd      D ]  }|j                  d        t	                d }t         j                  d               D ]5  \  }}|t        j                  k(  r n ||      }|s'|j                  s4|}7 t         j                  d	dd
      }	|	j                  d       |_        j                  rj                  d       t	                y )Nc           	         d }	 j                   j                  j                  dd    dd    d| d           j                   j                  j                  j                   dd    d| d    }t
        j                  j                  |d	g
      }|r*|j                  s	 j                   j                  dd       y |s"t
        j                  |j                         }| j                  d      |_
        | j                  d      |_        | j                  d      rB| d   d   dk7  r7j                  | d   j                           }||_        ||_        ||_        n?t"        j$                  |_        t"        j$                  |_        t"        j$                  |_        | j                  d      |_        | j                  d      |_        | j                  d      |_        t-        |j*                  j.                  j1                  d      d d       |_        |j2                  |_        j6                  j9                  d      |_        | j                  di       }t=        |j                  d      dk(        |_        jA                  ||      |_!        d|_"        | |_#        |jI                  d       tK                j                   j                  dd       |S # tL        $ rO tO                j                   jQ                  dd    dd    d|  d        xjR                  d!z  c_)        Y uw xY w# j                   j                  dd       w xY w)"Nu7   Обрабатываем версию страницы r   r  rV   z): version r:  r   r  r  r  r9  r  r  r  rH  rI  rJ  message%Y%m%d%H%M%S%fCLOSEDstatus_typerE  r}  r  r  Tr   u@   Ошибка обработки истории страницы z): zERR-0033r	  r   )*r/   r@   r   r   r   r    CmfDocumentHistoryr:   r   rX  r  r  r   rE   r  r  r  r\   r  reasonofficial_numberofficial_dater4  rX   strftimecmf_versiondoc_versionworkflowget_default_statusr}  rY   cur_workflowr4  r   has_publishedr  r   r   r   r  rW  r<   )version_datacmf_document_historyr   r   version_contentr`  r   rR   s        r&   create_versionz=ConfluenceAPIImport._process_versions.<locals>.create_versionQ  s   #' <A&&++MhW^N_M``bcklpcqbr s  ,X 679 !OO2299EEFbRVHXXYZfgoZpYqr'-'@'@'D'DF\`[a'D'b$'0D0T0Tf ((K@c ,+1+D+D&%#'?? ,E ,( 7C6F6Fv6N$37C7G7G7O$4##D)l4.@.HK.W!--l4.@.OPF5;(26<(3;A(8565E5E(2676F6F(3;<;K;K(8.:.>.>y.I$+7C7G7G7Q$45A5E5Ef5M$2367K7Y7Y7_7_7h7hiy7z{~|~7  4A$03G3S3S$0.5.>.>.Q.Q^f.Q.g$+"."2"29b"A489L9LX9VZc9c4d$1,0,B,B?T[J^ -C -`$) 6:$27C$4$))d); ((K@''  %)),lmuv}m~l  @B  CK  LP  CQ  BR  RU  Vb  Uc  +d*4.5 * 7 1$% ((K@s,   BK# HK# #AL;8L> :L;;L> >Mr   =T)r   include_deletedTEXKOM_db_deleter{   )rK  Fr  )r   rI  cmf_deletedr   r   )r    r@  rJ  r  r   	enumerater7  rM   $IMPORT_CONFLUENCE_PROC_LAST_PAGE_VERrI  r   cur_workflow_versionr   )
rR   r`  r   rN  dhr;  version_countr9  document_historyfake_historys
   ```       r&   _process_versionsz%ConfluenceAPIImport._process_versionsP  s   A	(H ++00c7+  1 
 	-B IItI,		-
 	&/0B0B8FCS0T&U 	3"M7 K KK-7C$4$A$A"2	3 00eaeln0od+'6$LLTL*r%   c                 ~   | j                  |d      }|j                         sy t        |d      5 }t        j	                  |      }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        |cd d d        S # 1 sw Y   sxY w# 1 sw Y    xY w# 1 sw Y   y xY w)	Nr8  r7  labelsrt  ri  r6   )r   sizerk  )r   r   r   r   r   r   r   r   )r  r*   doc_filer   reslabels_filef2	label_strrl  f3r   s              r&   ra  z!ConfluenceAPIImport._get_document  s:   ##FK8 (C  	A))A,CCM!**6=AK!!#+s+ Dr%' D	H,,TZZ	-BCDD !))&,?J  "*c* Wb IIbME'-5#e*/U&VC
OW 	 	
D D
W W	 	s<   A	D39/D)6D3)D'	D3D$	 D3'D0	,D33D<c                 p    t        |      j                  d      j                         }t        d |      }|S )Nr_  c                 ^    | j                         xr | j                  j                  d       S )Nr  )r  rk   r  )	path_objss    r&   r   z3ConfluenceAPIImport._get_doc_dirs.<locals>.<lambda>  s'    i..0q9P9PQp9q5q r%   )r   r   r  r   )rR   
space_pathrg  doc_dirss       r&   _get_doc_dirsz!ConfluenceAPIImport._get_doc_dirs  s7    $--k:BBD	q

 r%   c              #      K   t        | d      }d}| j                  |      D ]8  }|dz  }||k  r|||z   dz
  kD  r y | j                  ||j                         : y w)Nr{  r   r   )r   rj  ra  rk   )rR   rL  offsetr  r  enum_dirr*   s          r&   _get_documentsz"ConfluenceAPIImport._get_documents  su     +j12((5 	;FMH& &5.1,,$$Wfkk::	;s   AA 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=   )sumrj  )rR   rh  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rq  r$   rr  s     r&   r   zCConfluenceAPIImport._get_offsets_for_execute_doc.<locals>.<genexpr>  s     LaLrs  )rj  r  rt  r7  r   r'  )
rR   rh  r  offsetscurrent_offset	obj_countrm  r  rX  rl  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        $ r=}	t#                | j                  j%                  d d|	 dd       |dz  }Y d }	~	ed }	~	ww xY w# 1 sw Y   [xY w# 1 sw Y   y xY w)Nr   Fry  r  r{  r   r|  rV   ro  r   r3  r4  u3   Обработка версий документа r5  r   )r   rG  rV  r   r  r  u4   Документ не найден в системеuQ   Документ изменен пользователем, пропускаем u@   Ошибка обработки версий документа zERR-0084r#   r@  rA  r   )r   cmfutildisable_aclr:   r/   r  rM   rU  r@   r   r   r   r    r#   r   r   r[  r  rW  r  )
rR   	obj_queuer  r  r   rZ  r[  r   r   rc  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 !   NOO--Z[fZggijmino#-!. . 
 aKF I-	# -	# -	# -	#sM   G5GDF
&G9G
	G3G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)
        rV   r   r   r   r   r   u   Не найден тег 'r  ro  zERR-0017r  )r/   r   r   r    CmfTagr:   r   rW  )rR   content_objr]  tagsrw  label_id
tag_ext_idr   s           r&   _get_obj_tagsz!ConfluenceAPIImport._get_obj_tags%  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:rV   r   r  r   T)r   	log_levelr   r/   r   r  webuiu4    импортирован из Confluence: <a href="z" target="_blank">z</a>"r   N)r/   r   r   r    r  r:   r.   r  r   ext_urlverbose_namer   r   )rR   r  rE  comment_ext_idr  r   s         r&   _add_external_link_commentz.ConfluenceAPIImport._add_external_link_comment?  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n| 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                | j                  j)                  dd       |j{                  |       d d d        d d d        y # tn        $ rN tq                | j                  js                  d1| d2d3|
4       | j                  ju                          |d5z  }Y tv        $ rQ tq                | j                  js                  d1| d6| d7d3|
4       | j                  ju                          |d5z  }Y tx        $ rN tq                | j                  js                  d1| d3|
4       | j                  ju                          |d5z  }Y Cw 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)8Nr   Fry  Tr  rV   r   rI  r#   r  r  ro  r  r   u   Обработка is_homepager  r   r  rk   r/   r   r   u|    был изменен пользователем. Изменения из импорта не будут примененыrC   rJ  r)   r  r  r  u"   Определяем автора r   rJ  u   Не найден автор r  u(   Определяем владельца r  rH  =   Определяем последнего редактора r6   r}  r>  r  r  r=  )rk   r   rG  r}  r  r  r  r  r  cmf_archivedr   r  r  r  r   r;  r<  r]  u   Ошибка создания uS   . Попробуйте очистить дамп и повторить импортzERR-0018r}  r   u^   . Попробуйте отменить импорты связанные с проектом uY   , чтобы он удалился из системы и повторите импорт)>r   r~  r  r:   r/   r  rP   varsr    ra  r   r   r  root_parent
class_namedescr_documentrX   r   r>   r  rX  r@   r   r\   r  r   rE   r   	scheme_wfdefault_document_workflowr;   rH  r   get_status_typerY   r?  r  r  setattrr   r   r   r  r  r4  r  rD  rE  r  r  full_screenr4  r   r  r   FileNotFoundErrorr  rW  
log_detailAttributeErrorr   r  )rR   rW  archive_folderr  r  r  content_datar  r  r  content_model_namecontent_modelcontent_descriptionrE  r   wiki_project_homepager  authorr  r  r  modifiedr  rG  r}  content_dictr  s                              r&   _process_document_forkz*ConfluenceAPIImport._process_document_forka  s   51 e	#73F3F3H e	#(}}6)??,,.)$/
 ,W 5+F3%)%8%8%<%<\=%Y" $V-? @)5bs:,VW&X#T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")//&*	 ,  !d OO,,ZEa %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@ OO,,ZEG H NN6"Ke	# e	# e	#J ) 	  NOO--89L8M Nl m#-!3	 .  OO..0aKF% 
  NOO--89L8M Nww~v @rs $.!3 .  OO..0aKF    NOO--89L8MN#-!3 . 
 OO..0aKF  OO,,ZEIe	# e	# e	# e	#s|   ZA=Y4"DU%Y4M	U/Y4;ZAY Y"AY8Y:AYYYYY11Y44Y>	9Z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   rk   r   u#   Диаграмма с именем u@    не найдена во вложениях документа zERR-0019r  r   r   rk   r   %.pngr   r  100%zdiagramWidth=([^|]+)zdiagramHeight=([^|]+)rk   	attach_idwidthheightimg_srcr  r   html.parserrV   zdrawio-macro-content-data-macro-iduU   Неудалось конвертировать диаграмму из текста r$   )r   r  r  r   r   r    r
  r:   r/   rW  rk   rX   rV   r   r   r   formatfindreplace_with
currentTag)rR   r   r  r  TAG_TMPL
macro_namer   matchr  r  
attach_imgr  r  r  rt   
drawio_tags                   r&   r"  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 #  d}| j                  j                  d|j                   d|       Y 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  r  u.   Не удалось получить svg из zERR-0002r  z{})paramsumlsvgr  )r   r    r#   convert_uml2svgr   rV   rX   r/   rW  r   r  r  )	rR   r   r  r  TMPr   r  new_tagold_tags	            r&   r!  z%ConfluenceAPIImport._convert_plantuml:	  s    &P ''/@*.M'N 
	CN((887::CSCST
 $CJJdcJ$RTabG$--5F
4S-T $$W-
	N)),Z[^[c[cZd*e5?W * Ns   >B///C 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   )numrV   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
pagesCountFrC  r  )r  r  r  plugin_titler  )r  rV   r   r  get_fullviewsortrT  r   r   r   r:   r   r  r   r   r  )rR   r   r  plugin_typeTMPLr  r  fullview_pagesr   r  fullview_pager6   param_typesr  r  s                  r&   _create_msoviewer_macro_tagz/ConfluenceAPIImport._create_msoviewer_macro_tagp	  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rO  r   Nr   r   params     r&   r   z9ConfluenceAPIImport._convert_msoviewer.<locals>.<genexpr>	  s     *g55;;sA+>*g   |rk   r   rk   &   Не найдено вложение 'r  0   Ошибка обработки макроса '   ' в документе 'r  rV   ro  r  r5  ERR-0012r  N)r   r:   r   r   r    r
  r   r  r  r  rk   r  rV  r@  rB  r/   rW  )rR   r   r  r  r  macro_types
macro_typer   original_paramsr  r  r  rc  
error_texts                 r&   r#  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  rk  r  falser  r  r  F50none)isShowChildrenr  childrenAmountrC   includeViewTypeisOrderByDeskc              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywrO  r   r   Nr   r   r  s     r&   r   z:ConfluenceAPIImport._convert_childpages.<locals>.<genexpr>,
  s;      $u{{3*+q0 C#$   :<r  r-  Tr   r  rC   firstr  depthstyle
headerTypeexcerptTyperE  r  simplezrich contentr  r  rk   r  r  r   creationr  sortTypereverser  r6   r   
documentIdtrue,:rD  
separatorsr{  &quot;)r*   doc_namer  r  cmf_convertedr   r  N)r  r   r:   r   rV   r   r   r   rk   r   r  r   r   r   r  r  r  )rR   r   r  r  r  r   r  macro_iddata_macro_parametersr  macro_parametersview_type_mapsort_type_mapr  r  r  s                   r&   r$  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      }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  c              3   @   K   | ]  }|j                  d d        ywr  r  r  s     r&   r   z7ConfluenceAPIImport._convert_excerpt.<locals>.<genexpr>
  s     #aEEKKQ$7#ar  r  rk   &   Выборка без названияNr  c              3   2   K   | ]  }t        |        y wr   r   r   rE  s     r&   r   z7ConfluenceAPIImport._convert_excerpt.<locals>.<genexpr>
  s     'UG'U   rk   rE  r  )r   r:   r   r   r  r   r  r  contentsr  r  )
rR   r  r  r  r   r  r  excerpt_namer  r  s
             r&   r/  z$ConfluenceAPIImport._convert_excerptm
  s    D ''/@).L'M 	9Cww/H"ww'>?##aEUE[E[\_E`#aa+//8`aLKSinnOX+FnGY]G#..0A9/M.N'KK) "'UGDTDT'U U    " $$W%7%78%	9r%   c                    d}|j                  ddi      D ]T  }|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                  ||	|      d      }|r|j                  d|i      nd}|s|j                  ddi      }|s:|j                  |j                         W 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-parameterr  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  rk   r%  r,  	page_namer  r  N)r   r:   r   rV  r    r  r  r   r   r   r   r  r  r  r  )rR   r   r  r  r  r   r  macro_default_parameterr  r2  r  r,  r  r  s                 r&   r&  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#!-''  
 G LTinnOX+FnGY]G#..0ACT/U.V$$W%7%78C!	9r%   c                 J   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	   }|}	t        |j                  |	|
      d      }
|r|j                  d|i      nd}|s|j                  ddi      }|s|j                  |
j                          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  r/  r  r   r  
page_labelr  r  N)r   r:   r   rV  r    r  r  r   r   r   r  r  r  r  )rR   r   r  r  r  r   r  r3  r  r7  r  r  s               r&   r'  z$ConfluenceAPIImport._convert_include
  s,   "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
#)'   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="uR   " 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="z<">
                    <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r  r  r  s     r&   r   z3ConfluenceAPIImport._convert_toc.<locals>.<genexpr>c  ;      u{{3*+q0 C#r  r  rI  rJ  outlineF	separatorbracketsrQ  40pxr
  mixedhminLevelr  maxLevel6excluder5  	printableTabsoluteUrlclass)rI  r=  r>  rQ  r
  rC  rD  rF  r5  rG  rH  rI  r  r  r{  r  r  r  r  r  Ndiv)r  r   r:   r   r   r   r   r   r   r  r  r  r  )rR   r  r  r  r   r  r  
parametersr  r  r  s              r&   r+  z ConfluenceAPIImport._convert_toc6  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  r  r  r  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywr  r  r  s     r&   r   z:ConfluenceAPIImport._convert_livesearch.<locals>.<genexpr>  r<  r  r  placeholderu
   ПоискspaceKeyr   r   %::::%r  ILIKE%"key":""%r  r  r  r]  r  r^  medium)currentSpaceKeyr]  rT  r^  Fr  r  r{  r  )r  r  rT  r  r  r  NrK  )r  r   r:   r   r   r    r  sgetr/   r   r   rV   stripr   r   r   r   r  r  r  r  )rR   r  r  r  r   r  r  r  rT  r  rW  lablerL  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" (Недавно обновлено)
        rN  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="rP  rQ  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  r  r  r  c              3   |   K   | ]4  }t        |j                  d d            dk(  r|j                  d d       6 ywr  r  r  s     r&   r   z@ConfluenceAPIImport._convert_recently_updated.<locals>.<genexpr>*  r<  r  r  Nr   r  r   r   r   r   rV  rW  r  rX  rY  rZ  r  r  z@selfr  typesr-  r  newsr  r   T)raise_on_errorzERR-0133r!   r@  r   rA  max   Fthemeconciser]  r  r  hideHeading)	rf  	maxTogglerb  r   rh  r  r]  r  rj  r  r  r{  r  )r  r  r  r  r  rK  )r  r   r:   r   r   r   r    r  r]  r/   r   r   rV   r   rW  r   r   r   r   rW  r4  r   r   r   r  r  r  r  )rR   r   r  r  r  r   r  r  r  r   
space_keysr  rW  rb  unsupported_typesr  r  authorsr   rc  rL  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           	      Z   d}|j                  dddi      D ]  }|j                  d      }|j                  dd      }t        d	 |j                  d
      D              }|j                  d      }|j                  d|xs d      }	t	        |j                  |	|	xs d|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>  s&       C#s    r  colourr   u   Задать статусneutral)r   	text_spancolorr  N)
r   r:   r   r   r   r  copyr  r  r  )rR   r  r  r  r   r  r  r  rt  r   r  new_tag_viewr  s                r&   r   z#ConfluenceAPIImport._convert_status  s:   
 ''6G5R'S 	>Cww/H"ww'>C -33C8 F
 JJx(E::gu{3D#"A&A,9  
 G  99W-L
 W//0KSinnOX+FnGY]G#..0A8/L.M$$\%<%<=?	>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   rw  z\=r{  inz()r  r   #r  ruTlanguage_codereversedORaliasrX  rZ  rk   r2   r  rk   r   *   Не удалось создать тег r   r  )rk   r2   rV   	classNamer  INr   zcurrentSpace()r   r   rV  rW  r  rY  u.   Не удалось найти проект «   »r  r   )transliteratery  rJ  r   iterr   nextr^  r   r    r  r:   r   r   r>   r   rV   rX   r   rk   r2   r  StopIteration)cqlr   r   ry  bql_listbql_dict	cql_partscql_partopr   r]  rw  tags_ids	tags_listlabel_aliasr   r   r   rt   
parent_idsparent_listr   rW  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  rO  r   r  r  r   defaultr  FTr  Truerf  rg  
showLabelsT	showSpacer  r  )
r  modelr  r  rf  r  r  r  bqlr  ui   Не удалось конвертировать макрос «Содержимое по меткам»     с параметрами: zERR-0034r  r  r  r   z:Truez:truez:Falsez:falserL  r  N)r   r:   r   r   r   r  r/   r   r   r4  rW  r   r  r   r  r  r  )rR   r   r  r  r  r   r  r  all_parameterspr  r  r  rL  r  r  s                   r&   r(  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.        $ r;}tC                | j                  j                  d| d4| d5| d6|       Y d%}~y%d%}~ww xY w)7u[   
        Конвертирует макрос "Свойства страницы"
        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="r9  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  rO  r   ud   Не удалось конвертировать макрос «Свойства страницы» r  zERR-0035r  rV   hiddenFr  )rV   r  rC  r{  r  r  z details-hidden)macro_data_idrL  rE  details_hiddenr  r   Nc              3   2   K   | ]  }t        |        y wr   r'  r(  s     r&   r   z7ConfluenceAPIImport._convert_details.<locals>.<genexpr>  s     *XG3w<*Xr)  r   tableu5   Отсутствует таблица свойств.trrI  confluenceTdconfluenceThzkey_details c              3   >   K   | ]  }|d k7  s	t        |        ywr   Nr'  r   cs     r&   r   z7ConfluenceAPIImport._convert_details.<locals>.<genexpr>  s     I1qDyAI   
c              3   >   K   | ]  }|d k7  s	t        |        ywr  r'  r  s     r&   r   z7ConfluenceAPIImport._convert_details.<locals>.<genexpr>  s     'w1mnrvmvA'wr  r   Tr   uE   : не удалось сохранить значения macro_db «u   »: zERR-0037)"r  r   r:   r   r   r   r/   rW  r   r   r   r  r+  r   r  rF  insertr  r  r  rV  r    r  r   zipr@  r@   r   	macros_dbr   rX   macros_db_draftr   r  )rR   r   r  r  r  r  r  r   r  r  r  r  r  rL  r  prmr  contents_strr  r  
propertiescontents_tableth	first_rowtd
second_rowr  r   s                               r&   r0  z$ConfluenceAPIImport._convert_detailsP  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| 8!!&&($$**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   8))z  |C  {D D[[bZccghigjl)w * 8 88s   -!TT
'T$T7
	A6U?T<*U)U+0UAU
:&U&BV' T&T4<U	V$AVV$'	W+01W&&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="r  z;>
                    <span class="excerpt-title" data-id="u   ">Отчёт по свойствам страницы</span>
                </span>
                <span class="macros-actions" data-id="r  r  r  z:"></div>
            <div class="macros-preview" data-id="r  r  detailssummaryr  r  r  r  rO  r   r  r  headingsr  showCommentsCountFr  showLikesCountreverseSortpageSize   NsortByfirstcolumn)r  showCreatorshowLastModifiedr  showPageLabelsshowUnresolvedCommentsCountr  r  rV   r  r  r  settingsParamsr  uv   Не удалось конвертировать макрос «Отчёт по свойствам страницы» r  zERR-0036r  rC  r{  r  r  r  )r  r   r:   r   r   r   r  r/   r   r   r   r^  r4  r  rW  r   r   r   r   r  r  r  r  )rR   r   r  r  r  r   r  r  r  r  r  r  r  rB  r  rL  r  r  r  s                      r&   r)  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="rO  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="rP  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  r/  )
param_namer  N)r  r   r:   r   r   r  r   r  quoter  r  r  )	rR   r  r  r  r   r  macro_param_namer  r  s	            r&   r*  z#ConfluenceAPIImport._convert_anchorA  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.      }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	(?<!\\)\|rO  r   jqlQuery\r  z\|\|?r  z&&?ANDserverIdrw  	columnIdsr  r   r5  Nr   r   r  r  T)r   r/   r   r   )
logic_typer2   rk   responsibler  priorityr}  r  r  r  deadlineFmaximumIssues   )bordercolumns	itemsSizefilterId
filterNamefilterParentNameuserFilterIduseCustomFilterr  r  r{  r  rJ  r  rK  )r  r   r:   r  r   r^  r   subrp  r   convert_fieldr   r   r/   r@   r   r   r    CmfBqlFilterr   r  r   r   rV   r   r   r   r  r  r  r  )rR   r   r  r  r  r   r  r  r  r  r  rX   	jql_queryrw  r  
column_ids	column_idcolumnrc  	tf_ext_idtfdefault_columnsrL  r  r  s                            r&   r%  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 W	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$	  $%$4   G LTinnOX+FnGY]G#..7H&6Q.R$$W%7%78oW	94 % L..66'"SE7JKKLs   (6L**	M(3*M##M(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-highlightrI  inlineCommentzdata-mark-annotation-type
annotationzdata-mark-typeTr  r   uO   Не удалось конвертировать inline комментарий r   zERR-0020r  )r    r  rJ  r  r   r  rk  r   r}  r  r   rV   unwrapr  r   r/   rW  r   )rR   r   r  r  r   r   tag_contexts          r&   r.  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                    dd l }|j                  dddd| j                  j                  j                   d| j                  j                   d|j                   d| d	| d
gddt        dd      t        dd            }| j                  j                  d|j                   d| d| d       | j                  j                          |S )Nr   /usr/bin/python3	manage.pyshell,plugin = models.CmfPluginConfluence.get(id="z+");retcode = plugin.process_document_fork("", "", , );T"/var/log/eva-import-subprocess.logr   &/var/log/eva-import-subprocess.err.log	close_fdsstart_new_sessionstdoutstderru.   Запустили process_document_fork (pid= offset= limit=ro  	
subprocessPopenr/   r   rV   r   r  pidr  rR   rW  rl  r  r  r  s         r&   _execute_docz ConfluenceAPIImport._execute_doc  s    "K>t?U?U?X?X>Y Z;;???;M;M:NdSZS]S]R^^abhaiiklqkrrtv
 d<dC@$G   	
 	LTXXJV^_e^ffmnsmttuvw""$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#   NNrV   rI  r{   r  r  r   r}  r  r  positionr  r   )r   r  rI  c                     t        j                  d|       D cg c]-  }|j                         rt        |      n|j	                         / c}S c c}w )Nz(\d+))r  r   isdigitr4  r1  )rt   r   s     r&   natsortz<ConfluenceAPIImport._prepare_documents_tree.<locals>.natsortR  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   rI  c                 &     | d      d         S )Nr   r  r$   )rc  r  r  s    r&   r   zQConfluenceAPIImport._prepare_documents_tree.<locals>.build_tree.<locals>.<lambda>]  s    GDqN:4N,O r%   r  r  )r'  r  r   rI   )r  r   orderno	parent_idr   rc  r   rk  current_ordernochildren_in_orderchild_id
child_typenext_orderno
build_treer  rR   s   `            r&   r)  z?ConfluenceAPIImport._prepare_documents_tree.<locals>.build_treeU  s    !LIq $(::<E4>Y. V%H  MMOMP &O "! H',$*.3!(((J)MN",T5,"G	H !$5		&!""'s   Bi )r   rI   r:   r  r  rn  ru  r   )
rR   r   r  r   r   r   r   r  r)  r  s
   `       @@r&   _prepare_documents_treez+ConfluenceAPIImport._prepare_documents_tree2  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                    	
 |sj                   } j                  j                          j                  j                  j	                  | d         j                  |d         	g 
	
 fd}	rit        j                  d       t        
      D ];  }|j                         }| xj                  |z  c_
        
j                  |       = 	  |        	rit        
      D ]>  }|j                          |j                  s  xj                  |j                  z  c_
        @  j                  j                  j	                  | d       y # t        $ r 
s Y w xY w)Nu<    запущена в несколько процессов: r{   c                     t              k(  ry t        
j                  j                  d      t              z
        } t	        |       D ]5  }s y j                  d      \  }} 	||      }j                  |       7 y )NF)r  r   )r   minr/   re   r  popr   )available_processesr   rl  r  r  funcrf   rx  r  rW  rR   s        r&   execute_processeszFConfluenceAPIImport._run_parallel_processes.<locals>.execute_processes~  s    7|},"%11e1<G,# ./ % 'AGVU3t$%r%   r   u    завершена)r   r/   re   r@   r   r{  rR  sleeprJ  pollr<   rT  r   communicate
returncode)rR   r0  r   rW  process_namer1  r  r5  rf   rx  r  s   `` `    @@@r&   _run_parallel_processesz+ConfluenceAPIImport._run_parallel_processesn  sI   ==L 99;##nXYfXgh	
 33E&MB	% 	%  JJqMW )!YY[
)OOz1ONN4(	)
!# " M 	3D4??2	3
 	##|n4G$HI   s   E E('E(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<        $ r0 t?                | j                   j                  d| ddd       Y w xY w)Nu6   Построение дерева документовr  r#   r   tree_node_is_branchhas_children_archivedT)r   rl   include_archivedu    Не найден предок 'u>   '. Потомки будут помещены в корень zERR-0120r}  )r   r  r   r"  u"   Не найден потомок 'u   ' у предка 'r  zERR-0003r   r  rO  )r  rO  Tr  )r   rl   r;  r  r  u7   Не получилось привязать ноду 'zERR-0024) r/   r@   r   r  r  rX   rI   r'  r  rP   r:   r  r    r   r   rW  r  r   r  r"  r   r#   r]  r5   rY   r:  r9  r  show_archiver   r   r  )rR   rW  project_homepager   rk  r#  parent_typer  parent_model_nameparent_modeltree_parent_ext_idr&  r'  r"  child_model_namechild_modelchild_ext_idrc  tree_parent_filterarchived_filterarchived_documentsarchived_foldersr_  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15M*)M*c                    dd l }|j                  dddd| j                  j                  j                   d| j                  j                   d|j                   d| d	| d
gddt        dd      t        dd            }| j                  j                  d|j                   d| d| d       | j                  j                          |S )Nr   r  r  r  r  z/");retcode = plugin.process_doc_versions_fork("r  r  r  r	  Tr
  r   r  r  u2   Запустили process_doc_versions_fork (pid=r  r  ro  r  r  s         r&   _execute_doc_versionsz)ConfluenceAPIImport._execute_doc_versions  s    "K>t?U?U?X?X>Y Z??C?Q?Q>RRVW^WaWaVbbeflemmopuovvxz
 d<dC@$G   	
 	PQUQYQYPZZbcibjjqrwqxxyz{""$r%   c                 	   g ddgg ddgdgdgdgdgg d	gd

}t        |d    d      }t        |d      5 }t        j                  |      }d d d        | j                  j
                  j
                  j                   d|d    }t        j                  j                  |      }|s"t        j                  |d| j                        }|_
        |d    d|d    |_        |j                  d       g d}|ddgz   }	t        j                  j                  ||	      D ][  }
|
j                  sg |
_        |D ]  }t#        |
|d        |
j$                  j&                  dv rd|
_        |
j                  d       ] |d   D ](  }	 |j                  |d   d       }|)| j                  j*                  j-                  d|        E|D ]  }t        j.                  j                  |d       }|s:| j                  j1                  d!| d"| d#d$%       | xj2                  d&z  c_        at        j                  j                  ||d'dg(      }|s:| j                  j1                  d)| d"| d#|*       | xj2                  d&z  c_        |j                  s|d+   D ]j  }| j5                  |      }|r|j                   j7                  |       2| j                  j1                  d,| d-| d.|*       | xj2                  d&z  c_        l |d/   D ]x  }|d   }| j8                  j:                  r5d| j                  j
                  j
                  j                   d|d    d}n4d| j                  j
                  j
                  j                   d|d    d}t        j<                  j                  d0d1d2| d2gd0g3      }|s%t        j<                  j                  dd4|gd0g3      }|rf|j>                  s||_        n#||j>                  vr|j>                   | |_        |j                  d       |j                   j7                  |       @| j                  j1                  d5| d-| d6|*       | xj2                  d&z  c_        { |d7   rd|_         |j                  d        + |S # 1 sw Y   hxY w#  | j                  j1                  d8| d9d:%       | xj2                  d&z  c_        Y vxY w);N)zPPP-DOC-CREATEzPPP-DOC-EDITzPPP-DOC-PUBLISHzPPP-DOC-TREEMOVEzPPP-OBJ-ORDERPPP-DOC-DELETE)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{   r  r7  r   rV   r   T)r   r   r/   r  u?   : Схема проектных прав доступа для rk   r   )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   rl   F)rN  zPPP-OBJ-DELETEr  r  u8   Не найдено соответствие права )r2   rP  u    Не найдено право "u	   " для zERR-0059CmfProjectPermPermissionrA  r   r   )r_  r   rl   u2   В схеме не найдено правило "r	  r   u)   Не нашли пользователя u    для прав zERR-0060r  r   r   r   r  rX  u   Не нашли группу zERR-0061rJ  u>   Не удалось импортировать правило zERR-0063CmfProjectPermSchemeRule)!r   r   r   r   r/   r   r   r    CmfProjectPermSchemer:   r  rk   r   rc  rJ  r   r`  r  r_  r2   rS  r@   r   ra  rW  r<   r   r   r.   rF   r   r   r\  )rR   r   mapping_permr  r   	perm_listperm_scheme_ext_idperm_schemerule_bool_fieldsrule_fieldsruler   	perm_dictr  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
 %-0ABC/3' 	%1		!I	% !% 6 6 = = I IJ"USW[MZ1155=O5P 55) $?? 6 K
 '0##El^+jkpqwkxjyzT*
" '*>@P)QQ 3388T_8` 	,D##&(#- 0ED%/0**//3WW)-D&		d	+	, #;/ [	%IZ%*..y/FM&OO**225mnwmx3yz"- M7J!::>>'(, ? D  11>zl)T]S^_&%? 2 
 1, "("A"A"E"E+/* #%56 #F #K
 '11PQ[P\\efoepq& + 2 
 1, &66  )' 2 
1!%!1!1$!7!'66==fE OO55"KD6Qbclbm n *$/ 6 
 !OOq0O
1 "+8!4 1%*6]
??00')$//*@*@*G*G*S*S)TTVW\]aWbVcce%fF')$//*@*@*G*G*S*S)TTVW\]cWdVeeg%hF$*$9$9$=$=$,f&m#D$,: %> %	  )(.(=(=(A(A(.'D(0z )B )I %#,#3#339	 0!'y/?/?!?6?6F6F5Gx3P	 0%NNtN<'66==iH OO55"?
|K\]f\g h *$/ 6 
 !OOq0O;1> !-7;4$$$6[M7[	%z S	% 	%B%))TU^T_`7 * 
 1$s   R2	?R?	K$R?2R<?8S: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.wikir  rk   rX  task_code_prefixT)r  rk   rt  r   rP  rl   z Wikiu   названиеWIKIu   кодu   В u    и u9    проекта добавлен суффикс 'Wiki': 'r  ro  r  )r    r  r  rk   r1  r   rt  upperr/   r  r  r>   r  )	rR   
space_namer  r/  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                    dddd| dgg dg}t         j                  j                  |dd|ggddg	      }|r8|d
| dz  }| j                  j	                  d|j
                   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]): новые названия и код проекта
        r  r   NOT LIKEr   )r   rO  Nrk   rX  r  r  r  ro  u   Проект с именем 'ud   ' уже существует. Импортируемый проект переименован в 'r  zERR-0131r  r}  r   rt  Tru  r   u   Проект с кодом 'ug   ' уже существует. Код импортируемого проекта изменен на 'zERR-0132)r    r  r]  r/   rW  rk   )rR   rx  r  r   ext_id_filterrW  original_space_keycounters           r&   _check_project_uniquenessz-ConfluenceAPIImport._check_project_uniqueness  s    zQvha=1!
 ##((!FGZ#@A&> ) 
 Bvha.(JOO%%0 ?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 	]L  }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      r4|d   d   }
| j                  |	|
      }|smt        d|d   d    d|
 d      | 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-|d.<   | j                  j)                  |d         }d/| j                  j*                  j*                  j,                   d/|d    d/}t.        j0                  j	                  d0d1d2| d2gt3        |j5                               g d3z   4      }|rAd5}d6| }|j6                  d7k(  rd8| d9| d| d}| j                  j9                  |d:       n=|d;v rd<| d| d}d=t.        j:                  j	                  d>?      d@}|dAk(  rdB| d| dC}|j=                  dDdEdEdF       | j                  j9                  |d:       t.        j1                  || j                  |dG      }n|d=k(  rt.        j0                  j	                  g dHdIdJdK|gddK|gggg dL4      }|st        dM      | j                  j9                  dN| d| dO| d:       |j>                   d/| |_        |jA                  dP       tC                nt        dQ|       |j6                  d7k(  rqt.        jD                  j	                  dRdS|jF                  gg dTgd0g4      }|st        dU|       |jH                  r||_%        |jA                  dP       || _&        nX|jH                  rtO        |jJ                  xr% |jJ                  j                  j	                  dV            }|s|r| jQ                  ||      \  }}}||dV<   | jS                  |||      \  }}||d<   ||dJ<   | jU                  |      |dW<   ||dX<   |D ]  }tW        ||||           |jX                  jZ                  r|j]                         |_/        |jA                          tC                |j	                  d      rC| ja                  ||       n0| j                  j9                  dY| dZtb        jd                  d[       || _&        || _3        |rt.        jD                  j	                  dRdS|jF                  gg dTg\      }|j6                  d7k(  r8t.        jD                  j	                  |d]^      }|r"|ji                  d_       n|j6                  d`k(  rt.        jD                  j	                  |d]^      }t.        jD                  j	                  |da^      }|r|ji                  d_       |r|ji                  d_       |r|ji                  d_       |jk                  dbg       |jl                  j                  }|
r4| j                  j*                  j*                  j,                   d/|
 |_        | j                  |_        |jA                  dP       tC                | jo                  ||       | jq                  |       | js                  | jt                  ||dcd       | jw                  |       tx        jz                  rntx        jz                  }tx        jz                  dek(  rdf}| j                  j                  j                  dg| dh       | js                  | j|                  ||did       n%| j                  j                  j                  dj       	O y c c}w #  | j                  j                  j                  d| d|        Y oxY w# t~        $ rB}t                | j                  j                  dk|d    d|d    dl| dmdno       Y d }~	d }~ww xY w)pNrd  rn   rX   rV   
add_suffixTr  rk   z' (id: z, key: r  ro  u0   Импортируем пространство r{   r_  r  uE   В дампе не найдена домашняя страница 'r   r  u   У пространсва u    нет домашней страницы. Сведения о создателе и дате создания пространства будут взяты из первой корневой страницы.re  uW   Не удалось получить данные корневой страницы id=u(    в дампе пространства uS   В дампе не найдено ни одной корневой страницыr  r  uD   Определяем автора домашней страницы rI  rJ  r  r  uJ   Определяем владельца домашней страницы r  r  rH  r  r  r  r  r  r  personalu(    (Личное пространство)u%   Личное пространствоdescriptionr   r   r   r   )rr  rt  r  r  FuI   Найден ранее импортированный Wiki-проект project.agileu    Найден Agile-проект u_    с импортированным в раздел 'Документы' Wiki-проектом ')rJ  )project_wikir   u3   Создание нового Wiki-проекта 'rW  zproject.wiki:defaultr1   )project_typer  r   u,   Создание нового раздел 'u-   ) в портале 'Моя компания'sectionzCmfWiki:Class)r  r#  tree_parent_id)rk   r/   r   r   )rr  r   r  r  rt  rX  )rr  rt  r   u   Не найден Agile-проект для объединения. Создайте или импортируйте одноименный Agile-проект и повторите импорт проектаu"   Импорт Wiki-проекта 'u<   ) в раздел 'Документы' Agile-проекта r   u8   Неизвестный тип опции импорта r  r   )rk   r   u   ДокументыuL   Не найден раздел 'Документы' в Agile-проекте r{  project_perm_schemer  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыr  r   u   Документ1)r  rk   rQ  rs  u   Документ2r  u'   Обработка документов)r6  r   u   ВсеuY   У документов будет обработано последних версий: u   . Для изменения, поменяйте значение параметра IMPORT_CONFLUENCE_PROC_LAST_PAGE_VER в config.u4   Обработка версий документовu   Обработка версий документов отключена параметром IMPORT_CONFLUENCE_PROC_LAST_PAGE_VER в config.u6   Ошибка импорта пространства 'r0  zERR-0032r  r}  )Bru   r/   rW   rX   r:   rk  rZ  r  ri  r@   r   r   r   ra  r  r   r\   r  r   rE   get_correct_keyr   r   r    r  rJ  keysrr  r  CmfLogicTyper   r   r   r   r#   rV   r   r  r  rY   r~  r  rp  r  rk   r   gen_coder2   r   r>   r  rW  r  r  r  _process_project_tagsr*  r7  r  rJ  rM   rU  rL  r   r  rW  )rR   rr   rn   r  r   project_fieldsproject_is_newr   space_full_namer  homepage_idr  	root_pager  r  r  rx  r  r   rW  log_msg
doc_folderr{  r  rm_doc_folderrm_doc1rm_doc2r=  r[  rc  s                                 r&   _process_spacesz#ConfluenceAPIImport._process_spaces  s   ++DOO,I,IJ[,\]}-g6t<__2288<<\J
  "'') ]	EN!NY??,,.;D<P<P&QSs4y&QQ$%eFm_GE$K=PUV[P\~]^"_&&++.^_n^o,pquV}-66{C"99Z("'
"3D"9K#11';GH#&  %j 1' :;3{m1N 
 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 OO;;E%LI	doo44;;GGH5QU;-WYZ !++//$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:@D@Y@YZ_@`'<=<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,,%%!J	 -  ,,W5>>"("M"MKBBbH&.OO**//st  tA A\ ] 0022%[	 1  OO**// gi]	 'R< OO22::"y  {D  zE EJJYIZ!\b  ))LUSY]O[^_dej_k^llopsotu)) *  sP   h(h:ghChg2`hh-h	h	i7iir   c           	      l   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 #  t)                | j
                  j+                  d| d|       Y xY w)Nr   rx  r{   r  r]  rV   rk   r   r   r{  r  r|  Tr}  r   r   r   r   r   r  r  r  rX  r{  rZ  r  r   r  zERR-0022r  )r  ry  r   rn  ru  r/   r  r   r   r   r   r    r  r:   r   rk   r  r   r   r   r  rW  )rR   r   rW  ry  r  r   r   tag_name
name_aliasr   tag_objr   s               r&   r  z)ConfluenceAPIImport._process_project_tagsA  sI   *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)),VW_V`*a7Aw * Ps   D*H-H3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  r8  r7  r   )rR   r  group_idr   s       r&   _get_groupszConfluenceAPIImport._get_groupsj  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   r7  )r   r   r   r   r   r   )rR   
group_path	user_pathr(  r   s        r&   _get_group_membersz&ConfluenceAPIImport._get_group_membersp  sl     ''0	zz), 	#Gi((137 #1iil"# #	## #s   AA6A*A6*A3	/A6r   c           
         |j                  d      }| j                  j                  j                  d|        t	        |d   t        |j                  d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                  d0| d1tH        jJ                         |d   j'                  d	      \  }}| d2| d	| }|dz  }t(        j*                  j                  d*d+|jE                         g|
      r| j                  jG                  d3|        t(        j+                  ||| j                  d4      }nd |fS |r,|jL                  s|jN                  r|D ]  }tQ        ||||           |jS                  g d5       |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 )6Nrj   u2   Обрабатываем пользователя r/  
operationsT)rk   does_not_worku8   Не указан Email для пользователя r   @)rk   rj   r  r   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~   r}  r  r  rV  rW  )r   r   NloginrX  u+   Пользователей с почтой z > rk   u+   Пользователей с именем uQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифруr   u1   Создадим пользователя ext_id=)r   r  r/   r   )r   r  
user_local)1r:   r/   r@   r   r   rY   warncmfrl   CmfEmail
max_lengthr   rM   
ORG_DOMAINr~  translit_stripr   r   rE   r   r    r!   r   rX   r  r   r  r  r   r<   rW  rJ  r   r   r1  r  r>   r  r   r  r  r  r   confluence_group
user_groupr  r  r   rG   )rR   r   r  r   rj   	user_dictmax_lenr   
is_created	full_namerl   r   not_source_hash_filterpersonsr   
name_combonr  prefix_emaildomainr  
conf_groupr  s                          r&   _process_personz#ConfluenceAPIImport._process_personv  sg   g&##&XYbXc$dei6.29==t3T.U*UW	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  rk   rV   r   r   r   r   r   r  r   r   r/   rk   r   r  send_invitesu,   Отправляем приглашения u    пользователям: )args)&r/   rW   rX   r:   r  r>   r  rJ   r   rX  r  r  r   r   rj   r  rM   r  r  r.   rF   r   r   r    r   r   rk   r   r  r   r   r@   r   r   schedule_deferred_jobr!   register_personsrJ  )	rR   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 )Nrk   rV   r   r   r   r   r   r  r   Tr  r   r  F)r  r.   rF   r/   r   r   r    r   r:   r   rk   r   r   r   r  r   r   r  r  r   r   )rR   r   r  r   r   r   r   r   s           r&   _process_groupsz#ConfluenceAPIImport._process_groupsD  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           
      4   | 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|
        |j*                  D ]'  }| j                   j                  j-                  |       )  t	        j
                         |z
  }| j                   j                  j                  d|dd        y# t.        $ r<}t1                | j                   j3                  d| d| d| dd       Y d}~ d}~ww xY w)!u   
        Пост обработка JQL в фильтрах задач макроса "Результаты фильтра"
        uj   Обработка JQL в фильтрах задач макроса 'Результаты фильтра')r  r   z%"jqlQuery":"%r   )r   r   T)r  ubqlr  rk   r  r{  r|  ro  r  rw  r   r   2--------------------------------------------------u   ФИЛЬТР: FrC  Tr   zJQL:	zUBQL:	zBQL:	u   Фильтр u0   : ошибка преобразования JQL r5  zERR-0066r  rb  NuC   Обработка JQL в фильтрах выполнена за rN  rO  )r/   r@   r   r   rR  process_timer    r  rJ  rk   r2   r  rX   r:   r  get_modifiedr  r   r   r  r   r  r   r   r  rW  )rR   jqlr^  task_filterstask_filter
filter_msgr  rw  r   r  r  	error_msgrc  rd  s                 r&   _process_jql_in_filtersz+ConfluenceAPIImport._process_jql_in_filtersb  sg    	##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   :DI	J1JJ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  rV   u'   Импортирован проект 'rk   r  r   )r@   uC   Не удалось создать отчет по проекту. N)r  r/   r  r<   r>   r  r  r  r.   closer  r  r  rW   rX   r:   process_cross_linksr@   r   r   rZ  ri  r   rM   IMPORT_COLLECT_STATSr   r   project_statsr   r  )rR   r  r<   rW  r   project_ext_idrc  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 создаем наши превью
        r
  
backgroundr  r  )r  r  compilerk   r  create_preview_tag)rR   r   r  s      r&   _create_previewz#ConfluenceAPIImport._create_preview  sV     887BJJ|$<=8>#((eBSWZW_W_`eWfV6689
r%   c                    dd l }|j                  d       D ]F  }	 |j                  j                  d      rR| j                  j
                  j                  d|        	 | j                  j
                  j                  d|        r| j                  j
                  j                  d| d|        |j                  d      r|j                  d   }n|j                  d	   }|j                  d      rs|j                  d   j                  d
      rT|j                  |      }|r|j                  d      s`| j                  j
                  j                  d|j                  d           	 | j                  j
                  j                  d|        t        j                  j                  |d   j                  d
            }	|j                   d|	 }
|j                  d   |j                  d<   |
|j                  d<   d|j                  d<   | j                  j
                  j                  d|
        	 | j                  j
                  j                  d|        Rd|j                  j                  dd      v r|j                  d   j!                  d      d   j!                  d      d   }| j#                  |      }|rw|j                  d   |j                  d<   |j                  |j                  d<   d|j                  d<   | j                  j
                  j                  d|j                          n5| j                  j
                  j                  d|j                  d           	 | j                  j
                  j                  d|        t%        j&                  d|      }|r-|j                  d      }|s.t        j                  j)                  |j+                  d            }|r| j#                  |      }|rw|j                  d   |j                  d<   |j                  |j                  d<   d|j                  d<   | j                  j
                  j                  d|j                          n5| j                  j
                  j                  d|j                  d           	 | j                  j
                  j                  d|        |j                  |      }|r|j                  d      r{|j                  d      dk7  rg|j                  d      |d<   |j                  d      |d<   |j                  d      |d<   	 | j                  j
                  j                  d|        tt%        j&                  d|      }|r|j+                  d      }t,        j.                  j                  | j                  j0                  j0                  j2                   d|        }|rEd|j                  d<   |j                  d   |j                  d<   |j                  |j                  d<   n
d!|d<   ||d<   	 | j                  j
                  j                  d|        f|}t        j                  j)                  |      j!                  d      d   j!                  d      d   }|}|j                  j                  d"      }|j4                  d#k(  r|r||j6                  j!                  d      d   k7  rt9        | j:                  j<                  j?                         d$         }t9        | j:                  j<                  j?                         d%         }tA        | j                  jC                               jE                  d&|d'|d(      }| j                  j0                  j0                  j2                   d| }t,        j.                  j                  |d)g*      }|r|}|jG                         sX|rVtA        | j                  jC                               jE                  d&t9        |jH                  j<                  d$         d'|d(      }|jG                         sV| j                  jK                  d+| d,| d-| d.| d/	d0|1       	 | j                  j
                  j                  d|        t,        jL                  jO                  d%d2|gd3d4| d5gg d6gg d78      }|rtA        |jP                        jG                         rqt,        jR                  j                  ||9      }|st,        jS                  ||| j                  d:      }|j<                  r|j<                  j                  d;      r|j<                  d;   }|j                  d<      |_*        |j                  d=      r2|d=   d>   d?k7  r'| j#                  |d=   | jV                           |_,        ntZ        j\                  |_,        |jX                  |_/        |ja                  d@       tc        tA        |jP                        dA      5 }|je                  |jg                         ddBC       d|_4        |ja                  d@       d d d        nS| j                  jK                  dD| dE| dF| dGdH|1       	 | j                  j
                  j                  d|        
t,        jR                  j                  |g dI|J      }|r|j                  d	      r9|j                  d	   |j                  dK<   |jj                  jl                  |j                  d	<   d|j                  d<   |j                  dL      r)|j                  dL   |j                  dM<   |j                  dL= to        jp                  |j                  d	   j!                  d      d         }|rN|d   rI|d   j                  dN      r5dN|_9        dO|j                  dO<   dP|j                  dQ<   dP|j                  dR<   n-|r|d   r&|d   j                  dS      s| ju                  ||       |j                  d      r,|j                  d   |j                  d<   |jj                  jl                  |j                  d<   d|j                  d<   to        jp                  |j                  d   j!                  d      d         \  }}|r|j                  dN      rdN|_9        dO|j                  dO<   dP|j                  dQ<   dP|j                  dR<   |jw                  dT      } |j                  d   | j                  d	<   || j                  d><   |jy                  |        n| ju                  ||       | j                  j
                  j                  d|jj                          nj|j                  j                  d      dk(  rL| j                  jK                  dU| dV|1       	 | j                  j
                  j                  d|        | j                  j
                  j                  d|        I y # 1 sw Y   xY w#  | j                  jK                  dWdX|1       Y [xY w# | j                  j
                  j                  d|        w xY w)YNr   c                 J    | j                  d      xs | j                  d      S r   r   r   s    r&   r   z4ConfluenceAPIImport._convert_links.<locals>.<lambda>  s    #,,v2F2]#,,W\J] r%   r  u   Уже обработали u'   Не обработали ссылку u&   Обрабатываем ссылку u    на странице r   r   r{  )r   zdata-anchoru1   Не найден якорь для ссылки z##	href_origTu   Заменили на z/people/r  r   r   r   u?   Пользователь не найден для ссылки r   zdata-usernamer   data-linked-resource-typer  zdata-linked-resource-idz$/pages/viewpage.action\?pageId=(\d+)r   rO  r6   z!data-linked-resource-container-idr#   r  rk   rT  r_  r6  zparent.import_raw_jsonr  u   Документ ID u)    с каталогом вложений 'u<   ' не найден в дампе пространства 'r  u~   ). Возможно он находится в пространстве, которое еще не импортированоzERR-0005r  rO  r   r   rW  r  rO  Tr  r{   r  r  r  r  r9  r  rH  rI  rJ  r   r  Fr  u   Не найден файл '   ' страницы ID r  r  zERR-0006)r   r  r  )rk   rl   r   src_origsrcsetsrcset_origvideocontrolsr  r  r  imagesourceu%   Не найдено вложение zERR-0007u,   Ошибка обработки ссылкиzERR-0008)=zipfiler   r   r:   r/   r@   r   r   r   r  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   rW  r  r]  r{   r
  r  rE   r  r\   r  r  r   r   r  ry   r   r   rX   r
  r  rk   r  r  r   )!rR   r   r  r  make_previewr  r   r   raw_taganchor_nameanchor_link
account_idr   r  	user_namer  rel_docattach_parentrk   r  resource_container_idr  rx  r  resource_ext_iddoc_with_attachdownloaded_file
attach_objr  r   r  r  r  s!                                    r&   r  z"ConfluenceAPIImport._convert_links  s   %%&]^ a	`C``99==1OO**//2Nse0TUz &&..1XY\X]/^_y &&++.TUXTYYpqwpx,yz<<'))F+C))E*C <<'CIIf,=,H,H,M)..C.8G#M(B..669jknktktu{k|j}7~ ` &&..1XY\X]/^__ #),,"4"4W]5K5R5RSV5W"XK%+[[MK="AK-0YYv->CIIk*(3CIIf%15CIIo.OO**//2H0VWR &&..1XY\X]/^_M vr!::!$6!2!8!8!=b!A!G!G!LQ!OJ!--j9F1461B		+.,2KK		&)59		/2..336LV[[M4Z[..669xy|  zC  zC  DJ  zK  yL  8M  Nx &&..1XY\X]/^_s 		"=sC # 8I$$*LL$8$8Q$H	 !%!1!1)!<!58YYv5FCIIk206CIIf-9=CIIo6 OO2277:PQWQ\Q\P]8^_ OO22::=|  ~A  ~G  ~G  HN  ~O  }P  <Q  R V &&..1XY\X]/^_O &***4$?@ ',G HL X;B;;Gb;c789@E^9_56-4[[-GM* @ &&..1XY\X]/^_{ 		"I3O#kk!nG$0044t?U?U?\?\?h?h>iiklskt<u4vG59		/21461B		+.,3LL		&) <B789@56` &&..1XY\X]/^_] !'||++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  !F &&..1XY\X]/^_A '-&>&>&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  !^ &&..1XY\X]/^_[ $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 . :
 &&..1XY\X]/^_&&..1XY\X]/^_Ca	`F> >t8)),Xfp06 * 8 &&..1XY\X]/^_so   Ay/	C&y/B$y/)Dy/%Dy/+A5y/Cy/=H%y/Fy/<y"1y/)L"y/"y,	'y// zz*z>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_namer  zuser-mentionr   )class_r   uZ   Не удалось преобразовать ссылку на пользователя zERR-0009r  N)r  r/   r@   r   r   r:   r   r   r   r  r   rV   r  r   rk   ru  r  r  r  rW  )rR   r   r  r  r  r   r   r  rv  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!   re  )r"  r  r   r[   rZ   r/   rW  )	rR   r(  r   rd  r~   r   r   rc  
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   rL  macroParamsrk   rX   r  r  r  r  extensionKeyr  r  rV   ro  r  r5  r  r  N)r    r
  r:   r   r  r  rk   r  rV  r@  rB  r/   rW  )
rR   r   elemr   r  r  r  r  rc  r  s
             r&   _convert_msoviewer_in_atlas_docz3ConfluenceAPIImport._convert_msoviewer_in_atlas_doc$  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;r2  c                 R   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                  |	       n|d   dk(  rd }
|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'      }|rEt5        |j7                  dd$      j9                  |d    ||(      d)      }|
j                  |j:                         
n|d   d   d*k(  rd+}|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                  ||,      d)      }|
j                  |j:                         	n|d   d   j=                  d-      r|d   d   d#   d.   d    }|}t*        j>                  j                  |/      }d0}|s|d   d   d#   d1   d    }| j                  j@                  j@                  jB                   d2| }t*        jD                  jG                  d'd3|gd4d5| d6gg d7gg d89      }|rtI        |jJ                        jM                         rt*        j?                  ||| j                  d:;      }|j.                  r|j.                  j                  d<      r|j.                  d<   }|j                  d=      |_'        |j                  d>      r2|d>   d   d?k7  r'| jQ                  |d>   | jR                           |_*        ntV        jX                  |_*        |jT                  |_-        |j]                  d:@       t_        tI        |jJ                        dA      5 }|ja                  |jc                         d:dBC       d:|_2        |j]                  d:@       d d d        t*        jD                  jG                  d'd5| dDgd4d5| d6gg d7gg dE9      }|rtI        |jJ                        jM                         r~|jf                  } t*        j>                  j                  d'd3| gdFdG|ggH      }!|!sVt*        j?                  | ||jN                  |jT                  |jT                  | j                  d:I      }!|!j]                  d:@       t_        tI        |jJ                        dA      5 }|!ja                  |jc                         d:dBC       d:|!_2        |!j]                  d:@       d d d        ntI        | j                  ji                               jk                  dJtm        | jn                  j.                  j1                         d&         dK|dL      }"| j                  jq                  dM| dN| dO|" dPdQ|R       O|}t*        j>                  j                  dFdG|gd'd5| dDggdSg9      }!dT}dT}#|d   d   d#   j                  d      r|d   d   d#   d   d    }|d   d   d#   j                  dU      r|d   d   d#   dU   d    }#|jf                  jr                  |jt                  jr                  ||#dV}$|!r|!jv                  |$dW<   nd$|$dW<   t5         |j7                  dd$      j8                  di |$d)      }|
j                  |j:                         n|d   d   dXk(  rdY}%tm        jt                        }&tm        |jf                        }'dB|&|&dZd$d[dBd\}(|d   d   d#   })|)r|)j                  d]      r,tx        j{                  |)d]   d    j}                               |(d^<   |)j                  d_      r|)d_   d    }t*        j~                  j                  |j                  |/      }*|*s t*        j,                  j                  |`      }*|*r.tm        |*jt                        |(da<   tm        |*jf                        }'n+| j                  j"                  j%                  db|d           |)j                  dc      r|)dc   d    |(dd<   |)j                  de      r|)de   d    |(df<   |)j                  dg      r|)dg   d    |(dh<   |)j                  di      r d[dddj}+|+j                  |)di   d          |(dk<   |)j                  dl      r d'dmdndo},|,j                  |)dl   d          |(dp<   |)j                  dq      r,tx        j{                  |)dq   d    j}                               |(dr<   dsj                  dt |)j                         D              }-t5        |%j9                  |&|'tx        j                  |(dBu      |-v      j7                  dd$      d)      }.|
j                  |.j:                         n|d   d   dwk(  r|j                  ddwddx
      }/|j                  dyddzi
      }0|0j                  |d   d   d#   dz   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]  }tm        |       c}            d)      }|
j                  |j:                         n(| j                  j"                  j%                  d|        |j                  d      sG| j                  |d   ||       a 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   rI  layoutSectionrK  r  r  zmceNonEditable selected)contenteditablezdata-layout-sectionrI  r  rI  columnLayoutzfixed-widthsingler   rE  r   r  r   zflex-basis: )zdata-column-widthzdata-layout-columnr
  	extensionlocalIdzdata-local-idu&   Не удалось найти тег u    для r  macroMetadatarL  macroIdr  rX   r.  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  r  r  rk   r1  r  r5  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>
                    r6  r  diagramNamer  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   rO  r   r   rW  r  r  r  Tr  r9  r  rH  rJ  r   r  Fr  r  )r  rk   r{   r   r   r   )rk   r   r  r  r  r/   r   rT  r_  r6  u7   Не найден файл Draw.io диаграммы 'r  r  r  zERR-0010r  r   r  r  r  r  rk  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  r  r  rC   r  r  r-  r   r6   r  r  uE   Не удалось обработать тег оглавления r  r  r	  rC   r
  r  r  r  r  r  r  r  r  r  r  r  r  c              3   6   K   | ]  \  }}| d |d      yw)rO  rX   Nr$   )r   r  r  s      r&   r   z9ConfluenceAPIImport._convert_atlas_doc.<locals>.<genexpr>  s#     2k41aaS!G*3F2ks   rC  )r*   r  r  r  zpaste-code-macro)rI  r  r  r   prezlanguage-markupr  )rI  r  zdata-mce-selected__bodyContentr  r  r  bodiedExtensionr#  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*  u   Не нашли тег для r$   )Fr  r   r  r/   r  r  r   r   r.  r+  r   rT  extendru  r  r:   r  r@   r   r   rV  r    r  r  r   r   r   r   r  r  r  r
  r   r   r  r]  r   r{   r   r  r   rE   r  r\   r  r  r   r   r  ry   r   rk   r   r   r   r  rW  rX   rV   r   r   r   r1  r#   r#  r  r'  r   r  r  )2rR   r   r2  r  r  r  cntr  r  tag_layout_sectionr   r+  r  colr  tag_layout_colr  macro_paramsr  r2  r,  rt   r7  rk   r  r  r  r  r  r  r   
drawio_imgfile_name_imgr  r)  r  r  r  r#  r  r  r  parent_pager   r!  original_params_strnew_soup
code_blockr   rX   s2                                                     r&   r  z&ConfluenceAPIImport._convert_atlas_doc<  s9    )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.7.7 !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/9.7 !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+z 4z<z
<z*z$
z	z!	)Fr   )r  )r   i  )TT)T)NFr  )pr   r   r   r   r   r    	CmfImportrS   rQ   rD   rJ  rq   staticmethodr	   r   ru   rw   r   r   r   r   r   r   r   r  r,  r"  rf  r  r  r  r  r  r	  r)  r:  r>  rG  rR  rX  rZ  rk  rp  rx  r  r  r  r  r  r  r   r  r  r  r  r4  r7  r[  ra  rj  rn  ru  rM   IMPORT_OBJ_CNTr{  r  r  r  r  r"  r!  r  r#  r$  r/  r&  r'  r+  r,  r-  r   r  r(  r0  r)  r*  r%  r.  r  r*  r7  rJ  rL  rp  r~  r  r  r  r  r  r  r  r  r  rY   r  r  r  r  r   r  r  r$   r%   r&   r-   r-   *   sN   E!$= !$f>N>N !$F
2A8d 8 0d 0t 0 0 9UvB3  #=n =nd =n =n~M2w$IHVS/j2hb+H>3j]+~`"D3-j--^Zx!NF
4%l. .
7lk\'>9.;#z?B&&B$ B$H   0Pd@D\$ \|  &;> >D=R=R ./#b 4 'Dg#R.H`4l_"B@z9x89tJ9XA9FU9nl9\G9R/>b N" N"`H9T[8zR9h:9xz9x$JL&:-x5Jn\|&Zx39j3%jcJ	'4 'R##c" c"D c"J'`R<1|f2# 2#hd`LBM3 BMH'R0pS pSRU pSr%   r-   )#ru  r
  r  r   rR  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B[S B[Sr%   