
    @i                    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                   .   e Zd ZdZdedej                  f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dodefdZdefdZd ZdededefdZd ZdpdZd Zd Zd Zd Zd Zd Zd Z dpdZ!dqd Z"d! Z#dpd"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. Z/d/ Z0d0 Z1defd1Z2d2 Z3ed3efd4       Z4d5 Z5dpd6Z6d7 Z7d8efd9Z8ed:        Z9d; Z:drd<Z;d= Z<e=j|                  fd>Z?d? Z@d@e	fdAZAdB ZBdC ZCdD ZDdE ZEdF ZFdpdGZGdH ZHdI ZIdJ ZJdK ZKdL ZLdM ZMedpdN       ZNdO ZOdpdPZPdQ ZQdR ZRdS ZSdT ZTdU ZUdV ZVdpdWZWdX ZXdY ZYdZ ZZd[ Z[d\ Z\d] Z]d^efd_Z^d` Z_da Z`dsdbedefdcZadd Zbde Zcdf ZddeefdgZfdh ZgdtdiZhdefdjZidk ZjdpdlZkdudmedefdnZly)v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| _        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)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                     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)rQ   rT   rU   s      r&   rD   z,ConfluenceAPIImport._prepare_multiprocessingN   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)r`   fieldsselectedObjects)r`   valueimport_type)r   gcurrent_personr_   r`   rQ   s    r&   calc_import_settingsz(ConfluenceAPIImport.calc_import_settingsW   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   Преобразуем список с настройками в словарьr`   r$   )ri   ss     r&   _normalize_settingsz'ConfluenceAPIImport._normalize_settings]   s      '//&	1///s   c                     g S )uo    Для импорта из Confluence предварительный просмотр не требуется r$   rg   s    r&   previewzConfluenceAPIImport.previewb   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	operationrp   restrictionsuserresultsprivategroup::idr`   ext_idLIKE%filterupdatereadonlyrq   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)rQ   docdoc_objpermsr   restrictionru   person
group_infor{   _filterrx   s               r&   _process_restrictionsz)ConfluenceAPIImport._process_restrictionsf   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 (возможно не тот домен): rz   )splitr   rr   lenreplacer.   get_page_by_title	Exceptionr/   r@   warninginfor   )	rQ   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r`   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   rq   jsondumpsshutilmover   
cmf_commit)rQ   api_funcr`   	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)rQ   r`   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   )rQ   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   Это не файл: ry   rz   )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:   rr   r`   
downloadedr   r   r   cmf_rollback)rQ   r   r   r   r   key
parsed_url	url_partsemail_patternr`   	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   rq   r   r   r/   r@   r   )rQ   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   r`   r  r  userNamer_   displayNamefullNameuQ   Не нашли информацию по пользователю в дампе )r   r:   rE   lowerr   )rQ   r   r   r  s       r&   r  z,ConfluenceAPIImport._get_user_info_from_dump5  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_viewrc   bytype	anonymousrL   w+uE   Не удалось сдампить версии документа ERR-0025    выполнен за .3f    сек.r   indentr<  )rO   r/   r@   r   r   r   r   r   r   time	monotonicr   remover.   rF   get_page_versions
isinstancer   	log_errorrq   r   rH   inc_statr  r:   r   r6  )rQ   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_versionsG  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.jsonrC  )	r/   r@   r   r.   get_childrenr   r   r   r6  )r*   rQ  rR  r   children
pages_filer   rQ   s          r&   dump_child_pageszKConfluenceAPIImport._dump_documents_expand_worker.<locals>.dump_child_pages  s    OO""''*st  tA  )B  C'+'C'CF'KLLHL!**<8Jj$' '1		(A&' ' M' 's   	B/BBc                 Z   g }|j                  d      }|j                         r*t        |d      5 }t        j	                  |      }d d d        |j                  d      }|j                         rt
        j                  |       	j                  j                  j                  d|        t        |d      5 }	j                  j                  |       D ]x  }|j                  t        j                  |      dz          |d   d   d	   D ]A  }	j                  j                  j                  d
| d       ||vs1|j                  |       C z 	 d d d        t        |d      5 }t        j                  ||dd       d d d        y # 1 sw Y   CxY w# 1 sw Y   ExY w# 1 sw Y   y xY w)Nr  r/  zrestrictions.jsonu%   Дамп прав документа r   r   rt   ru   rv   zrestriction )rC  r   FrH  )r   r   r   r   r   r   rL  r/   r@   r   r.    get_all_restrictions_for_contentrq   r   r   r6  )
r*   rQ  rR  rT  rU  r   restriction_filer   ru   rQ   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   rL  r/   r@   r   r   r.   get_all_page_labelsrq   r   r   )r*   rQ  rR  lables_filer   labelrQ   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   " (rz   rg  statustrashed   Документ uW    был удален. Пропускаем дамп расширенных данныхrC   r   rr   rL      uO   Повтор дампа расширенных данных документа    , попытка u\   Не удалось сдампить расширенные данные документа rD  r#   r6  r7  r   )r   r:   putr/   r@   r   qsize	is_cancellogr>   WARNINGranger^  rO  )
rQ   
page_queueobjs_that_are_donere  rj  rp  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   r0  r/  rz   r   rr   ru  rL   )rz   r   rr   ru  rL   uC   Дамп расширенных данных документов: z_dump_documents_expand_worker )r  r  targetr`   kwargs   Форк proc=uR   Ошибок дампа расширенных данных документов: )rU   Queueiterdiris_dirr   r`   endswithr   r   r   r   r   r:   rL   r{  r/   r@   r   r  rT   Threadr  r   startjoinclearempty)rQ   objs_dirmax_workersr  r  r  
page_countdoc_dirrW  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)7Nrs  r   rt  rz   rg  r  Texist_okhistory	createdBylastUpdatedr@  ownedByrA  rB  r6   r.  attachments.jsonr1  )page_idr=   rC  )modery   _linksdownloadr2  z[?&]version=(\d+)r   .)r`   r   rr   )r   r   ra   )r   r   r/   Fr>  viewrc   zcomments.jsonu5   Дамп комментариев документа r   z@,extensions.inlineProperties,extensions.resolution,children.pager  r   commentr?  rL   r  r   rH  rr   r0  r;  rw  u     успешно сдампленr)   )+r   r   mkdirr   r:   r.   get_all_attachmentr   r   r6  r/   r   r   
url_joinerr   r   r   rx   r    r  r`   r   rr   r   r   r  import_raw_jsonr   r   r  r   rL  r@   r   r=   get_page_commentsrq   r   rH   rP  r   r   r~  )r   rR  r  doc_dir_tmprT  ownerr   rW  r   attach_infor   
doc_ext_idattatt_idr  download_linkdownload_urlr1  attachment_pathattachment_path_tmp
att_ext_idr  comments_file_namer=   r  r#  	info_pathr  rQ   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Frq  r   z,versionr   r=   ru  ru  currentrv  rs  r   rt  rz   rg  u   Дамп документа r   ry  u+   Повтор дампа документа rz  r   u    из 3rx  r5  r-  rD  r#   r6  r7  )r   r:   r{  r.   get_page_by_idr=   r/   r}  r@   r   r  r~  r>   r  rH   r   rO  )rQ   r  bulk_page_queuer  r  r  page_idsr  r  r  r  r[  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.6LL$)+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.   Ошибок дампа документов: )rU   r  r  rT   r  r  r   r  r/   r@   r   r  r  r  r:   )	rQ   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   Добавление страниц в очередь дампа выполнено за rF  rG  uU   Дамп основных данных документов пространства r   rE  uC   Дамп расширенных данных выполнен за    Импорт прерван)rY   rU   r  r/   r@   r   rJ  rK  r  r  r   r`   r  r   r   r   r{  r  r  r}  r   )rQ   r   r  r  	space_keyr  max_bulkr  r  	temp_listrV  r  r  r\  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   rp   )r   r  )r   restrict_content)r   
administer)r   exportrs   
targetTypeF)
permissionr   groupsrB  r   ru   rv   r   r4   r   rx   r  rz   r`   )rz   r`   anonymousAccessTrB  spacePermissionsrA  r&  	groupNameu>   Не удалось сдампить права доступаzERR-0056
CmfProjectr6  )r9  r:  rr   /permissions.jsonr   )	convertedoriginal)r.   get_space_permissionsrF   r:   
setdefaultr$  r/   r   r   rO  r   r   r   rL  r   valuesr   r6  )rQ   r   permissions_dictpermissionsmapping_typer  rs   type_permru   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 для повторного дампа
        Frz   r   rA  ru  r6   rv  rc  r  rv      )limitr=   rc  r  r  	ancestorsr7   Nz.hashr/  T)r<  	sort_keyszutf-8rC  r  r  u   Контент  '' (uQ   ) удален. Он не будет сдамплен и импортированr  )r   r.   r  r  rF   _folder_lock_folder_setaddr   r   r   rp   r   r   hashlibmd5encode	hexdigestrq   r/   r@   r   r   r   r  )rQ   r=  content_hash_dirr  comment_expandis_new
