o
    wvXj  ã                   @   s
  d Z ddlmZmZ ddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZ zddlZddlmZ dd	lmZ W n eyG   d Z ZZY nw d
ZdZd ejjejj¡Zejd dkrsejjdkrje e	eƒ¡ dd„ Zdd„ Zndd„ Zdd„ ZG dd„ deƒZdS )zRiak result store backend.é    )Úabsolute_importÚunicode_literalsN)Ú
_parse_url)ÚCeleryWarningÚImproperlyConfiguredé   )ÚKeyValueStoreBackend)Ú
RiakClient)Úlast_written_resolver)ÚRiakBackendzGRiak bucket names must be composed of ASCII characters only, not: {0!r}zOPython {}.{} is unsupported by the client library https://pypi.org/project/riaké   é   c                 C   s   t | tƒr	|  ¡ S | S ©N)Ú
isinstanceÚstrÚencode©Ústring© r   úQ/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/backends/riak.pyÚto_bytes%   s   r   c                 C   s   t | ƒ |¡S r   )r   Údecode©r   Úencodingr   r   r   Ú
str_decode(   ó   r   c                 C   s
   |   d¡S )NÚascii)r   r   r   r   r   r   -   s   
c                 C   s&   zt | dƒ W dS  ty   Y dS w )Nr   FT)r   ÚUnicodeDecodeErrorr   r   r   r   Úis_ascii1   s   þÿr   c                       s‚   e Zd ZdZdZdZdZdZdZ		d‡ fdd„	Z	d	d
„ Z
dd„ Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )r   z‹Riak result backend.

    Raises:
        celery.exceptions.ImproperlyConfigured:
            if module :pypi:`riak` is not available.
    ÚpbcÚceleryÚ	localhosti—  Nc                    s  t t| ƒj|i |¤Ž || _tstdƒ‚d  } }	 }
}|r0t|ƒ\}}}	}}
}}|r0| d¡}| jj	 
dd ¡}|d urFt|tƒsEtdƒ‚ni }|pP| 
d| j¡| _t|	p[| 
d| j¡ƒ| _|pf| 
d| j¡| _|pp| 
d| j¡| _t| jƒstt | j¡ƒ‚d | _d S )	Nz=You need to install the riak library to use the Riak backend.ú/Úriak_backend_settingsz1Riak backend settings should be grouped in a dictÚhostÚportÚbucketÚprotocol)Úsuperr   Ú__init__ÚurlÚriakr   r   ÚstripÚappÚconfÚgetr   Údictr$   Úintr%   Úbucket_namer'   r   Ú
ValueErrorÚE_BUCKET_NAMEÚformatÚ_client)Úselfr$   r%   r2   r'   r*   ÚargsÚkwargsÚuhostÚuportÚupassÚubucketÚ_Úconfig©Ú	__class__r   r   r)   P   s4   ÿ

ÿÿ

zRiakBackend.__init__c                 C   s8   | j du s
| j  ¡ st| j| j| jd�| _ t| j _| j S )zGet client connection.N)r'   r$   Úpb_port)r6   Úis_aliver	   r'   r$   r%   r
   Úresolver©r7   r   r   r   Ú_get_clients   s   þzRiakBackend._get_clientc                 C   s0   | j du s| j  ¡ r| js| j | j¡| _| jS )zConnect to our bucket.N)r6   rC   Ú_bucketÚclientr&   r2   rE   r   r   r   Ú_get_bucket|   s
   ÿzRiakBackend._get_bucketc                 C   ó   |   ¡ S r   )rF   rE   r   r   r   rH   …   ó   zRiakBackend.clientc                 C   rJ   r   )rI   rE   r   r   r   r&   ‰   rK   zRiakBackend.bucketc                 C   s   | j  |¡jS r   )r&   r/   Údata©r7   Úkeyr   r   r   r/   �   r   zRiakBackend.getc                 C   s   | j j||d�}| ¡  d S )N)rL   )r&   ÚnewÚstore)r7   rN   ÚvalueÚstateÚ_keyr   r   r   Úset�   s   zRiakBackend.setc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]}ˆ   |¡j‘qS r   )r/   rL   )Ú.0rN   rE   r   r   Ú
<listcomp>•   s    z$RiakBackend.mget.<locals>.<listcomp>r   )r7   Úkeysr   rE   r   Úmget”   s   zRiakBackend.mgetc                 C   s   | j  |¡ d S r   )r&   ÚdeleterM   r   r   r   rY   —   s   zRiakBackend.delete)NNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r2   r$   r%   rG   r)   rF   rI   ÚpropertyrH   r&   r/   rT   rX   rY   Ú__classcell__r   r   r@   r   r   9   s(    	ÿ#		

r   )r]   Ú
__future__r   r   ÚsysÚwarningsÚkombu.utils.urlr   Úcelery.exceptionsr   r   Úbaser   r+   r	   Úriak.resolverr
   ÚImportErrorÚ__all__r4   r5   Úversion_infoÚmajorÚminorÚW_UNSUPPORTED_PYTHON_VERSIONÚwarnr   r   r   r   r   r   r   r   Ú<module>   s6   ÿý
