
    i                         d dl m Z mZ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 d dlmZ  ee          Zed         Zd	 Zd
edefdZ	 dd
ededededef
dZd
eddfdZdd
ededefdZdS )    )datetime	timedeltatimezone)Literal)urlparseN)Config)settings)
get_logger)public-readprivatec                      t          j        dt          j        t          j        t          j        t          j        t          ddi                    S )Ns3addressing_stylevirtual)r   )region_nameendpoint_urlaws_access_key_idaws_secret_access_keyconfig)boto3clientr	   DO_SPACES_REGIONDO_SPACES_ENDPOINTDO_SPACES_ACCESS_KEYDO_SPACES_SECRET_KEYr        +/code/app/services/storage/spaces_client.py_clientr      sJ    <-0"7&;,i8999   r   keyreturnc                 p    | sdS t          t          j                  j        }dt          j         d| d|  S )N zhttps://./)r   r	   r   netlocDO_SPACES_BUCKET)r    hosts     r   get_file_urlr)      sC     rH/007D>h/>>$>>>>>r   r   datacontent_typeaclc           	         t                               d| t          t          |          dz  d          d           	 |dk    rdnd}t	                      }|                    t          j        | ||||	           t          |           }t                               d
d| i           | |dS # t          $ rT}t           
                    d| t          |          j        t          |          d           t          d          |d }~ww xY w)NzSpaces upload startedi      )r    size_kbextrar   zprivate, max-age=0, no-storez#public, max-age=31536000, immutable)BucketKeyBodyContentTypeACLCacheControlzSpaces upload successfulr    )r    urlzSpaces upload failedr    
error_nameerror_messagez Failed to upload file to storage)loggerinforoundlenr   
put_objectr	   r'   r)   	Exceptionerrortype__name__strRuntimeError)r    r*   r+   r,   cache_controlr   r8   excs           r   upload_bufferrI   "   sP    KKeCII,<a&@&@AA    H i +*6 	
 ,$& 	 	
 	
 	
 3.uclCCC3''' 	H 	H 	H""3ii0!$S  	 	
 	
 	
 =>>CG	Hs   A.B. .
D8ADDc           	         t                               dd| i           	 t                      }|                    t          j        |            t                               dd| i           d S # t          $ rE}t                               d| t          |          j	        t          |          d            d }~ww xY w)NzSpaces delete startedr    r0   r2   r3   zSpaces delete successfulzSpaces delete failedr9   )r<   r=   r   delete_objectr	   r'   rA   rB   rC   rD   rE   )r    r   rH   s      r   rL   rL   J   s    
KK's|K<<<H$=3GGG.uclCCCCC 	 	 	""3ii0!$S  	 	
 	
 	
 		s   AA/ /
B>9A B99B>  expires_in_secondsc           	         | sddddS 	 t                      }t          j        t          j                  }|                    dt          j        | d|          }|t          |          z   }||	                                |	                                dS # t          $ rE}t                              d| t          |          j        t          |          d	
            d }~ww xY w)Nr#   )r8   signedUrlExpiredAtsignedUrlCreatedAt
get_objectrK   )Params	ExpiresIn)seconds)r8   rQ   rP   z#Spaces signed URL generation failedr9   r0   )r   r   nowr   utcgenerate_presigned_urlr	   r'   r   	isoformatrA   r<   rB   rC   rD   rE   )r    rN   r   
created_atr8   
expires_atrH   s          r   get_signed_file_urlr\   \   s    O2NNN\(,//
++&7DD( , 
 

  )4F"G"G"GG
","6"6"8"8","6"6"8"8
 
 	

  	 	 	1"3ii0!$S  	 	
 	
 	
 		s   BB 
C'"A C""C')r   )rM   )r   r   r   typingr   urllib.parser   r   botocore.configr   app.settingsr	   app.utils.loggerr
   rD   r<   AclTyper   rE   r)   bytesdictrI   rL   intr\   r   r   r   <module>rf      s   2 2 2 2 2 2 2 2 2 2       ! ! ! ! ! !  " " " " " " ! ! ! ! ! ! ' ' ' ' ' '	H		
*
+  ?c ?c ? ? ? ? !	%H %H	%H
%H %H 
	%H
 
%H %H %H %HPs t    $ S c D      r   