a
    "Rh                     @   s   d dl Z d dlZd dlZd dlZd dlZddddddZdd ZG d	d
 d
eZe j	dd Z
e j	dedfddZe j	dd ZdddZe j	dd Zdd ZdS )    N    linenooffsetc                C   s   ddl m} tjdd(}tdt t|dd W d    n1 sF0    Y  | t|d| |\}| 	t
|jt|j |r| t|j| | |jd | |j |d ur| |j| tjdd.}td	t || ||||d
 W d    n1 s0    Y  | |g  d S )Nr   )check_syntax_errorTrecordalwaysz
<testcase>execr   errorr   )test.supportr   warningscatch_warningssimplefilterSyntaxWarningcompileassertEquallenZ
assertTrue
issubclasscategoryZassertRegexstrmessagefilenameZassertIsNotNoner   )testcaseZ	statementZerrtextr   r   r   warnswarn r   D/opt/python-3.9.24/usr/lib/python3.9/test/support/warnings_helper.pycheck_syntax_warning   s*    *&r   c                    s    fdd}|S )Nc                    s   t   fdd}|S )Nc                    sP   t  4 t jd d | g|R i |W  d    S 1 sB0    Y  d S )Nignorer   )r   r   r   )selfargskwargs)r   testr   r   wrapper-   s    
z3ignore_warnings.<locals>.decorator.<locals>.wrapper)	functoolswraps)r%   r&   r!   )r%   r   	decorator,   s    z"ignore_warnings.<locals>.decoratorr   )r   r)   r   r!   r   ignore_warnings&   s    r*   c                   @   s0   e Zd Zdd Zdd Zedd Zdd Zd	S )
WarningsRecorderc                 C   s   || _ d| _d S )Nr   	_warnings_last)r"   Zwarnings_listr   r   r   __init__:   s    zWarningsRecorder.__init__c                 C   sD   t | j| jkr t| jd |S |tjjv r0d S td| |f d S )Nz%r has no attribute %r)r   r-   r.   getattrr   WarningMessage_WARNING_DETAILSAttributeError)r"   attrr   r   r   __getattr__>   s
    zWarningsRecorder.__getattr__c                 C   s   | j | jd  S Nr,   r"   r   r   r   r   E   s    zWarningsRecorder.warningsc                 C   s   t | j| _d S r7   )r   r-   r.   r8   r   r   r   resetI   s    zWarningsRecorder.resetN)__name__
__module____qualname__r/   r6   propertyr   r9   r   r   r   r   r+   6   s
   
r+   c                  O   s.   | d}| s$dtff} |d u r$d}t| |S )Nquietr   T)getWarning_filterwarnings)filtersr$   r>   r   r   r   check_warningsM   s    

rC   Fc                 c   sh   ddl m} tjdd0}tjd||d d V  |r:|  W d    n1 sN0    Y  | |g  d S )Nr   )
gc_collectTr   r
   )r   r   )r   rD   r   r   filterwarningsr   )r   r   r   force_gcrD   r   r   r   r   check_no_warningse   s    $rG   c                 c   s8   t | tdd d V  W d    n1 s*0    Y  d S )NT)r   rF   )rG   ResourceWarning)r   r   r   r   check_no_resource_warning~   s    rI   c                 c   s  t d}|jd}|r"|  tjdd*}t jd d t	|V  W d    n1 s^0    Y  t
|}g }| D ]j\}}d}	|d d  D ]8}|j}
t|t|
tjrt|
j|rd}	|| q|	sx|sx|||jf qx|rtd|d	  |rtd
|d	  d S )N   Z__warningregistry__Tr   r   r
   Fzunhandled warning %sr   z)filter (%r, %s) did not catch any warning)sys	_getframe	f_globalsr?   clearr   r   modulesr   r+   listr   rematchr   Ir   	__class__removeappendr:   AssertionError)rB   r>   frameregistrywZreraisemissingmsgcatseenwarningr   r   r   rA      s4    
(
rA   c               
   c   s<   t jd d  } zd V  W | t jd d < n| t jd d < 0 d S r7   )r   rB   )Zold_filtersr   r   r   save_restore_warnings_filters   s    r`   c                   C   s   t jdtdd d S )NzThis is used in test_support test to ensure support.ignore_deprecations_from() works as expected. You should not be seeing this.r   )
stacklevel)r   r   DeprecationWarningr   r   r   r   _warn_about_deprecation   s
    rc   )r   )F)
contextlibr'   rQ   rK   r   r   r*   objectr+   contextmanagerrC   r@   rG   rI   rA   r`   rc   r   r   r   r   <module>   s&   


'
