ó
    'xáh¢  ã                   óD  • S r SSKrSSKJs  Jr  SSKrSSKrSSK	J
r
  SSKJrJr  SSKJr  SSKJrJr  \
(       a  SSKJr  S rS	 rS
 rS r\" S5      \R0                  " \R2                  SS05      SS j5       5       r\" S5      \R0                  " \R2                  SS05      SS j5       5       r\" S5      \R0                  " \R2                  0 SS9SS j5       5       r\" S5      \R0                  " \R2                  SS05      SS j5       5       rS rS rS r S r!S r"g)z%Tests for quber.utils.logging module.é    N)ÚTYPE_CHECKING)Ú	MagicMockÚpatch)Úlogger)Ú
get_loggerÚsetup_logging)r   c                  ó˜  • [         R                  " [        R                  0 SS9   [	        SS9  SSS5        [
        (       dx  SSS[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS0-  n [        [        R                  " U 5      5      eg! , (       d  f       N’= f)	z)Test basic logging setup without logfire.T©ÚclearF©Úenable_logfireNúassert %(py0)sÚpy0r   ©r   ÚdictÚosÚenvironr   r   Ú@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation©Ú@py_format1s    Ú&/workspace/tests/utils/test_logging.pyÚtest_setup_logging_basicr      sY   € ä	�Š”B—J‘J ¨$Ó	/Ü UÒ+÷ 
0÷ Š6‡M‡M‡M‡M‡M‚MŒ6‡M‡M‡M�MŒ6‡M‡M‡M‡M‡M€Mˆ6÷ 
0Õ	/ús   ¥
B;Â;
C	c                  óš  • [         R                  " [        R                  0 SS9   [	        SSS9  SSS5        [
        (       dx  SSS	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	0-  n [        [        R                  " U 5      5      eg! , (       d  f       N’= f)
z)Test setup_logging with custom log level.Tr
   ÚDEBUGF©Ú	log_levelr   Nr   r   r   r   r   s    r   Ú#test_setup_logging_custom_log_levelr#      s[   € ä	�Š”B—J‘J ¨$Ó	/Ü ¸Ò>÷ 
0÷ Š6‡M‡M‡M‡M‡M‚MŒ6‡M‡M‡M�MŒ6‡M‡M‡M‡M‡M€Mˆ6÷ 
0Õ	/úó   ¥B<Â<
C
c            
      óJ
  • [         R                  " [        R                  0 SS9   [	        SSS9  SSS5        [
        R                  n So" U5      o"R                  n[
        R                  oCU:H  oU(       GdT  [        R                  " SU4SX445      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U 5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U5      S
.-  nSSU0-  n[        [        R                   " U5      5      eS=n =n=n=n=pT[
        R                  n So" U5      o"R                  n[
        R                  oCU:H  oU(       GdT  [        R                  " SU4SX445      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U 5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U5      S
.-  nSSU0-  n[        [        R                   " U5      5      eS=n =n=n=n=pT[
        R                  n So" U5      o"R                  n[
        R                  oCU:H  oU(       GdT  [        R                  " SU4SX445      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U 5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	[        R                  " U5      S
.-  nSSU0-  n[        [        R                   " U5      5      eS=n =n=n=n=pTg! , (       d  f       GNê= f)z2Test that external library loggers are suppressed.Tr
   F©Úsuppress_externalr   NÚdocling©ú==)zŠ%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.getLogger
}(%(py4)s)
}.level
} == %(py12)s
{%(py12)s = %(py10)s.WARNING
}Úlogging©r   Úpy2Úpy4Úpy6Úpy8Úpy10Úpy12úassert %(py14)sÚpy14ÚhttpxÚ	anthropic)r   r   r   r   r   r+   Ú	getLoggerÚlevelÚWARNINGr   Ú_call_reprcomparer   r   r   r   r   r   ©Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert7Ú@py_assert11Ú@py_assert9Ú@py_format13Ú@py_format15s           r   Ú$test_setup_logging_suppress_externalrD       s¸  € ä	�Š”B—J‘J ¨$Ó	/Ü¨¸UÒC÷ 
0ô ×ÑÐ@˜YÐ@Ð˜YÓ'Ð@×-Ñ-Ð@´·±Ð@°Ñ@×@×@×@Ó@Ð-×@×@×@×@×@Õ@Œ7×@×@×@Ñ@Œ7×@×@Õ@Ð×@×@Ó@˜Y×@×@Ó@Ð'×@×@Ó@Ð-×@×@×@×@×@Ô@´×@×@×@Ñ@´×@×@Õ@°×@×@×@×@×@×@×@Ñ@Ü×ÑÐ>˜WÐ>Ð˜WÓ%Ð>×+Ñ+Ð>¬w¯©Ð>¨Ñ>×>×>×>Ó>Ð+×>×>×>×>×>Õ>Œ7×>×>×>Ñ>Œ7×>×>Õ>Ð×>×>Ó>˜W×>×>Ó>Ð%×>×>Ó>Ð+×>×>×>×>×>Ô>¬w×>×>×>Ñ>¬w×>×>Õ>¨×>×>×>×>×>×>×>Ñ>Ü×ÑÐB˜[ÐBÐ˜[Ó)ÐB×/Ñ/ÐB´7·?±?ÐB°?ÑB×B×B×BÓBÐ/×B×B×B×B×BÕBŒ7×B×B×BÑBŒ7×B×BÕBÐ×B×BÓB˜[×B×BÓBÐ)×B×BÓBÐ/×B×B×B×B×BÔB´7×B×B×BÑB´7×B×BÕB°?×B×B×B×B×B×B×BÒB÷ 
0Ö	/ús   ¥TÔ
T"c                  ó6  • [         R                  " [        R                  0 SS9   [        R
                  " S5      R                  [        R                  5        [        SSS9  [        R
                  n So" U5      o"R                  n[        R                  oCU:H  oU(       GdT  [        R                  " SU4SX445      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U 5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S	.-  nS
SU0-  n[!        [        R"                  " U5      5      eS=n =n=n=n=pTSSS5        g! , (       d  f       g= f)z4Test logging without suppressing external libraries.Tr
   r(   Fr&   r)   )z‡%(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.getLogger
}(%(py4)s)
}.level
} == %(py12)s
{%(py12)s = %(py10)s.INFO
}r+   r,   r3   r4   N)r   r   r   r   r+   r7   ÚsetLevelÚINFOr   r8   r   r:   r   r   r   r   r   r   r;   s           r   Ú'test_setup_logging_no_suppress_externalrH   *   s!  € ä	�Š”B—J‘J ¨$Ó	/Ü×Ò˜)Ó$×-Ñ-¬g¯l©lÔ;ä¨¸eÒDä× Ñ ÐA ÐAÐ  Ó+ÐA×1Ñ1ÐA´W·\±\ÐA°\ÑA×A×A×AÓAÐ1×A×A×A×A×AÕAŒw×A×A×AÑAŒw×A×AÕAÐ ×A×AÓA ×A×AÓAÐ+×A×AÓAÐ1×A×A×A×A×AÔA´W×A×A×AÑA´W×A×AÕA°\×A×A×A×A×A×A×AÑA÷ 
0×	/Ö	/ús   ¥GH
È

Hzquber.utils.logging.logfireÚPYDANTIC_LOGFIRE_TOKENú
test-tokenc                 ób  • [        5       U l        [        5       U l        [        5       U l        [        5       U l        [        SSS9  U R                  R                  SSSS9  U R                  R                  5         U R                  R                  5         U R                  R                  5         g)	z+Test logfire setup when token is available.TrG   ©r   r"   ÚquberrJ   F)Úservice_nameÚtokenÚconsoleN)r   Ú	configureÚinstrument_anthropicÚinstrument_openaiÚinstrument_pydantic_air   Úassert_called_once_withÚassert_called_once©Úmock_logfires    r   Ú%test_setup_logging_with_logfire_tokenrY   4   s�   € ô '›[€LÔÜ(1«€LÔ%Ü%.£[€LÔ"Ü*3«+€LÔ'ä °Ò8à×Ñ×2Ñ2ØØØð 3ñ ð
 ×%Ñ%×8Ñ8Ô:Ø×"Ñ"×5Ñ5Ô7Ø×'Ñ'×:Ñ:Õ<ó    c                 óÄ   • [        5       U l        [        5       U l        [        5       U l        [        5       U l        [        SSS9  U R                  R                  5         g)zTest logfire debug logging.Tr    rL   N)r   rQ   rR   rS   rT   r   rV   rW   s    r   Ú*test_setup_logging_with_logfire_debug_moder\   I   sH   € ô '›[€LÔÜ(1«€LÔ%Ü%.£[€LÔ"Ü*3«+€LÔ'ä °Ò9à×Ñ×-Ñ-Õ/rZ   Tr
   c                 óh   • [        5       U l        [        SS9  U R                  R                  5         g)z2Test that logfire is not configured without token.Tr   N)r   rQ   r   Úassert_not_calledrW   s    r   Ú(test_setup_logging_without_logfire_tokenr_   W   s(   € ô '›[€LÔä Ò&à×Ñ×,Ñ,Õ.rZ   c                 óJ   • [        S5      U R                  l        [        SS9  g)z1Test handling of logfire configuration exception.zLogfire errorTr   N)Ú	ExceptionrQ   Úside_effectr   rW   s    r   Ú$test_setup_logging_logfire_exceptionrc   b   s   € ô *3°?Ó)C€L×ÑÔ&ä Ó&rZ   c                  óš  • [         R                  " [        R                  0 SS9   [	        SSS9  SSS5        [
        (       dx  SSS	[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS	0-  n [        [        R                  " U 5      5      eg! , (       d  f       N’= f)
z,Test setup_logging with custom service name.Tr
   zcustom-serviceF)rN   r   Nr   r   r   r   r   s    r   Ú&test_setup_logging_custom_service_namere   k   s\   € ä	�Š”B—J‘J ¨$Ó	/ÜÐ#3ÀEÒJ÷ 
0÷ Š6‡M‡M‡M‡M‡M‚MŒ6‡M‡M‡M�MŒ6‡M‡M‡M‡M‡M€Mˆ6÷ 
0Õ	/úr$   c                  ó–	  • [        5       n SoULo"(       d¥  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p!Sn[        X5      oU(       dí  S	S
[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OS
S[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pSn[        X5      oU(       dí  S	S
[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OS
S[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pSn[        X5      oU(       dí  S	S
[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OS
S[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pSn[        X5      oU(       dí  S	S
[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OS
S[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pg)z(Test getting logger without custom name.N©úis not©z%(py0)s is not %(py3)sÚlog©r   Úpy3úassert %(py5)sÚpy5Úinfoú5assert %(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
}Úhasattr©r   Úpy1rl   rn   ÚdebugÚwarningÚerror©
r   r   r:   r   r   r   r   r   r   rq   ©rj   Ú@py_assert2r<   Ú@py_format4Ú@py_format6Ú@py_assert4s         r   Útest_get_logger_without_namer}   s   sc  € ä
‹,€CàÐ�dˆ?×××Òˆ3×××××Õˆ3×××Ñˆ3××Õ�d××××××ÑØÐŒ7�3ÓÐÕ×××××ÑŒ7×××ÑŒ7×××××Ö�3×××Ñ�3××Õ˜××ÓÐ×××××ÒØÐ Œ7�3Ó Ð Õ × × × × × Ñ Œ7× × × Ñ Œ7× × × × × Ö �3× × × Ñ �3× × Õ ˜× × Ó Ð × × × × × Ò Ø!Ð"Œ7�3Ó"Ð"Õ"×"×"×"×"×"Ñ"Œ7×"×"×"Ñ"Œ7×"×"×"×"×"Ö"�3×"×"×"Ñ"�3×"×"Õ"˜	×"×"Ó"Ð"×"×"×"×"×"Ò"ØÐ Œ7�3Ó Ð Õ × × × × × Ñ Œ7× × × Ñ Œ7× × × × × Ö �3× × × Ñ �3× × Õ ˜× × Ó Ð × × × × × Ó rZ   c                  ó†  • [        S5      n SoULo"(       d¥  [        R                  " SU4SX45      S[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p!S	n[        X5      oU(       dí  S
S[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pg)z%Test getting logger with custom name.ztest-contextNrg   ri   rj   rk   rm   rn   ro   rp   rq   rr   rw   rx   s         r   Útest_get_logger_with_namer   ~   sæ   € ä
�^Ó
$€CàÐ�dˆ?×××Òˆ3×××××Õˆ3×××Ñˆ3××Õ�d××××××ÑØÐŒ7�3ÓÐÕ×××××ÑŒ7×××ÑŒ7×××××Ö�3×××Ñ�3××Õ˜××ÓÐ×××××ÓrZ   c                  ó*  • [        5       n Sn[        X5      o"(       dí  SS[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pSn[        X5      o"(       dí  SS[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pSn[        X5      o"(       dí  SS[        R                  " 5       ;   d  [        R
                  " [        5      (       a  [        R                  " [        5      OSS[        R                  " 5       ;   d  [        R
                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pg)	z6Test that get_logger returns a loguru logger instance.Úbindrp   rq   rj   rr   NÚoptÚcatch)	r   rq   r   r   r   r   r   r   r   )rj   ry   r|   r{   s       r   Ú'test_get_logger_returns_loguru_instancer„   †   s‰  € ä
‹,€CàÐŒ7�3ÓÐÕ×××××ÑŒ7×××ÑŒ7×××××Ö�3×××Ñ�3××Õ˜××ÓÐ×××××ÒØÐŒ7�3ÓÐÕ×××××ÑŒ7×××ÑŒ7×××××Ö�3×××Ñ�3××Õ˜××ÓÐ×××××ÒØÐ Œ7�3Ó Ð Õ × × × × × Ñ Œ7× × × Ñ Œ7× × × × × Ö �3× × × Ñ �3× × Õ ˜× × Ó Ð × × × × × Ó rZ   c                  ó®  • [         R                  " [        R                  0 SS9   [	        SSS9  [	        SSS9  SSS5        [
        (       dx  SS	S
[        R                  " 5       ;   d  [        R                  " [
        5      (       a  [        R                  " [
        5      OS
0-  n [        [        R                  " U 5      5      eg! , (       d  f       N’= f)z5Test that setup_logging can be called multiple times.Tr
   rG   Fr!   r    Nr   r   r   r   r   s    r   Ú!test_setup_logging_multiple_callsr†   �   se   € ä	�Š”B—J‘J ¨$Ó	/Ü °uÒ=Ü ¸Ò>÷ 
0÷ Š6‡M‡M‡M‡M‡M‚MŒ6‡M‡M‡M�MŒ6‡M‡M‡M‡M‡M€Mˆ6÷	 
0Õ	/ús   ¥CÃ
C)rX   ÚMagicMockType)#Ú__doc__Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   r+   r   Útypingr   Úunittest.mockr   r   Úlogurur   Úquber.utils.loggingr   r   r‡   r   r#   rD   rH   r   r   rY   r\   r_   rc   re   r}   r   r„   r†   © rZ   r   Ú<module>r’      s.  ðÙ +ç  „ ƒÛ 	Ý  ß *å ç 9æÝ8òòòCòBñ Ð$Ó%Ø‡‚ˆB�J‰JÐ1°<Ð@ÓAó=ó Bó &ð=ñ& Ð$Ó%Ø‡‚ˆB�J‰JÐ1°<Ð@ÓAó	0ó Bó &ð	0ñ Ð$Ó%Ø‡‚ˆB�J‰J˜ $Ñ'ó/ó (ó &ð/ñ Ð$Ó%Ø‡‚ˆB�J‰JÐ1°<Ð@ÓAó'ó Bó &ð'òò!ò ò!órZ   