
    UiЊ                     `   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d dlmZmZmZ d dlmZ 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Zd dlZ	 d d	lmZmZ n# e$ r d d
lmZmZ Y nw xY wddlm Z! ddl"m#Z# g dZ$ G d d          Z% G d d          Z&dS )    N)datetimetimezone)
guess_type)remove)Path)rmtree)Image	ImageDraw	ImageFont)VideoFileClip)CSafeLoaderCDumper)
SafeLoaderDumper   )config_load)FileVersions)&.docz.docm.docxz.dotz.dotmz.dotxz.fodt.htmlz.odgz.odp.ods.odtz.ottz.ppsz.ppsmz.ppsxz.pptz.pptmz.pptxz.potmz.potx.rtfz.txtz.uotz.vsdz.vsdmz.vsdxz.vstmz.vstx.xlsz.xlsm.xlsxz.xlmz.xltz.xltmz.xltxz.xmlz.csvc                   T    e Zd ZddZd Zed             Zd Zed             Zd Z	dS )	
RFilePermsNc                 (    || _         |pdg| _        d S )Nzall allow read,write)ownerrules)selfr   r    s      /opt/rdisk/rdisk/rfile.py__init__zRFilePerms.__init__%   s    
656


    c                     || j         k    r|dS t          | j                  D ]V}|                                \  }}}||                    d          v s|dk    r||                    d          v r|dk    c S WdS )NT,allallowF)r   reversedr    split)r!   whowhatrulerwhorallowrwhats          r"   canzRFilePerms.can)   s    $*4TZ(( 	- 	-D"&**,,D&%djjoo%%5;;s++++!W,,,,ur$   c                 z    t          j        |t                    }|sd S 	  | di |}n# t          $ r Y d S w xY w|S )N)Loader )yamlloadr   	TypeError)clssoress       r"   from_strzRFilePerms.from_str3   sb    Ia
+++ 	4	#((((CC 	 	 	44	
s   * 
88c                 B    t          j        | j        t                    S )N)r   )r5   dump__dict__r   r!   s    r"   to_strzRFilePerms.to_str>   s    yv6666r$   c                 P    |                      |                                          S N)r<   read)r8   fps     r"   from_fpzRFilePerms.from_fpA   s    ||BGGII&&&r$   c                 P    |                     |                                           S rC   )writerA   r!   rE   s     r"   to_fpzRFilePerms.to_fpE   s    xx&&&r$   )NN)
__name__
__module____qualname__r#   r1   classmethodr<   rA   rF   rJ   r4   r$   r"   r   r   $   s        7 7 7 7     [7 7 7 ' ' ['' ' ' ' 'r$   r   c                      e Zd ZdZdZdZdefdZed             Z	e
d             Ze
d             Ze
d	             Ze
d
             Zej        d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Zd Zd Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Ze
d             Z e
d             Z!e
d             Z"e
d             Z#e
d              Z$e
d!             Z%e
d"             Z&e
d#             Z'e
d$             Z(d% Z)d]d'Z*d( Z+d^d)Z,d* Z-d+efd,Z.e
d-             Z/e
d.             Z0e0j        d/             Z0e
d0             Z1d1 Z2d2 Z3ed_d4e4d5ed6ed7ed8e4f
d9            Z5d4e4d:ed5ed8d;fd<Z6d4e4d5ed7ed8d;fd=Z7ed>e8d8e4fd?            Z9d`d@Z:dadBZ;dC Z<dD Z=dE Z>edbdF            Z?dGed:ed8d;fdHZ@dI ZAdJ ZBdK ZCdL ZDdM ZEd8eFfdNZGdadOZHdadPZIdQ ZJdR ZKdS ZLd`dTZMdcdUZNdAdAdAdAdVdWZOdXefdYZPe
dZ             ZQd[ ZRd\ ZSd;S )dRFilei      i  idc                     |                      |           || _        d | _        d | _        d | _        |                                D ]\  }}t          | ||           d S rC   )_id_validationrR   _rdisk_token_token_unpackitemssetattr)r!   rR   kwargskvs        r"   r#   zRFile.__init__N   sm    B!LLNN 	  	 DAqD!Q	  	 r$   c                     | st          d          |                     d          }d|v sd|v rt          d|           d S )Nu.   Путь не может быть пустым/.z..u!   Недопустимый путь)
ValueErrorr*   )rR   partss     r"   rT   zRFile._id_validationY   sR     	OMNNN%<<45==@"EEE )=r$   c                 t    t          j        j        | j        j        g| j                            d          R  S Nr^   )ospathjoinrU   	base_pathrR   r*   r@   s    r"   re   z
RFile.pathb   s/    w|DK1GDGMM#4F4FGGGGr$   c                 <    | j                             d           dS )Nr^   .meta)re   rstripr@   s    r"   	meta_pathzRFile.meta_pathf   s!    )""3''....r$   c                 L    t           j                            | j        d          S )Ntuuidrd   re   rf   rk   r@   s    r"   meta_tuuid_pathzRFile.meta_tuuid_pathj   s    w||DNG444r$   c                     | j         j                            | j                  r$| j         j                            | j                  S d S rC   )rU   io	io_existsro   io_read_textr@   s    r"   
meta_tuuidzRFile.meta_tuuidn   sG    ;>##D$899 	E;>..t/CDDD	E 	Er$   c                 P    | j         j                            | j        |           d S rC   )rU   rq   io_write_textro   )r!   values     r"   rt   zRFile.meta_tuuids   s%    $$T%95AAAAAr$   c                 L    t           j                            | j        d          S )Nhistoryrn   r@   s    r"   meta_history_pathzRFile.meta_history_pathw   s    w||DNI666r$   c                 L    t           j                            | j        d          S )Nzhistory.logrn   r@   s    r"   meta_history_log_pathzRFile.meta_history_log_path{   s    w||DNM:::r$   c                 L    t           j                            | j        d          S )Nz	perms.ymlrn   r@   s    r"   meta_perms_pathzRFile.meta_perms_path   s    w||DNK888r$   c                 L    t           j                            | j        d          S )Nattachrn   r@   s    r"   meta_attach_pathzRFile.meta_attach_path   s    w||DNH555r$   c                     | j         dk    S rc   rR   r@   s    r"   is_rootzRFile.is_root   s    w#~r$   c                 J    | j         j                            | j                  S rC   )rU   rq   rr   re   r@   s    r"   existszRFile.exists       {~''	222r$   c                     t           j                            | j        d|           }| j        j                            |          S )Nflag-)rd   re   rf   rk   rU   rq   rr   )r!   flag	flag_paths      r"   meta_get_flagzRFile.meta_get_flag   s7    GLL@@	{~''	222r$   c                     t           j                            | j        d|           }|r#| j        j                            |d           d S | j        j                            |d           d S )Nr   Texist_ok
missing_ok)rd   re   rf   rk   rU   rq   io_touch	io_unlink)r!   r   rw   r   s       r"   meta_set_flagzRFile.meta_set_flag   sn    GLL@@	 	AKN##I#=====KN$$Y4$@@@@@r$   c                 b   | j         j                            | j        dd           g }| j         j                            | j                  D ]`}| j         j                            |          }|                    d          r*|                    |t          d          d                     a|S )NTr   parentsr   )	rU   rq   io_mkdirrk   
io_iterdirio_name
startswithappendlen)r!   r;   re   names       r"   
meta_flagszRFile.meta_flags   s    tLLLKN--dn== 	0 	0D;>))$//Dw'' 0

