U
    /e                     @  sR   d dl mZ d dlmZ d dlmZ d dlmZ G dd dZG dd deZ	d	S )
    )annotations)MutableMapping)	stringify)
log_errorsc                   @  sN   e Zd ZdZdd ZedddZeddd	Zed
d ZedddZ	dS )PublishExtensionzAn extension for the scheduler to manage collections

    *  publish_list
    *  publish_put
    *  publish_get
    *  publish_delete
    c                 C  s6   || _ t | _| j| j| j| jd}| j j| d S )N)Zpublish_listZpublish_putZpublish_getZpublish_delete)		schedulerdictdatasetslistputgetdeletehandlersupdate)selfr   r    r   7/tmp/pip-unpacked-wheel-g426oqom/distributed/publish.py__init__   s    zPublishExtension.__init__NFc                 C  sL   |s|| j krtd| | j|dt|  ||d| j |< d|dS )NzDataset %s already exists
published-)datakeysOK)statusname)r	   KeyErrorr   Zclient_desires_keysr   )r   r   r   r   overrideclientr   r   r   r       s
    zPublishExtension.putc                 C  s2   | j |dg i}| j|d dt|  d S )Nr   r   )r	   popr   Zclient_releases_keysr   )r   r   outr   r   r   r   (   s    zPublishExtension.deletec                 G  s   t t| j tdS )Nkey)r
   sortedr	   r   str)r   argsr   r   r   r
   -   s    zPublishExtension.listc                 C  s   | j |d S N)r	   r   )r   r   r   r   r   r   r   1   s    zPublishExtension.get)NNNFN)N)NN)
__name__
__module____qualname____doc__r   r   r   r   r
   r   r   r   r   r   r   
   s   
r   c                   @  sL   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )DatasetszA dict-like wrapper around :class:`Client` dataset methods.

    Parameters
    ----------
    client : distributed.client.Client

    _clientc                 C  s
   || _ d S r$   r*   )r   r   r   r   r   r   A   s    zDatasets.__init__c                 C  s   | j |S r$   )r+   Zget_datasetr   r    r   r   r   __getitem__D   s    zDatasets.__getitem__c                 C  s$   | j jrtd| j j||d d S )Nz~Can't use 'client.datasets[name] = value' when client is asynchronous; please use 'client.publish_dataset(name=value)' instead)r   )r+   asynchronous	TypeErrorZpublish_dataset)r   r    valuer   r   r   __setitem__H   s
    zDatasets.__setitem__c                 C  s   | j jrtd| j |S )NzvCan't use 'del client.datasets[name]' when client is asynchronous; please use 'client.unpublish_dataset(name)' instead)r+   r.   r/   Zunpublish_datasetr,   r   r   r   __delitem__Q   s
    zDatasets.__delitem__c                 c  s$   | j jrtd| j  E d H  d S )NzdCan't invoke iter() or 'for' on client.datasets when client is asynchronous; use 'async for' instead)r+   r.   r/   list_datasetsr   r   r   r   __iter__Z   s
    zDatasets.__iter__c                   s"    j jstd fdd}| S )NzcCan't invoke 'async for' on client.datasets when client is synchronous; use iter() or 'for' insteadc                   s     j  I d H D ]
} | V  qd S r$   )r+   r3   r   r4   r   r   _i   s    zDatasets.__aiter__.<locals>._)r+   r.   r/   )r   r6   r   r4   r   	__aiter__b   s    zDatasets.__aiter__c                 C  s   | j jrtdt| j  S )NztCan't use 'len(client.datasets)' when client is asynchronous; please use 'len(await client.list_datasets())' instead)r+   r.   r/   lenr3   r4   r   r   r   __len__o   s
    zDatasets.__len__N)r%   r&   r'   r(   	__slots__r   r-   r1   r2   r5   r7   r9   r   r   r   r   r)   6   s   		r)   N)

__future__r   collections.abcr   Z
dask.utilsr   Zdistributed.utilsr   r   r)   r   r   r   r   <module>   s
   ,