
    io                     H    d dl Z d dlZd dlmZ d dlmZ  G d d          ZdS )    N)Config)ClientErrorc                   B    e Zd ZddZd Zd ZddZd Zd Zd	 Z	d
 Z
dS )S3Clientprodc                 2   dddddd| _         |dvrt          d| d          | j         |         | _        t          d	d
i          }	 t	          j        d||| j        |          | _        d S # t          $ r}t          d| j                   |d }~ww xY w)Nz4https://flava-dev-object-storage-api.workers-hub.comz5https://flava-prod-object-storage-api.workers-hub.comz:https://flava-topsecret-object-storage-api.workers-hub.comz7https://flava-secret-object-storage-api.workers-hub.comz9https://flava-prod-ssk-object-storage-api.workers-hub.com)devr   prod_top_secretprod_secretssk_prodzInvalid environment: z . Must be either 'dev' or 'prod'addressing_stylepath)s3r   )aws_access_key_idaws_secret_access_keyendpoint_urlconfigz#Failed to initialize S3 Client for )	endpoint
ValueErrorfos_endpointr   boto3client	s3_client	ExceptionRuntimeError)self
access_key
secret_keyenvr   es         =/Users/user/workspace/sujinbaek/cqa-test-app/lib/s3_client.py__init__zS3Client.__init__   s    IK[TS
 
 SSSZSZZZ[[[ M#."F+
 
 
	"\",&0!.  DNNN  	 	 	Id6GII 	s   
#A/ /
B9BBc                     	 | j                             |||          }n # t          $ r}d|j        fcY d }~S d }~ww xY wd|fS )N)BucketKeyFilenameFT)r   download_filer   response)r   bucket_nameobj_namedst_namer(   r    s         r!   download_objectzS3Client.download_object'   sk    	%~33;H_g3hhHH 	% 	% 	%!*$$$$$$$	%X~s     
=8==c                     | j                             d||dd          }t          |d          5 }t          j        ||          }d d d            n# 1 swxY w Y   |j        dk    rd|fS d	|fS )
N
put_objectr$   r%   ,  Params	ExpiresInrb)data   TF)r   generate_presigned_urlopenrequestsputstatus_code)r   r)   r*   src_namepresigned_urlfiler(   s          r!   upload_objectzS3Client.upload_object/   s    ==)(;; > 
 
 (D!! 	>T|M===H	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>3&&>!hs   AAApublic-readc                     	 | j                             |||           dS # t          $ r}ddt          |           fcY d }~S d }~ww xY w)N)ACLr$   r%   )Tz,Upload successful and ACL set to public-readFz)Upload successful but failed to set ACL: )r   put_object_aclr   str)r   r)   r*   set_aclr    s        r!   set_object_aclzS3Client.set_object_acl=   sw    	ON))gkx)XXXGG 	O 	O 	ONc!ffNNNNNNNNN	Os   ! 
A	AA	A	c                     	 | j                             ||          }n # t          $ r}d|j        fcY d }~S d }~ww xY wd|fS )Nr/   FT)r   
get_objectr   r(   )r   r)   r*   r(   r    s        r!   rH   zS3Client.get_objectE   sh    	%~000RRHH 	% 	% 	%!*$$$$$$$	%X~s    
<7<<c                     | j                             d||dd          }t          j        |          }|j        dk    rdS dd|j         fS )	Ndelete_objectr/   r0   r1      )TzObject deleted successfullyFzFailed to delete object: )r   r7   r9   deleter;   text)r   r)   r*   r=   r(   s        r!   rJ   zS3Client.delete_objectM   sj    ==)(;; > 
 
 ?=113&&66A(-AAAA    c                     	 | j                             |          }|                    dg           }d|fS # t          $ r}d|j        fcY d }~S d }~wt
          $ r!}dddt          |           dfcY d }~S d }~ww xY w)Nr$   ContentsTF  zFailed to get list bucket: codemsg)r   list_objects_v2getr   r(   r   rD   )r   r)   r(   objectsr    s        r!   get_list_objectzS3Client.get_list_object[   s    	W~55[5IIHll:r22G=  	% 	% 	%!*$$$$$$$ 	W 	W 	W3/USQRVV/U/UVVVVVVVVV	Ws-   47 
A=A	A=A=A82A=8A=c                    	 |dk    r-ddiddid}| j                             ||           d| d	d
S |dk    r#| j                             |           d| dd
S d S # t          $ r}ddt	          |           d
cY d }~S d }~ww xY w)NenableSuffixz
index.htmlr%   z
error.html)IndexDocumentErrorDocument)r$   WebsiteConfigurationr6   z enabled successfullyrS   disablerP   z disabled successfullyrR   zFailed to update bucket: )r   put_bucket_websitedelete_bucket_websiter   rD   )r   r)   actionwebsite_configurationr    s        r!   update_bucketzS3Client.update_bucketf   s   	R!!&.%=&+\%:) )% 11&)> 2    !${,Q,Q,QRRR9$$44K4HHH #{,R,R,RSSS %$  	R 	R 	R #,PA,P,PQQQQQQQQ	Rs"   2A  (A   
B	*B>B	B	N)r   )r@   )__name__
__module____qualname__r"   r,   r?   rF   rH   rJ   rY   re    rN   r!   r   r      s           >    O O O O  B B B	W 	W 	WR R R R RrN   r   )r   r9   botocore.clientr   botocore.exceptionsr   r   ri   rN   r!   <module>rl      s      " " " " " " + + + + + +pR pR pR pR pR pR pR pR pR pRrN   