B
    °F.\«  ã               @   s@   d dl mZ d dlmZmZ G dd„ deƒZG dd„ deƒZdS )é    )ÚMutableMapping)Ú
log_errorsÚtokeyc               @   s>   e Zd ZdZdd„ Zddd„Zddd„Zd	d
„ Zddd„ZdS )ÚPublishExtensionz‹ An extension for the scheduler to manage collections

    *  publish-list
    *  publish-put
    *  publish-get
    *  publish-delete
    c             C   sB   || _ tƒ | _| j| j| j| jdœ}| j j |¡ | | j j	d< d S )N)Zpublish_listZpublish_putZpublish_getZpublish_deleteZpublish)
Ú	schedulerÚdictÚdatasetsÚlistÚputÚgetÚdeleteÚhandlersÚupdateÚ
extensions)Úselfr   r   © r   ú2lib/python3.7/site-packages/distributed/publish.pyÚ__init__   s    
zPublishExtension.__init__Nc          	   C   sX   t ƒ H || jkrtd| ƒ‚| j |dt|ƒ ¡ ||dœ| j|< d|dœS Q R X d S )NzDataset %s already existszpublished-%s)ÚdataÚkeysZOK)ZstatusÚname)r   r   ÚKeyErrorr   Zclient_desires_keysr   )r   Ústreamr   r   r   Úclientr   r   r   r
      s    
zPublishExtension.putc          	   C   sB   t ƒ 2 | j |dg i¡}| j |d dt|ƒ ¡ W d Q R X d S )Nr   zpublished-%s)r   r   Úpopr   Zclient_releases_keysr   )r   r   r   Úoutr   r   r   r   "   s    zPublishExtension.deletec          	   G   s(   t ƒ  tt| j ¡ tdƒS Q R X d S )N)Úkey)r   r	   Úsortedr   r   Ústr)r   Úargsr   r   r   r	   '   s    zPublishExtension.listc          	   C   s    t ƒ  | j |d ¡S Q R X d S )N)r   r   r   )r   r   r   r   r   r   r   r   +   s    zPublishExtension.get)NNNNN)NN)NN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r   r	   r   r   r   r   r   r      s   

r   c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚDatasetsz‡A dict-like wrapper around :class:`Client` dataset methods.

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

    c             C   s
   || _ d S )N)Ú_Datasets__client)r   r   r   r   r   r   8   s    zDatasets.__init__c             C   s   | j  |¡S )N)r%   Zget_dataset)r   r   r   r   r   Ú__getitem__;   s    zDatasets.__getitem__c             C   s   | j j||d d S )N)r   )r%   Zpublish_dataset)r   r   Úvaluer   r   r   Ú__setitem__>   s    zDatasets.__setitem__c             C   s   | j  |¡ d S )N)r%   Zunpublish_dataset)r   r   r   r   r   Ú__delitem__A   s    zDatasets.__delitem__c             c   s   x| j  ¡ D ]
}|V  qW d S )N)r%   Úlist_datasets)r   r   r   r   r   Ú__iter__D   s    zDatasets.__iter__c             C   s   t | j ¡ ƒS )N)Úlenr%   r*   )r   r   r   r   Ú__len__H   s    zDatasets.__len__N)
r    r!   r"   r#   r   r&   r(   r)   r+   r-   r   r   r   r   r$   0   s   r$   N)Zdistributed.compatibilityr   Zdistributed.utilsr   r   Úobjectr   r$   r   r   r   r   Ú<module>   s   +