is_updated
content_idcontent_titlecontent_typecontent_statusr  commentsr  r.  ancestorcurrent_hash	hash_filer   content_jsonnew_hashr  doc_tmp_dirdoc_trashed_dirs                           r&   _check_content_hashz'ConfluenceAPIImport._check_content_hashr  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.resolutionFrq  r   r  allnewupdatedr   )r  r  r=   ru  ru  r  rz   r   r$  r   r%  r&  uB   Не удалось проверить хеш документа "rt  ). rD  r#   r6  r7  r  )r   r  r   _start_lock_startr.   get_all_pages_from_spacer   r   intr   r/   rO  r{  )rQ   r  r  hash_dirhash_stats_queuer  r  r=   page_expandr  
hash_statsr  r   r6   r  
page_titler  r  r[  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~-CC !$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  Frq  r   r#  r"  r   r  ru  r  r$  r   r%  r&  u9   Не удалось проверить хеш папки r-  rD  r5   r6  r7  r  )r   r  r   r:   r{  r.   r  r   r+  r   r/   rO  )rQ   r  r,  folder_queuer-  r  r/  	folder_idr7   r  r  r[  s               r&   _check_folder_hashz&ConfluenceAPIImport._check_folder_hash	  s   #,,V4-51 )	-	J (,,.	$ $$Y/.!__;;!>$ < F h'/EE 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  rr   z/hashTr  z_check_page_hash r   )r  r  r,  r-  r  r  z_check_folder_hash )r  r,  r3  r-  u   Запущен r  r$  r%  r&  uC   Проверка хеша контента выполнена за rF  u8    сек. (всего/новых/обновленных: r   rg  u(   Ошибок хеша контента: )rU   r  r)  rT   Lockr(  rJ   r
  r	  rY   r   r  rJ  rK  r  r  r1  r   r  r/   r@   r   r  r.   rF   r{  r5  r  r:   )rQ   r   r  	dump_datar-  r  r  r,  rV  r  r  r  r3  r7   threadsthreadr\  r  obj_allobj_newobj_updatedr/  s                         r&   _check_hashzConfluenceAPIImport._check_hash8  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  r/  NrA  rB  rC  r   FrH  )r/   r~  rJ   r   r   r   r   r   r   rE   r   r   r  r   unlinkr6  list
