U
    ÌZjþ-  ã                   @   s  d Z ddl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Ze dd¡ ¡ dkr„dZd-dd„Zd.dd„Zd/dd„Zd0dd„Zd1dd„Zd2dd„Zd3dd „Zd!d"„ Zd4d#d$„Zd%d&„ Zd'd(„ Zd5d)d*„Zd6d+d,„ZdS )7zSHelpers related to deprecation of functions, methods, classes, other
functionality.é    Né   )Úcompat)Ú_hash_limit_string)Ú_warnings_warn)Ú	decorator)Úinject_docstring_text)Úinject_param_texté   )ÚexcFÚSQLALCHEMY_WARN_20Úfalse)ÚtrueÚyesÚ1Tc                 C   s:   t |tjƒrtsd S || |d�}||_t||d d� d S )N©Úcoder   ©Ú
stacklevel)Ú
issubclassr
   ÚBase20DeprecationWarningr   Údeprecated_sincer   )ÚmsgÚversionÚtype_r   r   Úwarn© r   ú_/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/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_deprecated*   s        ÿ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   Úargsr   r   r   r   r   r   Úwarn_deprecated_limited0   s        ÿr$   c                 C   s   t | tjjtj||d� d S r   )r   r
   ÚRemovedIn20Warningr   )r   r   r   r   r   r   Úwarn_deprecated_20<   s    ûr&   Ú__init__c                    s&   dˆˆp
df ‰‡ ‡‡‡fdd„}|S )Nú.. deprecated:: %s %sÚ c                    s   t | ˆ tjˆtˆ d� ˆˆƒS )N©Úfunc)Ú_decorate_cls_with_warningr
   r    Údict©Úcls©ÚconstructorÚheaderÚmessager   r   r   ÚdecorateJ   s    úz deprecated_cls.<locals>.decorater   )r   r3   r1   r4   r   r0   r   Údeprecated_clsG   s    
r5   c                    sJ   d| |sdndf ‰|r$ˆd| 7 ‰|r0t j‰nt j‰‡ ‡‡fdd„}|S )Nzg.. deprecated:: 1.4 The %s class is considered legacy as of the 1.x series of SQLAlchemy and %s in 2.0.úwill be removedúbecomes a legacy constructú c                    s   t | ˆ ˆˆˆjˆƒS )N)r,   r   r.   ©r1   r3   Úwarning_clsr   r   r4   m   s    úz#deprecated_20_cls.<locals>.decorate)r
   ÚLegacyAPIWarningr%   )ZclsnameÚalternativer1   Úbecomes_legacyr4   r   r9   r   Údeprecated_20_clsW   s    ÿüþÿ
r>   c                    s|   ˆdkrˆdkrt j‰d‰|r0dˆˆp(df ‰nd‰ˆdkr@d‰ˆdkrNt j‰ˆt jk	rdˆdˆ 7 ‰‡ ‡‡‡‡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.

    ú2.0Nú1.4r(   r)   z$Call to deprecated function %(func)sz (deprecated since: %s)c                    s    t | ˆˆt| jd� ˆˆˆ d�S )Nr*   )Úenable_warnings)Ú_decorate_with_warningr-   Ú__name__)Úfn©rA   r2   r3   r   Úwarningr   r   r4   ª   s    úzdeprecated.<locals>.decorate)r
   r%   r    )r   r3   Zadd_deprecation_to_docstringrF   rA   r4   r   rE   r   Ú
deprecatedz   s$    þ

rG   c                 K   s   t d| tjdœ|—ŽS )Nr?   ©r3   rF   )r?   )rG   r
   ZMovedIn20Warning)r3   Úkwr   r   r   Úmoved_20·   s     ÿ ÿÿrJ   c           	      K   sª   t  d| ¡}|r(ddddœ| d¡ }nd}d| ||s:d	nd
f }d| krt| dd¡}|st| d¡dksttd|  ƒ‚|r„|d| 7 }|r�tj}ntj}t	d||dœ|—ŽS )Nz^:(attr|func|meth):Ú	attributeÚfunctionÚmethod)Úattrr+   Úmethr   Z	constructzPThe %s %s is considered legacy as of the 1.x series of SQLAlchemy and %s in 2.0.r6   r7   z:attr:Zwarn_on_attribute_accessFrA   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.r8   r?   rH   )r?   )
ÚreÚmatchÚgroupÚpopÚgetÚAssertionErrorr
   r;   r%   rG   )	Zapi_namer<   r=   rI   Ztype_regr   r3   Zattribute_okr:   r   r   r   Údeprecated_20½   s:    
ÿÿûþÿýÿrV   c                     sd   i ‰ i ‰i ‰ˆ  ¡ D ]8\}\}}|ˆ|< t|ƒˆ |< |dkrBtjntjˆ|< q‡ ‡‡‡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."
            )

        )

    r?   c                    sÌ   t  | ¡}|jd k	r\tt|jt|jƒt|jƒ d … |jƒƒ‰tˆƒ ˆ¡‰tˆƒ 	ˆ¡‰nd‰tˆƒ‰|j
