
    Zil3                       U d dl mZ d dlZd dlm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 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 d dlmZ d dlmZ d dlm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   e       Z!de"d<    ede      Z# ede	def         Z$ G d  d!e%      Z& G d" d#e&$      Z'd5d%Z(d6d&Z)ed7d'       Z*ed8d9d(       Z*e	 d:	 	 	 	 	 d;d)       Z*	 d:	 	 	 	 	 d<d*Z*d=d+Z+ G d, d-ejX                        Z- G d. d/ej\                        Z/ G d0 d1      Z0 G d2 d3      Z1d>d4Z2y)?    )annotationsN)Iterable)Any)Callable)cast)Dict)List)Mapping)MutableMapping)NoReturn)Optional)overload)Sequence)Set)Tuple)Type)TypeVar)asbool)immutabledict)to_list)unique_list   )inspect_getfullargspec)memoized_propertyzMapping[Any, Any]
EMPTY_DICT_T)bound_C.c                        e Zd Zd fdZ xZS )_ModuleClsMetac                H    t         |   ||       | j                  |       y N)super__setattr___update_module_proxies)clskeyvalue	__class__s      T/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/util/langhelpers.pyr$   z_ModuleClsMeta.__setattr__.   s     C'""3'    )r'   strr(   Callable[..., Any]returnNone)__name__
__module____qualname__r$   __classcell__)r)   s   @r*   r    r    -   s    ( (r+   r    c                      e Zd ZU dZ ej
                  d       Zded<   edd       Z	ddZ
ddZe	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd	       Ze	 	 	 	 	 	 	 	 	 	 dd
       Ze	 	 	 	 	 	 	 	 dd       Zy)ModuleClsProxyzCreate module level proxy functions for the
    methods on a given class.

    The functions will have a compatible signature
    as the methods.

    c                     t               g fS r"   )set r+   r*   <lambda>zModuleClsProxy.<lambda>B   s     r+   zaDict[Type[Any], Tuple[Set[str], List[Tuple[MutableMapping[str, Any], MutableMapping[str, Any]]]]]_setupsc                d    | j                   |    \  }}|D ]  \  }}| j                  ||||        y r"   )r:   _add_proxied_attribute)r&   name
attr_namesmodulesglobals_locals_s         r*   r%   z%ModuleClsProxy._update_module_proxiesD   s?    !kk#.
G!( 	LHg&&tXw
K	Lr+   c                    | j                   | j                     \  }}|D ]   \  }}| |d<   |D ]  }t        | |      ||<    " y N_proxy)r:   r)   getattrselfr>   r?   r@   rA   	attr_names         r*   _install_proxyzModuleClsProxy._install_proxyJ   sW    "ll4>>:
G!( 	?Hg!%HX' ?	&-dI&>#?	?r+   c                n    | j                   | j                     \  }}|D ]  \  }}d |d<   |D ]  }||=   y rC   )r:   r)   rF   s         r*   _remove_proxyzModuleClsProxy._remove_proxyQ   sN    "ll4>>:
G!( 	(Hg!%HX' (	Y'(	(r+   c                t    | j                   |    \  }}|j                  ||f       | j                  |||       y r"   )r:   append_setup_proxy)r&   r@   rA   r>   r?   s        r*   create_module_class_proxyz(ModuleClsProxy.create_module_class_proxyX   s:     "kk#.
G'*+7J7r+   c                L    t        |       D ]  }| j                  ||||        y r"   )dirr<   )r&   r@   rA   r>   methnames        r*   rN   zModuleClsProxy._setup_proxyb   s-     C 	PH&&x7JO	Pr+   c                    |j                  d      s@t        | |      }t        |      r| j                  |||      ||<   y |j	                  |       y y )N_)
startswithrE   callable_create_method_proxyadd)r&   rR   r@   rA   r>   meths         r*   r<   z%ModuleClsProxy._add_proxied_attributel   sT     ""3'3)D~$'$<$<h%! x( (r+   c           	         t         |      }d fd}||d<   t        |dg       }|rht        |      }|d   r|d   d   dk(  r|d   j                  d       dx}}	d|j                  dt	        |      d|d	}
	 	 	 	 	 	 	 	 	 	 	 	 dd
}||d<   nd}d}	d}
t        j                  d||
||	|j                  dz        }i }t        |t        d|      |       t        d||         S )Nc                >    t        d| dj                  d      |)NzCan't invoke function 'zE', as the proxy object has not yet been established for the Alembic 'z2' class.  Try placing this code inside a callable.)	NameErrorr0   )r=   from_r&   s     r*   _name_errorz8ModuleClsProxy._create_method_proxy.<locals>._name_error   s%    
 	' r+   r^   _legacy_translationsr   rG   z*args, **kwzargs, kw = _translate(z, z, args, kw)c           
        i }g }|D ]=  \  }}||v st        j                  d|d|d| d       |j                  |      ||<   ? |j                  |       t	        |      }|d   r|d   d t        |d           }	n|d   }	|	D ](  }