differencer$  r   )rQ   project_dirr  current_userscurrent_user_idsrU  r   unew_user_idsr*   r#  ru   
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   )rQ   project_keyrC  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)NrK  r  r  u(   Пропускается каталог r   rL  r   )r/   r   r   r   r   r  r@   r   r   r   r   )rQ   rC  rM  r   rN  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	isCheckedrc  	documentsrz   u'   Документ не загружен zERR-0015r#   r6  r7  r6   rv   Trz   rU  rc  )_get_documentr   r   r/   rO  r   )rS  r  doc_dumpchildrb  rQ   s       r&   rb  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_settingsrb   rc   r   rU  Nrc  T
root_pagesrW  archived_pagesr   r  rz   rr   rK  uc   Не удалось вычислить выбранные документы для проекта u4   , скорее всего он не сдамплен)r   r   rl   r/   json_settingsrQ  r   rJ   rO  r  r:   r   r   r@   r   rK   )rQ   ri   rootsetting_objselected_spacesrN  r*   resultr   rS  rb  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:   )rQ   rd  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   rz   rf  rC  Fr;  )cmf.utilrj  r.   get_applinksshort_str_encr/   r   r   r   r   r6  )rQ   rj  rg  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)&Nr[  rb   rc   r   rU  Trc  rz   )r   rz   rK  r  r   r  r   r0  r/  	dump_daterO   r   u&   Дампим пространство r`   r  rr   r\  uJ   Пустой проект, возможно нет прав доступаr]  rC  u=   Дампим права доступа (Разрешения)
/documentsuD   Проверка хеша контента пространства )r8  r   u1   Ошибка дампа пространства zERR-0026r  r6  r7  )0rl   r/   r^  ra  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   r6  r   r   r   now
astimezonedater>  r<   r  rI  r   r   r  rO  )rQ   ri   r_  r`  r   projects_dirr  r   rC  rW  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  rz   r`   r   r   r   r0  r   rC  r   r   )r/   r   r   r   r  r.   get_all_groupsrF   r   r   rH   r   r   r6  get_group_membersrE   )rQ   
groups_dirrx   r{   	group_dir	data_filer   	users_dirall_users_dirru   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   Не дампим пользователей из-за опцийrx  r   r   ru   )rc   )r/   r   r   
disk_usager@   r   r^  rc   r:   r   r.   get_all_usersr~  r>   r  rp  r  r   rP  )rQ   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   Frq  TDONE)r`   r   rr   r   r  )rz   ra   ry   r   u   [Страница ID: z] r  '
extensionsfileSizei    (z.2fz MB)u   Скачивание : ')timeoutu	   Файл u    сохранен в 'r  u"   Ошибка скачивания z'. zERR-0027r  r6  )r8  r9  r:  ext_href)r   r/   r}  r:   r    r  r   r`   r   rr   r   r   r   r  r@   r   r.   download_filerM   IMPORT_DOWNLOAD_TIMEOUTr  r   r   rP  r   r  rO  r{  )rQ   download_queue
done_queuer  download_job_iddownload_objr  file_urlr   ext_id_splitpage_id_msg	file_sizefile_size_mbr[  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)r`   r   all_attachments.ziprK  r   r  r   rr   r|   r}   r~   u3   Нет вложений для скачиванияu'   Скачивание вложений: r  )r  r  r  u    Запустили задачу --r   ra   r  r  uC   Закончили скачивание файлов, ошибок ) rU   r  r/   load_fieldsr   r   r   r   ra  r   r  r    r  countr   r@   r   r  rY   rT   r  r  r  slistr{  rz   r   r  r  r}  r   r:   )rQ   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   rQ   rr   comments_file_pathr   r   s        r&   _get_commentsz!ConfluenceAPIImport._get_comments3  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_restrictions9  sR      $v%78$d+ 	&q &jjo%&	& 	& 	&r  c                 b      j                  d         D ]  }d fd	 |        y )Nrr   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))Nru  draftuJ   Не обрабатываем черновики комментариев r  	processedry   rz   r   r{   ra   r   r{   r/   **r  r  rA  rB  r  createdDater  r@  whenr>  r  rc   editorr   r  r  locationinlineT
resolutionresolvedclosedr   rc  u7   Ошибка обработки комментария r   r   zERR-0028r8  r   )#r/   r@   r   rP  r   r   r    
CmfCommentr:   r   r  r   rE   	cmf_ownerre   anonymous_usercmf_created_at
cmf_authorcmf_modified_bycmf_modified_atr   _convert_mentions_convert_linksr  r>  rc  r   r   r  tree_parentr  ru  r   r  rO  )r  r  r{   cmf_commentr  r  	view_soupeditor_soupxrZ  r  r   r   rQ   s             r&   r  z9ConfluenceAPIImport._process_obj_comments.<locals>.createA  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  )rQ   r   r   r  r  s   ``` @r&   _process_obj_commentsz)ConfluenceAPIImport._process_obj_comments?  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)Nr.  r  )r  r   )r   r   r   r   )rQ   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  r1  r2  r  r  1r   r   rz   )r   	fullmatchr   r   r   r   r   r   r   r   r   parse_qsqueryr:   )r  r  
file_matchfile_idfile_versionr   attach_info_listattachr1  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                 F   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      rs|d   }|j                  d      |_        |j                  d      r2|d   d   dk7  r'j                  |d   j                           |_
        nt        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   rr   rz   r  r   )r   r   url_preview_imgurl_preview)r`   r   ra   Tr`   r   r/   r   r   r1  r  r@  rA  rB  rbFsmart_backup
mark_dirtyr  r  u   Размер файла 'r  u@   ) не соответствует размеру из меты: z	 bytes / z byteszERR-0029r   r   u;   Не удалось обработать вложение 'rg  )r  r    CmfAttachmentr:   r/   r   r   r  r   rE   r  re   r  r   upload_filerp   st_sizeAssertionErrorrO  r   r  )r  r   errorattachment_metaattachment_idattachment_namer  attachment_versionr   file_size_metar   r   rQ   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i. 
H!"..FFH)-', / 
 6:
2"D9*-<\-J:-VN#-#5#5#GG#G
H8 Q .P 9
H8 # " ))//@M? S55?5G5G4H	R`Qaagi	 *     ))QRaQbbefsettuv * 
  sP   D F %AF	<F 	FF F A HH 9HH HH H rr   r  r   r  r  )r  r/   rP  )rQ   r   r   r  r  attachment_datas   ```   r&   _process_obj_attachmentsz,ConfluenceAPIImport._process_obj_attachments  sp    C	J  $88VE 	@O),, F OO$$\;?	@ r%   c                 h   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                  ||||       djC                  |jD                  jF                  D 
cg c]  }
tI        |
       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 )Nr>  r  rc   r  z<p></p>r   uC   Конвертация текста из atlassian разметкиatlas_doc_formatr=  )soupsubobjuT   Не удалось конвертировать разметку страницы "r   rs  r1      (версия r2  rg  zERR-0031r  r  r  )%r    r#   get_data_iddata_idr   r.   rF   r/   r@   r   r   r   _convert_atlas_docr   r:   rO  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_tocr  _convert_inline_comments_convert_excerpt_convert_detailsr  r>  rc  r   )rQ   obj_datar   r  r  r  r  r  	atlas_rawexception_textr  r   s               r&   _convert_doc_textz%ConfluenceAPIImport._convert_doc_text  s   ))55'0&!(+G4K D!$/	#FF3??  Z&&++.qs JJx'78J'KG'TU	''Yy-A	Z`'a 	sI{;Y4sI{;S)[9YFK  i=!!#y+>%%c9kBc9k:&&sI{C%%c9kBY4)[1 	CK8 	%%c95i5c9k&Iww	(?(?@1A@AA  Z$y  {C  {G  {G  HO  {P  zQ  QS  #T<<	*"8KH8U7VVW&XXN)).ZUX)Y	Z< As   1AI 1J/AJ,+J,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   )rQ   rr   versions_file_pathr   r   s        r&   _get_versionsz!ConfluenceAPIImport._get_versions/  sg     !TF."9:$$&($/ *1 *C**S/)** * s   +A#A
A#A A#rX  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  rz   z): version r2  ry   r  r  r  r1  r  r  r  r@  rA  rB  message%Y%m%d%H%M%S%fCLOSEDstatus_typer=  ru  r  r  Tr   u@   Ошибка обработки истории страницы z): zERR-0033r  r   )*r/   r@   r   r   r   r    CmfDocumentHistoryr:   r   rP  r  r  r   rE   r  r  r  re   r  reasonofficial_numberofficial_dater+  rc   strftimecmf_versiondoc_versionworkflowget_default_statusru  boolcur_workflowr*  r   has_publishedr  r   r   r   r  rO  r<   )version_datacmf_document_historyr{   r   version_contentrX  r   rQ   s        r&   create_versionz=ConfluenceAPIImport._process_versions.<locals>.create_version8  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_deleterr   )rB  Fr  )r   r@  cmf_deletedr   r   )r    r6  rA  r  r   	enumerater-  rM   $IMPORT_CONFLUENCE_PROC_LAST_PAGE_VERr@  r   cur_workflow_versionr   )
rQ   rX  r   rE  dhr3  version_countr1  document_historyfake_historys
   ```       r&   _process_versionsz%ConfluenceAPIImport._process_versions7  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)	Nr0  r/  labelsrl  ra  r6   )rv   sizerc  )r   r   r   r   r   r   r   r   )r  r*   doc_filer   reslabels_filef2	label_strrd  f3r   s              r&   rX  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 )NrV  c                 ^    | j                         xr | j                  j                  d       S )Nr  )r  r`   r  )	path_objss    r&   r   z3ConfluenceAPIImport._get_doc_dirs.<locals>.<lambda>  s'    i..0q9P9PQp9q5q r%   )r   r   r  r   )rQ   
