o
    tPfH                  
   @   sl  d dl mZmZm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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 G dd deZG dd deZ G dd deZ!G dd dej"Z#dd Z$e%fddZ&G dd de'Z(dd  Z)G d!d" d"eZ*G d#d$ d$e(d%e*ee e!efi Z
dS )&    )absolute_importprint_functiondivisionN)contextmanager)TestCasewraps)LazyOnClass)perf_counter)get_clock_info)get_hub_if_exists   )sysinfo)params)	leakcheck)errorhandler)flaky)get_switch_expectedc                   @   s`   e Zd Ze dddZejrdd Zndd Ze	dddZ
ejs(ejs(d	nd
fddZdS )TimeAssertMixinNc                 C   s8   z| j |||||d W d S  ty   t  Y d S w )N)placesmsgdelta)assertAlmostEqualAssertionErrorr   reraiseFlakyTestTimeout)selffirstsecondr   r   r    r   X/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/testing/testcase.pyassertTimeoutAlmostEqual+   s
   z(TimeAssertMixin.assertTimeoutAlmostEqualc                 C      d S Nr   r   
time_takenmin_timemax_timer   r   r   assertTimeWithinRange5      z%TimeAssertMixin.assertTimeWithinRangec                 C   s   |  || | || d S r"   )assertLessEqualassertGreaterEqualr#   r   r   r   r'   8      c                 c   s    |d u rt jst jr|d }n|d }|d ur|n|| }|| }t }||fV  t | }z| ||  ko;|kn  d|||||tdf  W d S  tyZ   t  Y d S w )Ng      @g       @zEExpected: %r; elapsed: %r; min: %r; max: %r; fuzzy %r; clock_info: %sr
   )	r   EXPECT_POOR_TIMER_RESOLUTIONLIBUVr
   
assertTruer   r   r   reraiseFlakyTestRaceCondition)r   expectedfuzzyr%   r&   startelapsedr   r   r   runs_in_given_time<   s(   



z"TimeAssertMixin.runs_in_given_timeg{Gz?g      ?c                 C   s   |  d|S )Ng        )r4   )r   r1   r   r   r   runs_in_no_timeR   s   zTimeAssertMixin.runs_in_no_timeNNN)NN)__name__
__module____qualname__r   reraises_flaky_timeoutr    r   r,   r'   r   r4   r-   r5   r   r   r   r   r   *   s    
r   c                   @   s4   e Zd ZdZdd Zdd Zdd ZeZdd	 Zd
S )GreenletAssertMixinz Assertions related to greenlets.c                 C   s.   |  |j| |  | | | || d S r"   )r.   deadreadyassertFalser   gr   r   r   assert_greenlet_ready[   s   z)GreenletAssertMixin.assert_greenlet_readyc                 C   s"   |  |j| |  | | d S r"   )r>   r<   r=   r?   r   r   r   assert_greenlet_not_ready`   s   z-GreenletAssertMixin.assert_greenlet_not_readyc                 C       |  |j| | |j| d S r"   )r.   startedr>   r<   r?   r   r   r   assert_greenlet_spawnedd      z+GreenletAssertMixin.assert_greenlet_spawnedc                 C   rC   r"   )r>   rD   r.   r<   r?   r   r   r   assert_greenlet_finishedk   rF   z,GreenletAssertMixin.assert_greenlet_finishedN)	r7   r8   r9   __doc__rA   rB   rE   assert_greenlet_startedrG   r   r   r   r   r;   X   s    r;   c                   @   sH   e Zd ZdZedd ZdddZdd	d
Zdd Zdd Z	dd Z
dS )StringAssertMixinz*
    Assertions dealing with strings.
    c                 C   s   dd l }|d|jS )Nr   z-?0x[0123456789abcdef]+L?)recompileI)r   rK   r   r   r   