4G.///
r$   c                 4    t          j        | j                  S rC   )orjsondumpsr   r@   s    r"   flagszRFile.flags   s    |DO,,,r$   c                     | j         rdS d| j        v r$| j        j                            | j                  S | j        j                            | j                  S )Nu   Общая папкаdocument_is_internal)r   r   rU   rq   io_stemre   r   r@   s    r"   r   z
RFile.name   sS    < 	+**!T_44;>))$)444{~%%di000r$   c                 J    | j         j                            | j                  S rC   )rU   rq   	io_is_dirre   r@   s    r"   is_dirzRFile.is_dir   r   r$   c                 d    t          | j        j                            | j                            S rC   )strrU   rq   io_absolutere   r@   s    r"   abspathzRFile.abspath   s$    4;>--di88999r$   c                     | j         rd S d                    | j                            d          d d                   }t	          |          r|ndS )Nr^   )r   rf   rR   r*   r   )r!   parents     r"   	parent_idzRFile.parent_id   sN    < 	4$'--,,SbS122V-vv#-r$   c                 J    | j         sd S t          | j         | j                  S )NrU   )r   rP   rU   r@   s    r"   r   zRFile.parent   s(    ~ 	4T^DK8888r$   c                 >    | j         sg S | j         j        | j         gz   S rC   )r   r   r@   s    r"   r   zRFile.parents   s%    { 	I{"dk]22r$   c                     t          | d          s)| j        j                            | j                  | _        | j        S )N_stat)hasattrrU   rq   io_statre   r   r@   s    r"   statz
RFile.stat   s7    tW%% 	;//	::DJzr$   c                 z    t          j        | j        j                                      t
          j                  S N)tzinfo)r   utcfromtimestampr   st_mtimereplacer   utcr@   s    r"   r   zRFile.st_mtime   +    ();<<DDHLDYYYr$   c                 z    t          j        | j        j                                      t
          j                  S r   )r   r   r   st_ctimer   r   r   r@   s    r"   r   zRFile.st_ctime   r   r$   c                     | j         j        S rC   )r   st_sizer@   s    r"   r   zRFile.st_size   s    y  r$   c                    | j         sd S g }| j        j                            | j                  D ]}| j        j                            |          dk    r&| j        j                            |          }t          | j        	                    d          dz   |z   | j                  }|
                    d          s|                    |           |S )Nri   r^   r   rD   )r   rU   rq   r   re   	io_suffixr   rP   rR   rj   r1   r   )r!   childrenfilefilenames       r"   r   zRFile.children   s    { 	4 KN--di88 		" 		"D{~''--88{~--d33H,,s2X=dkRRRD88F## OOD!!!!r$   c                 V    | j         j        s| j         j        S | j         j        d         S )Nlogin)rU   tokenr   r@   s    r"   _loginzRFile._login   s*    {  	%;$${ ))r$   c                     | j         j        S rC   )rU   is_adminr@   s    r"   	_is_adminzRFile._is_admin   s    {##r$   c                     | j         j        S rC   )rU   
