o
    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	dXdYd'd(Z	dZd[d*d+Z	)	dZd\d.d/Z	0d]d^d4d5Z		6		6d_d`d=d>ZdadBdCZ 	dXdbdFdGZ!dcdJdKZ"dddMdNZ#	dXdedSdTZ$		6dfdgdVdWZ%dS )hzSHelpers 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]msgstrversiontype_Type[exc.SADeprecationWarning]
stacklevelintcodeOptional[str]returnNonec                 C  s&   || |d}||_ t||d d d S )Nr!   r   r   )deprecated_sincer   )r   r   r   r   r!   warn r)   ^/var/www/html/ecg_monitoring/venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py_warn_with_version*   s   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.   argsSequence[Any]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
   
r2   __init__messageconstructorCallable[[Type[_T]], Type[_T]]c                   s(   dpdf d fdd}|S )	N.. deprecated:: %s %s clsType[_T]r#   c                   s   t |  tjt d S )Nfunc)_decorate_cls_with_warningr   r-   dict)r9   r5   headerr4   r   r)   r*   decorateV   s   z deprecated_cls.<locals>.decorate)r9   r:   r#   r:   r)   )r   r4   r5   rA   r)   r?   r*   deprecated_clsQ   s   
rB   Tadd_deprecation_to_docstringboolwarning(Optional[Type[exc.SADeprecationWarning]]enable_warningsCallable[[_F], _F]c                   sZ   |rdpdf nddu rddu rt jd 7 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.

    r7   r8   Nz$Call to deprecated function %(func)sz (deprecated since: %s)fnr   r#   c                   s8   d usJ d usJ t | t| jd  dS )Nr;   )rG   )_decorate_with_warningr>   __name__)rI   rG   r@   r4   r   rE   r)   r*   rA      s   zdeprecated.<locals>.decoraterI   r   r#   r   )r   r-   )r   r4   rC   rE   rG   rA   r)   rL   r*   
deprecatedc   s   rN   kwr   0Callable[[Callable[..., _T]], Callable[..., _T]]c                 K  s   t 	d| tjd|S )N2.0r4   rE   rQ   )rN   r   MovedIn20Warning)r4   rO   r)   r)   r*   moved_20   s   rU   api_namealternativec                 K  s   t d| }|rdddd|d }nd}d| |d	f }d
| v r6|dd}|s6|ddu s6J d|  |r>|d| 7 }tj}td||d|S )Nz^:(attr|func|meth):	attributefunctionmethod)attrr<   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:warn_on_attribute_accessFrG   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. rQ   rR   rS   )rematchgrouppopgetr   LegacyAPIWarningrN   )rV   rW   rO   type_regr   r4   attribute_okwarning_clsr)   r)   r*   became_legacy_20   s2   

ri   specsTuple[str, str]c                    sX   i  i i   D ]\}\}}||< t| |< tj|< q
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): ...

    rI   r   r#   c              	     s   t | }|jd ur.tt|jt|jt|j d  |jtt	n|j
d urE|j
tt	ndt|j td fdd	}| jd ure| jpfd
}|rut|dd  D }|| }||_|S )Nr)   rI   r   r/   r   kwargsr#   c                   s   D ]*}| d u r|| d us| d ur,|| | kr,t | | | dd q v rLt|rL d us>J t       dd D ]}||v rbt | | | dd qN| |i |S Nr,   r&   )r+   set
difference)rI   r/   rl   m)check_any_kwcheck_defaultscheck_kwdefaultsmessagesversion_warningsversionsr)   r*   warned   s<   z3deprecated_params.<locals>.decorate.<locals>.warnedr8   c                 S  s2   i | ]\}\}}|d |dkrdn||pdf qS )r7   rQ   z1.4r8   r)   ).0paramr   r4   r)   r)   r*   
<dictcomp>  s    
z7deprecated_params.<locals>.decorate.<locals>.<dictcomp>rI   r   r/   r   rl   r   r#   r   )r   inspect_getfullargspecrt   r>   zipr/   lenrn   intersectionro   kwonlydefaultsvarkwr   __doc__r   items)rI   specrx   doc	decoratedru   rj   rv   rw   )rq   rr   rs   rt   r*   rA      s<   


!z#deprecated_params.<locals>.decorateNrM   )r   _sanitize_restructured_textr   r-   )rj   rz   r   r4   rA   r)   r   r*   deprecated_params   s   Ir   textc                 C  s*   ddd}t ddd	 | } t d
|| S )Nrp   
Match[str]r#   r   c                 S  s$   |  dd\}}|dv r|d7 }|S )Nr   r   )r<   r\   z()rb   )rp   r   namer)   r)   r*   repl-  s   z)_sanitize_restructured_text.<locals>.replz:ref:`(.+) <.*>`c                 S  s   d|  d S )Nz"%s"r   r   )rp   r)   r)   r*   <lambda>3  s    z-_sanitize_restructured_text.<locals>.<lambda>z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)rp   r   r#   r   )r`   sub)r   r   r)   r)   r*   r   ,  s   
r   r9   r:   wtypedocstring_headerc           	   	   C  s  | j d ur| j p	d}|d ur|d ur|t|d; }t|tjr#|d7 }t||d}d }t| tu rWt| j}||d< |dd  |dd  t| j	| j
|} |d urV|| }n|| _ |d urct| |}|d ur|d usmJ |d ussJ t| |t||||d  | S )Nr8   r;   @ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)r   r   __dict____weakref__)r   r>   
issubclassr   Base20DeprecationWarningr   typer   rc   rK   	__bases__getattrsetattrrJ   )	r9   r5   r   r4   r   r   r   constructor_fnclsdictr)   r)   r*   r=   7  sB   


r=   r<   c           
        s   t ttjrd}nd}td fd	d
}| jdur#| jp$d}|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   r8   rI   r   r/   r   rl   r#   c                   s4     p| dd}|stdd | |i |S )N_sa_skip_warningFr,   r&   )rc   r+   )rI   r/   rl   skip_warningrG   r4   r   r   r)   r*   rx   {  s   
z&_decorate_with_warning.<locals>.warnedNr;   r   c                     s   t  ddS rm   )r+   r)   )r4   r   r   r)   r*   r     s    z(_decorate_with_warning.<locals>.<lambda>r|   )
r   r   r   r   r   r   r>   rK   r   _sa_warn)
r<   r   r4   r   r   rG   doc_onlyrx   r   r   r)   r   r*   rJ   g  s    
rJ   )N)r   r   r   r   r   r   r   r    r!   r"   r#   r$   )r,   N)
r   r   r   r   r   r    r!   r"   r#   r$   )r   r   r/   r0   r   r   r   r    r!   r"   r#   r$   )r3   )r   r   r4   r   r5   r"   r#   r6   )NTNT)r   r   r4   r"   rC   rD   rE   rF   rG   rD   r#   rH   )r4   r   rO   r   r#   rP   )rV   r   rW   r"   rO   r   r#   rH   )rj   rk   r#   rH   )r   r   r#   r   )r9   r:   r5   r"   r   r   r4   r   r   r   r   r"   r#   r:   )NT)r<   r   r   r   r4   r   r   r   r   r"   rG   rD   r#   r   )&r   
__future__r   r`   typingr   r   r   r   r   r   r	   r
   r   r   r   r8   r   langhelpersr   r   r   r   r   r   r   r   r+   r.   r2   rB   rN   rU   ri   r   r   r=   rJ   r)   r)   r)   r*   <module>   s^   
6	
&
e5