|
|vs	 |j                  |j                  d             * |j                  |       ||fS # t        $ r t        d|
z        w xY w)Nz	Argument z is now named z for method z().   r   z(missing required positional argument: %s)
warningswarnpopupdatelistlenrM   
IndexError	TypeErrorextend)fn_namespectranslationsargskw	return_kwreturn_argsoldnamenewnamepos_onlyargs              r*   	translatez6ModuleClsProxy._create_method_proxy.<locals>.translate   s    	 (4 =$GW"} 297GM .0VVG_	'*=   $Dz7#Aw#d1g,7H#AwH# C)+'..txx{; ""4("I--  * "+ J"%!&# s    CC
_translate a          def %(name)s(%(args)s):
            %(doc)r
            %(translate)s
            try:
                p = _proxy
            except NameError as ne:
                _name_error('%(name)s', ne)
            return _proxy.%(name)s(%(apply_kw)s)
            e
        )r=   rv   rn   apply_kwdoczDict[str, Any]r-   )r=   r,   r]   	Exceptionr.   r   )rk   r,   rl   r   rm   r   rn   r   ro   r   r.   r   )
rE   r   rd   r0   tupletextwrapdedent__doc__execr   )r&   r=   r@   rA   fnr^   rm   rl   
outer_args
inner_argstranslate_strrv   	func_textlcls   `             r*   rW   z#ModuleClsProxy._create_method_proxy}   s5    S$	 #.r#92>)"-DAw471:/QA&33JdM..$'.7:.BE.KN..B &/H\"&J&JMOO
 *"&zz
	( )+Y-x8#>(#d)44r+   N)r=   r,   r.   r/   r.   r/   )r@   MutableMapping[str, Any]rA   r   r.   r/   )r@   r   rA   r   r>   Set[str]r.   r/   )
rR   r,   r@   r   rA   r   r>   r   r.   r/   )r=   r,   r@   r   rA   r   r.   r-   )r0   r1   r2   r   collectionsdefaultdictr:   __annotations__classmethodr%   rI   rK   rO   rN   r<   rW   r8   r+   r*   r5   r5   3   s=    	  34   5 L L
?( 8*8 *8 
	8 8 P*P *P 	P
 
P P )) +) *	)
 ) 
) )  ^5^5 +^5 *	^5
 
^5 ^5r+   r5   )	metaclassc                     d fd}|S )Nc                    | _         | S r"   )r_   )r   rm   s    r*   decoratez$_with_legacy_names.<locals>.decorate   s    ".	r+   r   r   r.   r   r8   )rm   r   s   ` r*   _with_legacy_namesr      s     Or+   c                 D    t        j                         j                  dd  S )Ni)uuiduuid4hexr8   r+   r*   rev_idr      s    ::<CD!!r+   c                     y r"   r8   xdefaults     r*   to_tupler      s    CFr+   c                     y r"   r8   r   s     r*   r   r      s    :=r+   c                     y r"   r8   r   s     r*   r   r      s     r+   c                l    | |S t        | t              r| fS t        | t              rt        |       S | fS r"   )
isinstancer,   r   r|   r   s     r*   r   r      s9     	y	As	t	Ax	 Qxtr+   c                *    t        t        |             S r"   )r|   r   )tups    r*   dedupe_tupler     s    S!""r+   c                  V    e Zd ZdZ ej
                         Z	  ej
                         Zy)PriorityDispatchResultzyindicate an action after running a function within a
    :class:`.PriorityDispatcher`

    .. versionadded:: 1.18.0

    N)r0   r1   r2   r   enumautoCONTINUESTOPr8   r+   r*   r   r   
  s-     tyy{H 499;DCr+   r   c                       e Zd ZdZdZ	 dZ	 dZy)DispatchPriorityzIndicate which of three sub-collections a function inside a
    :class:`.PriorityDispatcher` should be placed.

    .. versionadded:: 1.18.0

    2      
   N)r0   r1   r2   r   FIRSTMEDIUMLASTr8   r+   r*   r   r     s!     EMFCD9r+   r   c                  D    e Zd Zd	dZddd	 	 	 	 	 	 	 d
dZdddZddZy)
Dispatcherc                    i | _         y r"   )	_registryrG   s    r*   __init__zDispatcher.__init__1  s	    57r+   r   F)	qualifierreplacec                     d fd}|S )Nc                l    fj                   v rst        dd      | j                   f<   | S )Nz)Can not set dispatch function for object zE: key already exists. To replace existing function, use replace=True.)r   
ValueError)r   r   r   rG   targets    r*   r   z)Dispatcher.dispatch_for.<locals>.decorate;  sO    	"dnn4W ?j !;; 
 35DNNFI./Ir+   r   r8   )rG   r   r   r   r   s   ```` r*   dispatch_forzDispatcher.dispatch_for4  s    	 	 r+   c                *   t        |t              r|g}n2t        |t              r|j                  }nt        |      j                  }|dk7  r|dg}ndg}|D ].  }|D ]'  }||f| j                  v s| j                  ||f   c c S  0 t        d|z        )Nr   z#no dispatch function for object: %s)r   r,   type__mro__r   r   )rG   objr   targets