is_obj_apir@   s    r"   _is_obj_apizRFile._is_obj_api  s     {%%r$   c                 b    | j         dk    rdgS | j        j        sg S | j        j        d         pg S )Nzsergey.osintsev@carbonsoft.ru
topmanagerscope)r   rU   r   r@   s    r"   _scopezRFile._scope	  sC     ;999 >! {  	I{ )/R/r$   c                    | j         | j        | j        fD ]$}| j        j                            |dd           %	 | j        j                            | j                   | j        j                            | j        d          5 }t          | j
                                      |           d d d            n# 1 swxY w Y   n# t          $ r Y nw xY w| j        j                            | j        d           d S )NTr   wr   )rk   r   rz   rU   rq   r   r   r~   io_openr   r   rJ   FileExistsErrorr|   )r!   re   rE   s      r"   _create_metazRFile._create_meta  s:   ^T%:D<RS 	G 	GDKN##D4#FFFF	KN##D$8999''(<cBB 2b4;''--b1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 	 	 	D	 	 :TJJJJJs6   A	C (B8,C 8B<<C ?B< C 
CCFc                 F   |r$| j         r| j                             ddd           |                                  | j        r|rd S t	          |           |r&| j        j                            | j                   d S | j        j        	                    | j                   d S )NT)r   r   r   )
r   creater   r   r   rU   rq   r   re   r   )r!   r   r   r   s       r"   r   zRFile.create"  s     	It{ 	IKdT4HHH; 	, ,%d+++ 	/KN##DI.....KN##DI.....r$   c                     | j         rd|z   }n| j        dz   |z   }t          || j                  }|                    |           |S )Nr^   r   )r   rR   rP   rU   r   )r!   r   r   
child_namer   s        r"   	add_childzRFile.add_child2  sR    < 	.tJJ3-JZ444Fr$   c                 x    t          || j                  }|j        s|r|                    d           |S d S |S )Nr   T)r   )rP   rU   r   r   )r!   rR   mkdirargsrZ   rfs         r"   find_child_by_idzRFile.find_child_by_id<  sK    2dk***y 	 			&&&	4	r$   c                 8   | j         j                            | j                  r$| j         j                            | j                   | j        r&| j         j                            | j                   d S | j         j                            | j                   d S rC   )rU   rq   rr   rk   	io_rmtreer   re   r   r@   s    r"   deletezRFile.deleteE  s    ;>##DN33 	5KN$$T^444; 	0KN$$TY/////KN$$TY/////r$   new_idc                     d| j         v r|                    d          s|dz  }| j                            |          }|j        rt          d|j         d          | j        |j        k    rd S | j        | j        j        	                    |j                  v r t          d| j         d|j         d          | j        j        
                    | j        |j                   | j        j        
                    | j        |j                   |S )Nr   r   u   Файл c именем "u   " уже существуетu1   Не могу переместить папку "u   " в "")r   endswithrU   	get_rfiler   r   r   re   rq   
io_parents	io_renamerk   )r!   r   targets      r"   renamezRFile.renameO  s
   !T_44??7++ "'!&&v..= 	j!"hfk"h"h"hiii9##F911&+>>>>!"uVZV_"u"ugmgr"u"u"uvvv  FK888  1ABBBr$   c                 "   | j         j                            | j                  s|                                  | j         j                            | j                  5 }t                              |          cd d d            S # 1 swxY w Y   d S rC   )rU   rq   rr   r~   r   r   r   rF   rI   s     r"   permissionszRFile.permissionsb  s    {~''(<== 	 [^##D$899 	*R%%b))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   BBBc                 @    | j         }|sd S |                                S rC   )r   rA   )r!   permss     r"   perm_strzRFile.perm_strk  s%      	4||~~r$   c                     t                               |          }| j        j                            | j        d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nr   )r   r<   rU   rq   r   r~   rJ   )r!   r9   permlistrE   s       r"   r   zRFile.perm_strr  s    &&q))[^##D$8#>> 	"NN2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    A##A'*A'c                 J    | j         j                            | j                  S rC   )rU   rq   io_mimetypere   r@   s    r"   mimetypezRFile.mimetypex  s    {~))$)444r$   c                    | j         dk    s| j                             d          r	| j        sdS | j        rdS | j         dk    rdS | j                             d          s| j         dk    r[t	          j        j        dg| j                            d	          R  }| j         |k    s| j                             |d	z             rdS dS | j	        }|sdS |j
        | j        k    r	| j        dS |j        D ]}|                    d
          \  }}                    d          |                    d          }|dk    }||vrPdv r|c S | j        v s t          fd| j        D                       r|c S dS )Nz/objz/obj/FTz/Trashz/Users/z/UsersUsersr^    r&   r(   r'   c              3       K   | ]}|v V  	d S rC   r4   ).0r9   r_whos     r"   	<genexpr>zRFile.can.<locals>.<genexpr>  s'      *K*K!1:*K*K*K*K*K*Kr$   )rR   r   r   r   rd   re   rf   r   r*   r   r   r    anyr   )r!   r,   user_dirr   	rule_liner_allowr_whatr  s          @r"   r1   z	RFile.can|  s   Gv!3!3G!<!<dFV 5> 	4 7h57i(( 	DGx,?,?w|GEdk.?.?.D.DEEEHw(""dg&8&8C&H&H"t5  	4;$+%%$+*A4 	 	I%.__S%9%9"E7FKK$$E\\#&&F(G6!!~~{e##s*K*K*K*Kt{*K*K*K'K'K# $ ur$   c                     d S rC   r4   r@   s    r"   rD   z
