
    uYf1                     f   U d dl mZmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZmZmZ d dlmZ  ed      ZeZeed<   eZeed<   eZeed<   eeegef   Zeed	<   eegef   Zeed
<    edee      Zeegef   Zeed<   e G d d             Ze G d d             Ze G d dee                Zy)    )	lru_cachepartialsingledispatch)	AnyCallableDictGenericListOptionalTupleTypeVarUnion)Factorydefinefield)	TypeAliasT
TargetTypeUnstructuredValueStructuredValueStructureHookUnstructureHookHookHookFactoryc                       e Zd ZdZy)_DispatchNotFoundz4A dummy object to help signify a dispatch not found.N)__name__
__module____qualname____doc__     O/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/cattrs/dispatch.pyr   r      s    >r"   r   c                       e Zd ZU dZ ee      Zeee	e
gef   e	e
e
ge
f   ef      ed<   	 dde	e
gef   de	de
f   ddfdZd	e
dee	de
f      fd
ZdefdZddd deddfdZy)FunctionDispatcha  
    FunctionDispatch is similar to functools.singledispatch, but
    instead dispatches based on functions that take the type of the
    first argument in the method, and return True or False.

    objects that help determine dispatch should be instantiated objects.
    _handler_pairs
can_handlefunc.returnNc                 B    | j                   j                  d|||f       y )Nr   )r&   insert)selfr'   r(   is_generators       r#   registerzFunctionDispatch.register(   s!     	""1z4&FGr"   typc                     | j                   D ]!  \  }}}	  ||      }|s|r
 ||      c S |c S  y# t        $ r Y 0w xY w)zG
        Return the appropriate handler for the object passed.
        N)r&   	Exception)r,   r/   r'   handlerr-   chs         r#   dispatchzFunctionDispatch.dispatch0   s^     261D1D 	-J_ "3<'	   s   2	>>c                 ,    t        | j                        S N)lenr&   r,   s    r#   get_num_fnszFunctionDispatch.get_num_fnsC   s    4&&''r"   otherskipc                 H    | j                   d |  |j                   z   |_         y r6   )r&   )r,   r:   r;   s      r#   copy_tozFunctionDispatch.copy_toF   s$    #226TE:U=Q=QQr"   Fr   )r   r   r   r    r   listr&   r
   r   r   r   bool__annotations__r.   r   r4   intr9   r=   r!   r"   r#   r%   r%      s     	 Dhud{#XsCj#o%>DE  	HcUD[)H sCx H
 
HC HXc3h-?$@ &(S (R/ Rs R4 Rr"   r%   c                   d   e Zd ZU dZee   ed<    ede      Z	e
ed<    ede      Zeed<    ed eee            Zeed<    ed ed d	
            Zeegef   ed<   dedefdZddeddfdZdeeeeegef   ef   eeegef   eef   f      fdZddZddZdefdZ ddd deddfdZ!y)MultiStrategyDispatcha  
    MultiStrategyDispatch uses a combination of exact-match dispatch,
    singledispatch, and FunctionDispatch.

    :param fallback_factory: A hook factory to be called when a hook cannot be
        produced.

    ..  versionchanged:: 23.2.0
        Fallbacks are now factories.
    _fallback_factoryF)initfactory_direct_dispatch_function_dispatch_single_dispatchc                 :     t        d       | j                        S )N)maxsize)r   	_dispatchr8   s    r#   <lambda>zMultiStrategyDispatch.<lambda>`   s    040@ r"   T)
takes_self)rG   defaultr4   r/   r)   c                    	 | j                   j                  |      }|t        ur|S 	 | j                  j                  |      }||S | j                  j                  |      }||S | j                  |      S # t        $ r Y Zw xY wr6   )rK   r4   r   r1   rI   getrJ   rF   )r,   r/   r4   direct_dispatchress        r#   rN   zMultiStrategyDispatch._dispatchd   s    	,,55c:H00 1
 //33C8&""%%..s3osF4+A+A#+FF  		s   $A7 7	BBdirectNc                     |D ]C  \  }}|r|| j                   |<   | j                  j                  ||       | j                          E | j                  j                          y)z-Register a class to direct or singledispatch.N)rI   rK   r.   clear_directr4   cache_clear)r,   cls_and_handlerrV   clsr2   s        r#   register_cls_listz'MultiStrategyDispatch.register_cls_lists   s\    + 	$LC-4%%c*%%..sG<!!#	$ 	!!#r"   pred_and_handlerc                    |D ]V  }t        |      dk(  r"|\  }}| j                  j                  ||       3|\  }}}| j                  j                  |||       X | j                          | j                  j                          y)zo
        Register a predicate function to determine if the handle
        should be used for the type.
           )r-   N)r7   rJ   r.   rX   r4   rY   )r,   r]   tupr(   r2   is_gens         r#   register_func_listz(MultiStrategyDispatch.register_func_list}   s     $ 	UC3x1} #g''00w?(+%gv''00wV0T	U 	!!#r"   c                 8    | j                   j                          y)zClear the direct dispatch.N)rI   clearr8   s    r#   rX   z"MultiStrategyDispatch.clear_direct   s    ##%r"   c                 l    | j                   j                          | j                  j                          y)zClear all caches.N)rI   rd   r4   rY   r8   s    r#   clear_cachez!MultiStrategyDispatch.clear_cache   s$    ##%!!#r"   c                 6    | j                   j                         S r6   )rJ   r9   r8   s    r#   r9   z!MultiStrategyDispatch.get_num_fns   s    &&2244r"   r:   r;   c                    | j                   j                  |j                   |       | j                  j                  j	                         D ]!  \  }}|j                  j                  ||       # |j                          y )N)r;   )rJ   r=   rK   registryitemsr.   rf   )r,   r:   r;   r[   fns        r#   r=   zMultiStrategyDispatch.copy_to   sk    ''(@(@t'L,,55;;= 	5GC""++C4	5r"   r>   )r)   Nr?   )"r   r   r   r    r   r   rB   r   dictrI   r   r%   rJ   r   r   r   rK   r   r   r4   r   r   rN   rA   r\   r
   r   r   rb   rX   rf   rC   r9   r=   r!   r"   r#   rE   rE   J   s3   	 #4(("t<d<+0eEU+V(V!GN4EFc  .3@T
.Hh
|T)* GZ GD G$ $$ $$hud{+S01hud{+S$679
$.&$
5S 54 C  r"   rE   N) 	functoolsr   r   r   typingr   r   r   r	   r
   r   r   r   r   attrsr   r   r   cattrs._compatr   r   r   rB   r   r   r   r   r   r   r   r%   rE   r!   r"   r#   <module>rq      s    8 8 V V V ( ( $CL
I " 9 "   #%6
$C_$TUy U%&79J&JK Kv}o6!:,"45Y 5 ? ? ? ,R ,R ,R^ YGDM Y Yr"   