space_pathr^  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)Nrs  r   r   )r   ra  rX  r`   )rQ   rC  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=   )sumra  )rQ   r_  s     r&   _count_space_documentsz*ConfluenceAPIImport._count_space_documents  s    =d00<===r%   c           	      T   i }d}d}d}| j                  |      D ]a  }|dz  }||k\  r|}d}|j                  |d       ||xx   dz  cc<   t        d | j                  t	        |            D              }||dz   z  }c |j                         D 	cg c]	  \  }	}|	|f }}	}|S c c}}	w )Nr   r   r   c              3       K   | ]  }d   ywrh  r$   ri  s     r&   r   zCConfluenceAPIImport._get_offsets_for_execute_doc.<locals>.<genexpr>  s     LaLrj  )ra  r  rk  r-  r   r  )
rQ   r_  r  offsetscurrent_offset	obj_countrd  r  rO  rc  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   Frq  r  rs  r   rt  rz   rg  r   r+  r,  u3   Обработка версий документа r-  ry   )r   r=  rM  r{   r  r  u4   Документ не найден в системеuQ   Документ изменен пользователем, пропускаем u@   Ошибка обработки версий документа zERR-0084r#   r8  r9  r   )r   cmfutildisable_aclr:   r/   r}  rM   rL  r@   r   r   r   r    r#   r   r   rR  r  rO  r{  )
rQ   	obj_queuer  r  r   rR  rS  r{   r   r[  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(rT  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)
        rz   ry   r{   r|   r}   r~   u   Не найден тег 'r  rg  zERR-0017r  )r/   r   r   r    CmfTagr:   r   rO  )rQ   content_objrT  tagsro  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:rz   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   )rQ   r{  r=  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   Frq  Tr  rz   r   rA  r#   r  r  rg  r  ry   u   Обработка is_homepager  r{   r  r`   r/   r   r{   u|    был изменен пользователем. Изменения из импорта не будут примененыrC   rB  r)   r  r  r  u"   Определяем автора r   rB  u   Не найден автор r  u(   Определяем владельца r  r@  =   Определяем последнего редактора r6   ru  r4  r  r  r3  )r`   r   r=  ru  r  r  r  r  r  cmf_archivedr{   r  r  r|  r   r1  r2  rT  u   Ошибка создания uS   . Попробуйте очистить дамп и повторить импортzERR-0018rt  r   u^   . Попробуйте отменить импорты связанные с проектом uY   , чтобы он удалился из системы и повторите импорт)>r   ru  rv  r:   r/   r}  rP   varsr    rX  r   r   r~  root_parent
class_namedescr_documentrc   r   r>   r  rP  r@   r   re   r  r   rE   r   	scheme_wfdefault_document_workflowr;   r>  r   get_status_typer?  r5  r  r  setattrr   r   r   r  r  r+  r  r:  r;  r  r|  full_screenr*  r   r  r   FileNotFoundErrorr  rO  
log_detailAttributeErrorr   r{  )rQ   rN  archive_folderrw  r  r  content_datar  r  r  content_model_namecontent_modelcontent_descriptionr=  r{   wiki_project_homepager{  authorr  r  r  modifiedr  r=  ru  content_dictr  s                              r&   _process_document_forkz*ConfluenceAPIImport._process_document_forkH  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   r`   r   u#   Диаграмма с именем u@    не найдена во вложениях документа zERR-0019r  r   r   r`   r|   %.pngr   r  100%zdiagramWidth=([^|]+)zdiagramHeight=([^|]+)r`   	attach_idwidthheightimg_srcr  r   html.parserrz   zdrawio-macro-content-data-macro-iduU   Неудалось конвертировать диаграмму из текста r$   )r   r   r   r   rx   r    r  r:   r/   rO  r`   rc   rz   r   r   r   formatfindreplace_with
currentTag)rQ   r   r  r  TAG_TMPL
macro_namer   matchr  r  
attach_imgr  r  r  rk   
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   rz   rc   r/   rO  r   r  r  )	rQ   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   )numrz   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
pagesCountFr;  r  )r  r  r  plugin_titler  )r  rz   r   r  get_fullviewsortrK  r   r   r   r:   r   r  r   r   r  )rQ   r   r  plugin_typeTMPLr  r  fullview_pagesr   r  fullview_pager6   param_typesr  r  s                  r&   _create_msoviewer_macro_tagz/ConfluenceAPIImport._create_msoviewer_macro_tagW	  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rF  r   Nr   r   params     r&   r   z9ConfluenceAPIImport._convert_msoviewer.<locals>.<genexpr>	  s     *g55;;sA+>*g   |r`   r   r`   &   Не найдено вложение 'r  0   Ошибка обработки макроса '   ' в документе 'r  rz   rg  r  r-  ERR-0012r  N)r   r:   r   r   r    r  r   r  r  r  r`   r  rN  r6  r8  r/   rO  )rQ   r   r  r  r  macro_types
macro_typer   original_paramsr  r  r  r[  
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  rc  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rF  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excerptTyper=  r  simplezrich contentr  r  r`   r  r  r   creationr  sortTypereverser  r6   r   
documentIdtrue,:r<  
separatorsrs  &quot;)r*   doc_namer  r  cmf_convertedr   r  N)r  r   r:   r   rz   r   r   r   r`   r   r  r   r   r   r  r  r  )rQ   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  r`   &   Выборка без названияNr  c              3   2   K   | ]  }t        |        y wr   r   r   r=  s     r&   r   z7ConfluenceAPIImport._convert_excerpt.<locals>.<genexpr>
  s     'UG'U   r`   r=  r  )r   r:   r   r   r  r   r  r  contentsr  r  )
rQ   r  r  r  r   r  r  excerpt_namer  r  s
             r&   r%  z$ConfluenceAPIImport._convert_excerptT
  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  r`   r  r#  	page_namer  r  N)r   r:   r   rN  r    r  r  r   r   r   r   r  r  r  r  )rQ   r   r  r  r  r   r  macro_default_parameterr  r)  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   rN  r    r  r  r   r   r   r  r  r  r  )rQ   r   r  r  r  r   r  r*  r  r.  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>J  s;      u{{3*+q0 C#r  r  rA  rA  outlineF	separatorbracketsrI  40pxr  mixedhminLevelr  maxLevel6excluder,  	printableTabsoluteUrlclass)rA  r3  r4  rI  r  r9  r:  r<  r,  r=  r>  r?  r  r  rs  r  r  r  r  r  Ndiv)r  r   r:   r   r   r   r   r   r   r  r  r  r  )rQ   r  r  r  r   r  r  
