
    i                         d dl mZmZ d dlmZmZ d dl ddlmZ  G d d      Z	 G d d	e	e
j                  j                        Z G d
 de	e
j                  j                        Zy)    )TupleUnion)Response	send_file)*   )BackupTarManagerc            	       N    e Zd Zededeej                  eee	f   f   fd       Z
y)BackupMixin	backup_idreturnc                     t         j                  j                  syt        j                  j                  | ddg      }|sy|j                  dk(  ry|j                  dk(  ry	|S )
N)uc   Только администратор может скачивать резервные копииi  statuspath)idfields)u1   Резервная копия не найдена  ERROR)uF   Резервная копия завершилась с ошибкойr   IN_PROGRESS)u6   Резервная копия еще не готоваr   )gcurrent_personis_adminmodels	CmfBackupgetr   )r   backups     "./modules/backup/views/download.py_get_backup_or_errorz BackupMixin._get_backup_or_error   s]    ((}!!%%Hf;M%NK==G#`]]m+P    N)__name__
__module____qualname__staticmethodstrr   r   r   r   intr    r   r   r   r   
   s;     f6F6FcSVh6W0X  r   r   c                   N    e Zd ZdZej
                  j                  defd       Zy)BackupDBViewz/<backup_id>/download/dbr   c                     | j                  |      }t        |t        j                        r7t	        |j
                  j                  dd|j                  j                        S |S )NT)as_attachmentconditionaldownload_name)r   
isinstancer   r   r   r   valuename)selfr   backup_resps      r   r   zBackupDBView.get   s[    //	:k6#3#34  &&" )..44	  r   N	r    r!   r"   __url__cmfviewsactionr$   r   r&   r   r   r(   r(      s*    (GYY	S 	 	r   r(   c                   N    e Zd ZdZej
                  j                  defd       Zy)BackupTarViewz/<backup_id>/download/fullr   c           
      0   | j                  |      }t        |t        j                        s|S d}d}t	        |j
                  j                        }|j                         }|j                         }t        |      d| dddd|d	|d
z
   d| d}t        j                  j                  d      }	|	r~t        j                  d|	|j                  j                         t!        |	j#                  d      d
   j#                  d      d         }d}d| d|d
z
   d| |d<   t        ||z
        |d<   	 |j%                  |      }
t-        
||d      }|S # t&        t(        t*        f$ r- t        j                  d|j                  j                         Y Qw xY w)Nr      )r/   zattachment; filename=""zapplication/x-tarbyteszno-cachezbytes 0-   /)Content-LengthzContent-DispositionzContent-TypezAccept-RangeszCache-ControlETagContent-RangeRangez Received Range header: %s, id=%s=-   zbytes rA   r?   z1Client disconnected during backup download, id=%sT)r   headersdirect_passthrough)r   r-   r   r   r	   r/   r.   get_total_size_from_indexget_tar_filenamer$   requestrF   r   loggingdebugr   r%   splitstream_tar_from_rangeBrokenPipeErrorConnectionResetErrorOSErrorr   )r0   r   r1   start_offsetr   manager
total_sizefull_backup_namerF   range_headerbodyresps               r   r   zBackupTarView.get-   s   //	:+v'7'78"(8(8(>(>?668
"335 "*o%;<L;MQ#O/$'$'
1~QzlC

 **73MM<lKNNL`L`a|11#6q9??DQGHLF)/~Qz!|nAj\'ZGO$(+J,E(FG$%	e00>D tFGPTU	  !5w? 	eMMM{~~OcOcd	es   2E >FFNr2   r&   r   r   r8   r8   *   s*    *GYY'S ' 'r   r8   N)typingr   r   flaskr   r   cmf.includerS   r	   r   r4   r5   BaseViewr(   r8   r&   r   r   <module>r]      sK     %  &  ;		 2 2  +K!3!3 +r   