RFile.read  s    r$    datasuffix	to_formatr   returnc                     t          j        t          j        d| i|||d          }|j        dk    rt          d| d|j                   |j        S )u*  
        Конвертация данных в HTML через libreoffice
        :param data: Данные файла в виде байт
        :param suffix: Расширение файла
        :param to_format: Формат файла который хотим получить
        r   )r  formatr   filesr     u4   Не удалось конвертировать в : )requestspostconfigCONVERTER_URLstatus_code	Exceptioncontent)r  r  r  r   r;   s        r"   obj_to_formatzRFile.obj_to_format  sx     mF0X^jsZbNd Nd e e e?c!!mS\mm`c`kmmnnn;r$   dst_pathNc                     t                               ||d          }| j        j                            |d          5 }|                    |           ddd           dS # 1 swxY w Y   dS )u(  
        Конвертация данных в PDF через libreoffice
        :param data: Данные файла в виде байт
        :param output_path: Путь сохранения итогового pdf файла
        :param suffix: Расширение файла
        pdfwb+N)rP   r  rU   rq   r   rH   )r!   r  r  r  fs        r"   
obj_to_pdfzRFile.obj_to_pdf  s     ""477[^##He44 	GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A  A$'A$c                    ddl }ddl}ddl} |j                    } |j        d|          }t          j        t          j        d|id||d          }	|	j	        d	k    rt          d
|	j                   t          |d          5 }
|
                    |	j                   ddd           n# 1 swxY w Y   |                    dd|g|dd           t          j        |           t          j        |          D ]}t          |d          5 }
t          j                            t)          | j                  |j                  }| j        j                            ||
                                           ddd           n# 1 swxY w Y   t          j        |j                   t          j        |           dS )un   
        Конвертация в PDF через libreoffice, каждый лист отдельно
        r   Nz.tar)r  dirr   
pdf_sheets)r  r  r   r  r  u9   Не удалось конвертировать в pdf: r!  tarz-xf<   T)cwdtimeoutcheckzrb+)
subprocesstempfileshutilmkdtempmktempr  r  r  r  r  r  r  openrH   runrd   r   scandirre   rf   r   rk   r   rU   rq   io_write_bytesrD   rmdir)r!   r  r  r   r,  r-  r.  temp_dirtar_pathr;   r"  src_filer  s                r"   excel_to_pdf_sheetszRFile.excel_to_pdf_sheets  sU    	#8#%%"8?&h???mF0,8FX`!a!ac c c?c!!eX[Xceefff(E"" 	!aGGCK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	E8$	 	 	 	 	 		(
8,, 	% 	%Hh&& B!7<<DN(;(;X]KK--hAAAB B B B B B B B B B B B B B B Ihm$$$$
s%   B..B25B2A*FF		F		msg_filec                    ddl }ddlm} t                      }|                    |           }|j        r|                    d|j        g           |j        r|                    d|j        g           |j        r|                    d|j        g           |j        r|                    d|j        g           |j	        r|                    d|j	        g           |j
        r;d	 |j
        D             }|                    d
d                    |          g            ||ddg          dz   }||j         z  }t          |d          S )u   
        Метод извлекает данные из файла MSG и возвращает байтовую строку
        :param msg_file: Путь до файла MSG
        :return content: Байтовая строка
        r   N)tabulateu   ОТ:u	   КОМУ:u   КОПИЯ:u   СКРЫТАЯ КОПИЯ:u	   ТЕМА:c                 N    g | ]"}d |j          dt          |j                   d#S )<z (u    байт)>)r   r   r  )r  r   s     r"   
<listcomp>z)RFile.get_content_msg.<locals>.<listcomp>  s9    jjjPVKv{KKc&+.>.>KKKjjjr$   u   ВЛОЖЕНИЯ:z,    @   )maxcolwidthsz

zutf-8)extract_msgr<  listopenMsgsenderr   toccbccsubjectattachmentsrf   bodybytes)r:  rC  r<  tablemsgrK  r  s          r"   get_content_msgzRFile.get_content_msg  sp    	%%%%%%!!(++: 	0LL'3:.///6 	0LL+sv.///6 	2LL-01117 	BLL6@AAA; 	5LL+s{3444? 	HjjZ]ZijjjKLL-tyy/E/EFGGG(5Bx8886Ach= Wg&&&r$   c                    |&| j         j                            | j                  pd}| j         j                            | j                  }t
          j                            | j        d|           }t          j	        d           | j         j        
                    | j        |           | j         j                            |d          5 }|                                }|dv r|                     |||           n@|dv r<t
          j                            | j        d	          }|                     |||           ddd           dS # 1 swxY w Y   dS )