parametersr  r  r  s              r&   r#  z ConfluenceAPIImport._convert_toc  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           	      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  ru  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  )rQ   r  r  r  r   r  r  r  rH  r   r  new_tag_viewr  s                r&   r  z#ConfluenceAPIImport._convert_statust  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   ro  z\=rs  inz()r  r   #r  ruTlanguage_codereversedORaliasILIKE"%r`   r2   r  r`   r   *   Не удалось создать тег r   rz  )r`   r2   rz   	classNamer|  INr   zcurrentSpace()r{   r|   %::::%r  z%"key":"u.   Не удалось найти проект «   »r  r   )transliteraterM  rA  r   iterr   nextstripr   r    rz  r:   r   r   r>   r   rz   rc   r   r`   r2   r  StopIteration)cqlr   r   rM  bql_listbql_dict	cql_partscql_partopr  rT  ro  tags_ids	tags_listlabel_aliasr   r   r   rk   
parent_idsparent_listr   rN  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  rF  r   rd  r  r   defaultr	  FTr  Truemax   
showLabelsT	showSpacer  r|  )
r  modelr  r	  ru  rw  rx  r  bqlr|  ui   Не удалось конвертировать макрос «Содержимое по меткам»     с параметрами: zERR-0034r  r  r  r   z:Truez:truez:Falsez:falserB  r  N)r   r:   r   r   r   ro  r/   r   r   r+  rO  r   r  r   r  r  r  )rQ   r   r  r  r  r   r  r  all_parameterspr  rz  rf  rB  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="r0  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  rF  r   ud   Не удалось конвертировать макрос «Свойства страницы» r{  zERR-0035r  rz   hiddenFrs  )rz   r  r;  rs  r  r  z details-hidden)macro_data_idrB  r=  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   Отсутствует таблица свойств.trr?  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/   rO  r   r   r   r  r"  r   r  r>  insertr  r  r  rN  r    r  r   zipr6  r@   r   	macros_dbr   rc   macros_db_draftr   r  )rQ   r   r  r  r  r  r  r   r  r  r  r}  r~  rB  r  prmr  contents_strr  r  
propertiescontents_tableth	first_rowtd
second_rowr  r   s                               r&   r&  z$ConfluenceAPIImport._convert_details@  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  rF  r   rd  r  headingsr  showCommentsCountFrs  showLikesCountreverseSortpageSize   NsortByfirstcolumn)r  showCreatorshowLastModifiedr  showPageLabelsshowUnresolvedCommentsCountr  r  rz   r  r  r  settingsParamsrz  uv   Не удалось конвертировать макрос «Отчёт по свойствам страницы» r{  zERR-0036r  r;  rs  r  r|  r  )r  r   r:   r   r   r   ro  r/   r   r   r   rb  r+  r  rO  r   r   r   r   r  r  r  r  )rQ   r   r  r  r  r   r  r  r}  r~  r  rz  rf  r8  r  rB  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="zl" data-layout="default" class="extension-container" contenteditable="false">
                <span data-id="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="z=" class="macros-actions">
                    <span data-id="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  )	rQ   r  r  r  r   r  macro_param_namer  r  s	            r&   r"  z#ConfluenceAPIImport._convert_anchor1  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	(?<!\\)\|rF  r   jqlQuery\r  z\|\|?rT  z&&?ANDserverIdro  	columnIdsr  r   r-  Nry   r   r  r  T)r{   r/   r   r   )
logic_typer2   r`   responsibler  priorityru  r  r  r  deadlineFmaximumIssues   )bordercolumns	itemsSizefilterId
filterNamefilterParentNameuserFilterIduseCustomFilterr  r  rs  r  r@  r  rA  )r  r   r:   r   r   rb  r   subrh  r   convert_fieldr   r   r/   r@   r   r{   r    CmfBqlFilterr   r  r   r   rz   r   r   r   r  r  r  r  )rQ   r   r  r  r  r   r  r  r  r  r  rc   	jql_queryro  r  
column_ids	column_idcolumnr[  	tf_ext_idtfdefault_columnsrB  r  r  s                            r&   r  z(ConfluenceAPIImport._convert_task_filterm  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   ru  html_contextr  r  inlineProperties	markerRefzdata-refr  r  r   zdata-idzdata-object-idzinline-highlightr?  inlineCommentzdata-mark-annotation-type
annotationzdata-mark-typeTr  r   uO   Не удалось конвертировать inline комментарий r   zERR-0020r  )r    r  rA  r  r   r  rc  r   ru  r  r   rz   unwrapr  r   r/   rO  r   )rQ   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=rg  	
subprocessPopenr/   r   rz   r   r~  pidr  rQ   rN  rc  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 ]>  }d }|d   r|d   d	   d   }|d
   d   }|dk(  r|d   }|t        |      |d   d||d   <   @ d  fd ||d       y )Nhomepager#   NNrz   rA  rr   r  r  r   r  positionr  r   )r   r  rA  c                     t        j                  d|       D cg c]-  }|j                         rt        |      n|j	                         / c}S c c}w )Nz(\d+))r   r   isdigitr+  r)  )rk   r   s     r&   natsortz<ConfluenceAPIImport._prepare_documents_tree.<locals>.natsort@  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   rA  c                 &     | d      d         S )Nr   r  r$   )rZ  r  r  s    r&   r   zQConfluenceAPIImport._prepare_documents_tree.<locals>.build_tree.<locals>.<lambda>K  s    GDqN:4N,O r%   r  r  )r  r  r   rI   )r  r   orderno	parent_idr   rZ  r   rc  current_ordernochildren_in_orderchild_id
child_typenext_orderno
build_treer  rQ   s   `            r&   r  z?ConfluenceAPIImport._prepare_documents_tree.<locals>.build_treeC  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  re  rl  r   )	rQ   r   r  r   r   r   r  r  r  s	   `      @@r&   _prepare_documents_treez+ConfluenceAPIImport._prepare_documents_tree"  s   F	99Z(**m;#H (89H&&uV}D<W<WX]^dXe<f&g 	CF;[)"-d3 <(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<    запущена в несколько процессов: rr   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/   rZ   r  popr   )available_processesr   rc  r  r  funcr[   ro  r  rN  rQ   s        r&   execute_processeszFConfluenceAPIImport._run_parallel_processes.<locals>.execute_processesl  s    7|},"%11e1<G,# ./ % 'AGVU3t$%r%   r   u    завершена)r   r/   rZ   r@   r   rr  rJ  sleeprA  pollr<   rL  r   communicate
returncode)rQ   r  r   rN  process_namer  r  r  r[   ro  r  s   `` `    @@@r&   _run_parallel_processesz+ConfluenceAPIImport._run_parallel_processes\  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           	      X   | j                   j                  j                  d       |j                  dg       |j                  j
                  }| j                  j                         D ]  \  }}|\  }}	 | j                   j                         r y |r| j                  j                  |d      }t        t              |   }| j                   j                  j                  j                   d| }	|j                  |	dg      }
|
s;| j                   j                  d| d| j                    d	|
       n| j                   }
|D ]  \  }}}| j                  j                  |d      }t        t              |   }| j                   j                  j                  j                   d| }|j                  |g d      }|s&| j                   j                  d| d| dd|
       |j"                  s|