‰ t‡ ‡‡‡‡‡‡fdd„ƒ}| jd k	rš| jpœd}|rºt|dd„ ˆ ¡ D ƒƒ}|| ƒ}||_|S )Nr   c                    sÄ   ˆD ]T}ˆ| d kr || d k	s<ˆ| d k	r|| ˆ| krt ˆ| ˆ| ˆ| dd� qˆ ˆkrŒt|ƒ ˆ¡rŒt ˆˆ  ˆˆ  ˆˆ  dd� ˆD ](}||kr�t ˆ| ˆ| ˆ| dd� q�| ||ŽS ©Nr   r   )r   ÚsetÚ
difference)rD   r#   ÚkwargsÚm)Úcheck_any_kwÚcheck_defaultsÚcheck_kwÚdefaultsÚmessagesÚversion_warningsÚversionsr   r   Úwarned  s<    
ÿÿüÿüüz3deprecated_params.<locals>.decorate.<locals>.warnedr)   c                 S   s2   i | ]*\}\}}|d |dkr dn||p(df “qS )r(   r?   r@   r)   r   )Ú.0Úparamr   r3   r   r   r   Ú
<dictcomp>;  s
   
þ ÿz7deprecated_params.<locals>.decorate.<locals>.<dictcomp>)r   Zinspect_getfullargspecr_   r-   Úzipr#   ÚlenrX   ÚintersectionrY   Úvarkwr   Ú__doc__r   Úitems)rD   Úspecrc   ÚdocÚ	decorated©r`   Úspecsra   rb   )r\   r]   r^   r_   r   r4     s4    

þÿ!ýþz#deprecated_params.<locals>.decorate)rl   Ú_sanitize_restructured_textr
   r%   r    )rq   re   r   r3   r4   r   rp   r   Údeprecated_paramsæ   s    ÿýBrs   c                 C   s(   dd„ }t  ddd„ | ¡} t  d|| ¡S )Nc                 S   s$   |   dd¡\}}|dkr |d7 }|S )Nr   r	   )r+   rO   z()©rR   )r[   r   Únamer   r   r   ÚreplI  s    z)_sanitize_restructured_text.<locals>.replz:ref:`(.+) <.*>`c                 S   s   d|   d¡ S )Nz"%s"r   rt   )r[   r   r   r   Ú<lambda>O  ó    z-_sanitize_restructured_text.<locals>.<lambda>z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)rP   Úsub)Útextrv   r   r   r   rr   H  s    rr   c           	   	   C   sæ   | j d k	r| j pd}|d k	râ|d k	r2|t|d�; }t|tjƒrF|d7 }t||dƒ}t| ƒtkrªt| jƒ}||d< | dd ¡ | dd ¡ t| j	| j
|ƒ} |d k	rÂ|| }n|| _ |d k	rÂt| |ƒ}|d k	rât| |t||||d ƒƒ | S )Nr)   r*   ú@ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)r   rk   Ú__dict__Ú__weakref__)rk   r-   r   r
   r   r   Útyper|   rS   rC   Ú	__bases__ÚgetattrÚsetattrrB   )	r/   r1   Úwtyper3   r   Údocstring_headerrn   ZclsdictZconstructor_fnr   r   r   r,   S  sB    ÿ


    ÿýr,   c           
         s˜   t ˆƒ‰tˆtjƒrd}nd}t‡ ‡‡‡fdd„ƒ}| jdk	rD| jpFd}|dk	rt|t| jd�; }||7 }t||dƒ}|| ƒ}	||	_‡‡‡fdd	„|	_	|	S )
z=Wrap a function with a warnings.warn and augmented docstring.r{   r)   c                    s0   ˆ  p|  dd¡}|s&tˆˆˆdd� | ||ŽS )NZ_sa_skip_warningFr   r   )rS   r   )rD   r#   rZ   Zskip_warning©rA   r3   r   r‚   r   r   rc   ‹  s    
 ÿz&_decorate_with_warning.<locals>.warnedNr*   r   c                      s   t ˆ ˆˆdd�S rW   )r   r   )r3   r   r‚   r   r   rw   ž  s
      ÿz(_decorate_with_warning.<locals>.<lambda>)
rr   r   r
   r   r   rk   r-   rC   r   Z_sa_warn)
r+   r‚   r3   r   rƒ   rA   Zdoc_onlyrc   rn   ro   r   r„   r   rB   |  s     ÿrB   )N)r   N)r   N)r   N)r'   )Nr'   F)NTNT)NF)N)NT)rk   ÚosrP   r)   r   Zlanghelpersr   r   r   r   r   r
   r   ÚgetenvÚlowerr   r!   r$   r&   r5   r>   rG   rJ   rV   rs   rr   r,   rB   r   r   r   r   Ú<module>   sF   




     ÿ
%    û
=
)b ÿ
*   ÿ