
    Xj	                         d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZ dgZedef   Z G d d      Zde
edf   dee   fd	Zy
)    )partialreduce)
isfunction)CallableIteratorDictListTupleAnyOptionalMiddlewareManager.c                   \    e Zd ZU dZdZeeef   ed<   ee	e
      ed<   defdZdedefd	Zy
)r   a  Manager for the middleware chain.

    This class helps to wrap resolver functions with the provided middleware functions
    and/or objects. The functions take the next middleware function as first argument.
    If middleware is provided as an object, it must provide a method ``resolve`` that is
    used as the middleware function.

    Note that since resolvers return "AwaitableOrValue"s, all middleware functions
    must be aware of this and check whether values are awaitable before awaiting them.
    )__dict__middlewares_middleware_resolvers_cached_resolversr   r   r   c                 Z    || _         |rt        t        |            nd | _        i | _        y N)r   listget_middleware_resolversr   r   )selfr   s     i/var/www/html/myl_app/scheduler-service/venv/lib/python3.12/site-packages/graphql/execution/middleware.py__init__zMiddlewareManager.__init__   s.    &;FD)+67D 	" "$    field_resolverreturnc                     | j                   |S || j                  vr%t        d | j                   |      | j                  |<   | j                  |   S )zWrap the provided resolver with the middleware.

        Returns a function that chains the middleware functions with the provided
        resolver function.
        c                     t        ||       S r   )r   )chained_fnsnext_fns     r   <lambda>z6MiddlewareManager.get_field_resolver.<locals>.<lambda>0   s    WWk-J r   )r   r   r   )r   r   s     r   get_field_resolverz$MiddlewareManager.get_field_resolver$   s[     %%-!!!7!775;J**6D"">2
 %%n55r   N)__name__
__module____qualname____doc__	__slots__r   GraphQLFieldResolver__annotations__r   r	   r   r   r   r"    r   r   r   r      sQ    	 XI02FFGG#DN33$S $626	6r   r   r   c              #   b   K   | D ]&  }t        |      r| t        |dd      }|#| ( yw)zEGet a list of resolver functions from a list of classes or functions.resolveN)r   getattr)r   
middlewareresolver_funcs      r   r   r   7   s=     ! $
j!#J	4@M(##$s   %//N)	functoolsr   r   inspectr   typingr   r   r   r	   r
   r   r   __all__r(   r   r   r*   r   r   <module>r4      sV    %  G G G
S) )6 )6X$%S/ $hx>P $r   