
    &i<                         d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dl	T d dl
Z
d dlZd dlmZ d dlZd dlmZ  G d dej        j                  ZdS )    N)Path)*)datetime)ProcessGroupManagerc                   t    e Zd ZdZej        j        d             Zd Zd Z	d Z
ddZd Zd	efd
Zd Zd ZdS )ConverterView/c                    t                               dd           	 |                                 }t                               dd           |S # t          $ r&}t                               d| d           |d }~ww xY w)Nu3   Начало обработки POST-запросаINFOlevelu9   Завершена обработка POST-запросаu0   Ошибка обработки запроса: ERROR)gdebug_process_post	Exception)selfresultes      "./modules/converter/views/index.pypostzConverterView.post   s    	EVTTT	''))FGGOW]G^^^M 	 	 	GGJqJJRYGZZZG	s   1A 
B !A;;B c                    t                               dd           t          d          }|                                s	 t	          dgd          5 }|                                 d d d            n# 1 swxY w Y   nY# t          j        $ rG |                                s0d| }t                               |d	           t          |          Y nw xY w	 t	          g d
dt          j	        t          j	        d          5 }|                                }|dk    r't          j
        ||j        |j        |j                  	 d d d            n# 1 swxY w Y   n=# t          j
        $ r+}t                               d|j         d	           |d }~ww xY wt          d| d          }t          j        d|           t                               dd           |S )Nu>   Начало копирования профиля LibreOfficeDEBUGr   z'/root/.config/libreoffice/4/user/configlibreoffice   timeoutu-   Не найден профиль libreoffice r   )rsyncz-az--deletez'/opt/eva-converter/libreoffice_scripts/z'/root/.config/libreoffice/4/user/basic/<   Tr   stdoutstderrtextr   outputr"   uF   Ошибка синхронизации скриптов LibreOffice: r	   z/.lo_profilez/root/.config/libreoffice/4/u/   Профиль LibreOffice скопирован)r   r   r   existsr   wait
subprocessTimeoutExpiredr   PIPECalledProcessErrorargsr!   r"   shutilcopytree)r   tmp_dirprofile_pathprocerrretr   lo_profile_dirs           r   _copy_lo_profilezConverterView._copy_lo_profile"   s    	
PX_```EFF""$$ 		))(-"EEE  IIKKK                             , ) ) )#**,, )X,XXCGGCwG///#C..() ))	$ B  B  B!!   	p iikk!88$7TYt{cgcnoooo 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p 	p , 	 	 	GGg]^]eggovGwwwG	 7'777886GGG	AQQQst   B  A4(B  4A88B  ;A8<B   ACC*E AEE EE EE F.&FFc           
         t                               d| d| d           |                     |          }dddd| d	d
|t          |          d|g
}	 t	          ||t
          j        t
          j        d          5 }|                                }|j        pd}	|dk    r3t                               d|	 d           t          j	        d          	 d d d            n# 1 swxY w Y   nc# t
          j
        $ r#}
t                               dd           |
d }
~
wt          $ r&}
t                               d|
 d           |
d }
~
ww xY wt                               d| d           d S )Nu>   Запуск конвертации LibreOffice: формат=u   , файл=r   r   r   
--headless--norestore-env:UserInstallation=file://-env:SingleAppInstance=falsez--convert-toz--outdirTr     r   u<   LibreOffice завершился с ошибкой. stderr: r   u3   LibreOffice завершился с ошибкой.u]   Таймаут при конвертации LibreOffice, процесс остановленuI   Непредвиденная ошибка при конвертации: u@   Завершена конвертация LibreOffice: файл=)r   r   r5   strr   r(   r*   r'   r"   SubprocessErrorr)   r   )r   	file_path	to_format
output_dirr   r4   cmdr1   r3   stderr_textr   s              r   _convert_with_libreofficez'ConverterView._convert_with_libreofficeJ   s   	rQZrrgprr  {A  	B  	B  	B..z:: <N<<*	NN
	$S'*/ZdZiptuuu ly}iikk"k/R!88GGh[fhhpwGxxx$45jkkk l l l l l l l l l l l l l l l ( 	 	 	GGs  |CG  D  D  DG 	 	 	GGc`acckrGsssG	 	
^S\^^flmmmmmsI   (C- =AC!C- !C%%C- (C%)C- -E<DE'!EEc                    t                               d| d           |                     |          }	 t          dddddd	| d
t	          |          d| dg	|d          5 }|                                }|dk    rt          d          	 d d d            n# 1 swxY w Y   n5# t          j        $ r#}t                               dd           |d }~ww xY wt          |          dz  }	 d t          |          
                    d          D             }	ddt	          |          g|	}
