ó
    ×›‘h€G  ã                  ó¶   • S SK Jr  S SKrS SKrS SK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\5      r " S S	\
R                  5      r " S
 S\5      rg)é    )ÚannotationsN)ÚskipIf)ÚlogfileÚruntime)ÚTestCasec                  ó  • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jr\" \R*                  R-                  5       S5      SS j5       rSS jrSS jrSS jrSS jrSrg)ÚLogFileTestsé   z
Test the rotating log file.
c                óî   • U R                  5       U l        [        R                  " U R                  5        SU l        [        R
                  R                  U R                  U R                  5      U l        g )Nztest.log©ÚmktempÚdirÚosÚmakedirsÚnameÚpathÚjoin©Úselfs    Ú]C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/test/test_logfile.pyÚsetUpÚLogFileTests.setUp   sD   € Ø—;‘;“=ˆŒÜ
�Š�D—H‘HÔØˆŒ	Ü—G‘G—L‘L §¡¨4¯9©9Ó5ˆ�	ó    c                óæ   • [         R                  " U R                  S5        [         R                  R	                  U R                  5      (       a"  [         R                  " U R                  S5        gg)z†
Restore back write rights on created paths: if tests modified the
rights, that will allow the paths to be removed easily afterwards.
éÿ  N)r   Úchmodr   r   Úexistsr   s    r   ÚtearDownÚLogFileTests.tearDown   sD   € ô
 	�Š�—‘˜5Ô!Ü�7‰7�>‰>˜$Ÿ)™)×$Ñ$Ü�HŠH�T—Y‘Y Õ&ð %r   c                óÐ   • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        U R                  [        UR                  5        g)zN
