Ë
    #ïàj1  ã                   ób  — d Z 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Zddl	Z	ddl
ZddlZddlmZ  ej                  e«      Zej$                  j'                  ej$                  j)                  e«      «      ZddddœZ G d„ dej0                  «      Z G d	„ d
«      Z G d„ d«      Z G d„ d«      Zy)z9A library of helper functions for the Cheroot test suite.é    N)Úwebtest)z	127.0.0.1i7Õ  Úwsgi)Ú	bind_addrÚserverÚwsgi_appc                   ó¾   — e Zd ZdZdZdZej                  j                  ej                  j                  dœZed„ «       Zed„ «       Zed„ «       Zed„ «       Zd	Zdd„Zy
)ÚCherootWebCasez&Helper class for a web app test suite.Ú Úhttp)r   Únativec                 óŠ  — t         j                  «       }|j                  t        | di «      «       |j	                  dd«      }| j
                  j                  |«      }|€t        d|d   z  «      ‚ |di |¤Ž| _        | j                  j                  \  | _
        | _        | j                  j                  €
d}d| _        n(d}t        j                  j                   | _        d	| _        t$        j&                  j)                  «       d
   }t*        j-                  d|«       t*        j-                  dt.        j0                  «       t*        j-                  d| j                  j2                  |«       t*        j-                  dt5        j6                  «       «       t9        | d«      r!| j;                  «        | j=                  «        yy)z)Create and run one HTTP server per class.Úconfigr   r   NzUnknown server in config: %sr
   r   z (ssl)Úhttpsr   z/Python version used to run this test script: %szCheroot version: %szHTTP server version: %s%szPID: %sÚsetup_server© )r   ÚcopyÚupdateÚgetattrÚpopÚavailable_serversÚgetÚRuntimeErrorÚ
httpserverr   ÚHOSTÚPORTÚssl_adapterÚschemer   ÚclientÚHTTPSConnectionÚ	HTTP_CONNÚsysÚversionÚsplitÚlogÚinfoÚcherootÚ__version__ÚprotocolÚosÚgetpidÚhasattrr   Ústart)ÚclsÚconfÚs_classÚserver_factoryÚsslÚvs         úB/srv/dav/.venv/lib/python3.12/site-packages/cheroot/test/helper.pyÚsetup_classzCherootWebCase.setup_class'   sU  € ô �{‰{‹}ˆØ�‰”G˜C ¨2Ó.Ô/à—(‘(˜8 VÓ,ˆØ×.Ñ.×2Ñ2°7Ó;ˆØÐ!ÜÐ=ÀÀXÁÑNÓOÐOÙ'Ñ/¨$Ñ/ˆŒà Ÿ^™^×5Ñ5ÑˆŒ�#”(Ø�>‰>×%Ñ%Ð-ØˆCØˆC�JàˆCÜ ŸK™K×7Ñ7ˆCŒMØ ˆCŒJä�K‰K×ÑÓ Ñ"ˆÜ�‰ÐBÀAÔFÜ�‰Ð&¬×(;Ñ(;Ô<Ü�‰Ð,¨c¯n©n×.EÑ.EÀsÔKÜ�‰�œBŸI™I›KÔ(ä�3˜Ô'ð ×ÑÔØ�I‰I�Kð	 (ó    c                 ó>   — t        | d«      r| j                  «        yy)zCleanup HTTP server.r   N)r+   Ústop©r-   s    r3   Úteardown_classzCherootWebCase.teardown_classH   s   € ô �3˜Ô'Ø�H‰H�Jð (r5   c                 óú   — t        j                  | j                  j                  ¬«      j	                  «        | j                  j
                  s-t        j                  d«       | j                  j
                  sŒ,yy)zLoad and start the HTTP server.)Útargetgš™™™™™¹?N)Ú	threadingÚThreadr   Ú
