o
    =a,                     @   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v rBdZd-ddZd.ddZd.ddZd.ddZd/ddZ	d0ddZ				d1dd Zd!d" Zd2d#d$Zd%d& Zd'd( Z	d-d)d*Z	d3d+d,ZdS )4zSHelpers 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
   RemovedIn20Warningr   deprecated_sincer   )msgversiontype_r   r   warn r   R/var/www/html/gps/gps/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_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_limited-   s
   
r$   c                 C   s   t | tjjtj||d d S r   )r   r
   r   r   )r   r   r   r   r   r   warn_deprecated_209   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   decorateG   s   z deprecated_cls.<locals>.decorater   )r   r2   r0   r3   r   r/   r   deprecated_clsD   s   
r4   c                    s6   d| |sdndf |rd| 7  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 |  tjtjjS N)r+   r
   r   r   r-   r0   r2   r   r   r3   e   s   z#deprecated_20_cls.<locals>.decorater   )clsnamealternativer0   becomes_legacyr3   r   r9   r   deprecated_20_clsT   s   
r=   c                    s|   dkrdu rt jd|rdpdf nddu r ddu r't jt jur2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r@   r1   r2   r   warningr   r   r3      s   zdeprecated.<locals>.decorate)r
   r   r    )r   r2   add_deprecation_to_docstringrE   r@   r3   r   rD   r   
deprecatedr   s$   

rG   c                 K   s   t 	d| tjd|S )Nr>   r2   rE   r>   )rG   r
   MovedIn20Warning)r2   kwr   r   r   moved_20   s   rL   c                 K   s   t d| }|rdddd|d }nd}d| ||sd	nd
f }d| v r:|dd}|s:|ddu s:J d|  |rB|d| 7 }t	d|tj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.r5   r6   z:attr:warn_on_attribute_accessFr@   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.r7   r>   rH   rI   )rematchgrouppopgetrG   r
   r   )api_namer;   r<   rK   type_regr   r2   attribute_okr   r   r   deprecated_20   s@   
r\   c                     sd   i  i i   D ]\}\}}||< t| |< |dkr!t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 ur.tt|jt|jt|j d  |jtt	ndt|j
 t fdd}| jd urM| jpNd}|r]t|dd  D }|| }||_|S )Nr   c                    s   D ]*}| d u r|| d us| d ur,|| | kr,t | | | dd q v rFt|rFt       dd D ]}||v r\t | | | dd qH| |i |S Nr   r   )r   set
difference)rC   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   r2   r   r   r   
<dictcomp>0  s    
z7deprecated_params.<locals>.decorate.<locals>.<dictcomp>)r   inspect_getfullargspecre   r,   zipr#   lenr^   intersectionr_   varkwr   __doc__r   items)rC   specri   doc	decoratedrf   specsrg   rh   )rb   rc   rd   re   r   r3      s4   

!z#deprecated_params.<locals>.decorate)rs   _sanitize_restructured_textr
   r   r    )rx   rk   r   r2   r3   r   rw   r   deprecated_params   s   Brz   c                 C   s(   dd }t ddd | } t d|| S )Nc                 S   s$   |  dd\}}|dv r|d7 }|S )Nr   r	   )r*   rQ   z()rV   )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>D  s    z-_sanitize_restructured_text.<locals>.<lambda>z\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`)rT   sub)textr}   r   r   r   ry   =  s   ry   c           	   	   C   s   | j d ur| j p	d}|d urk|d ur|t|d; }t|tjr#|d7 }t||d}t| tu rOt| j}||d< |dd  t| j	| j
|} |d urN|| }n|| _ |d ur[t| |}|d urkt| |t||||d  | S )Nr(   r)   @ (Background on SQLAlchemy 2.0 at: :ref:`migration_20_toplevel`)r   rr   __dict__)rr   r,   r   r
   r   r   typer   rW   rB   	__bases__getattrsetattrrA   )	r.   r0   wtyper2   r   docstring_headerru   clsdictconstructor_fnr   r   r   r+   H  s:   


r+   c           
         s   t ttjrd}nd}t 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   r(   c                    s4     p| dd}|stdd | |i |S )N_sa_skip_warningFr   r   )rW   r   )rC   r#   r`   skip_warningr@   r2   r   r   r   r   ri     s   
z&_decorate_with_warning.<locals>.warnedNr)   r   c                      s   t  ddS r]   )r   r   )r2   r   r   r   r   r~     s    z(_decorate_with_warning.<locals>.<lambda>)
ry   r   r
   r   r   rr   r,   rB   r   _sa_warn)
r*   r   r2   r   r   r@   doc_onlyri   ru   rv   r   r   r   rA   p  s    rA   r8   )r   N)r&   )Nr&   F)NTNT)NF)NT)rr   osrT   r(   r   langhelpersr   r   r   r   r   r
   r   getenvlowerr   r!   r$   r%   r4   r=   rG   rL   r\   rz   ry   r+   rA   r   r   r   r   <module>   sB   






 
=
&b
)