
    h                         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d
Z G d d      Z G d d      Zd Zd Zy# e$ r ej&                  ZY 0w xY w)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                       e Zd ZdZd Zd Zy)r   z(Creates a router out of a :class:`dict`.c                 Z   t        |t              r|j                         n|}i | _        t	               | _        |D ]n  \  }}t        |t              r|| j
                  |<   &d|v r6|| j
                  t        j                  t        j                  |            <   `|| j                  |<   p y )N*)
isinstancer   itemsmapr   patternsPatternrecompilefnmatch	translate)selfr   kvs       M/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/app/routes.py__init__zMapRoute.__init__   s    'W5ciik3#DAq!W%#$a BCbjj):):1)=>?     c                 6   	 t        | j                  |         S # t        $ r Y nt        $ r d| j                  |   icY S w xY w| j                  j                         D ]9  \  }}|j                  |      s	 t        |      c S # t        $ r	 d|icY c S w xY w y Nqueue)dictr   KeyError
ValueErrorr   r   match)r   nameargskwargsregexroutes         r   __call__zMapRoute.__call__)   s    	-'' 	 	-TXXd^,,	- MM//1LE5{{4 ,;&! ,#U++,	 2s&    	AA A7
BBBN)__name__
__module____qualname____doc__r   r-    r    r   r   r      s    2
 ,r    r   c                   :    e Zd ZdZ	 	 ddZd	dZd Z	 d
dZd Zy)r   z8Route tasks based on the :setting:`task_routes` setting.Nc                 L    || _         |i n|| _        |g n|| _        || _        y N)appqueuesroutescreate_missing)r   r8   r7   r9   r6   s        r   r   zRouter.__init__;   s+    "Nb"Nb,r    c                 *   |si n|}| j                  |      }| j                  r2| j                  |||||      }|rt        | j                  |      |      S d|vr9t        | j                  | j                  j
                  j                        |      }|S r"   )expand_destinationr8   lookup_router   r6   conftask_default_queue)r   optionsr(   r)   r*   	task_typer,   s          r   r,   zRouter.routeB   s    !v))'2;;%%dD&'9MEt66u=wGG'!d550023:<Gr    c                     t        |t              r|i }}n|j                  dd       }|r,t        |t              r||d<   |S 	 | j                  |   |d<   |S |S # t
        $ r t        d|d      w xY w)Nr#   zQueue z missing from task_queues)r   strpopr   r7   r%   r   )r   r,   r#   s      r   r;   zRouter.expand_destinationN   s    eS! "5E IIgt,E%'!&g E%)[[%7E'N u   E' 	)BCE EEs   A A1c           	      d    | j                   }| j                  D ]  } |||||||      }||c S  y r5   )query_routerr8   )	r   r(   r)   r*   r?   r@   queryrouterr,   s	            r   r<   zRouter.lookup_routeb   s:    !!kkF&$fgyIE  "r    c                 p    t        |      }t        |d      r|j                  |||      S  ||||||      S )Nroute_for_task)task)r   hasattrrI   )r   rG   rJ   r)   r*   r?   r@   s          r   rE   zRouter.query_routerj   s?    '6+,((tV<<dD&'	BBr    )NNFN)r2   NN)NNNN)	r.   r/   r0   r1   r   r,   r;   r<   rE   r2   r    r   r   r   8   s,    B+/+/-
* FJCr    r   c                 B    t        |       } t        | d      r |        } | S )NrI   )r
   rK   )rG   s    r   r   r   r   s#    F#Fv'(Mr    c                 v    d }| yt        | t        t        f      s| f} | D cg c]
  } ||       c}S c c}w )z*Expand the :setting:`task_routes` setting.c                     t        | t        t        t        f      rt	        |       S t        | t
              rt        t        |       S | S r5   )r   r   listtupler   rB   r	   r   )r,   s    r   expand_routezprepare.<locals>.expand_route}   s:    egtU34E?"eS!-u55r    r2   )r   rO   rP   )r8   rQ   r,   s      r   r   r   z   s?     ~ftUm,-34EL444s   6)r1   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   r2   r    r   <module>r\      s{     	 # #  + , 9 /G
 D, ,<7C 7Ct5O  jjGs   A! !A54A5