t          |
d|t          j        t          j        d          5 }|                                }|dk    r't          j        ||j        |j        |j                  	 d d d            n# 1 swxY w Y   n=# t          j        $ r+}t                               d|j         d           |d }~ww xY w|                                rt                               dd           |S t                               dd           d S )NuZ   Начало конвертации многостраничной таблицы в PDF: r   r   z/usr/bin/libreofficer7   z--nologoz--nofirststartwizardr8   r9   r:   z&macro:///Standard.Module1.ExportToPdf()T)r   	close_fdsr   u;   Ошибка запуска libreoffice с макросомut   Таймаут при экспорте многостраничного PDF, процессы остановленыr   zfullview.tarc                 6    g | ]}t          |j                  S  )r<   name).0ps     r   
<listcomp>zAConverterView._convert_multiple_sheets_to_pdf.<locals>.<listcomp>   s     \\\QS[[\\\    zfullview_page*.*tarz-cfr   )r   cwdr!   r"   r#   r$   u,   Ошибка создания архива: u^   Завершена конвертация многостраничной таблицы в PDFu   Архив не найден)r   r   r5   r   r<   r'   r   r(   r)   r   globr*   r+   r,   r!   r"   r&   )r   r>   r@   r   r4   r1   r3   r   archive_pathfiles_to_packrA   s              r   _convert_multiple_sheets_to_pdfz-ConverterView._convert_multiple_sheets_to_pdfo   sP   	xmvxx  AG  	H  	H  	H..z::	$&&@@@.IFFFF
& $
0 
0 
0 c 48iikk!88#$abbb c c c c c c c c c c c c c c c ( 	 	 	GG  K  SZG  [  [  [G	 J''.8	\\$z2B2B2G2GHZ2[2[\\\M%\!2!2C]CC$!!   
p iikk!88$7TYt{cgcnoooo 
p 
p 
p 
p 
p 
p 
p 
p 
p 
p 
p 
p 
p 
p 
p , 	 	 	GGM18MMU\G]]]G	    	GGt  }CG  D  D  DGG2'GBBB4sy   /B( %*BB( B  B( #B $B( (C7CC0A)F4 AF(F4 (F,,F4 /F,0F4 4G.&G))G.    c                 2   t                               d| d           t          |d          5 }	 |                    |          }|sn|                    |           .	 d d d            n# 1 swxY w Y   t                               d| d           d S )Nu.   Начало сохранения файла: r   r   wbTu*   Файл успешно сохранён: )r   r   openreadwrite)r   source_filetarget_path
chunk_sizefchunks         r   _save_file_in_chunksz"ConverterView._save_file_in_chunks   s    	NNNV]^^^+t$$ 	#((44 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
J[JJRYZZZZZs   0A--A14A1c                     g d}||v S )N)zapplication/vnd.ms-excelzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetz.application/vnd.oasis.opendocument.spreadsheetztext/csvrH   )r   mimetypespreadsheet_mimetypess      r   _is_spreadsheetzConverterView._is_spreadsheet   s"    !
 !
 !
 000rM   suffixc                 F    h d}h d}||v p|                                 |v S )N>	   application/zipapplication/gzipapplication/x-xzapplication/x-tarapplication/x-gzipapplication/x-bzip2application/x-7z-compressedapplication/x-rar-compressedapplication/x-zip-compressed>   .7z.gz.xz.bz2.rar.tar.tgz.zip)lower)r   ra   rd   archive_mimetypesarchive_suffixess        r   _is_archivezConverterView._is_archive   sG    

 

 

	
 	
 	
 ,,RBR0RRrM   c                     t                               d d           fd}t          j        d||          }t                               dd           |S )Nu?   Встраивание изображений из папки: r   r   c                    |                      d          }t                    |z  }|                                rt          |d          5 }|                                }t          j        |                              d          }t          j	        |          d         pd}d| d| dcd d d            S # 1 swxY w Y   |                      d          S )	N   rbutf-8r   z	image/pngz