r|
|k(  r| j                   |_        n|j$                  |
k7  r|
|_        ||_        |j)                  d        |
r%|
j*                  sd|
_        |
j)                  d       t-                 y # t.        $ r0 t1                | j                   j                  d| ddd
       Y @w xY w)Nu6   Построение дерева документовr  r#   ry   tree_node_is_branchr  u    Не найден предок 'u>   '. Потомки будут помещены в корень zERR-0120rt  )r   r  r   r  u"   Не найден потомок 'u   ' у предка 'r  zERR-0003Tr   u7   Не получилось привязать ноду 'zERR-0024)r/   r@   r   r  r  rc   rI   r  r}  rP   r:   r  r    r   r   rO  r  r   r  r  r   r  r   r   r  )rQ   rN  project_homepager   rc  r  parent_typeparent_model_nameparent_modeltree_parent_ext_idr  r  r  r  child_model_namechild_modelchild_ext_idrZ  s                     r&   _process_documents_treez+ConfluenceAPIImport._process_documents_tree  s   ##$\]-./"1177 $		 1 =	FH%+"I{;??,,.(,(;(;(?(?]([%#'<0A#BL,0OO,B,B,I,I,U,U+VVXYbXc)d&"."2"21 56 #3 #K '11>yk JZZ^ZjZjYkm'1%6	 2  #'"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 
 !,, +*.>>040@0@E-"..+=0;E-(/

