
    @i5                         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	 d dl
Z
d dlZd dlmZ d dlZ G d dej                   j"                        Zy)    N)Path)*)datetimec                   t    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y
)ConverterView/c                     t         j                  dd       	 | j                         }t         j                  dd       |S # t        $ r!}t         j                  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   sk    	EVT	'')FGGOW]G^M 	GGFqcJRYGZG	s   (A 	A,A''A,c                 j   t         j                  dd       t        d      }|j                         s	 t	        j
                  dd       	 t	        j
                  g d
dd       t        d| d      }t        j                  d|       t         j                  dd       |S # t        j                  $ r: |j                         s'd| }t         j                  |d	       t        |      Y w xY w# t        j                  $ r+}t         j                  d|j                   d	       |d }~ww xY w)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""$)}b9		NN G $&T3 ',786G	AQ+ ,, )#**,I,XCGGCwG/#C.( -) ,, 	GG\]^]e]e\fgovGwG	s*   B$ C4 $A
C10C14D2&D--D2c           
      ^   t         j                  d| d| d       | j                  |      }dddd| d	d
|t        |      d|g
}	 t	        j
                  ||ddd      }|j                  dk7  r9t         j                  d|j                   d       t	        j                  d      	 t         j                  d| d       y # t        j                  $ r+}t         j                  d|j                   d       |d }~wt        $ r!}t         j                  d| d       |d }~ww xY w)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   sS   	PQZP[[fgpfqr  {A  	B..z: +N+;<*	N
	^^CUY`deF  A%VW]WdWdVefnuv 001fgg & 	
RS\R]^flm ,, 	GG=ahhZHPWGXG 	GG_`a_bckrGsG	s%   A"C D,&C??D,D''D,c                    t         j                  d| d       | j                  |      }	 t        j                  dddddd	| d
t        |      d| dg	dd      }|j                  |      }|dk7  rt        d      	 t!        |      dz  }	 t        j"                  dj%                  ddt        |      dg      |ddd       |j+                         rt         j                  dd       |S t         j                  dd       y # t        j                  $ r}t        j                  t        j                  j                        t        j                         t        j                  t        j                  |j                        t        j                         |d }~ww xY w# t        j&                  $ r+}t         j                  d|j(                   d       |d }~ww xY w)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   s   	lmvlwx  AG  	H..z:	##&&//?@.I8AF
% "&
7D ))G),Cax ]^^  J'.8	NN388UE3|3DFX$YZ)rO  GGt  }CG  DGG2'GB- (( 	IIbjj*FNN;IIbjj*FNN;G		 ,, 	GGB188*MU\G]G	s1   AD 6F& F#BFF#&G$9&GG$c                     t         j                  d| d       t        |d      5 }	 |j                  |      }|sn|j	                  |       &	 d d d        t         j                  d| d       y # 1 sw Y   $xY w)Nu.   Начало сохранения файла: r   r   wbu*   Файл успешно сохранён: )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    	@NV]^+t$ 	#((4	  		 	
<[MJRYZ	 	s   (A33A<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         j                  d d       fd}t        j                  d||      }t         j                  dd       |S )Nu?   Встраивание изображений из папки: r   r   c                 z   | j                  d      }t              |z  }|j                         rot        |d      5 }|j	                         }t        j                  |      j                  d      }t        j                  |      d   xs d}d| d| dcd d d        S | j                  d      S # 1 sw Y   xY w)	N   rbutf-8r   z	image/pngz
src="data:z;base64,")
groupr   r    rT   rU   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!nGH~/H (D) IX'}}H!'!1!1(!;!B!B7!KJ ) 4 4X >q A P[I'	{(:,aH	I I
 ;;q>!I Is   AB11B:zsrc=["\'](.*?)["\']u@   Завершено встраивание изображений)r   r   resub)r   html_contentrv   rw   r   s     `  r   _embed_imageszConverterView._embed_images   sP    	QRZQ[\dkl
	" .0A<P	RZabrb   c                     t         j                  dd       t        j                  j	                  dd      }t        j
                  d   j                  }|dk(  r|dk(  s| j                  |      rd	nd
}t        j                         5 }t        j                  d|dz  dz         5  t         j                  d| d       t        |      dt        j                  d    z  }| j                  t        j
                  d   |       |dk(  rF| j                  |||      }|r1t        j                   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+                  |j,                         d d d        t        j                   j#                  |      cd d d        cd d d        S |dk(  r| j                  |      rd}
n|dk(  rd}
nd}
n|}
| j/                  ||
||       t        |      d|j1                  d      d    z  }|j3                         rf|dk(  rat)        |dd      5 }	|	j5                         }d d d        | j7                  |      }t)        |dd      5 }	|	j+                  |       d d d        |j3                         rKt         j                  d| d        t        j                   j#                  |      cd d d        cd d d        S t         j                  d!| d"       	 d d d        d d d        y # 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   nxY wd d d        y # 1 sw Y   y xY w)#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   rrg   )encodingwu,   Отправка файла клиенту: r
   u1   Файл результата не найден: r   )r   r   requestvaluesgetfilesr_   ra   tempfileTemporaryDirectorycmfutilCmfLockr   r\   rQ   flaskhelpers	send_filemammothconvert_to_htmlrT   rV   valuer;   splitr    rU   r{   )r   rformatfile_mimetyper   r(   r7   rP   r   res_pathrZ   r8   rz   embedded_htmls                r   r   zConverterView._process_post   sH   	,G<..$$Xu5f-66 !F*ff##M2 9< 	
 ((* 5	gwGeovwxoxyzoz7{ 5	GGNwiX`gGh W''..2J1K(LLI%%gmmF&;YG ,&#CCIwX_` ==22<@5	 5	 5	 & ]6% 00v1FG==8(D) *QGGFLL)*}}..x8)5	 5	 5	. & ''6 BI"&OO DI &I#	 **9i'R G}'--2DQ2G1H'IIH  W%6(C': ,a#$668L, $ 2 2< I(C': +aGGM*+  FxjQY_`}}..x8e5	 5	 5	h KH:V^efk5	 5	 5	$* *., ,+ +Y5	 5	 5	 5	 5	s   N&BM/>	NA
M/M
7&M/	N0B M/0M(M/)M#;AM/	NM/9N
MM/M M/#M,(M//M8	4NNN)i    )__name__
__module____qualname____url__cmfviewsactionr   r,   r;   rQ   r\   ra   r{   r   r^   rb   r   r   r      sL    GYY	 	B#nJ.`	[1&Brb   r   )r!   rF   rJ   r   pathlibr   rm   rj   rx   cmf.includer   r&   r   flask.helpersr   r   r   BaseViewr   r^   rb   r   <module>r      sD     	      	     pCII&& prb   