src="data:z;base64,")
groupr   r&   rW   rX   base64	b64encodedecode	mimetypes
guess_type)matchimg_srcimg_pathimg_fileimg_data
img_base64	mime_typehtml_dirs          r   replace_image_tagz6ConverterView._embed_images.<locals>.replace_image_tag   s   kk!nnGH~~/H   I(D)) IX'}}H!'!1(!;!;!B!B7!K!KJ ) 4X > >q A P[IH	HH:HHH	I I I I I I I I I I I I I I I I
 ;;q>>!s   A B::B>B>zsrc=["\'](.*?)["\']u@   Завершено встраивание изображений)r   r   resub)r   html_contentr   r   r   s     `  r   _embed_imageszConverterView._embed_images   sq    	\RZ\\dklll
	" 
	" 
	" 
	" 
	" .0A<PP	RZabbbrM   c                 	   t                               dd           t          j                            dd          }t          j        d         j        }t          j                            dd          }t                               d	| d
| d           |                     ||          r&d| d
| }t                               |d           dS |dk    r|dk    s|                     |          rdnd}t          j
                    5 }t                              d|dz  dz             5  t                               d| d           t          |          dt          j        d          z  }|                     t          j        d         |           |dk    rP|                     |||          }|r7t           j                            |          cd d d            cd d d            S |dk    r|dk    rt'          j        t          j        d                   }	t          |          dz  }
t+          |
d          5 }|                    |	j                   d d d            n# 1 swxY w Y   t           j                            |
          cd d d            cd d d            S |dk    r$|                     |          rd}n|dk    rd}nd}n|}|                     ||||           t          |          d|                    d          d           z  }
|
                                r|dk    rt+          |
d!d"#          5 }|                                }d d d            n# 1 swxY w Y   |                     ||          }t+          |
d$d"#          5 }|                    |           d d d            n# 1 swxY w Y   |
                                rVt                               d%|
 d           t           j                            |
          cd d d            cd d d            S t                               d&|
 d'           	 d d d            d d d            d S # 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )(Nu   Старт _process_post()r   r   formatpdffilerd   r;   u"   Получен файл: mimetype=z	, suffix=r   u9   Архивы не конвертируются: mimetype=)u.   Архивы не конвертируютсяi  htmlzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentiX  i,  zlibreoffice-convert-document      r   u8   Создана временная директория: preview
pdf_sheetszresult.htmlzw+z html:HTML (StarCalc):EmbedImagesz'application/vnd.oasis.opendocument.textz"html:XHTML Writer File:EmbedImageszpreview.:r   rr   )encodingwu,   Отправка файла клиенту: u1   Файл результата не найден: r   )r   r   requestvaluesgetfilesra   rz   rc   tempfileTemporaryDirectorycmfutilCmfLockr   r_   rS   flaskhelpers	send_filemammothconvert_to_htmlrW   rY   valuerC   splitr&   rX   r   )r   rformatfile_mimetyperd   msgr   r/   r>   rQ   r   res_pathr]   r?   r   embedded_htmls                  r   r   zConverterView._process_post   s~   	,G<<<.$$Xu55f-6##Hb11	U]UUVUU]cdddM622 	KnmnnflnnCGGCvG&&&JJ !F**fff##M22 g #9< 	
 (** 5	gwGeovwxoxyzoz7{7{ 5	 5	GGXwXX`gGhhh W(L'.2J(L(LLI%%gmF&;YGGG ,&&#CCIwX_`` A =22<@@5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 &  ]6%% 0v1FGG===8(D)) *QGGFL)))* * * * * * * * * * * * * * *}..x88)5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	. &  ''66 ' BII"&OOO DII &II#	 **9i'RRR G}}'I'--2D2DQ2G'I'IIH    +W%6%6(C'::: ,a#$6688L, , , , , , , , , , , , , , , $ 2 2< I I(C'::: +aGGM***+ + + + + + + + + + + + + + +    QxQQY_```}..x88e5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	h VHVV^efffk5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	 5	s   
#R-B(Q*R.AQ* I'Q*'I++Q*.I+/!Q*R)BQ*M(Q*(M,,Q*/M,0+Q*N=1Q*=OQ*OAQ*R2 Q*R*Q.	.R1Q.	2RR	RN)rT   )__name__
__module____qualname____url__cmfviewsactionr   r5   rC   rS   r_   rc   r<   rz   r   r   rH   rM   r   r   r      s        GY	 	 	& & &P#n #n #nJ6 6 6p	[ 	[ 	[ 	[1 1 1SC S S S S0  &I I I I IrM   r   )r(   ossignalr   pathlibr   r   r   r   cmf.includer   r-   r   flask.helpersr   common.process_utilsr   r   r   BaseViewr   rH   rM   r   <module>r      s        				              				                 4 4 4 4 4 4^ ^ ^ ^ ^CI& ^ ^ ^ ^ ^rM   