t
4154 {'F'F6:K3$$$6m=	n  ))MfXUVW)* * s    5I0EI01A;I005J)(J)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  rg  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  rr   r  r/  ry   rz   r{   T)r{   r   r/   r  u?   : Схема проектных прав доступа для r`   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   ra   F)r!  zPPP-OBJ-DELETEr  r  u8   Не найдено соответствие права )r2   rG  u    Не найдено право "u	   " для zERR-0059CmfProjectPermPermissionr9  r   r   )r2  r   ra   u2   В схеме не найдено правило "r  r   u)   Не нашли пользователя u    для прав zERR-0060r  r{   r|   r}   r  rV  u   Не нашли группу zERR-0061rB  u>   Не удалось импортировать правило zERR-0063CmfProjectPermSchemeRule)!r   r   r   r   r/   r   r   r    CmfProjectPermSchemer:   r  r`   r   r6  rA  r   r3  r  r2  r2   r&  r@   r   r4  rO  r<   r   r   r.   rF   r   r{   r/  )rQ   r   mapping_permr  r   	perm_listperm_scheme_ext_idperm_schemerule_bool_fieldsrule_fieldsruler   	perm_dictr  r  r  scheme_ruleru   r   rx   
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.wikirT  r`   rV  task_code_prefixT)r  r`   rG  r   rG  ra   z Wikiu   названиеWIKIu   кодu   В u    и u9    проекта добавлен суффикс 'Wiki': 'r  rg  r  )r    r  r  r`   r)  r   rG  upperr/   r~  r  r>   r  )	rQ   
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]): новые названия и код проекта
        rT  r{   NOT LIKEr}   )r{   rF  Nr`   rV  r  r  r  rg  u   Проект с именем 'ud   ' уже существует. Импортируемый проект переименован в 'r  zERR-0131r  rt  r   rG  TrH  r   u   Проект с кодом 'ug   ' уже существует. Код импортируемого проекта изменен на 'zERR-0132)r    r  sgetr/   rO  r`   )rQ   rK  r  r{   ext_id_filterrN  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)pNr[  rd   rc   rz   
add_suffixTr  r`   z' (id: z, key: r  rg  u0   Импортируем пространство rr   rV  r  uE   В дампе не найдена домашняя страница 'r   r  u   У пространсва u    нет домашней страницы. Сведения о создателе и дате создания пространства будут взяты из первой корневой страницы.r\  uW   Не удалось получить данные корневой страницы id=u(    в дампе пространства uS   В дампе не найдено ни одной корневой страницыr  r  uD   Определяем автора домашней страницы rA  rB  r  r  uJ   Определяем владельца домашней страницы r  r  r@  r  r  r  r  r  r  personalu(    (Личное пространство)u%   Личное пространствоdescriptionry   r{   r|   r}   )rE  rG  r  r  FuI   Найден ранее импортированный Wiki-проект project.agileu    Найден Agile-проект u_    с импортированным в раздел 'Документы' Wiki-проектом ')rB  )project_wikir   u3   Создание нового Wiki-проекта 'rN  zproject.wiki:defaultr1   )project_typer  r   u,   Создание нового раздел 'u-   ) в портале 'Моя компания'sectionzCmfWiki:Class)r_  r  tree_parent_id)r`   r/   r{   r   )rE  r   r]  rT  rG  rV  )rE  rG  r{   u   Не найден Agile-проект для объединения. Создайте или импортируйте одноименный Agile-проект и повторите импорт проектаu"   Импорт Wiki-проекта 'u<   ) в раздел 'Документы' Agile-проекта r   u8   Неизвестный тип опции импорта ra  r   )r`   r   u   ДокументыuL   Не найден раздел 'Документы' в Agile-проекте rN  project_perm_schemer  u"   Настройки проекта u    были изменены пользователем. Изменения из импорта не будут примененыr  r~   u   Документ1)r  r`   rH  rF  u   Документ2r  u'   Обработка документов)r  r   u   ВсеuY   У документов будет обработано последних версий: u   . Для изменения, поменяйте значение параметра IMPORT_CONFLUENCE_PROC_LAST_PAGE_VER в config.u4   Обработка версий документовu   Обработка версий документов отключена параметром IMPORT_CONFLUENCE_PROC_LAST_PAGE_VER в config.u6   Ошибка импорта пространства 'r'  zERR-0032r  rt  )Brl   r/   r^  rc   r:   rc  rQ  r}  ra  r@   r   r   r   rX  rx  r   re   r  r   rE   get_correct_keyr   r   r    r  rA  keysrE  r~  CmfLogicTyper   r{   r   r   r#   rz   r   r  r  r?  rQ  rX  rC  r  r`   r   gen_coder2   r   r>   r  rN  r  r  r  _process_project_tagsr  r  r  r  rM   rL  r  r   r  rO  )rQ   ri   rd   rZ  r   project_fieldsproject_is_newr   space_full_namer  homepage_idr  	root_pager  r  r  rK  r  r{   rN  log_msg
doc_folderrN  r  rm_doc_folderrm_doc1rm_doc2r  rS  r[  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   rL  rr   r  rT  rz   r`   r   r   rO  r  rP  TrQ  ry   r{   r|   r}   r   r  rT  rU  rV  rs  rW  r  r   rY  zERR-0022r  )r_  rM  r   re  rl  r/   r}  r  r   r   r   r    rz  r:   r{   r`   r  r   r   r   r  rO  )rQ   r   rN  rM  r|  r   r   tag_name
name_aliasr{   tag_objr   s               r&   rg  z)ConfluenceAPIImport._process_project_tags  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  r0  r/  r   )rQ   r  group_idr   s       r&   _get_groupszConfluenceAPIImport._get_groups?  s{     __668AA(K


:. 	#Hj))(K@#F #!iil"# #	## #s   AB B8BB	Bc              #      K   |j                  d      }t        j                  |      D ]=  }t        |j                  |      d      5 }t        j                  |       d d d        ? y # 1 sw Y   JxY ww)Nr   r/  )r   r   r   r   r   r   )rQ   
group_path	user_pathr   r   s        r&   _get_group_membersz&ConfluenceAPIImport._get_group_membersE  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 )6Nr_   u2   Обрабатываем пользователя r'  
operationsT)r`   does_not_worku8   Не указан Email для пользователя r   @)r`   r_   r  ry   Fr   r   r   	last_namer  
first_namesecond_namery  r   rg_member_ofr{   r|   r}   r  u    ext_id пользователя uN    содержит несколько ID из одного источника: z::.+?::r   uP   Возможно найден некорректный пользователь ud   ,так как ext_id содержит несколько ID из одного источника: 'uq   '.Необходимо повторно импортировать локальных пользователей.zERR-0004ru   rt  rT  rS  r\  r]  )r{   r   NloginrV  u+   Пользователей с почтой z > r`   u+   Пользователей с именем uQ   Обнаружена учетная запись с дублирующим email u   , добавляем цифруr   u1   Создадим пользователя ext_id=)r{   r  r/   r   )r{   r  
user_local)1r:   r/   r@   r   r   r?  warncmfra   CmfEmail
max_lengthr   rM   
ORG_DOMAINru  translit_stripr   r   rE   r   r    r!   r{   rc   r  r   r   r  r   r<   rO  rA  r   r   r)  r~  r>   r  r   r  r  r  r   confluence_group
user_groupr  r  r   rG   )rQ   r  r  r   r_   	user_dictmax_lenr{   
is_created	full_namera   r   not_source_hash_filterpersonsr   
name_combonr  prefix_emaildomainr  
conf_groupr  s                          r&   _process_personz#ConfluenceAPIImport._process_personK  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   Не грузим пользователей из-за опцийrx  r   ru   r  r   r  r`   rz   ry   r{   r|   r}   r   r  r   r{   r/   r`   r   r  send_invitesu,   Отправляем приглашения u    пользователям: )args)&r/   r^  rc   r:   r~  r>   r  rJ   r   rP  r}  r  r   r   r_   r  rM   r  r  r.   rF   r   r   r    r   r   r`   r{   r  r   r   r@   r   r   schedule_deferred_jobr!   register_personsrA  )	rQ   r  r  r   r  r   r  r{   rx   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 )Nr`   rz   ry   r{   r|   r}   r   r  r   Tr  r   r  F)ry  r.   rF   r/   r   r   r    r   r:   r   r`   r{   r   r   r}  r   r   r  r  r   r   )rQ   r   r  r{   rx   r  r   r   s           r&   _process_groupsz#ConfluenceAPIImport._process_groups  s   **, 	JC$$$//0077CCDBzRUFWWYZF))--h!F8ST5V`c_d-eE--11&$
SYHZ9[ehdi1j--V^hio^p>BT^ . `&&'/
<<%u||+"',,x8JJ4J(L!44T__5V5V5X5a5abjlvwzl{5|} 2	 00EB	##**51$$KKDK12 L7	r%   c           
      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  ubqlrz  r`   r  rs  rt  rg  r  ro  r   r}   2--------------------------------------------------u   ФИЛЬТР: Fr;  Tr   zJQL:	zUBQL:	zBQL:	u   Фильтр u0   : ошибка преобразования JQL r-  zERR-0066r  r5  NuC   Обработка JQL в фильтрах выполнена за rF  rG  )r/   r@   r   r   rJ  process_timer    r  rA  r`   r2   r  rc   r:   r~  get_modifiedr  r   r   rz  r   r  r   r   r  rO  )rQ   jqlrV  task_filterstask_filter
filter_msgr  ro  r   r  rz  	error_msgr[  r\  s                 r&   _process_jql_in_filtersz+ConfluenceAPIImport._process_jql_in_filters7  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: Истина в случае успешного импорта
        ry  r   uB   При дампе данных обнаружены ошибки (u0   ), попыка повторного дампа rx  uF   При дампе вложений обнаружены ошибки (process_linksTu2   Отключена обработка ссылокr  rz   u'   Импортирован проект 'r`   r  ry   )r@   uC   Не удалось создать отчет по проекту. N)r  r/   r~  r<   r>   r  r  r  r.   closer  rr  r  r^  rc   r:   process_cross_linksr@   r   r   rQ  ra  r   rM   IMPORT_COLLECT_STATSr   r   project_statsr   r  )rQ   r  r<   rN  r   project_ext_idr[  s          r&   process_importz"ConfluenceAPIImport.process_importj  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   compiler`   r  create_preview_tag)rQ   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 ]5  }	 |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                         r`t,        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\                  |_,        |j_                  d@       ta        tA        |jP                        dA      5 }|jc                  |je                         ddBC       d|_3        |j_                  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<   |jh                  jj                  |j                  d	<   d|j                  d<   |j                  dL      r)|j                  dL   |j                  dM<   |j                  dL= tm        jn                  |j                  d	   j!                  d      d         }|rN|d   rI|d   j                  dN      r5dN|_8        dO|j                  dO<   dP|j                  dQ<   dP|j                  dR<   n-|r|d   r&|d   j                  dS      s| js                  ||       |j                  d      r,|j                  d   |j                  d<   |jh                  jj                  |j                  d<   d|j                  d<   tm        jn                  |j                  d   j!                  d      d         \  }}|r|j                  dN      rdN|_8        dO|j                  dO<   dP|j                  dQ<   dP|j                  dR<   |ju                  dT      } |j                  d   | j                  d	<   || j                  d><   |jw                  |        n| js                  ||       | j                  j
                  j                  d|jh                          nj|j                  j                  d      dk(  rL| j                  jK                  dU| dV|1       	 | j                  j
                  j                  d|        | j                  j
                  j                  d|        8 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   rO  )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+)ry   r"  r6   z!data-linked-resource-container-idr#   r  r`   rK  rV  r.  zparent.import_raw_jsonr  u   Документ ID u)    с каталогом вложений 'u<   ' не найден в дампе пространства 'r  u~   ). Возможно он находится в пространстве, которое еще не импортированоzERR-0005r  rF  r   r|   r]  r  rF  Tr  rr   r  r  r  r  r1  r  r@  rA  rB  r   r  Fr  u   Не найден файл '   ' страницы ID r  r  zERR-0006)r   r  r  )r`   ra   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  rx   r    r#   r   r   r  r{   r   r  r  r   r   r   r   r   r   rO  r  rT  rr   r  r  rE   r  re   r  r   r   r  rp   r   r   rc   r  r  r`   r  r  r   )!rQ   r   r  r  make_previewr  r   r   raw_taganchor_nameanchor_link
