a
    g	gE!                     @  s  d dl mZ d dlZd dlm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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dZG dd deZG dd dedZdd Zdddd Z ed!d"d"d#d$d%Z!ed5d&d'dd#d(d%Z!ed6d!d)d"d#d*d%Z!d7d+d%Z!d,d,d-d.d/Z"G d0d1 d1Z#d'dd2d3d4Z$dS )8    )annotationsN)Iterable)Any)Callable)Dict)List)Optional)overload)Sequence)Tuple)TypeVar)Union)asbool)immutabledict)memoized_property)to_list)unique_list   )inspect_getfullargspec_Tc                      s&   e Zd Zdddd fddZ  ZS )_ModuleClsMetastrr   None)keyvaluereturnc                   s   t  || | | d S N)super__setattr___update_module_proxies)clsr   r   	__class__ [/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/alembic/util/langhelpers.pyr       s    z_ModuleClsMeta.__setattr__)__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d	d
Z	ddddZ
ddddZedd Zedd Zedd Ze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>/       zModuleClsProxy.<lambda>zDict[type, Tuple[set, list]]_setupsr   r   )namer   c                 C  s0   | j |  \}}|D ]\}}| |||| qd S r   )r-   _add_proxied_attribute)r    r.   
attr_namesmodulesglobals_locals_r#   r#   r$   r   2   s    z%ModuleClsProxy._update_module_proxiesr   c                 C  sB   | j | j \}}|D ](\}}| |d< |D ]}t| |||< q(qd S N_proxy)r-   r"   getattrselfr0   r1   r2   r3   	attr_namer#   r#   r$   _install_proxy8   s
    zModuleClsProxy._install_proxyc                 C  s:   | j | j \}}|D ] \}}d |d< |D ]
}||= q(qd S r5   )r-   r"   r8   r#   r#   r$   _remove_proxy?   s
    zModuleClsProxy._remove_proxyc                 C  s.   | j |  \}}|||f | ||| d S r   )r-   append_setup_proxy)r    r2   r3   r0   r1   r#   r#   r$   create_module_class_proxyF   s    z(ModuleClsProxy.create_module_class_proxyc                 C  s"   t | D ]}| |||| qd S r   )dirr/   )r    r2   r3   r0   methnamer#   r#   r$   r>   L   s    zModuleClsProxy._setup_proxyc                 C  s>   | ds:t| |}t|r0| |||||< n
|| d S )N_)
startswithr7   callable_create_method_proxyadd)r    rA   r2   r3   r0   methr#   r#   r$   r/   Q   s    


z%ModuleClsProxy._add_proxied_attributec              	     s   t  |} fdd}||d< t |dg }|rt|}|d r\|d d dkr\|d d d }}	d|jt||f }
d	d
 }||d< nd}d}	d}
td||
||	|jd }i }t||| || S )Nc                   s   t d|  jf |d S )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%   )r.   from_r    r#   r$   _name_error`   s    z8ModuleClsProxy._create_method_proxy.<locals>._name_errorrK   _legacy_translationsr   r9   z*args, **kwz+args, kw = _translate(%r, %r, %r, args, kw)c              	   S  s   i }g }|D ]2\}}||v rt d||| f  ||||< q|| t|}|d rv|d d t|d   }	n|d }	|	D ]@}
|
|vrz||d W q ty   td|
 Y q0 q|	| ||fS )Nz,Argument %r is now named %r for method %s().   r   z(missing required positional argument: %s)
warningswarnpopupdatelistlenr=   
IndexError	TypeErrorextend)fn_namespectranslationsargskwZ	return_kwZreturn_argsZoldnameZnewnameZpos_onlyargr#   r#   r$   	translatex   s6    

z6ModuleClsProxy._create_method_proxy.<locals>.translateZ
_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.   r]   rZ   Zapply_kwdoc)	r7   r   rP   r%   tupletextwrapdedent__doc__exec)r    r.   r2   r3   fnrK   rY   rX   Z
outer_argsZ
inner_argsZtranslate_strr]   Z	func_textZlclr#   rJ   r$   rE   \   s@    
	
