
    0Fie                    l    d dl mZ d dlmZ d dlmZ d dlmZ  G d d          Z G d de          Z	d	S )
    )annotations)MutableMapping)	stringify)
log_errorsc                  v    e Zd ZdZd Zed	d            Zed
d            Zed             Zedd            Z	dS )PublishExtensionzAn extension for the scheduler to manage collections

    *  publish_list
    *  publish_put
    *  publish_get
    *  publish_delete
    c                    || _         t                      | _        | j        | j        | j        | j        d}| j         j                            |           d S )N)publish_listpublish_putpublish_getpublish_delete)		schedulerdictdatasetslistputgetdeletehandlersupdate)selfr   r   s      3lib/python3.11/site-packages/distributed/publish.py__init__zPublishExtension.__init__   sW    " !I88"k	
 
 	&&x00000    NFc                    |s|| j         v rt          d|z            | j                            |dt	          |                      ||d| j         |<   d|dS )NzDataset %s already exists
published-)datakeysOK)statusname)r   KeyErrorr   client_desires_keysr   )r   r   r   r!   overrideclients         r   r   zPublishExtension.put    ss     	?DDM116=>>>**41Oioo1O1OPPP'+T::d---r   c                    | j                             |dg i          }| j                            |d         dt	          |                      d S )Nr   r   )r   popr   client_releases_keysr   )r   r!   outs      r   r   zPublishExtension.delete(   sO    mvrl33++CK9WiPToo9W9WXXXXXr   c                v    t          t          | j                                        t                              S )N)key)r   sortedr   r   str)r   argss     r   r   zPublishExtension.list-   s+    F4=--//S999:::r   c                8    | j                             |d           S N)r   r   )r   r!   r%   s      r   r   zPublishExtension.get1   s    }  t,,,r   )NNNFNr0   )NN)
__name__
__module____qualname____doc__r   r   r   r   r   r    r   r   r   r   
   s         1 1 1 . . . Z. Y Y Y ZY ; ; Z; - - - Z- - -r   r   c                  @    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
S )DatasetszA dict-like wrapper around :class:`Client` dataset methods.

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

    _clientc                    || _         d S r0   r8   )r   r%   s     r   r   zDatasets.__init__A   s    r   c                6    | j                             |          S r0   )r9   get_datasetr   r+   s     r   __getitem__zDatasets.__getitem__D   s    |'',,,r   c                t    | j         j        rt          d          | j                             ||           d S )Nz~Can't use 'client.datasets[name] = value' when client is asynchronous; please use 'client.publish_dataset(name=value)' instead)r!   )r9   asynchronous	TypeErrorpublish_dataset)r   r+   values      r   __setitem__zDatasets.__setitem__H   sJ    <$ 	X   	$$U$55555r   c                l    | 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)r9   r@   rA   unpublish_datasetr=   s     r   __delitem__zDatasets.__delitem__Q   s?    <$ 	F   |--c222r   c              #  ~   K   | j         j        rt          d          | j                                         E d {V  d S )NzdCan't invoke iter() or 'for' on client.datasets when client is asynchronous; use 'async for' instead)r9   r@   rA   list_datasetsr   s    r   __iter__zDatasets.__iter__Z   sX      <$ 	8   <--///////////r   c                X      j         j        st          d           fd} |            S )NzcCan't invoke 'async for' on client.datasets when client is synchronous; use iter() or 'for' insteadc                Z   K   j                                          d {V D ]} | W V  d S r0   )r9   rI   )r+   r   s    r   _zDatasets.__aiter__.<locals>._i   sM      !\7799999999  					 r   )r9   r@   rA   )r   rN   s   ` r   	__aiter__zDatasets.__aiter__b   sM    |( 	;  
	 	 	 	 	 qss
r   c                    | 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)r9   r@   rA   lenrI   rJ   s    r   __len__zDatasets.__len__o   sE    <$ 	I   4<--//000r   N)r1   r2   r3   r4   	__slots__r   r>   rD   rG   rK   rO   rR   r5   r   r   r7   r7   6   s          I  - - -6 6 63 3 30 0 0  1 1 1 1 1r   r7   N)

__future__r   collections.abcr   
dask.utilsr   distributed.utilsr   r   r7   r5   r   r   <module>rX      s    " " " " " " * * * * * *             ( ( ( ( ( ()- )- )- )- )- )- )- )-X@1 @1 @1 @1 @1~ @1 @1 @1 @1 @1r   