account_idr   r  	user_namer  rel_docattach_parentr`   r  resource_container_idr  rK  r  resource_ext_iddoc_with_attachdownloaded_file
attach_objr
  r   r  r  r  s!                                    r&   r  z"ConfluenceAPIImport._convert_links  s   %%&]^ `	`C_`99==1OO**//2Nse0TUx &&..1XY\X]/^_w &&++.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P &&..1XY\X]/^_K 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v &&..1XY\X]/^_q 		"=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 T &&..1XY\X]/^_M &***4$?@ ',G HL X;B;;Gb;c789@E^9_56-4[[-GM* ~ &&..1XY\X]/^_y 		"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  !D &&..1XY\X]/^_ '-&>&>&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$9&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]/^_A`	`D> >t8)),Xfp06 * 8 &&..1XY\X]/^_so   Ay	C&yB$y)Dy%Dy+A5yCy=H%yE3y <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   rz   r  r   r`   rI  r  r  r  rO  )rQ   r   r  r  r  r   r   r  rJ  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| j                  j                  j                  j                  d      rjt        j                  j                  | j                  j                  d         }| j                  j                  d| d| t        j                         |S | j                  j                  d| d	d
d       t
        j                  }|S #  | j                  j                  d| dt        j                         t
        j                  cY S xY w)Nunknownu6   Не найден пользователь user_id = "u9   ", в дампе, указываем системногоrx  Fdefault_user_id)rz   uA   ", ставим пользователя по умолчанию u*   ", указываем системногоzERR-0023r!   rt  )r  r/   r~  r>   ERRORre   system_userr  r^  rc   r:   r    r!   r  rO  )rQ   r   ru   r   r   s        r&   r   zConfluenceAPIImport._get_person  sr   i	!009D ((ue<	,,22667HI))--1N1NO`1a-b##&\]d\e  fg  hn  go  %p  x  xG  xG#  H
  )),bcjbk  lV  +W7AK * Y	!OO"XY`Xa  b[  !\  dk  dq  dq  r== s   C> >AE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   rB  macroParamsr`   rc   r  r  r  r  extensionKeyr  r  rz   rg  r  r-  r  r  N)r    r  r:   r   r  r  r`   r  rN  r6  r8  r/   rO  )
rQ   r   elemr   r  r  r  r  r[  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;r(  c                    dd l }t        |      }d}t        |      D ]B  }| 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'      }|r)t5        |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                         r|t*        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                  |_*        |j[                  d:@       t]        tI        |jJ                        dA      5 }|j_                  |ja                         d:dBC       d:|_1        |j[                  d:@       d d d        t*        jD                  jG                  d'd5| dDgd4d5| d6gg d7gg dE9      }|rtI        |jJ                        jM                         rs|jd                  } t*        j>                  j                  d'd3| gdFdG|ggH      }!|!sKt*        j?                  | ||jN                  |jT                  | j                  d:I      }!|!j[                  d:@       t]        tI        |jJ                        dA      5 }|!j_                  |ja                         d:dBC       d:|!_1        |!j[                  d:@       d d d        ntI        | j                  jg                               ji                  dJtk        | jl                  j.                  j1                         d&         dK|dL      }"| j                  jo                  dM| dN| dO|" dPdQ|R       3|}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    }#|jd                  jp                  |jr                  jp                  ||#dV}$|!r|!jt                  |$dW<   nd$|$dW<   t5         |j7                  dd$      j8                  di |$d)      }|
j                  |j:                         n|d   d   dXk(  rdY}%tk        jr                        }&tk        |jd                        }'dB|&|&dZd$d[dBd\}(|d   d   d#   })|)r|)j                  d]      r,tv        jy                  |)d]   d    j{                               |(d^<   |)j                  d_      r|)d_   d    }t*        j|                  j                  |j~                  |/      }*|*s t*        j,                  j                  |`      }*|*r.tk        |*jr                        |(da<   tk        |*jd                        }'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,tv        jy                  |)dq   d    j{                               |(dr<   dsj                  dt |)j                         D              }-t5        |%j9                  |&|'tv        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]  }tk        |       c}            d)      }|
j                  |j:                         n(| j                  j"                  j%                  d|        |j                  d      s+| j                  |d   ||       E 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   rA  layoutSectionrA  r  r  zmceNonEditable selected)contenteditablezdata-layout-sectionr?  r  r?  columnLayoutzfixed-widthsingler   r=  r   r  r}   zflex-basis: )zdata-column-widthzdata-layout-columnr  	extensionlocalIdzdata-local-idu&   Не удалось найти тег u    для r  macroMetadatarB  macroIdr  rc   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  r`   r(  r  r,  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>
                    r-  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>
                    pageIdry   rF  r   r|   r]  r  r  r  Tr  r1  r  r@  rB  r   r  Fr  r  )r  r`   rr   r   r   r~   )r`   r   r  r  r/   r   rK  rV  r.  u7   Не найден файл Draw.io диаграммы 'r  r  r  zERR-0010r  r   r  r  r  r  rc  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   rX  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)rF  rc   Nr$   )r   r  r  s      r&   r   z9ConfluenceAPIImport._convert_atlas_doc.<locals>.<genexpr>g  s#     2k41aaS!G*3F2ks   r;  )r*   r  r  r  zpaste-code-macro)r?  r  r~  r   prezlanguage-markupr  )r?  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$   )Er  r   rS  r/   r}  r  r   r   r	  r"  r   rK  extendrI  r  r:   r  r@   r   r   rN  r    r  r  r   r   r   r   r  r  r  r  r   r   r  rT  r   rr   r   r  r   rE   r  re   r  r   r   r  rp   r   r`   r   r   r   r  rO  rc   rz   r   r   r   r)  r#   r  r  r  r   r  r  )2rQ   r   r(  r  r  r  cntr  r  tag_layout_sectionr   r"  r  colr  tag_layout_colr  macro_paramsr  r)  r#  rk   r.  r`   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   rc   s2                                                     r&   r  z&ConfluenceAPIImport._convert_atlas_doc  s"    )nY' h	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$5"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=7L7L393D3D37??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'RQh	Sj +W^> >F!F !Fx pRs*   8+y$4y)><y.=<y;z.y8	;z	)Fr   )r  )r   i  )TT)Tr  )mr   r   r   r   r   r    	CmfImportrR   rD   rA  rh   staticmethodr	   r   rl   rn   r   r   r   r   r   r   r   r  r$  r  r^  r  r  r  r  r  r   r   r1  r5  r>  rI  rO  rQ  rc  rh  rp  r  r  r  r  r  r  r   r  r  r  r  r*  r-  rR  rX  ra  re  rl  rM   IMPORT_OBJ_CNTrr  rx  r  r  r  r  r  r  r  r  r%  r  r  r#  r  ro  r   r&  r!  r"  r  r$  r  r  r  r  r  rC  rQ  rX  rr  rg  ry  r}  r  r  r  r  r?  r  r  r  r  r   r  r  r$   r%   r&   r-   r-   *   s9   E
= 
f>N>N 
B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   0Ob6p\$ \|  &;> >D=R=R ./#b 4 'Dg#R.H`4l_"B@z9x89tJ9XA9FU9n/>b N" N"`H9T[8zR9h:9xz9x$JL&8-t5JnCJ&Zx39j3%jcJ	'4 'R##c" c"D c"J'`R<1|f2# 2#hc`JBM3 BMH(0nS nSRU nSr%   r-   )#rI  r  r   r   rJ  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US USr%   