u^    Для макроса документов office делаем fullview - превью в pdfNapplication/octet-streamfullviewr   rbr   r   r   )r  r   r   r   r   r   fullview.pdf)rU   rq   r   re   r   rd   rf   rk   geventsleepio_copyr   r   rD   r9  r#  )r!   r   r  	file_pathfile_fullviewr  url_fullview_paths          r"   make_fullviewzRFile.make_fullview  s   {~11$)<<Z@ZH))$)44GLL1DF1D1DEE	Qt|Y777[^##It44 	D#((**G222((((SSSS<<<$&GLL$P$P!):FCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   A2EEETc                 |   dd l }g }| j        j                            | j                  }|dv r9t
          j                            t          | j                  d          }| j        j        	                    |          r| j        j        
                    |d          5 }|                                }|                    |          D ]}t          |                                          d         }	||	         }
t          d| j                            d          dz   |
z             }|                    |	t          |          d           	 d d d            n# 1 swxY w Y   n|d	v rt
          j                            t          | j                  d
          }| j        j        	                    |          rPt          d| j                            d          dz             }|                    dt          |          d           |r,|s*|                                  |                     d          }|S )Nr   rU  zfullview_pages.jsonrz/filesr^   ri   )
sheet_nameurlrV  rW  z.meta/fullview.pdfr  F)r   )jsonrU   rq   r   re   rd   rf   r   rk   rr   r   rD   loadsrD  keysr   rR   lstripr   r^  get_fullview)r!   r   rc  r;   r  fullview_json_pathfile_fullview_jsonfullview_jsonpagera  pdf_fileint_filenamefullview_names                r"   rg  zRFile.get_fullview  sa   ))$)44...!#c$..A.ACX!Y!Y{~''(:;; Y[^++,>DD YHZ$6$;$;$=$=M $

= 9 9 Y Y%)$))++%6%6q%9
#'
#3'+HdgnnS6I6IG6SV^6^'_'_

*SEVEV#W#WXXXX	YY Y Y Y Y Y Y Y Y Y Y Y Y Y Y 888GLLT^)<)<nMMM{~''66 I#HdgnnS.A.ADX.XYY

"S5F5FGGHHH  	2# 	2   ##5#11C
s   !B/EE!$E!c                 $   t          j        d           g }d}	 |dk    rwt          j        |d          5 }t	          |                                          D ]'\  }}||k    r n|                    |j                   (d d d            n# 1 swxY w Y   n|dk    rwt          j	        |d          5 }t	          |                                          D ]'\  }}||k    r n|                    |j                   (d d d            n# 1 swxY w Y   n}|dk    rwt          j        |d          5 }t	          |                                          D ]'\  }}||k    r n|                    |j                   (d d d            n# 1 swxY w Y   n# t          j        t          j        t          j        f$ r*}	t          j        d| j         d	|	            Y d }	~	d S d }	~	wt$          $ r*}	t          j        d
| j         d|	            Y d }	~	d S d }	~	ww xY wt)          ddt+          |          dz  z             }
t-          j        dd|
fd          }t1          j        |          }t5          j        dd          }d}|D ]"}|                    d|f|d|           |dz  }#t;          j        d          5 }|                    |j         d           |!                                 | j"        j#        $                    tJ          j        &                    | j'        d          tQ          |j                   )                                           | *                    tQ          |j                   |           d d d            d S # 1 swxY w Y   d S )Nup   Обнаружен архив, создаём изображение со списком содержимого.   application/zipr`  application/x-rar-compressedapplication/x-7z-compressed)modeuT   Обнаружен повреждённый или поддельный архив: z - u4   Ошибка при обработке архива r  i  rQ      RGB)   rw  rw  )colorzDejaVuSans.ttf   
   )r   r   r   )fillfont.jpgr  JPEG)r  zpreview.jpg)+logginginfozipfileZipFile	enumerateinfolistr   r   rarfileRarFilepy7zrSevenZipFilerD  
BadZipFile
BadRarFile	Bad7zFilewarningre   r  errormaxr   r	   newr
   Drawr   truetypetextr-  NamedTemporaryFilesaver   flushrU   rq   r4  rd   rf   rk   r   
read_bytes_process_image)r!   r   
input_pathoutput_path	file_list	max_filesarchiveidx	file_infoe
img_heightimgdrawr|  y_offset	file_name	temp_files                    r"   _process_archivezRFile._process_archive<  s     H  	I  	I  	I			,,,_Z55 =*3G4D4D4F4F*G*G = =Y)++!E!(();<<<<	= = = = = = = = = = = = = = = ;;;_Z55 =*3G4D4D4F4F*G*G = =Y)++!E!(();<<<<	= = = = = = = = = = = = = = = :::'
=== =*3GLLNN*C*C = =Y)++!E!(();<<<<	= = = = = = = = = = = = = = = "G$6H 	 	 	O  Esws|  E  E  BC  E  E  F  F  FFFFFF 	 	 	MaQUQZaa^_aabbbFFFFF	
 b3y>>B#6677
iZ0HHH~c""!"2B77" 	 	IIIr8niidIKKKNHH(777 	C9HHY^FH333OOKN))"',,t~}*U*UW[\e\jWkWkWvWvWxWxyyyY^ 4 4kBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   F A
B?F BF BF 2A
D<F DF D F 0A
F:F F

