o
    ›¨Êh¯  ã                   @   sÄ   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZ zejZW n eyG   ejZY nw d
ZG dd„ dƒZG dd„ dƒZdd„ Zdd„ ZdS )z[Task Routing.

Contains utilities for working with task routers, (:setting:`task_routes`).
é    N)ÚOrderedDict)ÚMapping)ÚQueue)ÚQueueNotFound)Úlpmerge)Úmaybe_evaluateÚmlazy)Úsymbol_by_name)ÚMapRouteÚRouterÚpreparec                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r
   z(Creates a router out of a :class:`dict`.c                 C   sv   t |tƒr	| ¡ n|}i | _tƒ | _|D ]$\}}t |tƒr#|| j|< qd|v r3|| jt t	 
|¡¡< q|| j|< qd S )NÚ*)Ú
isinstancer   ÚitemsÚmapr   ÚpatternsÚPatternÚreÚcompileÚfnmatchÚ	translate)Úselfr   ÚkÚv© r   úC/var/www/html/env/lib/python3.10/site-packages/celery/app/routes.pyÚ__init__   s   
úzMapRoute.__init__c              	   O   s’   zt | j| ƒW S  ty   Y n ty    d| j| i Y S w | j ¡ D ] \}}| |¡rFzt |ƒW   S  tyE   d|i Y   S w q&d S ©NÚqueue)Údictr   ÚKeyErrorÚ
ValueErrorr   r   Úmatch)r   ÚnameÚargsÚkwargsÚregexÚrouter   r   r   Ú__call__)   s    ÿ
ÿýÿzMapRoute.__call__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   r   r   r   r   r
      s    r
   c                   @   sD   e Zd ZdZ		ddd„Zddd„Zd	d
„ Z	ddd„Zdd„ ZdS )r   z8Route tasks based on the :setting:`task_routes` setting.NFc                 C   s4   || _ |d u r	i n|| _|d u rg n|| _|| _d S ©N)ÚappÚqueuesÚroutesÚcreate_missing)r   r0   r/   r1   r.   r   r   r   r   ;   s   
zRouter.__init__r   c                 C   sd   |si n|}|   |¡}| jr!|  |||||¡}|r!t|   |¡|ƒS d|vr0t|   | jjj¡|ƒ}|S r   )Úexpand_destinationr0   Úlookup_router   r.   ÚconfÚtask_default_queue)r   Úoptionsr#   r$   r%   Ú	task_typer'   r   r   r   r'   B   s   
ÿÿzRouter.routec                 C   st   t |tƒr|i }}n| dd ¡}|r8t |tƒr||d< |S z
| j| |d< W |S  ty7   td|›d�ƒ‚w |S )Nr   zQueue z missing from task_queues)r   ÚstrÚpopr   r/   r    r   )r   r'   r   r   r   r   r2   N   s    

ûý
ÿÿzRouter.expand_destinationc           	      C   s8   | j }| jD ]}|||||||ƒ}|d ur|  S qd S r-   )Úquery_routerr0   )	r   r#   r$   r%   r6   r7   ÚqueryÚrouterr'   r   r   r   r3   b   s   
ÿþzRouter.lookup_routec                 C   s2   t |ƒ}t|dƒr| |||¡S ||||||d�S )NÚroute_for_task)Útask)r   Úhasattrr=   )r   r<   r>   r$   r%   r6   r7   r   r   r   r:   j   s   
zRouter.query_router)NNFN)r   NN)NNNN)	r)   r*   r+   r,   r   r'   r2   r3   r:   r   r   r   r   r   8   s    
ÿ

ÿr   c                 C   s   t | ƒ} t| dƒr| ƒ } | S )Nr=   )r	   r?   )r<   r   r   r   Úexpand_router_stringr   s   
r@   c                    s:   dd„ ‰ | du r
dS t | ttfƒs| f} ‡ fdd„| D ƒS )z*Expand the :setting:`task_routes` setting.c                 S   s0   t | tttfƒrt| ƒS t | tƒrtt| ƒS | S r-   )r   r   ÚlistÚtupler
   r8   r   r@   )r'   r   r   r   Úexpand_route}   s
   

zprepare.<locals>.expand_routeNr   c                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0r'   ©rC   r   r   Ú
<listcomp>ˆ   s    zprepare.<locals>.<listcomp>)r   rA   rB   )r0   r   rE   r   r   z   s   r   )r,   r   r   Úcollectionsr   Úcollections.abcr   Úkombur   Úcelery.exceptionsr   Úcelery.utils.collectionsr   Úcelery.utils.functionalr   r   Úcelery.utils.importsr	   Ú_pattern_typer   ÚAttributeErrorÚ__all__r
   r   r@   r   r   r   r   r   Ú<module>   s(    

þ: