
    hr                     V    d dl Z d dlZd dlmZmZmZ d dlmZ ddlm	Z	  G d de	      Z
y)    N)ListDictAny)
UploadFile   )StorageInterfacec            	           e Zd ZddefdZdedee   deeef   fdZ	dedefd	Z
dedefd
Zdedee   fdZddededeeef   fdZddededeeef   fdZy)LocalStorageN	base_pathc                 N    |t        j                  dd      | _        y || _        y )Nftp_path_filesz2/var/www/dev.api.imparables.cic-ware.com/crm/files)osgetenvr   )selfr   s     R/var/www/dev.api.imparables.com.co/api_imparables/landing/storage/local_storage.py__init__zLocalStorage.__init__   s#    YY'79mnDN&DN    folder_pathfilesreturnc           
        K   t         j                  j                  | j                  |      }g }	 t         j                  j	                  |      st        j
                  |       g }t         j                  j	                  |      rt        j                  |      D cg c]~  }t         j                  j                  t         j                  j                  ||            r?|t         j                  j                  t         j                  j                  ||            f }}t        |      }t        |      }||z   }	t        |	dz
  d      }
|
dkD  rY|rW|j                  d        |d |
 }|D ]:  \  }}t         j                  j                  ||      }t        j                  |       < |D ]  }|j                  }t         j                  j                  ||      }|j                          d {   }t        |d      5 }|j!                  |       d d d        d| }|j#                  |j                  ||t        |      d        dd	|d
S c c}w 7 e# 1 sw Y   FxY w# t$        $ r}ddt'        |       dcY d }~S d }~ww xY ww)N   r   c                     | d   S )Nr    xs    r   <lambda>z)LocalStorage.save_files.<locals>.<lambda>)   s
    !A$ r   )keywbfile://)filename
local_pathurlsizeTzArchivos guardados exitosamentesuccessmessager   FzError al guardar los archivos: )r&   r'   )r   pathjoinr   existsmakedirslistdirisfilegetmtimelenmaxsortremover!   readopenwriteappend	Exceptionstr)r   r   r   	full_pathuploaded_filesexisting_filesfilenum_archivos_existentesnum_archivos_nuevostotal_despues	excedentefiles_to_remove_	file_pathlocal_filenamelocal_file_pathcontentdestination_filefile_urles                       r   
save_fileszLocalStorage.save_files   sC    GGLL=	;	77>>),I&  Nww~~i( !#

9 5"ww~~bggll9d&CD 277++BGGLLD,IJK" " '*.&9#"%e*36IIMMA-q1I 1}###7"0)"<. )GD! "Y =IIIi()
  !%"$'',,y."I !%		+/40 44D$**734 %_$56%% $"1#L	' (  <' S"6 ,4 4$  	 <SVHE 	sm   -JA,I! BICI! -I.I! >I=I! JI! I	I! !	J*J :J;J JJrC   c                 h   K   t         j                  j                  | j                  |      }d| S w)Nr    )r   r(   r)   r   r   rC   r9   s      r   get_file_urlzLocalStorage.get_file_urlP   s+     GGLL;	$$s   02c                    K   	 t         j                  j                  | j                  |      }t         j                  j	                  |      rt        j
                  |       yy# t        $ r Y yw xY ww)NTF)r   r(   r)   r   r*   r2   r7   rL   s      r   delete_filezLocalStorage.delete_fileT   sV     	T^^Y?Iww~~i(		)$ 		s)   A3AA$ "A3$	A0-A3/A00A3c           	        K   	 t         j                  j                  | j                  |      }t         j                  j	                  |      rat        j
                  |      D cg c]B  }t         j                  j                  t         j                  j                  ||            sA|D c}S g S c c}w # t        $ r g cY S w xY wwN)r   r(   r)   r   r*   r,   r-   r7   )r   r   r9   fs       r   
list_fileszLocalStorage.list_files^   s     	T^^[AIww~~i(#%::i#8gaBGGNN277<<XacdKe<fggI h 	I	sN   CA B5 $AB0'B0+B5 -C.B5 /C0B5 5C CCC	max_filesc           
        K   	 t         j                  j                  | j                  |      }t         j                  j	                  |      sddg dS g }t        j
                  |      D ]  }t         j                  j                  ||      }t         j                  j                  |      sCt        j                  |      }|j                  t         j                  j                  ||      ||j                  |j                  |d        |j                  d d       |d| }g }	|D ]G  }
dd	lm} |	j                  |
d
   |
d   |
d   |j                  |
d         j                         d       I ddt        |	       d||	t        |      t        |	      dS # t         $ r}ddt#        |       g dcY d}~S d}~ww xY ww)zJ
        Lista archivos locales con metadatos (sin generar URLs).
        Tz(No se encontraron archivos en la carpetar%   )r   r!   r$   last_modifiedrC   c                     | d   S )NrV   r   r   s    r   r   z7LocalStorage.list_files_with_metadata.<locals>.<lambda>   s    !O*< r   )r   reverseNr   )datetimer!   r   r$   rV   )r!   s3_keyr$   rV   zArchivos locales listados: z	 archivos)r&   r'   r   r   total_files_in_folderfiles_returnedFz"Error al listar archivos locales: )r   r(   r)   r   r*   r,   r-   statr6   st_sizest_mtimer1   rY   fromtimestamp	isoformatr/   r7   r8   )r   r   rT   r9   
files_infor!   rC   r]   latest_filesfiles_with_metadata	file_inforY   rI   s                r   list_files_with_metadataz%LocalStorage.list_files_with_metadatag   s    2	T^^[AI77>>),#I  JJJy1 
GGLLH=	77>>),779-D%%!ww||KB$, $)-%.' 	
 OO <dOK%jy1L"$) 	-#** )* 5'.%f-%-%;%;Io<V%W%a%a%c	,   8=P9Q8RR[\*,),Z"%&9":   	 ?AxH 	sI   GAF GAF -C.F G	G%F<6G7G<GGrZ   
expirationc                 t  K   	 t         j                  j                  | j                  |      }t         j                  j	                  |      sddi dS d| }ddlm}m} |j                          ||      z   }dd	||j                         |d
S # t        $ r}ddt        |       i dcY d}~S d}~ww xY ww)zV
        Para storage local, simula una URL firmada retornando la ruta local.
        FzArchivo no encontrado)r&   r'   datar    r   )rY   	timedelta)secondsTzURL local generada exitosamente)r&   r'   
signed_url
expires_at
expires_inzError al generar URL local: N)r   r(   r)   r   r*   rY   rj   nowra   r7   r8   )	r   rZ   rg   r9   	local_urlrY   rj   rm   rI   s	            r   get_signed_urlzLocalStorage.get_signed_url   s     	T^^V<I77>>),$6  ")-I 5!)J*GGJ  <'(224(   	 9#a&B 	sA   B8AB B8<B B8	B5B0*B5+B80B55B8rQ   )r   )i  )__name__
__module____qualname__r8   r   r   r   r   r   rJ   rM   boolrO   rS   intrf   rq   r   r   r   r
   r
      s    '# '?C ?Z8H ?TRUWZRZ^ ?B%C %C %3 4 C DI 6# 6# 6VZ[^`c[cVd 6p"3 "C "4PSUXPX> "r   r
   )r   shutiltypingr   r   r   fastapir   base_storager   r
   r   r   r   <module>r{      s&    	  " "  *z# zr   