
    `f                         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 	 ej        Zn# e$ r
 ej        ZY nw xY wd
Z G d d          Z G d d          Zd Z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                       e Zd ZdZd Zd ZdS )r   z(Creates a router out of a :class:`dict`.c                 Z   t          |t                    r|                                n|}i | _        t	                      | _        |D ]b\  }}t          |t                    r|| j        |<   %d|v r/|| j        t          j        t          j
        |                    <   X|| j        |<   cd S )N*)
isinstancer   itemsmapr   patternsPatternrecompilefnmatch	translate)selfr   kvs       C/var/www/html/env/lib/python3.11/site-packages/celery/app/routes.py__init__zMapRoute.__init__   s    'W55>ciikkk3# 	  	 DAq!W%%  #$a  BCbj):1)=)=>>??	  	     c                 H   	 t          | j        |                   S # t          $ r Y nt          $ r d| j        |         icY S w xY w| j                                        D ]B\  }}|                    |          r(	 t          |          c S # t          $ r	 d|icY c S w xY wCd S Nqueue)dictr   KeyError
ValueErrorr   r   match)r   nameargskwargsregexroutes         r   __call__zMapRoute.__call__)   s    	-''' 	 	 	D 	- 	- 	-TXd^,,,,	- M//11 	, 	,LE5{{4   ,,;;&&&! , , ,#U++++++,,	, 	,s&    
AAA:BBBN)__name__
__module____qualname____doc__r   r,    r   r   r   r      s8        22
  
  
 , , , , ,r   r   c                   <    e Zd ZdZ	 	 d
dZddZd Z	 ddZd	 ZdS )r   z8Route tasks based on the :setting:`task_routes` setting.NFc                 N    || _         |i n|| _        |g n|| _        || _        d S N)appqueuesroutescreate_missing)r   r7   r6   r8   r5   s        r   r   zRouter.__init__;   s5    "Nbb"Nbb,r   r1   c                 2   |si n|}|                      |          }| j        r>|                     |||||          }|r#t          |                      |          |          S d|vr2t          |                      | j        j        j                  |          }|S r!   )expand_destinationr7   lookup_router   r5   conftask_default_queue)r   optionsr'   r(   r)   	task_typer+   s          r   r+   zRouter.routeB   s    !-v))'22; 	H%%dD&'9MME Ht66u==wGGG'!!d5502 23:< <Gr   c                    t          |t                    r|i }}n|                    dd           }|rNt          |t                    r||d<   n3	 | j        |         |d<   n!# t
          $ r t          d|d          w xY w|S )Nr"   zQueue z missing from task_queues)r   strpopr   r6   r$   r   )r   r+   r"   s      r   r:   zRouter.expand_destinationN   s    eS!! 	- "5EE IIgt,,E 	E%'' E!&gE%)[%7E'NN E E E'CCCCE E EE s   A   A>c           	      T    | j         }| j        D ]} |||||||          }||c S d S r4   )query_routerr7   )	r   r'   r(   r)   r>   r?   queryrouterr+   s	            r   r;   zRouter.lookup_routeb   sR    !k 	 	FE&$fgyIIE  !	 	r   c                     t          |          }t          |d          r|                    |||          S  ||||||          S )Nroute_for_task)task)r   hasattrrH   )r   rF   rI   r(   r)   r>   r?   s          r   rD   zRouter.query_routerj   sU    ''6+,, 	=((tV<<<vdD&'	BBBBr   )NNFN)r1   NN)NNNN)	r-   r.   r/   r0   r   r+   r:   r;   rD   r1   r   r   r   r   8   s        BB+/+/- - - -
 
 
 
  * FJ   C C C C Cr   r   c                 X    t          |           } t          | d          r
 |             } | S )NrH   )r
   rJ   )rF   s    r   expand_router_stringrL   r   s2    F##Fv'(( Mr   c                 l    d | dS t          | t          t          f          s| f} fd| D             S )z*Expand the :setting:`task_routes` setting.c                     t          | t          t          t          f          rt	          |           S t          | t
                    rt          t          |           S | S r4   )r   r   listtupler   rA   r	   rL   )r+   s    r   expand_routezprepare.<locals>.expand_route}   sO    egtU344 	#E??"eS!! 	6-u555r   Nr1   c                 &    g | ]} |          S r1   r1   ).0r+   rQ   s     r   
<listcomp>zprepare.<locals>.<listcomp>   s#    444ELL444r   )r   rO   rP   )r7   rQ   s    @r   r   r   z   sU       ~rftUm,, 4444V4444r   )r0   r   r   collectionsr   collections.abcr   kombur   celery.exceptionsr   celery.utils.collectionsr   celery.utils.functionalr   r	   celery.utils.importsr
   _pattern_typer   AttributeError__all__r   r   rL   r   r1   r   r   <module>r_      sd     				 # # # # # # # # # # # #       + + + + + + , , , , , , 9 9 9 9 9 9 9 9 / / / / / /GG   jGGG ,, , , , , , , ,<7C 7C 7C 7C 7C 7C 7C 7Ct  5 5 5 5 5s   A   AA