F F
F &H8GH*HH8C NN	N	c                 h   t          j        d           |                                  | j        j                            | j                  }t          j                            | j	        d          }| j	        }t          j                            | j	        d          }| j        j        
                    | j                  pd}	 |                    d          r|                     | j        |           n|dv r|                     || j        |           n|dk    rG|                     | j                  }|                     ||           |                    d	           n`|                    d
          r|                     |           n5|dk    r|                     |||           n|                     |||           |                     ||           |                     |           |                     |           d S # t.          $ r! t          j        d| j                    | cY S w xY w)Nzcall make_previewzpreview.pdfzthumbnail.jpgrR  image)rq  rr  rs  zapplication/pdfTr   videozapplication/vnd.ms-outlooku,   Не удалось создать preview: )r  r  r   rU   rq   r   re   rd   rf   rk   r   r   r  tmp_readonly_pathr  pdf_bytes_to_imgunlink_process_video_process_outlook_process_other_copy_preview_to_versionr^  _copy_fullview_to_versionr  	exceptionr   )r!   r  url_preview_pathurl_fullview_dirurl_thumbnail_pathr   temp_img_paths          r"   make_previewzRFile.make_previewq  sG   ()))))$)447<<FF>W\\$./JJ ;>--di88V<V	""7++ R##D$:<NOOOOooo%%h0FHZ[[[[... $ 5 5d6L M M##M3EFFF$$$5555$$W-- R##$67777999%%&68JFSSSS##$46H&QQQ))*:<NOOOx(((**+;<<<<< 	 	 	[T\[[\\\KKK	s   D?H (H10H1c                 .   	 t          j        |          5 }|j        dv r|                    d          }|j        | j        k    rPt          | j        |j        z  |j        z            }|                    | j        |ft           j	        j
                  }t          t          j        d                    }|                    |ddd           |                                j        | j        k    r|                    |d| j        d           | j        j                            ||                                           |                    d	           d d d            d S # 1 swxY w Y   d S # t0          $ r t3          j        d
           Y d S w xY w)N)RGBAPrv  r}  r~  r  d   T)r  qualityoptimizer   u6   Ошибка обработки изображения)r	   r1  rt  convertwidth	MAX_WIDTHintheightresize
ResamplingLANCZOSr   r-  r0  r  r   r   MAX_THUMBNAIL_SIZEJPEG_QUALITYrU   rq   r4  r  r  IOErrorr  r  )r!   r  r  r  
new_height	temp_paths         r"   r  zRFile._process_image  s   	TJ'' 238},,++e,,C 9t~--!$dnsy&@CJ%N!O!OJ**dnj%A5CSC[\\C !?!?!?@@	63NNN>>##+d.EEEHHYvt?P[_H```--k9;O;O;Q;QRRR  D 111!2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2"  	T 	T 	TMRSSSSSS	Ts5   E2 EE%E2 %E))E2 ,E)-E2 2FFc                 .   t          j        dd          5 }t          |j                  }t	          j        |           }|                    d          }|                                }|                    |           ddd           n# 1 swxY w Y   |S )ub   
        Конвертирует PDF -> PNG и передает его в _process_image
        z.pngF)r  r   r   N)	r-  r  r   r   fitzr1  	load_page
get_pixmapr  )rE   r  r  r   rk  imagess         r"   r  zRFile.pdf_bytes_to_img  s    
 (uEEE 	#Y^,,I)B--C==##D__&&FKK	"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# s   A'B

BBsrc_pathc                     | j         j                            |          rC|                     |          }|                     ||           |                    d           dS dS )u[   
        Конвертирует PDF -> PNG и передает в _process_image
        Tr   N)rU   rq   rr   r  r  r  )r!   r  r  r  s       r"   
pdf_to_imgzRFile.pdf_to_img  sn     ;>##H-- 	2 11(;;Mx888  D 11111	2 	2r$   c                 r   	 t          t          j        d                    }t          | j                  }|                    t          |          d           |                     ||           |                    d           d S # t          $ r"}t          j        d|            Y d }~d S d }~ww xY w)Nr}  r~  g{Gz?)tTr   u,   Ошибка обработки видео: )r   r-  r0  r   r  
save_framer   r  r  r  r  r  )r!   r  r  clipr  s        r"   r  zRFile._process_video  s    	NX_F;;;<<I !788DOOC	NNdO333	;777----- 	N 	N 	NMLLLMMMMMMMMM	Ns   BB
 

B6B11B6c                    | j         j                            | j                  }|                     |          }|                     |||           t          j        d          5 }t          |j	                  }| j         j        
                    |d          5 }|                    |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |          }	|                     |	|           |	                    d           |                    d           d S NFr   rT  Tr   )rU   rq   io_read_bytesre   rP  r#  r-  r  r   r   r   write_bytesrD   r  r  r  )
