
     vh5                         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 G d dej        j                  ZdS )    N)Path)*)datetimec                   h    e Zd ZdZej        j        d             Zd Zd Z	d Z
ddZ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          }|                                sq	 t	          j        dd           nY# t          j        $ rG |                                s0d| }t                               |d	           t          |          Y nw xY w	 t	          j        g d
dd           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   checkuF   Ошибка синхронизации скриптов LibreOffice: r   z/.lo_profilez/root/.config/libreoffice/4/u/   Профиль LibreOffice скопирован)r   r   r   exists
subprocessrunTimeoutExpiredr   CalledProcessErrorstderrshutilcopytree)r   tmp_dirprofile_patherrr   lo_profile_dirs         r   _copy_lo_profilezConverterView._copy_lo_profile    s    	
PX_```EFF""$$ 	))}b99999, ) ) )#**,, )X,XXCGGCwG///#C..() ))		N G G G $&T3 3 3 3 3 , 	 	 	GGg]^]eggovGwwwG	 7'777886GGG	AQQQs+   A AB.-B.2C D&DDc           
      |   t                               d| d| d           |                     |          }dddd| d	d
|t          |          d|g
}	 t	          j        ||ddd          }|j        dk    r8t                               d|j         d           t	          j        d          nk# t          j	        $ r+}t                               d|j         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--outdirT)r   r   capture_outputtextr   u<   LibreOffice завершился с ошибкой. stderr: r   u3   LibreOffice завершился с ошибкой.u'   Ошибка вызова libreoffice: uI   Непредвиденная ошибка при конвертации: u@   Завершена конвертация LibreOffice: файл=)r   r   r,   strr!   r"   
returncoder%   SubprocessErrorr$   r   )	r   	file_path	to_format
output_dirr   r+   cmdr   r   s	            r   _convert_with_libreofficez'ConverterView._convert_with_libreofficeA   s   	rQZrrgprr  {A  	B  	B  	B..z:: <N<<*	NN
	^CUY`deeeF A%%fW]Wdffnuvvv 01fggg & , 	 	 	GGHahHHPWGXXXG 	 	 	GGc`acckrGsssG	 	
^S\^^flmmmmms%   AB2 2D&C''D4!DDc                    t                               d| d           |                     |          }	 t          j        dddddd	| d
t          |          d| dg	dd          }|                    |          }|dk    rt          d          n# t          j        $ rs}t          j
        t          j        |j                  t          j                   t          j
        t          j        |j                  t          j                   |d }~ww xY wt!          |          dz  }	 t          j        d                    ddt          |          dg          |ddd           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/libreofficer.   z--nologoz--nofirststartwizardr/   r0   r1   z&macro:///Standard.Module1.ExportToPdf()T)start_new_session	close_fdsr   r   u;   Ошибка запуска libreoffice с макросомzfullview.tar tarz-cfzfullview_page*.*r   )cwdr   r   shellu,   Ошибка создания архива: r   u^   Завершена конвертация многостраничной таблицы в PDFu   Архив не найден)r   r   r,   r!   Popenr4   waitr   r#   oskillpggetpgidpidsignalSIGTERMSIGKILLr   r"   joinr$   r%   r    )	r   r7   r9   r   r+   procretr   archive_paths	            r   _convert_multiple_sheets_to_pdfz-ConverterView._convert_multiple_sheets_to_pdff   sC   	xmvxx  AG  	H  	H  	H..z::	#&&@@@.IFFFF
% "&
7 
7 
7D ))G),,Caxx ]^^^ ( 	 	 	Ibj**FN;;;Ibj**FN;;;G		 J''.8	N388UE3|3D3DFX$YZZ)rO O O O O, 	 	 	GGM18MMU\G]]]G	    	GGt  }CG  D  D  DGG2'GBBB4s1   AB D%A.DD.=E, ,F&;&F!!F&    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/csv )r   mimetypespreadsheet_mimetypess      r   _is_spreadsheetzConverterView._is_spreadsheet   s"    !
 !
 !
 000    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    rU   rV   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_contentrw   rx   r   s     `  r   _embed_imageszConverterView._embed_images   sq    	\RZ\\dklll
	" 
	" 
	" 
	" 
	" .0A<PP	RZabbbrc   c                 "   t                               dd           t          j                            dd          }t          j        d         j        }|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filehtmlzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentiX  i,  zlibreoffice-convert-document      r   u8   Создана временная директория: previewsuffix
pdf_sheetszresult.htmlzw+z html:HTML (StarCalc):EmbedImagesz'application/vnd.oasis.opendocument.textz"html:XHTML Writer File:EmbedImageszpreview.:r   rrh   )encodingwu,   Отправка файла клиенту: r
   u1   Файл результата не найден: r   )r   r   requestvaluesgetfilesr`   rb   tempfileTemporaryDirectorycmfutilCmfLockr   r]   rQ   flaskhelpers	send_filemammothconvert_to_htmlrU   rW   valuer;   splitr    rV   r|   )r   rformatfile_mimetyper   r(   r7   rP   r   res_pathr[   r8   r{   embedded_htmls                r   r   zConverterView._process_post   s   	,G<<<.$$Xu55f-6 !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   #P/B(O,P0AO,G)O,)G--O,0G-1!O,P+BO,	K*O,*K..O,1K.2+O,L?3O,?MO,MAO,P4 O,P,O0	0P3O0	4PPPN)rR   )__name__
__module____qualname____url__cmfviewsactionr   r,   r;   rQ   r]   rb   r|   r   r_   rc   r   r   r      s        GY	 	 	  B#n #n #nJ. . .`	[ 	[ 	[ 	[1 1 1  &B B B B Brc   r   )r!   rF   rJ   r   pathlibr   rn   rk   ry   cmf.includer   r&   r   flask.helpersr   r   r   BaseViewr   r_   rc   r   <module>r      s        				              				                p p p p pCI& p p p p prc   