U
    dw                     @   sv   d Z ddlmZ ddlmZ ddlmZ ddlmZ zddl	Z	W n e
k
rX   dZ	Y nX dZd	ZG d
d deZdS )zCouchDB result store backend.    )bytes_to_str)
_parse_url)ImproperlyConfigured   )KeyValueStoreBackendN)CouchBackendzKYou need to install the pycouchdb library to use the CouchDB result backendc                       sn   e Zd ZdZdZdZdZdZdZdZ	d fdd	Z
d	d
 Zedd Zdd Zdd Zdd Zdd Z  ZS )r   zCouchDB backend.

    Raises:
        celery.exceptions.ImproperlyConfigured:
            if module :pypi:`pycouchdb` is not available.
    defaulthttp	localhosti`  Nc                    s   t  j|| || _td kr$ttd  } } } } }}	|rht|\}
}}}}}	}
|	rd|	dnd }	|pp| j| _|p|| j	| _	t
|p| j| _|	p| j| _|p| j| _|p| j| _d | _d S )N/)super__init__url	pycouchdbr   ERR_LIB_MISSINGr   stripschemehostintport	containerusernamepassword_connection)selfr   argskwargsZuschemeZuhostZuportunameZupassZ
ucontainer_	__class__ ;/tmp/pip-unpacked-wheel-mu1yl971/celery/backends/couchdb.pyr   $   s    zCouchBackend.__init__c              	   C   s   | j rF| jrF| j d| j  d| j d| j d| j 	}tj|dd}n$| j d| j d| j }t|}z|| jW S  tj	j
k
r   || j Y S X dS )zConnect to the CouchDB server.z://:@basic)Z
authmethodN)r   r   r   r   r   r   ServerZdatabaser   
exceptionsNotFoundcreate)r   Zconn_stringserverr!   r!   r"   _get_connection9   s    *
zCouchBackend._get_connectionc                 C   s   | j d kr|  | _ | j S N)r   r+   r   r!   r!   r"   
connectionG   s    

zCouchBackend.connectionc                 C   s:   t |}z| j|d W S  tjjk
r4   Y d S X d S )Nvalue)r   r.   getr   r'   r(   r   keyr!   r!   r"   r0   M   s
    zCouchBackend.getc                 C   s`   t |}||d}z| j| W n8 tjjk
rZ   | j|}||d< | j| Y nX d S )N)Z_idr/   r/   )r   r.   saver   r'   Conflictr0   )r   r2   r/   datar!   r!   r"   setT   s    
zCouchBackend.setc                    s    fdd|D S )Nc                    s   g | ]}  |qS r!   )r0   ).0r2   r-   r!   r"   
<listcomp>`   s     z%CouchBackend.mget.<locals>.<listcomp>r!   )r   keysr!   r-   r"   mget_   s    zCouchBackend.mgetc                 C   s   | j | d S r,   )r.   deleter1   r!   r!   r"   r;   b   s    zCouchBackend.delete)N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r+   propertyr.   r0   r6   r:   r;   __classcell__r!   r!   r   r"   r      s   
r   )r?   Zkombu.utils.encodingr   Zkombu.utils.urlr   Zcelery.exceptionsr   baser   r   ImportError__all__r   r   r!   r!   r!   r"   <module>   s   