HEX_NUM_REu   s   zStringAssertMixin.HEX_NUM_REXc                 C   s   | j ||S r"   )rN   sub)r   sreplacer   r   r   normalize_addrz   s   z StringAssertMixin.normalize_addrNmodulec                 C   s   |d u r	t | j}|||S r"   )typer8   rR   )r   rQ   rT   rR   r   r   r   normalize_module~   s   
z"StringAssertMixin.normalize_modulec                 C   s   |  | |S r"   )rV   rS   r   rQ   r   r   r   	normalize   s   zStringAssertMixin.normalizec                 C   ,   t |}| |}| ||||f d S r"   )strrX   r.   endswithr   ovalrQ   nr   r   r   assert_nstr_endswith      
z&StringAssertMixin.assert_nstr_endswithc                 C   rY   r"   )rZ   rX   r.   
startswithr\   r   r   r   assert_nstr_startswith   ra   z(StringAssertMixin.assert_nstr_startswith)rO   )NrT   )r7   r8   r9   rH   r	   rN   rS   rV   rX   r`   rc   r   r   r   r   rJ   p   s    


rJ   c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )TestTimeout 	Not Givenc                 C   s   t jj| |d|f dd d S )Nz7%r: test timed out (set class __timeout__ to increase)
F)ref)geventTimeout__init__)r   timeoutmethodr   r   r   rj      s   
zTestTimeout.__init__c                 C   sj   ddl m} t j}d}t|drdd | D }| }dd|d|f | _tj	
| || d S )	Nr   )format_run_infozN/Adebugc                 S   s   g | ]}t |qS r   )rZ   ).0rQ   r   r   r   
<listcomp>   s    z.TestTimeout._on_expiration.<locals>.<listcomp>zLoop Debug:
%s
Run Info:
%s
)gevent.utilrm   rh   get_hubloophasattrrn   join_expire_infori   _on_expiration)r   prev_greenletexrm   rt   
debug_inforun_infor   r   r   rx      s   

zTestTimeout._on_expirationc                 C   s   t j| }|| j7 }|S r"   )rh   ri   __str__rw   rW   r   r   r   r}      s   
zTestTimeout.__str__N)rf   )r7   r8   r9   rw   rj   rx   r}   r   r   r   r   rd      s
    
rd   c                    s&   d u r S t   fdd}|S )Nc                    sD   t    | g|R i |W  d    S 1 sw   Y  d S r"   )rd   r   argskwargsrl   rk   r   r   timeout_wrapper   s   $z&_wrap_timeout.<locals>.timeout_wrapperr   )rk   rl   r   r   r   r   _wrap_timeout   s
   r   c                 C   sb   t  }| ||}||ur|S |D ]}t|||}||ur!|  S q|tu r/td|| |f |S )NzAttribute %r not found
%s
%s
)objectgetgetattrAttributeError)	classDictbasesattrdefaultNONEvaluebaser   r   r   _get_class_attr   s   r   c                   @   s   e Zd Zdd ZdS )TestCaseMetaClassc           
      C   s   | dd}|dkrt|d dd }tjr|d ur|d9 }t||dd}t||dd}t||dd}t| D ]9\}}	|d	rqt|	rq|	| t
||	}	t|	d|}|r\t|	}	|rct|	}	|rmtjrmt|	}	|	||< q8t| |||S )
N__timeout__r   r      check_totalrefcountTerror_fataluses_handle_errortest)r   r   r   RUN_LEAKCHECKSr   listitemsrb   callablepopr   r   wrap_error_fatalwrap_restore_handle_errorr   wrap_refcountrU   __new__)
cls	classnamer   r   rk   r   r   r   keyr   r   r   r   r      s,   





zTestCaseMetaClass.__new__N)r7   r8   r9   r   r   r   r   r   r      s    r   c                   C   r!   r"   r   r   r   r   r   _noop   r(   r   c                       s0   e Zd Z fddZdd Z fddZ  ZS )SubscriberCleanupMixinc                    s.   t t|   ddlm} |jd d  | _d S Nr   )events)superr   setUprh   r   subscribers(_SubscriberCleanupMixin__old_subscribersr   r   	__class__r   r   r      s   zSubscriberCleanupMixin.setUpc                 C   s   ddl m} |j| d S r   )rh   r   r   append)r   rP   r   r   r   r   addSubscriber   r+   z$SubscriberCleanupMixin.addSubscriberc                    s.   ddl m} | j|jd d < tt|   d S r   )rh   r   r   r   r   r   tearDownr   r   r   r   r      s   zSubscriberCleanupMixin.tearDown)r7   r8   r9   r   r   r   __classcell__r   r   r   r   r      s    r   c                       s   e Zd Zejs
ejnejZdZ	dZ
dZdZdZ fddZ fddZdd	 Z fd
dZdd Zdd Zedd Zedd Zedd Zedd ZdZeZdd Zdd Zdd Zdd  Zd,d"d#Zd-d$d%Z d&d' Z!d(d) Z"d*d+ Z#  Z$S ).r   r   Tr   c                    s,   | j dkrt| j| _ tt| j|i |S )Nr   )switch_expectedr   fullnamer   r   runr~   r   r   r   r     s   
zTestCase.runc                    s>   t t|   t }|r|jr|j  g | _| | j d S r"   )	r   r   r   r   rt   
update_nowclose_on_teardown
addCleanup_tearDownCloseOnTearDown)r   hubr   r   r   r     s   

zTestCase.setUpc                 C   s
   |  d S r"   r   )r   rl   r   r   r   _callTestMethod+  s   
zTestCase._callTestMethodc                    sH   t | ddr| jd d = d S t | dt}|  | j| _tt|   d S )NskipTearDownFcleanup)r   r   r   _none_errorr   r   r   )r   r   r   r   r   r   =  s   zTestCase.tearDownc                 C   sH   | j r"| j  }t|d|}z|  W n	 ty   Y nw | j sd S d S )Nclose)r   r   r   	Exception)r   xr   r   r   r   r   G  s   

z!TestCase._tearDownCloseOnTearDownc                 C   s   | j | |S )zU
        *resource* either has a ``close`` method, or is a
        callable.
        )r   r   )r   resourcer   r   r   _close_on_teardownP  s   zTestCase._close_on_teardownc                 C   s   t | ddp
t | dS )N_testMethodNamere   _TestCase__testMethodName)r   r   r   r   r   testnameX  s   zTestCase.testnamec                 C   s   | j jd | j S )N.)r   r7   r   r   r   r   r   testcasename\  s   zTestCase.testcasenamec                 C   s$   t jtj| jj jddd S )Nr   r   r   )	ospathbasenamesysmodulesr   r8   __file__rsplitr   r   r   r   
modulename`     $zTestCase.modulenamec                 C   s$   t jt j| jd d | j S )Nr   r   )r   r   splitextr   r   r   r   r   r   r   r   d  r   zTestCase.fullnamer6   c                 C   s    |  | j| j | jt _d S r"   )assertEqualr   r   _store_errorrh   rs   handle_errorr   r   r   r   expect_one_errorl  s   zTestCase.expect_one_errorc                 C   s4   ~| j | jkrt j|| d S |||f| _ d S r"   )r   r   rh   rs   parentthrow)r   wheretr   tbr   r   r   r   p  s   zTestCase._store_errorc                 C   s   | j S r"   )r   r   r   r   r   
peek_errorw  s   zTestCase.peek_errorc                 C   s   z| j W | j| _ S | j| _ w r"   )r   r   r   r   r   r   	get_errorz  s   zTestCase.get_errorNc                 C   s   |d u r|   }|\}}}|d ur)| |t | |d|f  t||s)J ||d urAt|tr;| t|| n| || |d urK| || |S )NzError must not be none %r)	r   assertIsInstancerU   assertIsNotNone
issubclass
isinstancerZ   r   assertIs)r   kindr   error
where_typeecontextekindevaluer   r   r   assert_error  s"   

