
    oi<                         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d dlmZ  G d dej$                  j&                        Zy)    N)Path)*)datetime)ProcessGroupManagerc                       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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                    t         j                  dd       t        d      }|j                         s(	 t	        dgd      5 }|j                          d d d        	 t	        g d
dt        j                  t        j                  d      5 }|j                         }|dk7  r7t        j                  ||j                  |j                  |j                        	 d d d        t        d| d      }t        j                  d|       t         j                  dd       |S # 1 sw Y   xY w# t        j                  $ r; |j                         s'd| }t         j                  |d	       t        |      Y w xY w# 1 sw Y   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   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""$)(-"E  IIK 	$ B!! 	p iik!8$77TYYt{{cgcncnoo 	p  ',786G	AQ;   ,, )#**,I,XCGGCwG/#C.( -)	p 	p ,, 	GG\]^]e]e\fgovGwG	s[   D* DD* .F 
AE;F D'#D* *A
E87E8;F F G&G  Gc           
         t         j                  d| d| d       | j                  |      }dddd| d	d
|t        |      d|g
}	 t	        ||t
        j                  t
        j                  d      5 }|j                         }|j                  xs d}	|dk7  r/t         j                  d|	 d       t        j                  d      	 d d d        t         j                  d| d       y # 1 sw Y   $xY w# t
        j                  $ r}
t         j                  d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--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   sz   	PQZP[[fgpfqr  {A  	B..z: +N+;<*	N
	$S'*//ZdZiZiptu ly}iik"kk/R!8GGZ[fZghpwGx$445jkk l 	
RS\R]^flml l (( 	GGs  |CG  DG 	GG_`a_bckrGsG	s=   ,C9 4AC-
C9 -C62C9 9ED%%E1EEc                 \   t         j                  d| d       | j                  |      }	 t        dddddd	| d
t	        |      d| dg	|d      5 }|j                         }|dk7  rt        d      	 d d d        t        |      dz  }	 t        |      j                  d      D 	cg c]  }	t	        |	j                         }
}	ddt	        |      g|
}t        |d|t        j                  t        j                  d      5 }|j                         }|dk7  r7t        j                  ||j                  |j                  |j                         	 d d d        |j#                         rt         j                  dd       |S t         j                  dd       y # 1 sw Y   'xY w# t        j                  $ r}t         j                  dd       |d }~ww xY wc c}	w # 1 sw Y   xY w# t        j                  $ r+}t         j                  d|j                    d       |d }~ww xY w)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.tarzfullview_page*.*tarz-cfr   )r   cwdr!   r"   r#   r$   u,   Ошибка создания архива: u^   Завершена конвертация многостраничной таблицы в PDFu   Архив не найден)r   r   r5   r   r<   r'   r   r(   r)   r   globnamer*   r+   r,   r!   r"   r&   )r   r>   r@   r   r4   r1   r3   r   archive_pathpfiles_to_packrA   s               r   _convert_multiple_sheets_to_pdfz-ConverterView._convert_multiple_sheets_to_pdfo   sK   	lmvlwx  AG  	H..z:	$&&//?@.I8AF
& $
0 c 48iik!8#$abb c( J'.8	26z2B2G2GHZ2[\QS[\M\%\!2C]CC$!! 
p iik!8$77TYYt{{cgcncnoo 
p"  GGt  }CG  DGG2'GB]c c (( 	GG  K  SZG  [G	 ]
p 
p ,, 	GGB188*MU\G]G	sr   'F( !F6F( G- )G?G- AG!G- F% F( (G;GGG- !G*&G- -H+ &H&&H+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    suffixc                 B    h d}h d}||v xs |j                         |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   r\   r`   archive_mimetypesarchive_suffixess        r   _is_archivezConverterView._is_archive   s1    

	
 ,,RBR0RRr_   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&   rQ   rR   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_contentr   r   r   s     `  r   _embed_imageszConverterView._embed_images   sP    	QRZQ[\dkl
	" .0A<P	RZabr_   c                    t         j                  dd       t        j                  j	                  dd      }t        j
                  d   j                  }t        j                  j	                  dd      }t         j                  d	| d
| d       | j                  ||      r d| d
| }t         j                  |d       y|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|}| j1                  ||||       t        |      d|j3                  d      d     z  }
|
j5                         rf|dk(  rat+        |
d!d"#      5 }|j7                         }d d d        | j9                  |      }t+        |
d$d"#      5 }|j-                  |       d d d        |
j5                         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filer`   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filesr\   rv   r^   tempfileTemporaryDirectorycmfutilCmfLockr   rY   rN   flaskhelpers	send_filemammothconvert_to_htmlrQ   rS   valuerC   splitr&   rR   r   )r   rformatfile_mimetyper`   msgr   r/   r>   rK   r   res_pathrW   r?   r   embedded_htmls                  r   r   zConverterView._process_post   s   	,G<..$$Xu5f-66##Hb1	4]O9VHU]cdM62Mm_\eflemnCGGCvG&J !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   7O3BO-	O3 A
O
N9&&O	O3B OO0(OO*AO:	O3O(O39O>OOOOOO'	#O33O<N)i    )__name__
__module____qualname____url__cmfviewsactionr   r5   rC   rN   rY   r^   r<   rv   r   r   r[   r_   r   r   r      sZ    GYY	 	&P#nJ6p	[1SC S0&Ir_   r   )r(   ossignalr   pathlibr   r   r~   r   cmf.includer   r-   r   flask.helpersr   common.process_utilsr   r   r   BaseViewr   r[   r_   r   <module>r      sG     	      	      4^CII&& ^r_   