qualifiersspclss         r*   dispatchzDispatcher.dispatchG  s    c3&)UGT"kkG3i''G	!#Y/J#J 	JE' >	9%7>>5)*<==>	J
 BSHIIr+   c                d    t               }|j                  j                  | j                         |S zHReturn a copy of this dispatcher that is independently
        writable.)r   r   re   rG   ds     r*   branchzDispatcher.branch[  s&     L	4>>*r+   Nr   )r   r   r   r,   r   boolr.   Callable[[_C], _C])r   )r   r   r   r,   r.   r   )r.   r   )r0   r1   r2   r   r   r   r   r8   r+   r*   r   r   0  sE    8 # 	
  
&J(r+   r   c                  x    e Zd ZdZddZej                  ddd	 	 	 	 	 	 	 	 	 ddZdd	 	 	 	 	 ddZdd	Z	dd
Z
y)PriorityDispatcherzregisters lists of functions at multiple levels of priorty and provides
    a target to invoke them in priority order.

    .. versionadded:: 1.18.0 - PriorityDispatcher replaces the job
       of Dispatcher(uselist=True)

    c                @    t        j                  t              | _        y r"   )r   r   rf   r   r   s    r*   r   zPriorityDispatcher.__init__m  s    5@5L5L6
r+   r   N)priorityr   subgroupc               $     d fd}|S )a-  return a decorator callable that registers a function at a
        given priority, with a given qualifier, to fire off for a given
        subgroup.

        It's important this remains as a decorator to support third party
        plugins who are populating the dispatcher using that style.

        c                N    j                   f   j                  | f       | S r"   )r   rM   )r   r   r   rG   r   r   s    r*   r   z1PriorityDispatcher.dispatch_for.<locals>.decorate  s/    NNFIx89@@X Ir+   r   r8   )rG   r   r   r   r   r   s   ````` r*   r   zPriorityDispatcher.dispatch_forr  s    "	 	 r+   )r   c               6     |dk7  r|dgndgd fd}|S )z6Provide a callable for the given target and qualifier.r   c                     i }t         D ]n  }D ]g  }	j                  j                  
||fd      D ]C  \  }}|j                  |t        j                        t        j
                  u r7 || i |}|||<   E i p y )Nr8   )r   r   getr   r   r   )ru   ro   results_by_subgroupr   r   r   r   resultr   rG   r   s           r*   goz'PriorityDispatcher.dispatch.<locals>.go  s    EG, ?!+ ?I(,(:(:H5r) ?H 033 (*@*I*I  6::;
 %!#SB8>+H5???r+   )ru   r   ro   r   r.   r   r8   )rG   r   r   r   r   s   ``  @r*   r   zPriorityDispatcher.dispatch  s*    
 	!#Y/J#J	?$ 	r+   c                <    t               }|j                  |        |S r   )r   populate_withr   s     r*   r   zPriorityDispatcher.branch  s      	r+   c                    |j                   D ]/  }|j                   |   }| j                   |   j                  |       1 y)zPopulate this PriorityDispatcher with the contents of another one.

        Additive, does not remove existing contents.
        N)r   rj   )rG   otherknew_lists       r*   r   z PriorityDispatcher.populate_with  s<    
  	/Aq)HNN1$$X.	/r+   r   )
r   r,   r   r   r   r,   r   z
str | Noner.   r   )r   r,   r   r,   r.   zCallable[..., None])r.   r   )r   r   r.   r/   )r0   r1   r2   r   r   r   r   r   r   r   r   r8   r+   r*   r   r   d  s~    
 &6%<%<"# #	
   
4 09),	</r+   r   c                    | J | S r"   r8   )r(   s    r*   not_noner     s    Lr+   )rm   r   r.   r   )r.   r,   )r   r   r   Tuple[Any, ...]r.   r   ).)r   r/   r   Optional[_T]r.   r   r"   )r   r   r   Optional[Tuple[Any, ...]]r.   r   )r   r   r   r   r.   r   )r   Tuple[str, ...]r.   r   )r(   r   r.   r   )3
__future__r   r   collections.abcr   r   r}   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rb   sqlalchemy.utilr   r   r   r   compatr   r   r   r   r   r   r   r    r5   r   r   r   r   Enumr   IntEnumr   r   r   r   r8   r+   r*   <module>r      sh   "  $         !           , : . 6 *
 !.
 /TT#s(+,(T (i5~ i5X" 
 F 
 F 
 = 
 = 
15
. 
 26


.

#DTYY D(:t|| :$1 1hT/ T/nr+   