o
    wvXj  ã                   @   s€   d Z ddlmZm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y3   dZ
dZY nw dZG d	d
„ d
e	ƒZdS )zs3 result store backend.é    )Úabsolute_importÚunicode_literals)Ú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 t| ƒjd	i |¤Ž trtstdƒ‚| jj}| dd ¡| _	| dd ¡| _
| dd ¡| _| dd ¡| _| dd ¡| _| jsAt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© )Úsuperr   Ú__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   úO/var/www/html/myproject/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_object7   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   ;   s   
€ýzS3Backend.getc                 C   s"   t |ƒ}|  |¡}|j|d� d S )N)r)   )r   r(   Úput)r   r&   ÚvalueÚstater5   r   r   r#   ÚsetG   s   
zS3Backend.setc                 C   s   |   |¡}| ¡  d S r$   )r(   Údelete)r   r&   r5   r   r   r#   r<   L   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   P   s   ýzS3Backend._connect_to_s3)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   r   r;   r<   r   Ú__classcell__r   r   r!   r#   r      s    
r   )rF   Ú
__future__r   r   Úkombu.utils.encodingr   Úcelery.exceptionsr   Úbaser   r   r   ÚImportErrorÚ__all__r   r   r   r   r#   Ú<module>   s   þ