a
    ~g.                  	   @  s  d 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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 ededZedddZdNdddddd d!d"d#ZdOddddd d%d&d'ZdPdd(dddd d)d*d+ZdQdddd-d.d/d0ZdRddd2d3d2d4d5d6d7Zdd8d9d:d;d<Z dSddd8d4d=d>d?Z!d@d4dAdBdCZ"dddDdEdFZ#dTdGddddddGdHdIdJZ$dUdddddd2ddKdLdMZ%dS )VzSHelpers related to deprecation of functions, methods, classes, other
functionality.    )annotationsN)Any)Callable)Dict)Match)Optional)Sequence)Set)Tuple)Type)TypeVar)Union   )compat)_hash_limit_string)_warnings_warn)	decorator)inject_docstring_text)inject_param_text   )exc_T)bound_FzCallable[..., Any]strzType[exc.SADeprecationWarning]intzOptional[str]None)msgversiontype_
stacklevelcodereturnc                 C  s&   || |d}||_ t||d d d S )Nr!   r   r    )deprecated_sincer   )r   r   r   r    r!   warn r'   a/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/sqlalchemy/util/deprecations.py_warn_with_version*   s    r)      )r   r   r    r!   r"   c                 C  s   t | |tj||d d S )Nr#   )r)   r   SADeprecationWarning)r   r   r    r!   r'   r'   r(   warn_deprecated7   s    r,   zSequence[Any])r   argsr   r    r!   r"   c                 C  s(   |rt | d|} t| |tj||d dS )zhIssue a deprecation warning with a parameterized string,
    limiting the number of registrations.

    
   r#   N)r   r)   r   r+   )r   r-   r   r    r!   r'   r'   r(   warn_deprecated_limited?   s
    r/   __init__zCallable[[Type[_T]], Type[_T]])r   messageconstructorr"   c                   s.   dp
df ddd fdd}|S )N.. deprecated:: %s %s Type[_T])clsr"   c                   s   t |  tjt d S )Nfunc)_decorate_cls_with_warningr   r+   dict)r6   r2   headerr1   r   r'   r(   decorateV   s    z deprecated_cls.<locals>.decorater'   )r   r1   r2   r=   r'   r;   r(   deprecated_clsQ   s    
r>   Tboolz(Optional[Type[exc.SADeprecationWarning]]zCallable[[_F], _F])r   r1   add_deprecation_to_docstringwarningenable_warningsr"   c                   s`   |rdpdf nddu r&ddu r4t jd 7 ddd fdd	}|S )
a  Decorates a function and issues a deprecation warning on use.

    :param version:
      Issue version in the warning.

    :param message:
      If provided, issue message in the warning.  A sensible default
      is used if not provided.

    :param add_deprecation_to_docstring:
      Default True.  If False, the wrapped function's __doc__ is left
      as-is.  If True, the 'message' is prepended to the docs if
      provided, or sensible default if message is omitted.

    r3   r4   Nz$Call to deprecated function %(func)sz (deprecated since: %s)r   fnr"   c                   s8   d usJ d usJ t | t| jd  dS )Nr7   )rB   )_decorate_with_warningr:   __name__)rD   rB   r<   r1   r   rA   r'   r(   r=      s    zdeprecated.<locals>.decorate)r   r+   )r   r1   r@   rA   rB   r=   r'   rG   r(   
deprecatedc   s    rH   r   z0Callable[[Callable[..., _T]], Callable[..., _T]])r1   kwr"   c                 K  s   t d| tjd|S )N2.0r1   rA   )rJ   )rH   r   MovedIn20Warning)r1   rI   r'   r'   r(   moved_20   s     rM   )api_namealternativerI   r"   c                 K  s   t d| }|r(dddd|d }nd}d| |d	f }d
| v rl|dd}|sl|ddu slJ d|  |r||d| 7 }tj}td||d|S )Nz^:(attr|func|meth):	attributefunctionmethod)attrr8   methr   Z	constructzPThe %s %s is considered legacy as of the 1.x series of SQLAlchemy and %s in 2.0.zbecomes a legacy constructz:attr:Zwarn_on_attribute_accessFrB   zattribute %s will emit a warning on read access.  If you *really* want this, add warn_on_attribute_access=True.  Otherwise please add enable_warnings=False. rJ   rK   )rJ   )rematchgrouppopgetr   LegacyAPIWarningrH   )rN   rO   rI   Ztype_regr   r1   Zattribute_okZwarning_clsr'   r'   r(   became_legacy_20   s2    

r\   zTuple[str, str])specsr"   c                    s^   i  i i   D ]*\}\}}||< t| |< tj|< qddd fdd}|S )aK  Decorates a function to warn on use of certain parameters.

    e.g. ::

        @deprecated_params(
            weak_identity_map=(
                "0.7",
                "the :paramref:`.Session.weak_identity_map parameter "
                "is deprecated.",
            )
        )
        def some_function(**kwargs): ...

    r   rC   c              	     s  t | }|jd ur\tt|jt|jt|j d  |jtt	n:|j
