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    )Zdeprecated_sincer   )r   r   r   r    r!   warn r&   j/var/www/html/cobodadashboardai.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)r5   r1   headerr0   r   r&   r'   decorateV   s    z deprecated_cls.<locals>.decorater&   )r   r0   r1   r<   r&   r:   r'   deprecated_clsQ   s    
r=   Tboolz(Optional[Type[exc.SADeprecationWarning]]zCallable[[_F], _F])r   r0   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.

    r2   r3   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 )Nr6   )rA   )_decorate_with_warningr9   __name__)rC   rA   r;   r0   r   r@   r&   r'   r<      s    zdeprecated.<locals>.decorate)r   r*   )r   r0   r?   r@   rA   r<   r&   rF   r'   
deprecatedc   s    rG   r   z0Callable[[Callable[..., _T]], Callable[..., _T]])r0   kwr"   c                 K  s   t d| tjd|S )N2.0r0   r@   )rI   )rG   r   ZMovedIn20Warning)r0   rH   r&   r&   r'   moved_20   s     rK   )api_namealternativerH   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)attrr7   methr   	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_accessFrA   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. rI   rJ   )rI   )rematchgrouppopgetr   ZLegacyAPIWarningrG   )rL   rM   rH   Ztype_regr   r0   Zattribute_okZwarning_clsr&   r&   r'   became_legacy_20   s2    

rZ   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   rB   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   rC   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)rC   r,   r]   m)check_any_kwcheck_defaultscheck_kwdefaultsmessagesversion_warningsversionsr&   r'   warned   s>    
z3deprecated_params.<locals>.decorate.<locals>.warnedr3   c                 S  s2   i | ]*\}\}}|d |dkr dn||p(df qS )r2   rI   z1.4r3   r&   ).0paramr   r0   r&   r&   r'   
<dictcomp>  s   
z7deprecated_params.<locals>.decorate.<locals>.<dictcomp>)r   Zinspect_getfullargspecre   r9   zipr,   lenr_   intersectionr`   kwonlydefaultsvarkwr   __doc__r   items)rC   specri   doc	decoratedrf   r[   rg   rh   )rb   rc   rd   re   r'   r<      s<    


&!z#deprecated_params.<locals>.decorate)rs   _sanitize_restructured_textr   r*   )r[   rk   r   r0   r<   r&   rw   r'   deprecated_params   s    Iry   )textr"   c                 C  s0   ddddd}t ddd | } t d	|| S )
Nz
Match[str]r   )ra   r"   c                 S  s$   |  dd\}}|dv r |d7 }|S )Nr   r   )r7   rR   z()rW   )ra   r   namer&   r&   r'   repl-  s    z)_sanitize_restructured_text.<locals>.replz:ref:`(.+) <.*>`c                 S  s   d|  d S )Nz"%s"r   r{   )ra   r&   r&   r'   <lambda>3      z-_sanitize_restructured_text.<locals>.<lambda>z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)rU   sub)rz   r}   r&   r&   r'   rx   ,  s    rx   r4   )r5   r1   wtyper0   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 )Nr3   r6   @ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)r   rr   __dict____weakref__)rr   r9   
issubclassr   Base20DeprecationWarningr   typer   rX   rE   	__bases__getattrsetattrrD   )	r5   r1   r   r0   r   r   ru   Zconstructor_fnZclsdictr&   r&   r'   r8   7  s@    



r8   )r7   r   r0   r   r   rA   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   r3   r   r   r\   c                   s4     p| dd}|s&tdd | |i |S )NZ_sa_skip_warningFr)   r$   )rX   r(   )rC   r,   r]   Zskip_warningrA   r0   r   r   r&   r'   ri   {  s    
z&_decorate_with_warning.<locals>.warnedNr6   r   c                     s   t  ddS r^   )r(   r&   )r0   r   r   r&   r'   r~     s   z(_decorate_with_warning.<locals>.<lambda>)
rx   r   r   r   r   rr   r9   rE   r   Z_sa_warn)
r7   r   r0   r   r   rA   Zdoc_onlyri   ru   rv   r&   r   r'   rD   g  s     
 rD   )N)r)   N)r)   N)r/   )NTNT)N)N)NT)&rr   
__future__r   rU   typingr   r   r   r   r   r   r	   r
   r   r   r   r3   r   Zlanghelpersr   r   r   r   r   r   r   r   r(   r+   r.   r=   rG   rK   rZ   ry   rx   r8   rD   r&   r&   r&   r'   <module>	   s\            6	 &e 5  