o
    Df
                     @   sp   d Z ddlmZ ddlmZ ddlmZ z
ddlZddlZW n e	y+   dZdZY nw dZ
G dd	 d	eZdS )
zs3 result store backend.    )bytes_to_str)ImproperlyConfigured   )KeyValueStoreBackendN)	S3Backendc                       sH   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	  Z
S )r   a0  An S3 task result store.

    Raises:
        celery.exceptions.ImproperlyConfigured:
            if module :pypi:`boto3` is not available,
            if the :setting:`aws_access_key_id` or
            setting:`aws_secret_access_key` are not set,
            or it the :setting:`bucket` is not set.
    c                    s   t  jd	i | trtstd| jj}|dd | _|dd | _	|dd | _
|dd | _|dd | _| js?td|dd | _|  | _d S )
Nz'You must install boto3to use s3 backends3_endpoint_url	s3_regions3_access_key_ids3_secret_access_key	s3_bucketzMissing bucket names3_base_path )super__init__boto3botocorer   appconfgetendpoint_url
aws_regionaws_access_key_idaws_secret_access_keybucket_name	base_path_connect_to_s3_s3_resource)selfkwargsr   	__class__r   K/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/backends/s3.pyr      s   zS3Backend.__init__c                 C   s$   | j r| j | n|}| j| j|S N)r   r   Objectr   )r   keykey_bucket_pathr   r   r!   _get_s3_object5   s   zS3Backend._get_s3_objectc              
   C   s   t |}| |}z|  | d  }| jdkr|W S |dW S  tjj	yC } z|j
d d dkr=W Y d }~d S |d }~ww )NBodybinaryzutf-8ErrorCode404)r   r&   loadr   readcontent_encodingdecoder   
exceptionsClientErrorresponse)r   r$   	s3_objectdataerrorr   r   r!   r   9   s   
zS3Backend.getc                 C   s"   t |}| |}|j|d d S )N)r'   )r   r&   put)r   r$   valuer3   r   r   r!   setE   s   
zS3Backend.setc                 C   s   t |}| |}|  d S r"   )r   r&   delete)r   r$   r3   r   r   r!   r9   J   s   
zS3Backend.deletec                 C   s:   t j| j| j| jd}| d u rtd|jd| jdS )N)r   r   region_namezMissing aws s3 credss3)r   )	r   Sessionr   r   r   get_credentialsr   resourcer   )r   sessionr   r   r!   r   O   s   zS3Backend._connect_to_s3)__name__
__module____qualname____doc__r   r&   r   r8   r9   r   __classcell__r   r   r   r!   r      s    
r   )rC   kombu.utils.encodingr   celery.exceptionsr   baser   r   r   ImportError__all__r   r   r   r   r!   <module>   s    