a
    ߙfbF>                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZ ejZejZz
e ZW n ey   dZY n0 dd ZeZdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zej !ddd Z"ej #ddd Z$ej #ddd Z%ej j&d d!d"d# Z'ej (d$g d%d&d' Z)d(d) Z*d*d+ Z+d,d- Z,ej (d$g d%d.d/ Z-d0d1 Z.d2d3 Z/d4d5 Z0ej (d6g d7d8d9 Z1dS ):    N)log)LoggingErrorconf)AstropyWarningAstropyUserWarningc                 C   sL   t t t t d t_d t_t  t r8t	  t
 rHt  d S N)	importlibreloadwarningssysr   _showwarning_origZ_excepthook_origZ_set_defaultsZwarnings_logging_enableddisable_warnings_loggingZexception_logging_enableddisable_exception_logging)Zfunction r   8lib/python3.9/site-packages/astropy/tests/test_logger.pysetup_function   s    

r   c                  C   sJ   t t} t  W d    n1 s(0    Y  | jjd dksFJ d S )Nr   z%Warnings logging has not been enabled)pytestraisesr   r   r   valueargser   r   r   'test_warnings_logging_disable_no_enable2   s    &r   c                  C   sR   t   tt} t   W d    n1 s00    Y  | jjd dksNJ d S )Nr   z)Warnings logging has already been enabled)r   enable_warnings_loggingr   r   r   r   r   r   r   r   r   "test_warnings_logging_enable_twice8   s    &r   c                   C   sL   t   dd t_tjtdd t   W d    n1 s>0    Y  d S )Nc                   S   s   d S r   r   r   r   r   r   <lambda>A       z2test_warnings_logging_overridden.<locals>.<lambda>ziCannot disable warnings logging: warnings\.showwarning was not set by this logger, or has been overriddenmatch)r   r   r
   showwarningr   r   r   r   r   r   r   r    test_warnings_logging_overridden?   s    
