o
    h!                     @  s  U 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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ZG dd deZ G dd de dZ!dd Z"d9d"d#Z#ed:d(d)Z$ed;d<d,d)Z$ed;d=d.d)Z$d;d/d)Z$d>d2d3Z%G d4d5 d5Z&d?d7d8Z'dS )@    )annotationsN)Iterable)Any)Callable)Dict)List)Mapping)Optional)overload)Sequence)Tuple)TypeVar)Union)asbool)immutabledict)memoized_property)to_list)unique_list   )inspect_getfullargspeczMapping[Any, Any]
EMPTY_DICT_Tc                      s   e Zd Zd	 fddZ  ZS )
_ModuleClsMetakeystrvaluer   returnNonec                   s   t  || | | d S N)super__setattr___update_module_proxies)clsr   r   	__class__ [/var/www/html/aiguide_backend/venv/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                   @  sz   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 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>1   s   
 zModuleClsProxy.<lambda>zDict[type, Tuple[set, list]]_setupsnamer   r   r   c                 C  s0   | j |  \}}|D ]\}}| |||| q	d S r   )r.   _add_proxied_attribute)r"   r/   
attr_namesmodulesglobals_locals_r%   r%   r&   r!   4   s   z%ModuleClsProxy._update_module_proxiesc                 C  sB   | j | j \}}|D ]\}}| |d< |D ]	}t| |||< qq
d S N_proxy)r.   r$   getattrselfr1   r2   r3   r4   	attr_namer%   r%   r&   _install_proxy:   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_proxyA   s   zModuleClsProxy._remove_proxyc                 C  s.   | j |  \}}|||f | ||| d S r   )r.   append_setup_proxy)r"   r3   r4   r1   r2   r%   r%   r&   create_module_class_proxyH   s   z(ModuleClsProxy.create_module_class_proxyc                 C  s"   t | D ]
}| |||| qd S r   )dirr0   )r"   r3   r4   r1   methnamer%   r%   r&   r>   N   s   zModuleClsProxy._setup_proxyc                 C  sD   | ds t| |}t|r| |||||< d S || d S d S )N_)
startswithr7   callable_create_method_proxyadd)r"   rA   r3   r4   r1   methr%   r%   r&   r0   S   s   

z%ModuleClsProxy._add_proxied_attributec              	     s   t  |} fdd}||d< t |dg }|rEt|}|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 |)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_errorb   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 ]\}}||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lenr=   
IndexError	TypeErrorextend)fn_namespectranslationsargskw	return_kwreturn_argsoldnamenewnamepos_onlyargr%   r%   r&   	translatez   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
        )r/   rb   rZ   apply_kwdoc)	r7   r   rP   r'   tupletextwrapdedent__doc__exec)r"   r/   r3   r4   fnrK   rY   rX   
outer_args
inner_argstranslate_strrb   	func_textlclr%   rJ   r&   rE   ^   s@   
	
z#ModuleClsProxy._create_method_proxyN)r/   r   r   r   )r   r   )r'   r(   r)   rj   collectionsdefaultdictr.   __annotations__classmethodr!   r;   r<   r?   r>   r0   rE   r%   r%   r%   r&   r+   '   s"   
 





r+   )	metaclassc                   s    fdd}|S )Nc                   s
    | _ | S r   )rL   rl   rY   r%   r&   decorate   s   z$_with_legacy_names.<locals>.decorater%   )rY   ry   r%   rx   r&   _with_legacy_names   s   rz   r   r   c                   C  s   t  jdd  S )Ni)uuiduuid4hexr%   r%   r%   r&   rev_id   s   r~   xr   defaultrg   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]c                 C  r   r   r%   r   r%   r%   r&   r      r   c                 C  s4   | d u r|S t | tr| fS t | trt| S | fS r   )
isinstancer   r   rg   r   r%   r%   r&   r      s   

tupTuple[str, ...]c                 C  s   t t| S r   )rg   r   )r   r%   r%   r&   dedupe_tuple   s   r   c                   @  sF   e Zd ZddddZ	ddddZddddZdddZd ddZdS )!
DispatcherFuselistboolr   r   c                 C  s   i | _ || _d S r   )	_registryr   )r9   r   r%   r%   r&   __init__   s   
zDispatcher.__init__r   targetr   	qualifierr   r   c                   s    fdd}|S )Nc                   sF   j rj fg |  | S  fjvsJ | j f< | S r   )r   r   
setdefaultr=   rw   r   r9   r   r%   r&   ry      s   z)Dispatcher.dispatch_for.<locals>.decorater%   )r9   r   r   ry   r%   r   r&   dispatch_for   s   zDispatcher.dispatch_forobjc                 C  s   t |tr	|g}nt |tr|j}nt|j}|D ],}|dkr2||f| jv r2| | j||f   S |df| jv rE| | j|df   S qtd| )Nr   z#no dispatch function for object: %s)r   r   type__mro__r   _fn_or_list
ValueError)r9   r   r   targetsspclsr%   r%   r&   dispatch   s   


zDispatcher.dispatch
fn_or_listUnion[List[Callable], Callable]c                   s   | j r fdd}|S  S )Nc                    s    D ]	}|| i | qd S r   r%   )ra   r[   rl   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_listc                   s>   t  } jr|j fdd jD  |S |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%   ).0rl   r%   r%   r&   
<listcomp>  s    z/Dispatcher.branch.<locals>.<genexpr>.<listcomp>N)r   )r   kr9   r%   r&   	<genexpr>  s    
z$Dispatcher.branch.<locals>.<genexpr>)r   r   r   rQ   )r9   dr%   r   r&   branch  s   zDispatcher.branchN)F)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      s    
r   r   c                 C  s   | d usJ | S r   r%   )r   r%   r%   r&   not_none   s   r   )r   r   )r   r   r   rg   r   rg   r   )r   r   r   r   r   r   )r   r   r   r   r   rg   )r   r   r   r   )r   r   r   r   )(
__future__r   rr   collections.abcr   rh   typingr   r   r   r   r   r	   r
   r   r   r   r   r{   rN   sqlalchemy.utilr   r   r   r   r   compatr   r   rt   r   r   r   r+   rz   r~   r   r   r   r   r%   r%   r%   r&   <module>   sP     


=