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)   úX/var/www/html/flaskapp/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   zœattribute %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ú