r    c               	   C   s  t jtddD} t }tdt W d    n1 s:0    Y  W d    n1 sX0    Y  t|dksrJ t| dksJ tjddT} t	  t }tdt W d    n1 s0    Y  t
  W d    n1 s0    Y  t|dksJ t| dksJ |d jdks*J |d jds@J |d jdksTJ t jtd	d`} t	  t &}tdt td	 W d    n1 s0    Y  t
  W d    n1 s0    Y  t|dksJ t| dksJ |d jdksJ |d jds"J |d jdks6J t jtddF} t }tdt W d    n1 sr0    Y  W d    n1 s0    Y  t|dksJ t| dksJ d S )
NThis is a warningr   r      TrecordWARNINGastropy.tests.test_loggerz)This is another warning, not from Astropy)r   Zwarnsr   r   log_to_listr
   warnlencatch_warningsr   r   	levelnamemessage
startswithoriginUserWarning)	warn_listlog_listr   r   r   test_warnings_loggingG   s@    
H
*&
*(
Lr2   c               	   C   s   G dd dt } tjddT}t  t }td|  W d    n1 sP0    Y  t  W d    n1 sv0    Y  t|dksJ t|dksJ |d j	dksJ |d j
d	sJ |d jd
ksJ d S )Nc                   @   s   e Zd ZdS )zJtest_warnings_logging_with_custom_class.<locals>.CustomAstropyWarningClassN)__name__
__module____qualname__r   r   r   r   CustomAstropyWarningClasss   s   r6   Tr#   r!   r"   r   r%   z,CustomAstropyWarningClass: This is a warningr&   )r   r
   r*   r   r   r'   r(   r   r)   r+   r,   r-   r.   )r6   r0   r1   r   r   r   'test_warnings_logging_with_custom_classr   s    
*&r7   c               	   C   s   ddl m} m} tjddR}t  t }|| d W d    n1 sN0    Y  t  W d    n1 st0    Y  t	|dksJ t	|dksJ |d j
dksJ |d jd}|sJ |d jd	ksJ d S )
Nr   )W02vo_warnTr#   )abr"   r%   zGW02: ?:?:?: W02: a attribute 'b' is invalid.  Must be a standard XML idr&   )Zastropy.io.votable.exceptionsr8   r9   r
   r*   r   r   r'   r   r)   r+   r,   r-   r.   )r8   r9   r0   r1   xr   r   r   ,test_warning_logging_with_io_votable_warning   s    
(&r=   c                  C   sR   G dd d} t   |  tjd< z ttdtdd W tjd= n
tjd= 0 dS )z
    Regression test for https://github.com/astropy/astropy/issues/2671

    This test actually puts a goofy fake module into ``sys.modules`` to test
    this problem.
    c                   @   s   e Zd Zdd ZdS )z8test_import_error_in_warning_logging.<locals>.FakeModulec                 S   s   t dd S )Nz._showwarning should ignore any exceptions here)ImportError)selfattrr   r   r   __getattr__   s    zDtest_import_error_in_warning_logging.<locals>.FakeModule.__getattr__N)r3   r4   r5   rA   r   r   r   r   
FakeModule   s   rB   z<test fake module>zRegression test for #2671z<this is only a test>r"   N)r   r   r   modulesr
   r   r   )rB   r   r   r   $test_import_error_in_warning_logging   s    
rD   c                  C   sJ   t t} t  W d    n1 s(0    Y  | jjd dksFJ d S )Nr   z&Exception logging has not been enabled)r   r   r   r   r   r   r   r   r   r   r   (test_exception_logging_disable_no_enable   s    &rE   c                  C   sR   t   tt} t   W d    n1 s00    Y  | jjd dksNJ d S )Nr   z*Exception logging has already been enabled)r   enable_exception_loggingr   r   r   r   r   r   r   r   r   #test_exception_logging_enable_twice   s    &rG   zip is not Nonec                   C   sL   t   dd t_tjtdd t   W d    n1 s>0    Y  d S )Nc                 S   s   d S r   r   )etypeZevaluetbr   r   r   r      r   z3test_exception_logging_overridden.<locals>.<lambda>zcCannot disable exception logging: sys.excepthook was not set by this logger, or has been overriddenr   )r   rF   r   
excepthookr   r   r   r   r   r   r   r   !test_exception_logging_overridden   s    
rK   c               
   C   s  z4t  } tdW d    n1 s(0    Y  W nD tyx } z,tjt   |jd dksdJ W Y d }~nd }~0 0 dsJ t| dksJ z<t   t  } tdW d    n1 s0    Y  W nH ty } z.tjt   |jd dksJ W Y d }~nd }~0 0 ds"J t| dks4J | d j	dksHJ | d j
ds^J | d jdksrJ t   z6t  } tdW d    n1 s0    Y  W nH ty } z.tjt   |jd dksJ W Y d }~nd }~0 0 dsJ t| dksJ d S )NzThis is an Exceptionr   Fr"   ERRORzException: This is an Exceptionr&   )r   r'   	Exceptionr   rJ   exc_infor   r)   rF   r+   r,   r-   r.   r   )r1   excr   r   r   test_exception_logging   s:    
*(
**

,*
rP   c               
   C   s   ddl m}  | t}z>t  t }|d W d    n1 sF0    Y  W nF ty } z.tj	t
   |jd dsJ W Y d }~nd }~0 0 dsJ t|dksJ |d jdksJ |d jdsJ |d jd	ksJ d S )
Nr   )HomogeneousListZfooz3homogeneous list must contain only objects of type Fr"   rL   z>TypeError: homogeneous list must contain only objects of type zastropy.utils.collections)Zastropy.utils.collectionsrQ   intr   rF   r'   append	TypeErrorr   rJ   rN   r   r-   r)   r+   r,   r.   )rQ   lr1   rO   r   r   r   test_exception_logging_origin   s$    
,

rV   z8Infinite recursion on Python 3.5+, probably a real issue)reasonc                  C   s   z:t   t  } t W d   n1 s.0    Y  W n  tyZ   tjt   Y n
0 dsdJ t| dkstJ | d jdksJ | d j	dksJ | d j
dksJ dS )z
    Regression test for a crash that occurred on Python 3 when logging an
    exception that was instantiated with no arguments (no message, etc.)

    Regression test for https://github.com/astropy/astropy/pull/4056
    NFr"   r   rL   z%Exception [astropy.tests.test_logger]r&   )r   rF   r'   rM   r   rJ   rN   r)   r+   r,   r.   r1   r   r   r   (test_exception_logging_argless_exception  s    

(rY   level)NDEBUGINFOWARNrL   c              	   C   s  t j}zp| d urt |  t  8}t d t d t d t d W d    n1 s`0    Y  W t | nt | 0 | d u rtj	} | dkrt
|dksJ nL| dkrt
|dksJ n2| d	krt
|d
ksJ n| dkrt
|dksJ |d jdksJ |d jds"J |d jdks6J t
|d
kr|d jdksXJ |d jdsnJ |d jdksJ t
|dkr|d
 jdksJ |d
 jdsJ |d
 jdksJ t
