a
    f                     @   sZ   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ	 d dl
mZ G dd dZdS )    N)Environment)storage)Imagec                   @   s0   e Zd Zedd Zedd Zedd ZdS )FirebaseStorageServicec           	      C   s   t j d}t js tjt jnt }g }| D ]4}|j||d}dd |D }|dd |D  q0t	|dd dd	}d
d |D }|S )N.appspot.com)prefixc                 S   s   g | ]}|j d s|qS )/)nameendswith.0blob r   R/var/www/html/python-backend/backend/services/firebase/firebase_storage_service.py
<listcomp>       zIFirebaseStorageService.get_download_links_for_folders.<locals>.<listcomp>c                 S   s   g | ]}|j |jfqS r   )
public_urltime_createdr   r   r   r   r      r   c                 S   s   | d S )N   r   )xr   r   r   <lambda>$   r   zGFirebaseStorageService.get_download_links_for_folders.<locals>.<lambda>T)keyreversec                 S   s   g | ]}|d  qS )r   r   r   r   r   r   r   (   r   )
r   GCLOUD_PROJECT_IDLIVE_SERVERgoogle_storageClientfrom_service_account_jsonFIREBASE_CRED_PATH
list_blobsextendsorted)	pathsbucket_nameZstorage_clientZall_blobs_with_timepathblobsZvalid_blobsZsorted_blobs_with_timeZdownload_urlsr   r   r   get_download_links_for_folders   s    
z5FirebaseStorageService.get_download_links_for_foldersc           	   
   C   s   dd }|| }| dd }ttj d}||d | }d|v rptt }d|i|_	|j
|dd	 n
|
| td
| d zt| W n2 ty } ztd|  W Y d }~n
d }~0 0 |jS )Nc                 S   s\   d| v rT|  dd}t| t| }||d W d    qX1 sH0    Y  n| }|S )NjpgwebpZWEBP)replaceprintr   opensave)r$   new_pathimager   r   r   convert_jpg_to_webp/   s    ,zJFirebaseStorageService.upload_file_to_storage.<locals>.convert_jpg_to_webpr   r   r(   firebaseStorageDownloadTokensz
image/webp)content_typezFile z uploaded to Firebase Storage.z$Unable to remove file after upload: )splitfirebase_storagebucketr   r   r   struuiduuid4metadataupload_from_filenamer*   osremove	Exceptionr   )	source_pathdestination_pathr/   Znew_source_pathZnew_file_namer5   r   Z
uuid_valueer   r   r   upload_file_to_storage-   s     

$z-FirebaseStorageService.upload_file_to_storagec                 C   s`   t j| dd}|  t|d,}|jddD ]}|| q.W d    n1 sR0    Y  |S )NT)streamwbi    )
chunk_size)requestsgetraise_for_statusr+   iter_contentwrite)urlr?   responsefilechunkr   r   r   download_image_from_urlP   s    *z.FirebaseStorageService.download_image_from_urlN)__name__
__module____qualname__staticmethodr&   rA   rN   r   r   r   r   r      s   

"r   )r;   r7   rE   environmentr   firebase_adminr   r4   Zgoogle.cloudr   ZPILr   r   r   r   r   r   <module>   s   