z#ModuleClsProxy._create_method_proxyN)r%   r&   r'   rc   collectionsdefaultdictr-   __annotations__classmethodr   r;   r<   r?   r>   r/   rE   r#   r#   r#   r$   r)   %   s    




r)   )	metaclassc                   s    fdd}|S )Nc                   s
    | _ | S r   )rL   re   rY   r#   r$   decorate   s    z$_with_legacy_names.<locals>.decorater#   )rY   rm   r#   rl   r$   _with_legacy_names   s    rn   r   r4   c                   C  s   t  jdd  S )Ni)uuiduuid4hexr#   r#   r#   r$   rev_id   s    rr   r   r`   )xdefaultr   c                 C  s   d S r   r#   rs   rt   r#   r#   r$   to_tuple   s    rv   r   zOptional[_T]c                 C  s   d S r   r#   ru   r#   r#   r$   rv      s    zOptional[tuple]c                 C  s   d S r   r#   ru   r#   r#   r$   rv      s    c                 C  s8   | d u r|S t | tr| fS t | tr.t| S | fS d S r   )
isinstancer   r   r`   ru   r#   r#   r$   rv      s    

zTuple[str, ...])tupr   c                 C  s   t t| S r   )r`   r   )rx   r#   r#   r$   dedupe_tuple   s    ry   c                   @  sd   e Zd ZddddddZddd	d
dddZddd	ddddZdd
dddZd dddZdS )
DispatcherFboolr   )uselistr   c                 C  s   i | _ || _d S r   )	_registryr|   )r9   r|   r#   r#   r$   __init__   s    zDispatcher.__init__rt   r   r   r   )target	qualifierr   c                   s    fdd}|S )Nc                   sD   j r j fg |  n  fjvs2J | j f< | S r   )r|   r}   
setdefaultr=   rk   r   r9   r   r#   r$   rm      s
    z)Dispatcher.dispatch_for.<locals>.decorater#   )r9   r   r   rm   r#   r   r$   dispatch_for   s    zDispatcher.dispatch_for)objr   r   c                 C  s   t |tr|g}nt |tr$|j}n
t|j}|D ]X}|dkrd||f| jv rd| | j||f   S |df| jv r2| | j|df   S q2td| d S )Nrt   z#no dispatch function for object: %s)rw   r   type__mro__r}   _fn_or_list
ValueError)r9   r   r   targetsZspclsr#   r#   r$   dispatch   s    


zDispatcher.dispatchzUnion[List[Callable], Callable])
fn_or_listr   c                   s   | j r fdd}|S  S d S )Nc                    s    D ]}|| i | qd S r   r#   )r\   r[   re   r   r#   r$   go	  s    z"Dispatcher._fn_or_list.<locals>.go)r|   )r9   r   r   r#   r   r$   r     s    zDispatcher._fn_or_listr4   c                   s<   t  } jr*|j fdd jD  n|j j |S )zHReturn a copy of this dispatcher that is independently
        writable.c                 3  s&   | ]}|d d  j | D fV  qdS )c                 S  s   g | ]}|qS r#   r#   ).0re   r#   r#   r$   
<listcomp>  r,   z/Dispatcher.branch.<locals>.<genexpr>.<listcomp>N)r}   )r   kr9   r#   r$   	<genexpr>  s   z$Dispatcher.branch.<locals>.<genexpr>)rz   r|   r}   rQ   )r9   dr#   r   r$   branch  s    
zDispatcher.branchN)F)rt   )rt   )r%   r&   r'   r~   r   r   r   r   r#   r#   r#   r$   rz      s    rz   )r   r   c                 C  s   | d usJ | S r   r#   )r   r#   r#   r$   not_none  s    r   )N)N)N)%
__future__r   rf   collections.abcr   ra   typingr   r   r   r   r   r	   r
   r   r   r   ro   rN   Zsqlalchemy.utilr   r   r   r   r   compatr   r   r   r   r)   rn   rr   rv   ry   rz   r   r#   r#   r#   r$   <module>   sJ    
>