zTestCase.assert_errorc              
   C   s  dd l }dd l}ddlm} ttd| |}t|d|}d}	|s(d}	t|d}|D ]}
|
|v r1q*t||
}||s>|	s>q*|||
}z5| ' z|j}W n t	y_   |
d |j}Y nw ||}||}W d    n1 srw   Y  W n ty   |	r Y q*w | |j|j|
 | |j|j|
 | |j|j|
 t|d	r|
|j|jf}z| |j|j| W q* ty   | |j| | d
|j Y q*w | |j|j|
 | |j|j|
 q*d S )Nr   )get_originalzgevent.
__target__TF__implements__ignorekeywordsr   )inspectwarningsgevent.monkeyr   r   
__import__
isfunctioncatch_warningsgetfullargspecr   simplefilter
getargspec	TypeErrorr   r   varargsdefaultsru   r   r   assertIsNone
kwonlyargskwonlydefaults)r   mod_name
func_namesexcluder   r   r   gevent_modulemodule_namefuncs_given	func_namegevent_funcfuncr   
gevent_sigsigr   r   r   r   !assertMonkeyPatchedFuncSignatures  s^   








z*TestCase.assertMonkeyPatchedFuncSignaturesc                 C   s0   z	|  || W d S  ty   t  Y d S w r"   )r   r   r   r/   )r   abr   r   r   assertEqualFlakyRaceCondition  s
   z&TestCase.assertEqualFlakyRaceConditionc                 C   s   |  ||||f d S r"   )r.   rb   )r   it
has_prefixr   r   r   assertStartsWith  s   zTestCase.assertStartsWithc                 C   s   ddl m} | |  d S )Nr   )monkey)rh   r  r>   is_anything_patched)r   r  r   r   r   assertNotMonkeyPatched  s   zTestCase.assertNotMonkeyPatched)NNNN)r   r   )%r7   r8   r9   r   RUNNING_ON_CIr   LOCAL_TIMEOUT
CI_TIMEOUTr   r   r   r   r   _TestCase__old_subscribersr   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r   r   r   r   r   r     s@    
	





Ar   NewBase)+
__future__r   r   r   r   os.pathr   
contextlibr   unittestr   BaseTestCase	functoolsr   rh   gevent._utilr	   gevent._compatr
   r   gevent._hub_localr   re   r   r   r   r   r   patched_tests_setupr   r   r   r;   rJ   ri   rd   r   r   r   rU   r   r   r   r   r   r   r   <module>   sF   .#'