|dkr|d jdksJ |d jdsJ |d jdksJ d S )NError messageWarning messageInformation messageDebug messager[      r\      r]      rL   r"   r   r&   r%   )r   rZ   setLevelr'   errorwarninginfodebugr   	log_levelr)   r+   r,   r-   r.   )rZ   
orig_levelr1   r   r   r   test_log_to_list  sF    




*rl   c                  C   sb   t jdd$} t d t d W d    n1 s60    Y  t| dkrZ| d jdks^J d S )NrL   Zfilter_levelr^   r_   r"   r   )r   r'   rf   rg   r)   r+   rX   r   r   r   test_log_to_list_levelS  s    
(rn   c                  C   sT   t jdd$} t d t d W d    n1 s60    Y  t| dksPJ d S )Nastropy.testsZfilter_originr^   r_   rd   r   r'   rf   rg   r)   rX   r   r   r   test_log_to_list_origin1\  s    
(rr   c                  C   sT   t jdd$} t d t d W d    n1 s60    Y  t| dksPJ d S )Nastropy.wcsrp   r^   r_   r   rq   rX   r   r   r   test_log_to_list_origin2e  s    
(rt   c              	   C   s  |  d}|d}t| }tj}zz|d ur:t| t|8 td t	d t
d td W d    n1 s0    Y  |  W t| nt| 0 |d}| }|  |d u rtj}|dkrt|d	ksJ nX|d
krt|dksHJ n:|dkr,t|dksHJ n|dkrHt|dksHJ t|d  dd  dksjJ t|dkrt|d  dd  dksJ t|dkrt|d  dd  dksJ t|d	krt|d  dd  dksJ d S )Ntest.logwbr^   r_   r`   ra   rbr[   rb   r\   rc   r]   rd   rL   r"   r   )r&   rL   r^   )r&   r%   r_   )r&   r\   r`   )r&   r[   ra   )joinopenstrrealpathr   rZ   re   log_to_filerf   rg   rh   ri   close	readlinesr   rj   r)   evalstrip)tmpdirrZ   
local_pathlog_filelog_pathrk   log_entriesr   r   r   test_log_to_filen  sD    





(




"""r   c                 C   s   |  d}|d}t| }tj|dd$ td td W d    n1 sX0    Y  |  |d}|	 }|  t
|dksJ t|d	  d
d  dksJ d S )Nru   rv   rL   rm   r^   r_   rw   r"   r   )rL   r^   )ry   rz   r{   r|   r   r}   rf   rg   r~   r   r)   r   r   r   r   r   r   r   r   r   r   test_log_to_file_level  s    


(
r   c                 C   s   |  d}|d}t| }tj|dd$ td td W d    n1 sX0    Y  |  |d}|	 }|  t
|dksJ d S )	Nru   rv   ro   rp   r^   r_   rw   rd   ry   rz   r{   r|   r   r}   rf   rg   r~   r   r)   r   r   r   r   test_log_to_file_origin1  s    


(
r   c                 C   s   |  d}|d}t| }tj|dd$ td td W d    n1 sX0    Y  |  |d}|	 }|  t
|dksJ d S )	Nru   rv   rs   rp   r^   r_   rw   r   r   r   r   r   r   test_log_to_file_origin2  s    


(
r   encoding) zutf-8cp1252c                 C   s   |  d}t| }tj}|t_t|R tjD ]:}t|t	j
r4|rZ|jj|ksnJ q4|jjt ks4J q4W d    n1 s0    Y  |t_d S )Nru   )ry   r{   r|   r   Zlog_file_encodingr   r}   handlers
isinstanceloggingZFileHandlerstreamr   localegetpreferredencoding)r   r   r   r   Zorig_encodingZhandlerr   r   r   test_log_to_file_encoding  s    

4r   )2r   r   r
   r   r   r   Zastropyr   Zastropy.loggerr   r   Zastropy.utils.exceptionsr   r   __excepthook___excepthookr   _showwarningZget_ipythonZip	NameErrorr   Zteardown_moduler   r   r    r2   r7   r=   rD   rE   rG   ZmarkZskipifrK   ZxfailrP   rV   skiprY   Zparametrizerl   rn   rr   rt   r   r   r   r   r   r   r   r   r   <module>   sZ   

+	



)



4			
9