
    h                         S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJrJr  SS	KJr   \R$                  rS
r " S S5      r " S S5      rS rS rg! \ a    \R&                  r N1f = f)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expand_router_stringpreparec                   $    \ rS rSrSrS rS rSrg)r      z(Creates a router out of a :class:`dict`.c                 v   [        U[        5      (       a  UR                  5       OUn0 U l        [	        5       U l        U Hv  u  p#[        U[        5      (       a  X0R
                  U'   M*  SU;   a8  X0R
                  [        R                  " [        R                  " U5      5      '   Mh  X0R                  U'   Mx     g )N*)
isinstancer   itemsmapr   patternsPatternrecompilefnmatch	translate)selfr   kvs       9D:\TimeStamps\venv\Lib\site-packages\celery/app/routes.py__init__MapRoute.__init__   s    'W55ciik3#DA!W%%#$a BCbjj):):1)=>?     c                 H    [        U R                  U   5      $ ! [         a     O [         a    SU R                  U   0s $ f = fU R                  R                  5        H?  u  pEUR                  U5      (       d  M   [        U5      s  $ ! [         a	    SU0s s  $ f = f   g Nqueue)dictr   KeyError
ValueErrorr   r   match)r   nameargskwargsregexroutes         r   __call__MapRoute.__call__)   s    	-'' 	 	-TXXd^,,	- MM//1LE{{4  ,;&! ,#U++,	 2s&    
AAA>
BBB)r   r   N)__name__
__module____qualname____firstlineno____doc__r    r/   __static_attributes__ r"   r   r   r      s    2
 ,r"   r   c                   H    \ rS rSrSr  S
S jrSS jrS r SS jrS r	S	r
g)r   8   z8Route tasks based on the :setting:`task_routes` setting.Nc                 L    X@l         Uc  0 OUU l        Uc  / OUU l        X0l        g N)appqueuesroutescreate_missing)r   r>   r=   r?   r<   s        r   r    Router.__init__;   s'    "Nb"Nb,r"   c                 H   U(       d  0 OUnU R                  U5      nU R                  (       a5  U R                  X#XAU5      nU(       a  [        U R                  U5      U5      $ SU;  a9  [        U R                  U R                  R
                  R                  5      U5      nU$ r$   )expand_destinationr>   lookup_router   r<   conftask_default_queue)r   optionsr*   r+   r,   	task_typer.   s          r   r.   Router.routeB   s    !v))'2;;%%d&9MEt66u=wGG'!d550023:<Gr"   c                    [        U[        5      (       a  U0 pOUR                  SS 5      nU(       a0  [        U[        5      (       a  X!S'   U$  U R                  U   US'   U$ U$ ! [
         a    [        SU< S35      ef = f)Nr%   zQueue z missing from task_queues)r   strpopr   r=   r'   r   )r   r.   r%   s      r   rB   Router.expand_destinationN   s    eS!! "5 IIgt,E%''!&g E%)[[%7E'N u   E' 	)BCE EEs   A% %B c           	      d    U R                   nU R                   H  nU" XqX#XE5      nUc  M  Us  $    g r;   )query_routerr>   )	r   r*   r+   r,   rF   rG   queryrouterr.   s	            r   rC   Router.lookup_routeb   s4    !!kkF&gIE  "r"   c                 n    [        U5      n[        US5      (       a  UR                  X#U5      $ U" X#XEUS9$ )Nroute_for_task)task)r   hasattrrS   )r   rP   rT   r+   r,   rF   rG   s          r   rN   Router.query_routerj   s<    '6+,,((V<<d&	BBr"   )r<   r?   r=   r>   )NNFN)r7   NN)NNNN)r1   r2   r3   r4   r5   r    r.   rB   rC   rN   r6   r7   r"   r   r   r   8   s,    B+/+/-
* FJCr"   r   c                 L    [        U 5      n [        U S5      (       a  U " 5       n U $ )NrS   )r
   rU   )rP   s    r   r   r   r   s&    F#Fv'((Mr"   c                     S nU c  g[        U [        [        45      (       d  U 4n U  Vs/ s H
  o!" U5      PM     sn$ s  snf )z*Expand the :setting:`task_routes` setting.c                     [        U [        [        [        45      (       a  [	        U 5      $ [        U [
        5      (       a  [        [        U 5      $ U $ r;   )r   r   listtupler   rJ   r	   r   )r.   s    r   expand_routeprepare.<locals>.expand_route}   s@    egtU344E?"eS!!-u55r"   r7   )r   rZ   r[   )r>   r\   r.   s      r   r   r   z   sF     ~ftUm,,-34VELV444s   >)r5   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   r7   r"   r   <module>rh      s{     	 # #  + , 9 /G
 D, ,<7C 7Ct5O  jjGs   A! !A65A6