d ur|j
tt	ndt|j tddddd fdd}| jd ur| jpd}|rt|dd	  D }|| }||_|S )
Nr'   r   r   rD   r-   kwargsr"   c                   s   D ]T}| d u r || d us<| d ur|| | krt | | | dd q v rt|r d us|J t       dd D ](}||v rt | | | dd q| |i |S Nr*   r$   )r)   set
difference)rD   r-   r_   m)check_any_kwcheck_defaultscheck_kwdefaultsmessagesversion_warningsversionsr'   r(   warned   s>    
z3deprecated_params.<locals>.decorate.<locals>.warnedr4   c                 S  s2   i | ]*\}\}}|d |dkr dn||p(df qS )r3   rJ   z1.4r4   r'   ).0paramr   r1   r'   r'   r(   
<dictcomp>  s   
z7deprecated_params.<locals>.decorate.<locals>.<dictcomp>)r   inspect_getfullargspecrg   r:   zipr-   lenra   intersectionrb   kwonlydefaultsvarkwr   __doc__r   items)rD   specrk   doc	decoratedrh   r]   ri   rj   )rd   re   rf   rg   r(   r=      s<    


&!z#deprecated_params.<locals>.decorate)rv   _sanitize_restructured_textr   r+   )r]   rm   r   r1   r=   r'   rz   r(   deprecated_params   s    Ir|   )textr"   c                 C  s0   ddddd}t ddd | } t d	|| S )
Nz
Match[str]r   )rc   r"   c                 S  s$   |  dd\}}|dv r |d7 }|S )Nr   r   )r8   rT   z()rX   )rc   r   namer'   r'   r(   repl-  s    z)_sanitize_restructured_text.<locals>.replz:ref:`(.+) <.*>`c                 S  s   d|  d S )Nz"%s"r   r~   )rc   r'   r'   r(   <lambda>3      z-_sanitize_restructured_text.<locals>.<lambda>z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)rV   sub)r}   r   r'   r'   r(   r{   ,  s    r{   r5   )r6   r2   wtyper1   r   docstring_headerr"   c           	   	   C  s  | j d ur| j pd}|d ur|d ur2|t|d; }t|tjrF|d7 }t||d}d }t| tu rt| j}||d< |dd  |dd  t| j	| j
|} |d ur|| }n|| _ |d urt| |}|d ur|d usJ |d usJ t| |t||||d  | S )Nr4   r7   @ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)r   ru   __dict____weakref__)ru   r:   
issubclassr   Base20DeprecationWarningr   typer   rY   rF   	__bases__getattrsetattrrE   )	r6   r2   r   r1   r   r   rx   Zconstructor_fnclsdictr'   r'   r(   r9   7  s@    



r9   )r8   r   r1   r   r   rB   r"   c           
        s   t ttjrd}nd}tddddd fdd}| jdurP| jpRd}|dur|t| jd	; }||7 }t||d
}|| }	||	_fdd|	_	|	S )z=Wrap a function with a warnings.warn and augmented docstring.r   r4   r   r   r^   c                   s4     p| dd}|s&tdd | |i |S )NZ_sa_skip_warningFr*   r$   )rY   r)   )rD   r-   r_   Zskip_warningrB   r1   r   r   r'   r(   rk   {  s    
z&_decorate_with_warning.<locals>.warnedNr7   r   c                     s   t  ddS r`   )r)   r'   )r1   r   r   r'   r(   r     s   z(_decorate_with_warning.<locals>.<lambda>)
r{   r   r   r   r   ru   r:   rF   r   Z_sa_warn)
r8   r   r1   r   r   rB   Zdoc_onlyrk   rx   ry   r'   r   r(   rE   g  s     
 rE   )N)r*   N)r*   N)r0   )NTNT)N)N)NT)&ru   
__future__r   rV   typingr   r   r   r   r   r   r	   r
   r   r   r   r4   r   langhelpersr   r   r   r   r   r   r   r   r)   r,   r/   r>   rH   rM   r\   r|   r{   r9   rE   r'   r'   r'   r(   <module>	   s\            6	 &e 5  