safe_startr,   ÚreadyÚtimeÚsleepr8   s    r3   r,   zCherootWebCase.startN   sL   € ô 	×Ñ §¡× 9Ñ 9Ô:×@Ñ@ÔBØ—.‘.×&Ò&Ü�J‰J�sŒOð —.‘.×&Õ&r5   c                 óf   — | j                   j                  «        t        | dd«      }|r |«        yy)zTerminate HTTP server.ÚteardownN)r   r7   r   )r-   Útds     r3   r7   zCherootWebCase.stopU   s/   € ð 	�‰×ÑÔÜ�S˜* dÓ+ˆÙÙ�Dð r5   é   Nc                 óš   — |€| j                   }||kD  r||z
  }n||z
  }|t        j                  |¬«      k  st        |›d|›d|›d�«      ‚y)z2Assert ``abs(dt1 - dt2)`` is within ``Y`` seconds.N)Úsecondsz and z are not within z	 seconds.)Údate_toleranceÚdatetimeÚ	timedeltaÚAssertionError)ÚselfÚdt1Údt2rG   Údiffs        r3   ÚassertEqualDateszCherootWebCase.assertEqualDates_   sZ   € àˆ?Ø×)Ñ)ˆGà�Š9Ø˜‘9‰Dà˜‘9ˆDØ”h×(Ñ(°Ô9Ò9Ü Ú:=ºsÂGÐLóð ð :r5   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úscript_namer   r&   r   ÚServerr   Ú
HTTPServerr   Úclassmethodr4   r9   r,   r7   rH   rP   r   r5   r3   r	   r	      s�   „ Ù0à€KØ€Fð —‘×#Ñ#Ø—.‘.×+Ñ+ñÐð
 ñó ðð@ ñó ðð
 ñó ðð ñó ðð €Nôr5   r	   c                   ó   — e Zd ZdZd„ Zy)ÚRequestzHTTP request container.c                 ó   — || _         y)zInitialize HTTP request.N)Úenviron)rL   r]   s     r3   Ú__init__zRequest.__init__q   s	   € àˆ�r5   N)rR   rS   rT   rU   r^   r   r5   r3   r[   r[   n   s
   „ Ù!ór5   r[   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚResponsezHTTP response container.c                 ó2   — d| _         ddi| _        d| _        y)zInitialize HTTP response.z200 OKzContent-Typez	text/htmlN)ÚstatusÚheadersÚbody)rL   s    r3   r^   zResponse.__init__y   s   € àˆŒØ&¨Ð4ˆŒØˆ�	r5   c                 ó4  — | j                   €g S t        | j                   t        «      r| j                   j                  d«      gS t        | j                   t        «      r| j                   gS | j                   D �cg c]  }|j                  d«      ‘Œ c}S c c}w )z'Generate iterable response body object.z
iso-8859-1)rd   Ú
isinstanceÚstrÚencodeÚbytes)rL   Úxs     r3   ÚoutputzResponse.output   sr   € à�9‰9ÐØˆIÜ�d—i‘i¤Ô%Ø—I‘I×$Ñ$ \Ó2Ð3Ð3Ü�d—i‘i¤Ô'Ø—I‘I�;ÐØ04·	±	Ö:¨1�—‘˜Õ&Ò:Ð:ùÒ:s   Á:BN)rR   rS   rT   rU   r^   rk   r   r5   r3   r`   r`   v   s   „ Ù"òó;r5   r`   c                   ó   — e Zd ZdZd„ Zy)Ú
ControllerzWSGI app for tests.c                 óö  ‡— t        |«      t        «       c}Š	 | j                  |d      } ||‰«      }|�Jt        ˆfd„dD «       «      s6|‰_        	 ‰j
                  j                  dt        t        |«      «      «        |‰j                  ‰j
                  j                  «       «       ‰j!                  «       S # t        $ r t        |t        j                  «      s‚ Y Œaw xY w# t        $ r
 d‰_        Y Œww xY w)zWSGI request handler.Ú	PATH_INFOc              3   óT   •K  — | ]  }‰j                   j                  |«      –— Œ! y ­wrQ   )rb   Ú
startswith)Ú.0Ústatus_codeÚresps     €r3   ú	<genexpr>z&Controller.__call__.<locals>.<genexpr>˜   s(   øè ø€ ò .àð —‘×&Ñ& {×3ñ.ùs   ƒ%()Ú204Ú304zContent-Lengthz404 Not Found)r[   r`   ÚhandlersÚanyrd   rc   Ú
setdefaultrg   ÚlenÚ	TypeErrorrf   ÚtypesÚGeneratorTypeÚKeyErrorrb   Úitemsrk   )rL   r]   Ústart_responseÚreqÚhandlerrk   rt   s         @r3   Ú__call__zController.__call__�   sí   ø€ ä˜GÓ$¤h£jˆ	ˆˆTð	ð —m‘m G¨KÑ$8Ñ9ˆGñ ˜S $Ó'ˆFØÐ!¬#ó .à#1ô.ô +ð #�”	ðØ—L‘L×+Ñ+Ð,<¼cÄ#ÀfÃ+Ó>NÔOñ 	�t—{‘{ D§L¡L×$6Ñ$6Ó$8Ô9Ø�{‰{‹}Ðøô	 !ò Ü% f¬e×.AÑ.AÔBØñ Cðûô ò 	*Ø)ˆDŽKð	*ús#   ™C% Á.B; Â;$C"Ã!C"Ã%C8Ã7C8N)rR   rS   rT   rU   r„   r   r5   r3   rm   rm   Š   s
   „ Ùór5   rm   )rU   rI   Úhttp.clientr   Úloggingr)   r!   r<   r@   r}   Úcheroot.serverr&   Úcheroot.wsgiÚcheroot.testr   Ú	getLoggerrR   r$   ÚpathÚabspathÚdirnameÚ__file__Úthisdirr   ÚWebCaser	   r[   r`   rm   r   r5   r3   ú<module>r‘      sŸ   ðÙ ?ã Û Û Û 	Û 
Û Û Û ã Û Ý  ð €g×Ñ˜Ó!€Ø
�'‰'�/‰/˜"Ÿ'™'Ÿ/™/¨(Ó3Ó
4€ð &ØØñ
€ôO�W—_‘_ô O÷dñ ÷;ñ ;÷(ò r5   