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expand_router_string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   S/var/www/html/optinet_system/venv/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   r1   r0   r2   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_destinationr1   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   r0   r!   r   )r   r(   r   r   r   r   r3   N   s    


zRouter.expand_destinationc           	      C   s8   | j }| jD ]}|||||||}|d ur|  S qd S r.   )query_routerr1   )	r   r$   r%   r&   r7   r8   queryrouterr(   r   r   r   r4   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&   r7   r8   r   r   r   r;   j   s   
zRouter.query_router)NNFN)r   NN)NNNN)	r*   r+   r,   r-   r   r(   r3   r4   r;   r   r   r   r   r   8   s    


r   c                 C   s   t | } t| dr|  } | S )Nr>   )r	   r@   )r=   r   r   r   r   r   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
   r9   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   )r1   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(    

: