o
    voil3                     @  s:  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dZ#ede	d ef dZ$G d!d" d"e%Z&G d#d$ d$e&d%Z'dHd)d*Z(dId,d-Z)edJd1d2Z*edKdLd5d2Z*e	dMdNd7d2Z*	dMdOd8d2Z*dPd;d<Z+G d=d> d>ej,Z-G d?d@ d@ej.Z/G dAdB dBZ0G dCdD dDZ1dQdFdGZ2dS )R    )annotationsN)Iterable)Any)Callable)cast)Dict)List)Mapping)MutableMapping)NoReturn)Optional)overload)Sequence)Set)Tuple)Type)TypeVar)asbool)immutabledict)to_list)unique_list   )inspect_getfullargspecT)memoized_propertyzMapping[Any, Any]
EMPTY_DICT_T)bound_C.c                      s   e Zd Zd	 fddZ  ZS )
_ModuleClsMetakeystrvalueCallable[..., Any]returnNonec                   s   t  || | | d S N)super__setattr___update_module_proxies)clsr   r!   	__class__ L/home/ubuntu/.local/lib/python3.10/site-packages/alembic/util/langhelpers.pyr'   .   s   z_ModuleClsMeta.__setattr__)r   r    r!   r"   r#   r$   )__name__
__module____qualname__r'   __classcell__r,   r,   r*   r-   r   -   s    r   c                   @  s   e Zd ZU dZedd Zded< ed d
dZ	d!ddZ
d!ddZed"ddZed#ddZed$ddZed%ddZdS )&ModuleClsProxyzCreate module level proxy functions for the
    methods on a given class.

    The functions will have a compatible signature
    as the methods.

    c                   C  s
   t  g fS r%   )setr,   r,   r,   r-   <lambda>B   s   
 zModuleClsProxy.<lambda>zaDict[Type[Any], Tuple[Set[str], List[Tuple[MutableMapping[str, Any], MutableMapping[str, Any]]]]]_setupsnamer    r#   r$   c                 C  s0   | j |  \}}|D ]\}}| |||| q	d S r%   )r5   _add_proxied_attribute)r)   r6   
attr_namesmodulesglobals_locals_r,   r,   r-   r(   D   s   z%ModuleClsProxy._update_module_proxiesc                 C  sB   | j | j \}}|D ]\}}| |d< |D ]	}t| |||< qq
d S N_proxy)r5   r+   getattrselfr8   r9   r:   r;   	attr_namer,   r,   r-   _install_proxyJ   s   zModuleClsProxy._install_proxyc                 C  s:   | j | j \}}|D ]\}}d |d< |D ]}||= qq
d S r<   )r5   r+   r?   r,   r,   r-   _remove_proxyQ   s   zModuleClsProxy._remove_proxyr:   MutableMapping[str, Any]r;   c                 C  s.   | j |  \}}|||f | ||| d S r%   )r5   append_setup_proxy)r)   r:   r;   r8   r9   r,   r,   r-   create_module_class_proxyX   s   z(ModuleClsProxy.create_module_class_proxyr8   Set[str]c                 C  s"   t | D ]
}| |||| qd S r%   )dirr7   )r)   r:   r;   r8   methnamer,   r,   r-   rF   b   s   zModuleClsProxy._setup_proxyrJ   c                 C  sD   | ds t| |}t|r| |||||< d S || d S d S )N_)
startswithr>   callable_create_method_proxyadd)r)   rJ   r:   r;   r8   methr,   r,   r-   r7   l   s   

z%ModuleClsProxy._add_proxied_attributer"   c              	     s   t  |}d fdd}||d	< t |d
g }|rGt|}|d r/|d d dkr/|d d d }}	d|jt||f }
ddd}||d< nd}d}	d}
td||
||	|jd }i }t|t	d|| t	d|| S )Nr6   r    from_	Exceptionr#   r   c                   s   t d|  jf |)NzCan't invoke function '%s', as the proxy object has not yet been established for the Alembic '%s' class.  Try placing this code inside a callable.)	NameErrorr.   )r6   rQ   r)   r,   r-   _name_error   s   z8ModuleClsProxy._create_method_proxy.<locals>._name_errorrU   _legacy_translationsr   r@   z*args, **kwz+args, kw = _translate(%r, %r, %r, args, kw)fn_namespecr   translationsargskwc              	   S  s   i }g }|D ]\}}||v rt d||| f  ||||< q|| t|}|d r;|d d t|d   }	n|d }	|	D ]}
|
|vr_z
||d W qA ty^   td|
 w qA|	| ||fS )Nz,Argument %r is now named %r for method %s().   r   z(missing required positional argument: %s)
warningswarnpopupdatelistlenrE   
IndexError	TypeErrorextend)rW   rX   rY   rZ   r[   	return_kwreturn_argsoldnamenewnamepos_onlyargr,   r,   r-   	translate   s<   

z6ModuleClsProxy._create_method_proxy.<locals>.translate
_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
        )r6   rl   rZ   apply_kwdoczDict[str, Any]r"   )r6   r    rQ   rR   r#   r   )rW   r    rX   r   rY   r   rZ   r   r[   r   r#   r   )
r>   r   r_   r.   tupletextwrapdedent__doc__execr   )r)   r6   r:   r;   fnrU   rY   rX   
outer_args
inner_argstranslate_strrl   	func_textlclr,   rT   r-   rN   }   s@   
	

!z#ModuleClsProxy._create_method_proxyN)r6   r    r#   r$   r#   r$   )r:   rD   r;   rD   r#   r$   )r:   rD   r;   rD   r8   rH   r#   r$   )
rJ   r    r:   rD   r;   rD   r8   rH   r#   r$   )r6   r    r:   rD   r;   rD   r#   r"   )r.   r/   r0   rt   collectionsdefaultdictr5   __annotations__classmethodr(   rB   rC   rG   rF   r7   rN   r,   r,   r,   r-   r2   3   s    
 


		r2   )	metaclassrY   r   r#   c                   s   d fdd}|S )Nrv   r   r#   c                   s
    | _ | S r%   )rV   rv   rY   r,   r-   decorate   s   z$_with_legacy_names.<locals>.decoraterv   r   r#   r   r,   )rY   r   r,   r   r-   _with_legacy_names   s   r   r    c                   C  s   t  jdd  S )Ni)uuiduuid4hexr,   r,   r,   r-   rev_id   s   r   xdefaultTuple[Any, ...]c                 C     d S r%   r,   r   r   r,   r,   r-   to_tuple      r   r$   Optional[_T]c                 C  r   r%   r,   r   r,   r,   r-   r      r   Optional[Tuple[Any, ...]]c                 C  r   r%   r,   r   r,   r,   r-   r      s   c                 C  s4   | d u r|S t | tr| fS t | trt| S | fS r%   )
isinstancer    r   rq   r   r,   r,   r-   r      s   

tupTuple[str, ...]c                 C  s   t t| S r%   )rq   r   )r   r,   r,   r-   dedupe_tuple  s   r   c                   @  s"   e Zd ZdZe Z	 e ZdS )PriorityDispatchResultzyindicate an action after running a function within a
    :class:`.PriorityDispatcher`

    .. versionadded:: 1.18.0

    N)r.   r/   r0   rt   enumautoCONTINUESTOPr,   r,   r,   r-   r   
  s    r   c                   @  s    e Zd ZdZdZ	 dZ	 dZdS )DispatchPriorityzIndicate which of three sub-collections a function inside a
    :class:`.PriorityDispatcher` should be placed.

    .. versionadded:: 1.18.0

    2      
   N)r.   r/   r0   rt   FIRSTMEDIUMLASTr,   r,   r,   r-   r     s    r   c                   @  s>   e Zd ZdddZddddddZddddZdddZdS )
Dispatcherr#   r$   c                 C  s
   i | _ d S r%   )	_registryr@   r,   r,   r-   __init__1  s   
zDispatcher.__init__r   F)	qualifierreplacetargetr   r   r    r   boolCallable[[_C], _C]c                  s   d fdd}|S )Nrv   r   r#   c                   s4    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   
ValueErrorr   r   r   r@   r   r,   r-   r   ;  s   z)Dispatcher.dispatch_for.<locals>.decorater   r,   )r@   r   r   r   r   r,   r   r-   dispatch_for4  s   
zDispatcher.dispatch_forobjc                 C  s   t |tr	|g}nt |tr|j}nt|j}|dkr |dg}ndg}|D ]}|D ]}||f| jv r=| j||f     S q)q%td| )Nr   z#no dispatch function for object: %s)r   r    type__mro__r   r   )r@   r   r   targets
qualifiersspclsr,   r,   r-   dispatchG  s   



zDispatcher.dispatchc                 C  s   t  }|j| j |S zHReturn a copy of this dispatcher that is independently
        writable.)r   r   r`   r@   dr,   r,   r-   branch[  s   zDispatcher.branchNr|   )r   r   r   r    r   r   r#   r   )r   )r   r   r   r    r#   r   )r#   r   )r.   r/   r0   r   r   r   r   r,   r,   r,   r-   r   0  s    
r   c                   @  sT   e Zd ZdZdddZejddddddZdddddZdddZ	d ddZ
dS )!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)

    r#   r$   c                 C  s   t t| _d S r%   )r}   r~   ra   r   r   r,   r,   r-   r   m  s   
zPriorityDispatcher.__init__r   N)priorityr   subgroupr   r    r   r   r   r   
str | Noner   c                  s   d fd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.

        rv   r   r#   c                   s   j  f | f | S r%   )r   rE   r   r   r   r@   r   r   r,   r-   r     s   z1PriorityDispatcher.dispatch_for.<locals>.decorateNr   r,   )r@   r   r   r   r   r   r,   r   r-   r   r  s   zPriorityDispatcher.dispatch_for)r   Callable[..., None]c                  s.   |dkr	|dg ndg d	 fdd}|S )
z6Provide a callable for the given target and qualifier.r   rk   r   r[   r#   c                    sf   i }t D ],} D ]'}j||fdD ]\}}||tjtju r#q|| i |}|||< qqqd S )Nr,   )r   r   getr   r   r   )rk   r[   results_by_subgroupr   r   rv   r   resultr   r@   r   r,   r-   go  s"   

z'PriorityDispatcher.dispatch.<locals>.goN)rk   r   r[   r   r#   r   r,   )r@   r   r   r   r,   r   r-   r     s
   
zPriorityDispatcher.dispatchc                 C  s   t  }||  |S r   )r   populate_withr   r,   r,   r-   r     s   
zPriorityDispatcher.branchotherc                 C  s*   |j D ]}|j | }| j | | qdS )zPopulate this PriorityDispatcher with the contents of another one.

        Additive, does not remove existing contents.
        N)r   re   )r@   r   knew_listr,   r,   r-   r     s   

z PriorityDispatcher.populate_withr|   )
r   r    r   r   r   r    r   r   r#   r   )r   r    r   r    r#   r   )r#   r   )r   r   r#   r$   )r.   r/   r0   rt   r   r   r   r   r   r   r   r,   r,   r,   r-   r   d  s    
	
r   r!   c                 C  s   | d usJ | S r%   r,   )r!   r,   r,   r-   not_none  s   r   )rY   r   r#   r   )r#   r    )r   r   r   r   r#   r   ).)r   r$   r   r   r#   r   r%   )r   r   r   r   r#   r   )r   r   r   r   r#   r   )r   r   r#   r   )r!   r   r#   r   )3
__future__r   r}   collections.abcr   r   rr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r]   sqlalchemy.utilr   r   r   r   compatr   r   r   r   r   r   r   r   r2   r   r   r   r   Enumr   IntEnumr   r   r   r   r,   r,   r,   r-   <module>   sh     
-

4W