a
    »ÏOci  ã                   @   sJ   d Z ddlmZ G dd„ dƒZdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ ZdS )z�
Wrapper module for sequential task (continuation) handling.
Use as fallback for _tasks_async when async/await is not available.
é    )ÚGeneratorTypec                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú
UpdateTaskz)Wrap a generator in a task-like interfacec                 C   s   t |tƒsJ ‚|| _|| _dS )zk
        Arguments:
            - gen: generator object
            - desc<tuple>: (Resource, key)
        N)Ú
isinstancer   Ú_genÚ_desc)ÚselfÚgenÚdesc© r
   úR/var/www/html/gsl.tools/lib/python3.9/site-packages/peeringdb/_tasks_sequential.pyÚ__init__   s    zUpdateTask.__init__c                 C   s   | j \}}d|j› d|› d�S )Nz<UpdateTask: (z, z)>)r   Útag)r   ÚresÚpkr
   r
   r   Ú__repr__   s    
zUpdateTask.__repr__c                 C   s   d S ©Nr
   ©r   r
   r
   r   Úcancel   s    zUpdateTask.cancelc                 C   s   | j S r   )r   r   r
   r
   r   Ú__iter__   s    zUpdateTask.__iter__c                 C   s   | j  |¡S r   )r   Úsend)r   Úxr
   r
   r   r      s    zUpdateTask.sendN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r
   r
   r
   r   r      s   
r   c                 c   s   | D ]}|E dH  qdS )zAggregate and collect jobsNr
   )ÚjobsZjobr
   r
   r   Úgather#   s    r   c                 C   s   | S )z8Identity decorator (only needed for async compatibility)r
   ©Úfuncr
   r
   r   Úwrap_generator)   s    r   c                 C   s   t | ttfƒrt| ƒS | S d S r   )r   r   r   Ú_consume_task)Úitemr
   r
   r   Ú_consume_task_or_generator.   s    r"   c                 C   s\   d g  }}z|   |¡}W n ty.   Y qDY n0 t|ƒ}| |¡ q
t|ƒdkrX| ¡ S |S )Né   )r   ÚStopIterationr"   ÚappendÚlenÚpop)r   ÚrÚretr!   r
   r
   r   r    5   s    

r    c                    s   ‡ fdd„}|S )zo
    Decorator to collect and return generator results, returning a list
    if there are multiple results
    c                     s   ˆ | i |¤Ž}t |ƒS r   )r    )ÚaÚkr   r   r
   r   Ú_wrappedJ   s    zrun_task.<locals>._wrappedr
   )r   r,   r
   r   r   Úrun_taskD   s    r-   N)	r   Útypesr   r   r   r   r"   r    r-   r
   r
   r
   r   Ú<module>   s   