o
    ›¨ÊhÀ
  ã                   @   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   úD/var/www/html/env/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    þ