File: //usr/local/lib/python3.6/site-packages/bmemcached/client/__pycache__/distributed.cpython-36.pyc
3
�':f"# � @ sP d dl mZ d dlmZ d dlmZ d dlmZ d dlm Z G dd� de�Z
dS ) � )�defaultdict)�HashRing)�SOCKET_TIMEOUT)�ClientMixin)�picklec s� e Zd ZdZd$dddedejejdf � fdd� Zdd� Z d%d d
�Z
dd� Zd'dd�Zd)dd�Z
d+dd�Zd-dd�Zd.dd�Zd/dd�Zdd� Zd1dd�Zd2d d!�Zd3d"d#�Z� ZS )4�DistributedClientz�This is intended to be a client class which implement standard cache interface that common libs do...
It tries to distribute keys over the specified servers using `HashRing` consistent hash.
�127.0.0.1:11211Nr c
s0 t t| �j||||||||| � t| j�| _d S )N)�superr �__init__r �_servers�_ring)
�self�servers�username�password�compression�socket_timeoutZpickle_protocolZpicklerZ unpicklerZtls_context)� __class__� �P/tmp/pip-build-5ba02zx6/python-binary-memcached/bmemcached/client/distributed.pyr
s zDistributedClient.__init__c C s | j j|�S )N)r Zget_node)r
�keyr r r �_get_server s zDistributedClient._get_serverc C s | j |�}|j||�S )z�
Delete a key/value from server. If key does not exist, it returns True.
:param key: Key's name to be deleted
:param cas: CAS of the key
:return: True in case o success and False in case of failure.
)r �delete)r
r �cas�serverr r r r s
zDistributedClient.deletec C sD t t�}x$|D ]}| j|�}|| j|� qW tdd� |j� D ��S )Nc S s g | ]\}}|j |��qS r )�delete_multi)�.0r Zkeys_r r r �
<listcomp>( s z2DistributedClient.delete_multi.<locals>.<listcomp>)r �listr �append�all�items)r
�keysr r �
server_keyr r r r # s
zDistributedClient.delete_multi� c C s | j |�}|j||||�S )a4
Set a value for a key on server.
:param key: Key's name
:type key: str
:param value: A value to be stored on server.
:type value: object
:param time: Time in seconds that your key will expire.
:type time: int
:param compress_level: How much to compress.
0 = no compression, 1 = fastest, 9 = slowest but best,
-1 = default compression level.
:type compress_level: int
:return: True in case of success and False in case of failure
:rtype: bool
)r �set)r
r �value�time�compress_levelr r r r r% * s
zDistributedClient.setc C s~ |sg S t � }tt�}x2|j� D ]&\}}| j|�}|| j||fg� q W x*|j� D ]\} }
|t | j|
||��O }qTW t|�S )a
Set multiple keys with it's values on server.
:param mappings: A dict with keys/values
:type mappings: dict
:param time: Time in seconds that your key will expire.
:type time: int
:param compress_level: How much to compress.
0 = no compression, 1 = fastest, 9 = slowest but best,
-1 = default compression level.
:type compress_level: int
:return: List of keys that failed to be set on any server.
:rtype: list
)r% r �dictr! r �update� set_multir )r
Zmappingsr'