o
    E6d0                     @  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   )Zdeprecated_sincer   )r   r   r   r   r!   warn r(   sC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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
   
r1   __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)r8   r4   headerr3   r   r(   r)   decorateV   s   z deprecated_cls.<locals>.decorate)r8   r9   r#   r9   r(   )r   r3   r4   r@   r(   r>   r)   deprecated_clsQ   s   
rA   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.

    r6   r7   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:   )rF   )_decorate_with_warningr=   __name__)rH   rF   r?   r3   r   rD   r(   r)   r@      s   zdeprecated.<locals>.decoraterH   r   r#   r   )r   r,   )r   r3   rB   rD   rF   r@   r(   rK   r)   
deprecatedc   s   rM   kwr   0Callable[[Callable[..., _T]], Callable[..., _T]]c                 K  s   t 	d| tjd|S )N2.0r3   rD   rP   )rM   r   ZMovedIn20Warning)r3   rN   r(   r(   r)   moved_20   s   rS   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:Zwarn_on_attribute_accessFrF   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. rP   rQ   rR   )rematchgrouppopgetr   ZLegacyAPIWarningrM   )rT   rU   rN   Ztype_regr   r3   Zattribute_okZwarning_clsr(   r(   r)   became_legacy_20   s2   

rb   specsTuple[str, str]c                    sX   i  i i   D ]\}\}}||< t| |< tj|< q
d fdd}|S )a"  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."
            )

        )

    rH   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(   rH   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)rH   r.   re   m)check_any_kwcheck_defaultscheck_kwdefaultsmessagesversion_warningsversionsr(   r)   warned   s<   z3deprecated_params.<locals>.decorate.<locals>.warnedr7   c                 S  s2   i | ]\}\}}|d |dkrdn||pdf qS )r6   rP   z1.4r7   r(   ).0paramr   r3   r(   r(   r)   
<dictcomp>  s    
z7deprecated_params.<locals>.decorate.<locals>.<dictcomp>rH   r   r.   r   re   r   r#   r   )r   Zinspect_getfullargspecrm   r=   zipr.   lenrg   intersectionrh   kwonlydefaultsvarkwr   __doc__r   items)rH   specrq   doc	decoratedrn   rc   ro   rp   )rj   rk   rl   rm   r)   r@      s<   


!z#deprecated_params.<locals>.decorateNrL   )r|   _sanitize_restructured_textr   r,   )rc   rs   r   r3   r@   r(   r   r)   deprecated_params   s   Ir   textc                 C  s*   ddd}t ddd	 | } t d
|| S )Nri   
Match[str]r#   r   c                 S  s$   |  dd\}}|dv r|d7 }|S )Nr   r   )r;   rZ   z()r_   )ri   r   namer(   r(   r)   repl-  s   z)_sanitize_restructured_text.<locals>.replz:ref:`(.+) <.*>`c                 S  s   d|  d S )Nz"%s"r   r   )ri   r(   r(   r)   <lambda>3  s    z-_sanitize_restructured_text.<locals>.<lambda>z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)ri   r   r#   r   )r]   sub)r   r   r(   r(   r)   r   ,  s   
r   r8   r9   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 )Nr7   r:   @ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)r   r{   __dict____weakref__)r{   r=   
issubclassr   Base20DeprecationWarningr   typer   r`   rJ   	__bases__getattrsetattrrI   )	r8   r4   r   r3   r   r   r~   Zconstructor_fnZ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   r7   rH   r   r.   r   re   r#   c                   s4     p| dd}|stdd | |i |S )NZ_sa_skip_warningFr+   r&   )r`   r*   )rH   r.   re   Zskip_warningrF   r3   r   r   r(   r)   rq   {  s   
z&_decorate_with_warning.<locals>.warnedNr:   r   c                     s   t  ddS rf   )r*   r(   )r3   r   r   r(   r)   r     s    z(_decorate_with_warning.<locals>.<lambda>ru   )
r   r   r   r   r   r{   r=   rJ   r   Z_sa_warn)
r;   r   r3   r   r   rF   Zdoc_onlyrq   r~   r   r(   r   r)   rI   g  s    
rI   )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.   r/   r   r   r   r    r!   r"   r#   r$   )r2   )r   r   r3   r   r4   r"   r#   r5   )NTNT)r   r   r3   r"   rB   rC   rD   rE   rF   rC   r#   rG   )r3   r   rN   r   r#   rO   )rT   r   rU   r"   rN   r   r#   rG   )rc   rd   r#   rG   )r   r   r#   r   )r8   r9   r4   r"   r   r   r3   r   r   r   r   r"   r#   r9   )NT)r;   r   r   r   r3   r   r   r   r   r"   rF   rC   r#   r   )&r{   
__future__r   r]   typingr   r   r   r   r   r   r	   r
   r   r   r   r7   r   Zlanghelpersr   r   r   r   r   r   r   r   r*   r-   r1   rA   rM   rS   rb   r   r   r<   rI   r(   r(   r(   r)   <module>   s^   
6	
&
e5