L{BaseLogFile.shouldRotate} is abstract and must be implemented by
subclass.
N)	r   ÚBaseLogFiler   r   Ú
addCleanupÚcloseÚassertRaisesÚNotImplementedErrorÚshouldRotate©r   Úlogs     r   Útest_abstractShouldRotateÚ&LogFileTests.test_abstractShouldRotate$   sE   € ô
 ×!Ò! $§)¡)¨T¯X©XÓ6ˆØ�‰˜Ÿ	™	Ô"Ø×ÑÔ-¨s×/?Ñ/?Õ@r   c                óÚ  • [         R                  " [        R                  " U R                  U R
                  5      5       nUR                  S5        UR                  S5        UR                  5         UR                  S5        SSS5        [        U R                  5       nU R                  UR                  5       S5        SSS5        g! , (       d  f       NM= f! , (       d  f       g= f)zV
Log files can be written to, flushed and closed. Closing a log file
also flushes it.
Ú123Ú456Ú7890NÚ
1234567890)Ú
contextlibÚclosingr   ÚLogFiler   r   ÚwriteÚflushÚopenr   ÚassertEqualÚread©r   r(   Úfs      r   Útest_writingÚLogFileTests.test_writing-   s˜   € ô
 ×Ò¤§¢°·	±	¸4¿8¹8Ó DÔEÈØ�I‰I�eÔØ�I‰I�eÔØ�I‰IŒKØ�I‰I�fÔ÷	 Fô �$—)‘)Œ_ Ø×Ñ˜QŸV™V›X |Ô4÷ ˆ_÷ FÕEú÷ �_ús   Á ACÂ!!CÃ
CÃ
C*c                ór  • [         R                  " [        R                  " U R                  U R
                  SS95       nUR                  S5        UR                  S5        UR                  S5        U R                  [        R                  R                  U R                   S35      5        U R                  [        R                  R                  U R                   S35      5        UR                  S5        U R                  [        R                  R                  U R                   S35      5        U R                  [        R                  R                  U R                   S35      5        U R                  [        R                  R                  U R                   S	35      5        UR                  S
5        U R                  [        R                  R                  U R                   S	35      5        UR                  5         U R                  [        R                  R                  U R                   S	35      5        U R                  [        R                  R                  U R                   S35      5        SSS5        U R                  WR                  5       / SQ5        g! , (       d  f       N1= f)zY
Rotating log files autorotate after a period of time, and can also be
manually rotated.
é
   )ÚrotateLengthr,   Ú4567890Ú11111111111ú.1ú.2Ú ú.3Ú3ú.4N)é   é   é   )r0   r1   r   r2   r   r   r3   Ú
assertTruer   r   r   ÚassertFalseÚrotater6   ÚlistLogsr'   s     r   Útest_rotationÚLogFileTests.test_rotation;   sÂ  € ô ×ÒÜ�OŠO˜DŸI™I t§x¡x¸bÑAô
àà�I‰I�eÔØ�I‰I�iÔ Ø�I‰I�hÔØ�O‰OœBŸG™GŸN™N¨d¯i©i¨[¸Ð+;Ó<Ô=Ø×ÑœRŸW™WŸ^™^¨t¯y©y¨k¸Ð,<Ó=Ô>Ø�I‰I�bŒMØ�O‰OœBŸG™GŸN™N¨d¯i©i¨[¸Ð+;Ó<Ô=Ø�O‰OœBŸG™GŸN™N¨d¯i©i¨[¸Ð+;Ó<Ô=Ø×ÑœRŸW™WŸ^™^¨t¯y©y¨k¸Ð,<Ó=Ô>Ø�I‰I�cŒNØ×ÑœRŸW™WŸ^™^¨t¯y©y¨k¸Ð,<Ó=Ô>ð �J‰JŒLØ�O‰OœBŸG™GŸN™N¨d¯i©i¨[¸Ð+;Ó<Ô=Ø×ÑœRŸW™WŸ^™^¨t¯y©y¨k¸Ð,<Ó=Ô>÷'
ð* 	×Ñ˜Ÿ™›ªÕ3÷+
õ 
ús   ¿H>J(Ê(
J6c                ó|  • [         R                  " [        R                  " U R                  U R
                  5      5       nUR                  S5        SSS5        [        R                  " U R                  U R
                  5      nU R                  UR                  5        U R                  UR                  S5        U R                  UR                  R                  5       UR                  5        UR                  S5        UR                  S5        SnU R                  UR                  [        U5      5        U R                  UR                  R                  5       UR                  5        UR                  nUR                  SS5        U R                  UR                  5       U5        g! , (       d  f       GNa= f)zî
Log files can be written to, closed. Their size is the number of
bytes written to them. Everything that was written to them can
be read, even if the writing happened on separate occasions,
and even if the log file was closed in between.
Ú
0123456789Nr=   Úabcs   defÿs   0123456789abcdefÿr   )r0   r1   r   r2   r   r   r3   r"   r#   r6   ÚsizeÚ_fileÚtellÚlenÚseekr7   )r   r(   ÚexpectResultr9   s       r   Útest_appendÚLogFileTests.test_appendX   s!  € ô ×Ò¤§¢°·	±	¸4¿8¹8Ó DÔEÈØ�I‰I�lÔ#÷ Fô �oŠo˜dŸi™i¨¯©Ó2ˆØ�‰˜Ÿ	™	Ô"Ø×Ñ˜Ÿ™ 2Ô&Ø×Ñ˜Ÿ™Ÿ™Ó)¨3¯8©8Ô4Ø�	‰	�%ÔØ�	‰	�*ÔØ.ˆØ×Ñ˜Ÿ™¤3 |Ó#4Ô5Ø×Ñ˜Ÿ™Ÿ™Ó)¨3¯8©8Ô4Ø�I‰IˆØ	�‰ˆq�!ŒØ×Ñ˜Ÿ™› <Õ0÷ FÖEús   Á F,Æ,
F;c                óÒ  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        UR                  S5        UR                  S5        UR                  5         UR                  S5        UR                  5         U R                  UR                  5       S/5        [        R                  " UR                  5       5       nUR                  R                  S5        U R                  UR!                  5       S/5        U R                  UR!                  5       / 5        SSS5        [        R                  " UR#                  S5      5       nU R                  UR!                  5       SS/5        U R                  UR!                  5       / 5        SSS5        U R%                  [&        UR"                  S5        U R%                  [(        UR"                  S5        UR                  5         U R                  UR                  5       SS/5        [        R                  " UR#                  S5      5       nUR                  R                  S5        U R                  UR!                  5       S/5        U R                  UR!                  5       / 5        SSS5        [        R                  " UR#                  S5      5       nU R                  UR!                  5       SS/5        U R                  UR!                  5       / 5        SSS5        g! , (       d  f       GNî= f! , (       d  f       GN�= f! , (       d  f       N£= f! , (       d  f       g= f)	a#  
Various tests for log readers.

First of all, log readers can get logs by number and read what
was written to those log files. Getting nonexistent log files
raises C{ValueError}. Using anything other than an integer
index raises C{TypeError}. As logs get older, their log
numbers increase.
zabc
zdef
zghi
rG   r   NrH   Ú1)r   r2   r   r   r"   r#   r3   rL   r4   r6   rM   r0   r1   ÚgetCurrentLogrT   rW   Ú	readLinesÚgetLogr$   Ú
ValueErrorÚ	TypeError)r   r(   Úreaders      r   Útest_logReaderÚLogFileTests.test_logReadero   si  € ô �oŠo˜dŸi™i¨¯©Ó2ˆØ�‰˜Ÿ	™	Ô"Ø�	‰	�'ÔØ�	‰	�'ÔØ�
‰
ŒØ�	‰	�'ÔØ�	‰	Œð 	×Ñ˜Ÿ™›¨!¨Ô-Ü×Ò × 1Ñ 1Ó 3Ô4¸Ø�L‰L×Ñ˜aÔ Ø×Ñ˜V×-Ñ-Ó/°'°Ô;Ø×Ñ˜V×-Ñ-Ó/°Ô4÷ 5ô ×Ò §
¡
¨1£Ô.°&Ø×Ñ˜V×-Ñ-Ó/°'¸7Ð1CÔDØ×Ñ˜V×-Ñ-Ó/°Ô4÷ /ð
 	×Ñœ* c§j¡j°!Ô4Ø×Ñœ) S§Z¡Z°Ô5ð 	�
‰
ŒØ×Ñ˜Ÿ™›¨!¨Q¨Ô0Ü×Ò §
¡
¨1£Ô.°&Ø�L‰L×Ñ˜aÔ Ø×Ñ˜V×-Ñ-Ó/°'°Ô;Ø×Ñ˜V×-Ñ-Ó/°Ô4÷ /ô ×Ò §
¡
¨1£Ô.°&Ø×Ñ˜V×-Ñ-Ó/°'¸7Ð1CÔDØ×Ñ˜V×-Ñ-Ó/°Ô4÷ /Ð.÷' 5Ö4ú÷ /Ö.ú÷ /Õ.ú÷ /Õ.ús4   ÃAL#Å)AL5ÉAMËAMÌ#
L2Ì5
MÍ
MÍ
M&c                ó  • [        U R                  S5          SSS5        [        R                  " U R                  5      nU R	                  UR
                  5        U R                  / UR                  S5      5        g! , (       d  f       Nk= f)z2
L{LogReader.readLines} supports reading no line.
ÚwNr   )r5   r   r   Ú	LogReaderr"   r#   r6   r^   )r   rb   s     r   Útest_LogReaderReadsZeroLineÚ(LogFileTests.test_LogReaderReadsZeroLineš   sd   € ô
 �$—)‘)˜SÕ!Ø÷ "ô ×"Ò" 4§9¡9Ó-ˆØ�‰˜Ÿ™Ô%Ø×Ñ˜˜V×-Ñ-¨aÓ0Õ1÷ "Õ!ús   —A>Á>
Bc                ó@  • [        U R                  S5      R                  5         [        R                  " U R                  S5        [        R
                  " U R                  5      [
        R                     n[        R                  " U R                  U R                  5      nU R                  UR                  5        UR                  S5        UR                  5         U R                  U[        R
                  " U R                  5      [
        R                     5        g)z8
Check rotated files have same permissions as original.
rf   éÇ  rR   N)r5   r   r#   r   r   ÚstatÚST_MODEr   r2   r   r   r"   r3   rL   r6   )r   Úmoder(   s      r   Útest_modePreservationÚ"LogFileTests.test_modePreservation¦   s«   € ô 	ˆT�Y‰Y˜Ó×"Ñ"Ô$Ü
�Š�—‘˜EÔ"Ü�wŠw�t—y‘yÓ!¤$§,¡,Ñ/ˆÜ�oŠo˜dŸi™i¨¯©Ó2ˆØ�‰˜Ÿ	™	Ô"Ø�	‰	�%ÔØ�
‰
ŒØ×Ñ˜œrŸwšw t§y¡yÓ1´$·,±,Ñ?Õ@r   c                ó¾  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        UR                  S5        [        R                  " U R                  S5         [        [        R                  R                  U R                  S5      S5      nUR                  5         g! [         a     Of = fUR                  5         UR                  S5        UR                  5         UR                  nU R!                  UR#                  5       S5        UR%                  SS5        U R!                  UR'                  5       S	5        g)
z8
Check it keeps working when permission on dir changes.
rR   ém  Úxxxrf   NÚdefé   r   s   abcdef)r   r2   r   r   r"   r#   r3   r   r   r5   r   r   ÚOSErrorrL   r4   rT   r6   rU   rW   r7   r8   s      r   Útest_noPermissionÚLogFileTests.test_noPermission³   sô   € ô �oŠo˜dŸi™i¨¯©Ó2ˆØ�‰˜Ÿ	™	Ô"Ø�	‰	�%Ôô 	�Š�—‘˜5Ô!ð	Ü”R—W‘W—\‘\ $§(¡(¨EÓ2°CÓ8ˆAð �G‰GŒIØøô	 ó 	Ùð	úð 	�
‰
Œà�	‰	�%ÔØ�	‰	Œà�I‰IˆØ×Ñ˜Ÿ™› 1Ô%Ø	�‰ˆq�!ŒØ×Ñ˜Ÿ™› 9Õ-s   Á:4B? Â?
CÃCc                óZ  • [         R                  " U R                  U R                  SSS9nU R	                  UR
                  5        UR                  S5        UR                  S5        U R                  [        R                  R                  U R                   S35      5        UR                  S5        U R                  [        R                  R                  U R                   S35      5        UR                  S	5        U R                  [        R                  R                  U R                   S
35      5        [        U R                   S
35       nU R                  UR                  5       S5        SSS5        UR                  S5        [        U R                   S
35       nU R                  UR                  5       S5        SSS5        U R                  [        R                  R                  U R                   S35      5        g! , (       d  f       Nœ= f! , (       d  f       N[= f)zT
Test it respect the limit on the number of files when maxRotatedFiles
is not None.
r=   rI   )r>   ÚmaxRotatedFilesr@   Ú22222222222rA   Ú33333333333rB   Ú44444444444rD   NÚ55555555555rF   )r   r2   r   r   r"   r#   r3   rJ   r   r   r   r5   r6   r7   rK   ©r   r(   Úfps      r   Útest_maxNumberOfLogÚ LogFileTests.test_maxNumberOfLogÒ   ss  € ô
 �oŠo˜dŸi™i¨¯©ÀÐTUÑVˆØ�‰˜Ÿ	™	Ô"Ø�	‰	�(ÔØ�	‰	�(ÔØ�‰œŸ™Ÿ™¨$¯)©)¨°BÐ'7Ó8Ô9à�	‰	�(ÔØ�‰œŸ™Ÿ™¨$¯)©)¨°BÐ'7Ó8Ô9à�	‰	�(ÔØ�‰œŸ™Ÿ™¨$¯)©)¨°BÐ'7Ó8Ô9Ü�T—Y‘Y�K˜rÐ"Ô# rØ×Ñ˜RŸW™W›Y¨Ô1÷ $ð 	�	‰	�(ÔÜ�T—Y‘Y�K˜rÐ"Ô# rØ×Ñ˜RŸW™W›Y¨Ô1÷ $à×ÑœŸ™Ÿ™¨4¯9©9¨+°RÐ(8Ó9Õ:÷ $Õ#ú÷ $Õ#ús   Å!HÆ&!HÈ
HÈ
H*c                ó‚  • [         R                  " U R                  U R                  SSS9nU R	                  UR
                  5        [         R                  R                  U R                  SSS9nU R	                  UR
                  5        U R                  UR                  UR                  5        U R                  [        R                  R                  UR                  5      UR                  5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        g)z
Test the fromFullPath method.
r=   r   ©ÚdefaultModeN)r   r2   r   r   r"   r#   ÚfromFullPathr   r6   r   Úabspathr>   r…   )r   Úlog1Úlog2s      r   Útest_fromFullPathÚLogFileTests.test_fromFullPathê   sÔ   € ô �Š˜tŸy™y¨$¯(©(°BÀEÑJˆØ�‰˜Ÿ
™
Ô#Ü�‰×+Ñ+¨D¯I©I°rÀuÐ+ÐMˆØ�‰˜Ÿ
™
Ô#Ø×Ñ˜Ÿ™ D§I¡IÔ.Ø×ÑœŸ™Ÿ™¨¯©Ó3°T·Y±YÔ?Ø×Ñ˜×*Ñ*¨D×,=Ñ,=Ô>Ø×Ñ˜×)Ñ)¨4×+;Ñ+;Õ<r   c                óf  • [        U R                  S5         [        R                  " U R                  S5        [        R
                  " [        R                  " U R                  5      [        R                     5      nSSS5        [        R                  " U R                  U R                  5      nU R                  [        R
                  " [        R                  " U R                  5      [        R                     5      W5        U R                  UR                  5        g! , (       d  f       Nª= f)z`
Test the default permission of the log file: if the file exist, it
should keep the permission.
Úwbrk   N)r5   r   r   r   rl   ÚS_IMODErm   r   r2   r   r   r6   r"   r#   )r   ÚcurrentModerˆ   s      r   Útest_defaultPermissionsÚ$LogFileTests.test_defaultPermissions÷   s¯   € ô
 �$—)‘)˜TÕ"Ü�HŠH�T—Y‘Y Ô&ÜŸ,š,¤r§w¢w¨t¯y©yÓ'9¼$¿,¹,Ñ'GÓHˆK÷ #ô �Š˜tŸy™y¨$¯(©(Ó3ˆØ×ÑœŸš¤b§g¢g¨d¯i©iÓ&8¼¿¹Ñ&FÓGÈÔUØ�‰˜Ÿ
™
Õ#÷ #Õ"ús   —A'D"Ä"
D0c                ó¨  • [         R                  " U R                  U R                  SS9nU R	                  UR
                  5        [        R                  " [        R                  " U R                  5      [        R                     5      n[        R                  R                  5       (       a  U R                  US5        gU R                  US5        g)z7
Test specifying the permissions used on the log file.
é6   r„   é$  N)r   r2   r   r   r"   r#   rl   rŽ   r   r   rm   r   ÚplatformÚ	isWindowsr6   )r   rˆ   rn   s      r   Útest_specifiedPermissionsÚ&LogFileTests.test_specifiedPermissions  s‡   € ô �Š˜tŸy™y¨$¯(©(ÀÑFˆØ�‰˜Ÿ
™
Ô#Ü�|Š|œBŸGšG D§I¡IÓ.¬t¯|©|Ñ<Ó=ˆÜ×Ñ×%Ñ%×'Ñ'à×Ñ˜T 5Õ)à×Ñ˜T 5Õ)r   zCan't test reopen on Windowsc                óØ  • [         R                  " [        R                  " U R                  U R
                  5      5       nUR                  S5        [        R                  R                  U R
                  S5      n[        R                  " U R                  U5        UR                  5         UR                  S5        SSS5        [        U R                  5       nU R                  UR                  5       S5        SSS5        [        W5       nU R                  UR                  5       S5        SSS5        g! , (       d  f       N�= f! , (       d  f       NT= f! , (       d  f       g= f)zs
L{logfile.LogFile.reopen} allows to rename the currently used file and
make L{logfile.LogFile} create a new file.
Úhello1zsave.logÚhello2N)r0   r1   r   r2   r   r   r3   r   r   r   ÚrenameÚreopenr5   r6   r7   )r   rˆ   ÚsavePathr9   s       r   Útest_reopenÚLogFileTests.test_reopen  sà   € ô ×Ò¤§¢°·	±	¸4¿8¹8Ó DÔEÈØ�J‰J�xÔ Ü—w‘w—|‘| D§H¡H¨jÓ9ˆHÜ�IŠI�d—i‘i Ô*Ø�K‰KŒMØ�J‰J�xÔ ÷ Fô �$—)‘)Œ_ Ø×Ñ˜QŸV™V›X xÔ0÷ ä�(Œ^˜qØ×Ñ˜QŸV™V›X xÔ0÷ ˆ^÷ FÕEú÷ �_úç�^ús%   Á A>D9Ã!E
Ä!EÄ9
EÅ

EÅ
E)c                ó¸   • U R                  [        [        R                  U R                  S5      nU R                  UR                  [        R                  5        g)zB
Specifying an invalid directory to L{LogFile} raises C{IOError}.
Úthis_dir_does_not_existN)r$   ÚIOErrorr   r2   r   r6   ÚerrnoÚENOENT)r   Úes     r   Útest_nonExistentDirÚ LogFileTests.test_nonExistentDir"  s@   € ð ×ÑÜ”W—_‘_ d§i¡iÐ1Jó
ˆð 	×Ñ˜Ÿ™¤%§,¡,Õ/r   c                ó4  • [         R                  R                  5       (       a  Su  pSnOSu  pSn[        R                  " XSS9nU R                  UR                  5        U R                  UR                  U5        U R                  UR                  S5        g)zl
Opening a L{LogFile} which can be read and write but whose mode can't
be changed doesn't trigger an error.
)ÚNULrC   rª   )Únullz/devz	/dev/nullrr   r„   N)
r   r•   r–   r   r2   r"   r#   r6   r   r…   )r   r   Ú	directoryÚexpectedPathr(   s        r   Útest_cantChangeFileModeÚ$LogFileTests.test_cantChangeFileMode+  sy   € ô
 ×Ñ×%Ñ%×'Ñ'Ø'‰OˆDØ ‰Là,‰OˆDØ&ˆLä�oŠo˜d¸5ÑAˆØ�‰˜Ÿ	™	Ô"à×Ñ˜Ÿ™ <Ô0Ø×Ñ˜Ÿ™¨%Õ0r   c                óâ  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        [        UR                   S3S5       nUR                  S5        SSS5        [        UR                   S3S5       nUR                  S5        SSS5        U R                  S/UR                  5       5        g! , (       d  f       Nc= f! , (       d  f       NA= f)zT
L{LogFile.listLogs} doesn't choke if it encounters a file with an
unexpected name.
rA   rf   r,   Nz	.bad-filerG   )r   r2   r   r   r"   r#   r5   r   r3   r6   rM   r   s      r   Ú test_listLogsWithBadlyNamedFilesÚ-LogFileTests.test_listLogsWithBadlyNamedFiles=  s£   € ô
 �oŠo˜dŸi™i¨¯©Ó2ˆØ�‰˜Ÿ	™	Ô"ä�S—X‘X�J˜b�/ 3Ô'¨2Ø�H‰H�UŒO÷ (ä�S—X‘X�J˜iÐ(¨#Ô.°"Ø�H‰H�UŒO÷ /ð 	×Ñ˜!˜˜cŸl™l›nÕ-÷ (Õ'úç.Õ.ús   Á CÂC Ã
CÃ 
C.c                óˆ  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        [        SS5       H8  n[        UR                   SU 3S5       nUR                  S5        SSS5        M:     U R                  SS/UR                  5       5        g! , (       d  f       Mn  = f)	zB
L{LogFile.listLogs} ignores log files which rotated suffix is 0.
r   rI   Ú.rf   r,   NrG   rH   )r   r2   r   r   r"   r#   Úranger5   r   r3   r6   rM   )r   r(   Úir€   s       r   Ú%test_listLogsIgnoresZeroSuffixedFilesÚ2LogFileTests.test_listLogsIgnoresZeroSuffixedFilesL  s�   € ô �oŠo˜dŸi™i¨¯©Ó2ˆØ�‰˜Ÿ	™	Ô"ä�q˜!–ˆAÜ˜Ÿ™˜
 ! A 3Ð'¨Ô-°Ø—‘˜”÷ .Ñ-ñ ð 	×Ñ˜!˜Q˜ §¡£Õ0÷ .Ö-ús   Á1B2Â2
C	©r   r   r   N©ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r)   r:   rN   rY   rc   rh   ro   rw   r�   rŠ   r�   r—   r   r   r•   r–   rŸ   r§   r®   r±   r·   Ú__static_attributes__© r   r   r	   r	      s�   † ñô6ô'ôAô5ô4ô:1ô.)5ôV
2ôAô.ô>;ô0=ô
$ô*ñ ˆG×Ñ×&Ñ&Ó(Ð*HÓIó1ó Jð1ô"0ô1ô$.÷1r   r	   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚRiggedDailyLogFileiZ  ç        c                ól   • [         R                  R                  U 5        U R                  5       U l        g )N)r   ÚDailyLogFileÚ	_openFileÚtoDateÚlastDater   s    r   rÉ   ÚRiggedDailyLogFile._openFile]  s#   € Ü×Ñ×&Ñ& tÔ,àŸ™›ˆ�r   c                ó‚   • U(       a  [         R                  " U6 S S $ [         R                  " U R                  5      S S $ )NrI   )ÚtimeÚgmtimeÚ_clock)r   Úargss     r   rÊ   ÚRiggedDailyLogFile.toDateb  s5   € ÞÜ—;’; Ð% b qÐ)Ð)Ü�{Š{˜4Ÿ;™;Ó'¨¨Ð+Ð+r   )rË   Nrº   )rÑ   Úfloatr»   ztuple[int, int, int])r½   r¾   r¿   rÀ   rÐ   rÉ   rÊ   rÂ   rÃ   r   r   rÅ   rÅ   Z  s   † Ø€Fô&÷
,r   rÅ   c                  óÄ   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	\
" \R                  R                  5       S5      SS	 j5       rSS
 jrSS jrSS jrSS jrSrg)ÚDailyLogFileTestsih  z
Test rotating log file.
c                óî   • U R                  5       U l        [        R                  " U R                  5        SU l        [        R
                  R                  U R                  U R                  5      U l        g )Nztestdaily.logr   r   s    r   r   ÚDailyLogFileTests.setUpm  sD   € Ø—;‘;“=ˆŒÜ
�Š�D—H‘HÔØ#ˆŒ	Ü—G‘G—L‘L §¡¨4¯9©9Ó5ˆ�	r   c                óÄ  • [         R                  " [        U R                  U R                  5      5       nUR                  S5        UR                  S5        UR                  5         UR                  S5        SSS5        [        U R                  5       nU R                  UR                  5       S5        SSS5        g! , (       d  f       NM= f! , (       d  f       g= f)z?
A daily log file can be written to like an ordinary log file.
r,   r-   r.   Nr/   )r0   r1   rÅ   r   r   r3   r4   r5   r   r6   r7   r8   s      r   r:   ÚDailyLogFileTests.test_writings  s•   € ô ×ÒÔ 2°4·9±9¸d¿h¹hÓ GÔHÈCØ�I‰I�eÔØ�I‰I�eÔØ�I‰IŒKØ�I‰I�fÔ÷	 Iô �$—)‘)Œ_ Ø×Ñ˜QŸV™V›X |Ô4÷ ˆ_÷ IÕHú÷ �_ús   µAC Â!CÃ 
CÃ
Cc                ó8  • [        U R                  U R                  5      nU R                  UR                  5        [        S5       Vs/ s H&  o R                  S-   UR                  US-  5      -   PM(     nnSUl        UR                  S5        SUl        UR                  S5        SUl        UR                  S5        U R                  [        R                  R                  US	   5      5        U R                  [        R                  R                  US
   5      5        SUl        UR                  S5        U R                  [        R                  R                  US	   5      5        U R                  [        R                  R                  US
   5      5        U R                  [        R                  R                  US   5      5        SUl        UR                  S5        U R                  [        R                  R                  US   5      5        gs  snf )z
Daily log files rotate daily.
rI   r´   é€Q rÆ   r,   iÀ¨  r?   r@   r   rG   i £ rC   rH   iô rE   N)rÅ   r   r   r"   r#   rµ   r   ÚsuffixrÐ   r3   rJ   r   r   rK   )r   r(   ÚdayÚdayss       r   rN   ÚDailyLogFileTests.test_rotation€  sq  € ô ! §¡¨D¯H©HÓ5ˆØ�‰˜Ÿ	™	Ô"ÜGLÈQÄxÓPÂxÀ—‘˜S‘ 3§:¡:¨c°E©kÓ#:Ô:ÁxˆÐPð ˆŒ
Ø�	‰	�%ÔØˆŒ
Ø�	‰	�)ÔØˆŒ
Ø�	‰	�(ÔØ�‰œŸ™Ÿ™ t¨A¡wÓ/Ô0Ø×ÑœŸ™Ÿ™¨¨Q©Ó0Ô1ØˆŒ
Ø�	‰	�"ŒØ�‰œŸ™Ÿ™ t¨A¡wÓ/Ô0Ø�‰œŸ™Ÿ™ t¨A¡wÓ/Ô0Ø×ÑœŸ™Ÿ™¨¨Q©Ó0Ô1ØˆŒ
Ø�	‰	�#ŒØ×ÑœŸ™Ÿ™¨¨Q©Ó0Õ1ùò% Qs   Á	-Hc                ó’  • / SQn[        U R                  U R                  5      nU R                  UR                  5        U H  nUR                  U5        M     UR                  5         UR                  S5      nU R                  UR                  5        U R                  XR                  5       5        U R                  [        UR                  S5        SUl        UR	                  5         UR                  5         UR                  S5      nU R                  UR                  5        U R                  XR                  5       5        g)z8
Test retrieving log files with L{DailyLogFile.getLog}.
)z1
z2
z3
rÆ   rÛ   i�Q r   N)rÅ   r   r   r"   r#   r3   r4   r_   r6   r^   r$   r`   rÐ   rL   )r   Údatar(   ÚdÚrs        r   Útest_getLogÚDailyLogFileTests.test_getLogš  sà   € ò %ˆÜ  §¡¨D¯H©HÓ5ˆØ�‰˜Ÿ	™	Ô"ÛˆAØ�I‰I�aŽLñ à�	‰	Œð �J‰J�s‹OˆØ�‰˜Ÿ™Ô à×Ñ˜Ÿ{™{›}Ô-ð 	×Ñœ* c§j¡j°%Ô8àˆŒ
Ø	�‰Œ	Ø�
‰
ŒØ�J‰J�q‹MˆØ�‰˜Ÿ™Ô Ø×Ñ˜Ÿ{™{›}Õ-r   c                óª  • [        U R                  U R                  5      nU R                  UR                  5        UR
                   SUR                  UR                  5       3n[        US5       nUR                  S5        SSS5        UR                  nUR                  5         U R                  XAR                  5        g! , (       d  f       NF= f)z]
L{DailyLogFile.rotate} doesn't do anything if they new log file already
exists on the disk.
r´   rf   r,   N)rÅ   r   r   r"   r#   r   rÜ   rË   r5   r3   rT   rL   r6   )r   r(   ÚnewFilePathr€   ÚpreviousFiles        r   Útest_rotateAlreadyExistsÚ*DailyLogFileTests.test_rotateAlreadyExistsµ  s•   € ô
 ! §¡¨D¯H©HÓ5ˆØ�‰˜Ÿ	™	Ô"ð Ÿ™˜
 ! C§J¡J¨s¯|©|Ó$<Ð#=Ð>ˆÜ�+˜sÔ# rØ�H‰H�UŒO÷ $à—y‘yˆØ�
‰
ŒØ×Ñ˜§y¡yÕ1÷	 $Õ#ús   Á2CÃ
CzVMaking read-only directories on Windows is too complex for this test to reasonably do.c                ó–  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        [        R                  " UR                  S5        U R	                  [        R                  UR                  S5        UR                  nUR                  5         U R                  X!R                  5        g)zk
L{DailyLogFile.rotate} doesn't do anything if the directory containing
the log files can't be written to.
r”   ií  N)r   rÈ   r   r   r"   r#   r   r   r¬   rT   rL   r6   ©r   r(   rè   s      r   Ú#test_rotatePermissionDirectoryNotOkÚ5DailyLogFileTests.test_rotatePermissionDirectoryNotOkÆ  s|   € ô ×"Ò" 4§9¡9¨d¯h©hÓ7ˆØ�‰˜Ÿ	™	Ô"ä
�Š�—‘ Ô&à�‰œŸ™ #§-¡-°Ô7Ø—y‘yˆØ�
‰
ŒØ×Ñ˜§y¡yÕ1r   c                ó@  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        [        R                  " UR                  S5        UR                  nUR                  5         U R                  X!R                  5        g)zQ
L{DailyLogFile.rotate} doesn't do anything if the log file can't be
written to.
r”   N)r   rÈ   r   r   r"   r#   r   r   r   rT   rL   r6   rì   s      r   Útest_rotatePermissionFileNotOkÚ0DailyLogFileTests.test_rotatePermissionFileNotOkÚ  sd   € ô
 ×"Ò" 4§9¡9¨d¯h©hÓ7ˆØ�‰˜Ÿ	™	Ô"ä
�Š�—‘˜5Ô!Ø—y‘yˆØ�
‰
ŒØ×Ñ˜§y¡yÕ1r   c                óþ   • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        [        R                  " S5      nU R                  SUR                  U5      5        g)zf
Test that L{DailyLogFile.toDate} converts its timestamp argument to a
time tuple (year, month, day).
)	éÐ  rG   rG   r   r   r   r   r   r   )ró   rG   rG   N)
r   rÈ   r   r   r"   r#   rÎ   Úmktimer6   rÊ   )r   r(   Ú	timestamps      r   Útest_toDateÚDailyLogFileTests.test_toDateç  sV   € ô
 ×"Ò" 4§9¡9¨d¯h©hÓ7ˆØ�‰˜Ÿ	™	Ô"ä—K’KÐ >Ó?ˆ	Ø×Ñ˜ s§z¡z°)Ó'<Õ=r   c                ó  ^ • SU 4S jjn[         R                  " T R                  T R                  5      nT R	                  UR
                  5        T R                  [        SU5        UR                  5       nT R                  / SQU5        g)a‹  
Test that L{DailyLogFile.toDate} returns today's date by default.

By mocking L{time.localtime}, we ensure that L{DailyLogFile.toDate}
returns the first 3 values of L{time.localtime} which is the current
date.

Note that we don't compare the *real* result of L{DailyLogFile.toDate}
to the *real* current date, as there's a slight possibility that the
date changes between the 2 function calls.
c                 óR   >• TR                  SU 5        [        [        SS5      5      $ )NrÃ   r   é	   )r6   Úlistrµ   )rÑ   r   s    €r   Úmock_localtimeÚADailyLogFileTests.test_toDateDefaultToday.<locals>.mock_localtimeÿ  s$   ø€ Ø×Ñ˜R Ô&Üœ˜a ›Ó$Ð$r   Ú	localtime)r   rG   rH   N)rÑ   Úobjectr»   z	list[int])
r   rÈ   r   r   r"   r#   ÚpatchrÎ   rÊ   r6   )r   rü   r(   ÚlogDates   `   r   Útest_toDateDefaultTodayÚ)DailyLogFileTests.test_toDateDefaultTodayò  s_   ø€ ÷	%ô ×"Ò" 4§9¡9¨d¯h©hÓ7ˆØ�‰˜Ÿ	™	Ô"à�
‰
”4˜ nÔ5Ø—*‘*“,ˆØ×Ñš GÕ,r   c                ó
  • [         R                  " U R                  U R                  5      nU R	                  UR
                  5        Sn[        R                  " US-   5      nUR                  U5      nU R                  X$5        g)zK
Test that L{DailyLogFile.toDate} uses its arguments to create a new
date.
)iÞ  r=   é   )r   r   r   r   r   r   N)
r   rÈ   r   r   r"   r#   rÎ   rô   rÊ   r6   )r   r(   ÚdateÚsecondsr  s        r   Ú#test_toDateUsesArgumentsToMakeADateÚ5DailyLogFileTests.test_toDateUsesArgumentsToMakeADate
  sa   € ô
 ×"Ò" 4§9¡9¨d¯h©hÓ7ˆØ�‰˜Ÿ	™	Ô"àˆÜ—+’+˜d X™oÓ.ˆà—*‘*˜WÓ%ˆØ×Ñ˜Õ'r   r¹   Nrº   )r½   r¾   r¿   rÀ   rÁ   r   r:   rN   rä   ré   r   r   r•   r–   rí   rð   rö   r  r  rÂ   rÃ   r   r   rÕ   rÕ   h  sd   † ñô6ô5ô2ô4.ô62ñ" Ø×Ñ×"Ñ"Ó$ð	!óó
2óð
2ô2ô	>ô-÷0(r   rÕ   )Ú
__future__r   r0   r¤   r   rl   rÎ   Úunittestr   Útwisted.pythonr   r   Útwisted.trial.unittestr   r	   rÈ   rÅ   rÕ   rÃ   r   r   Ú<module>r     sQ   ðõ #ã Û Û 	Û Û Ý ç +Ý +ôG1�8ô G1ôT
,˜×-Ñ-ô ,ôn(˜õ n(r   