r!   pdf_pathimg_pathr  r  parsed_datatemp_pdf_filetemp_pdf_pathrl  r  s
             r"   r  zRFile._process_outlook  s   {~++DI66**400Xv666(666 	;- !344M''$77 ;8))(--//:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 --m<<M8444--------s6   &5C&(CC&C	C&C	C&&C*-C*c                 j   | j         j                            | j                  }|                     |||           t          j        d          5 }t          |j                  }| j         j        	                    |d          5 }|
                    |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |          }|                     ||           |                    d           |                    d           d S r  )rU   rq   r  re   r#  r-  r  r   r   r   r  rD   r  r  r  )	r!   r  r  r  r  r  r  rl  r  s	            r"   r  zRFile._process_other  s   +...ty996222(666 	;- !344M''$77 ;8))(--//:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
 --m<<M8444--------s6   5C(B:.C:B>	>CB>	CCCc                 p   |                                  }|j        d         }||fD ]}| j        j                            |          rn| j        j                            |          }t          j                            |j	        |j
         d|           }| j        j                            ||           d S )Nr   r_   )file_versionsversionsrU   rq   rr   r   rd   re   rf   versions_dir_pathr   rZ  )r!   preview_paththumbnail_pathfvscurrent_versionr  r   dsts           r"   r  zRFile._copy_preview_to_version  s      "",r*%~6 	6 	6H{~''11 6;>11(;;gll3#8_=U:b:bX`:b:bcc&&x555		6 	6r$   c                    |                                  }|j        d         }| j        j                            |          D ]}| j        j                            |          r| j        j                            |          rA| j        j                            |          }|                    d          svt          j
                            |j        |j         d|           }| j        j                            ||           d S )Nr   rS  r_   )r  r  rU   rq   r   rr   r   r   r   rd   re   rf   r  r   rZ  )r!   fullview_dirr  r  fullview_pathr   r  s          r"   r  zRFile._copy_fullview_to_version  s      "",r*![^66|DD 		7 		7M;>++M:: dkn>V>VWd>e>e {~--m<<H&&z22 ',,s49Q6^6^T\6^6^__CKN""=#6666		7 		7r$   c                 D    t          j        | j        | j                  }|S rC   )r   for_file_pathre   rU   )r!   r  s     r"   r  zRFile.file_versions  s    (DK@@
r$   c                     |                                  }|                    | j                   |r|                                  d S d S )Nauthor)r  backup_smartr   
mark_dirty)r!   r  r  s      r"   r  zRFile.backup_smart  sT      "",,, 	OO	 	r$   c                 D   t           j                            | j        d          }| j        j                            |          s|                                  |                                 }|	                    | j
                   |r|                                  d S d S )Nmd5r  )rd   re   rf   rk   rU   rq   rr   	write_md5r  backupr   r  )r!   r  md5_pathr  s       r"   r  zRFile.backup  s    7<<66{~''11 	NN  ""

$+
&&& 	OO	 	r$   c                 $   dd l }|                                }| j        j                            |d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nr   rT  c                  .                          d          S )Ni   )rD   )r"  s   r"   <lambda>zRFile.md5.<locals>.<lambda>  s    affWoo r$   r$   )hashlibr  rU   rq   r   iterupdate	hexdigest)r!   r[  r  hash_md5chunkr"  s        @r"   r  z	RFile.md5  s    ;;==[^##It44 	'5555s;; ' '&&&&'	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' !!###s   ,A33A7:A7c                 h   |                      | j                  }t          j                            | j        d          }| j        j                            |          }| j        j                            |          s| 	                                 | j        j        
                    ||           d S Nr  )r  re   rd   rf   rk   rU   rq   	io_parentrr   r   rv   )r!   md5sumr  md5_path_parents       r"   r  zRFile.write_md5  s    $)$$7<<66+.228<<{~''88 	 $$Xv66666r$   c                     t           j                            | j        d          }| j        j                            |          s|                                  | j        j                            |          S r  )	rd   re   rf   rk   rU   rq   rr   r  rs   )r!   r  s     r"   get_md5zRFile.get_md5'  s[    7<<66{~''11 	NN{~**8444r$   c                 4   t           j                            t          j        | j        j                  }| j        j        	                    |          s"| j        j        
                    |dd           t           j                            || j         d          }|                                 }|                                                                }| j        |d<   t          j        |d          }| j        j                            ||           d S )NT)r   r   z.jsonr   )allow_unicode)rd   re   rf   r  
DIRTY_PATHr   r   rU   rq   rr   r   r  last_versionto_pyobjr5   	safe_dumprv   )r!   r  
dirty_pathre   r  pyobjr  s          r"   r  zRFile.mark_dirty-  s    W\\&"3T[5EFF
{~''
33 	MKN##Jt#LLLw||J49(;(;(;<<  ""  ""++--	f~e4888$$T400000r$   c                 @   | j         rt          d          | j        j                            | j        |           |                                  |r/|r|                     |           n|                     |           |rt          j
        | j                   d S d S )N:   Не могу записывать в директорииr  )r   r`   rU   rq   r4  re   r  r  r  rX  spawnr  )r!   r  r  smart_backupr  r  s         r"   rH   zRFile.write8  s    ; 	[YZZZ 	%%di666 	3 3!!Z!8888z222 	,L*+++++	, 	,r$   )r  r  r  r  c                   dd l }| j        rt          d          | j        j                            | j        j        j                  \  }	}
}d}d}t          j	        dz  }d}| 
                                }	  |j        d          5 }t          |j                  }d d d            n# 1 swxY w Y   t          |d          5 }	 |                    |          }|sn|t!          |          z  }||k    rt#          d
t          j	         d          ||z
  |k     rt#          d||z
   d          ||z
  |dz  k     rt#          d||z
   d|dz   d          |                    |           	 d d d            n# 1 swxY w Y   | j        dk    rXt          | j                  j        t*          vr8|r6|j        s/|r|                     |           n|                     |           | j        j                            | j         d|                                           | j        j                            | j         d| j                   | j        j                            | j         dd	           |                                r|                                 n.# |                                r|                                 w w xY w|                                  | 
                                }|rVt          | j                  j        t*          v s|j        r/|r|                     |           n|                     |           |rtA          j!        | j"                   d S d S )Nr   r  i    i@B i 5wFr  r!  Tu   Файл больше, чем u_    МБ. Для загрузки, пожалуйста уменьшите размер файлаu4   На диске недостаточно места u    < 2_000_000_000 байт   z < u	    байтr  z.tmpr   )#r-  r   r`   rU   rq   io_disk_usagerootre   r  MAX_SIZE_MEGABYTEr  r  r   r   r1  rD   r   r  rH   r   r  OFFICE_EXTENSIONSr  r  r  r4  r  rZ  r   r   r  r  rX  r  r  )r!   streamr  r  r  r  r   rZ   r-  totalusedfree
chunk_size	file_sizemax_file_sizemin_disc_space_avlr  r  temp_filenamer"  r  s                        r"   stream_writezRFile.stream_writeK  s|    	; 	[YZZZ KN889I9NOOtT
	09<***,,%	',,E::: 5i $Y^ 4 45 5 5 5 5 5 5 5 5 5 5 5 5 5 5mU++ #q#"KK
33E  U+I =00'xV=U x x x  
 y(,>>>'  )K_cfo_o  )K  )K  )K  L  L  Ly(IM99'  )M_cfo_o  )M  )Mt}  AB  uB  )M  )M  )M  N  N  NGGENNN%# 	# # # # # # # # # # # # # # #, |aDOO$:BS$S$SX^$Sgtg}$S 7%%%<<<<KK:K666KN))TY*<*<*<m>V>V>X>XYYYKN""di#5#5#5tyAAAKN$$	%7%7%7D$III##%% '$$&&& ##%% '$$&&&&' 	**,, 	3tDI-1BBBmF\B 3!!Z!8888z222 	,L*+++++	, 	,sV   7J$ B)J$ )B--J$ 0B-1J$ B,E=1J$ =FJ$ FC6J$ $+Kr  c                 B     | j         |                                fi |S rC   )rH   encode)r!   r  rZ   s      r"   
write_textzRFile.write_text  s$    tz$++--226222r$   c                 J    | j         j                            | j                  S rC   )rU   rq   io_tmp_readonly_pathre   r@   s    r"   r  zRFile.tmp_readonly_path  s    {~2249===r$   c                 *    t          | j                  S rC   )r   rR   r@   s    r"   __str__zRFile.__str__  s    47||r$   c                     d| j          dS )NzRFile('z')r   r@   s    r"   __repr__zRFile.__repr__  s    $$$$$r$   )FF)F)r  rC   )T)r  N)TTTT)TrK   rL   rM   r  r  r  r   r#   staticmethodrT   propertyre   rk   ro   rt   setterrz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   rD   rM  r  r#  r9  r   rP  r^  rg  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r
  r  rH   r'  r*  r  r.  r0  r4   r$   r"   rP   rP   I   sn       IL#	 3 	  	  	  	  F F \F H H XH / / X/ 5 5 X5 E E XE B B B 7 7 X7 ; ; X; 9 9 X9 6 6 X6   X 3 3 X33 3 3A A A   X - - X- 1 1 X1 3 3 X3 : : X: . . X. 9 9 X9
 3 3 X3
   X
 Z Z XZ Z Z XZ ! ! X!   X2 * * X*
 $ $ X$ & & X& 	0 	0 X	0K K K/ / / /      0 0 0S    & * * X*   X _  _
 5 5 X5. . .`    E 3 3 # W\    \	u 	 	S 	T 	 	 	 	   c  C  D        D '$ '5 ' ' ' \'>D D D D(   :3C 3C 3Cj" " "HT T T, 
 
 
 \
23 2# 2$ 2 2 2 2	N 	N 	N. . .. . .6 6 67 7 7|          $ $ $7 7 75 5 5	1 	1 	1 	1, , , ,. H, H, H, H, H,T3s 3 3 3 3 > > X>  % % % % %r$   rP   )'r  	mimetypesrd   r   r   r   r   pathlibr   r.  r   r-  PILr	   r
   r   moviepy.editorr   r  r  r  r  rX  r   r  r5   r   r   r   r   ImportErrorr  r   r  versionr   r  r   rP   r4   r$   r"   <module>r:     s
        				 ' ' ' ' ' ' ' '                                      + + + + + + + + + + ( ( ( ( ( (        (AAAAAAAAA ( ( (''''''''''( # # # # # # ! ! ! ! ! !   "' "' "' "' "' "' "' "'JW% W% W% W% W% W% W% W% W% W%s   (A1 1B B