
    c                         d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlZd dlZd dlZ G d de	          Z G d	 d
e	          Z G d de          Z G d de          Z G d de          ZdS )    )absolute_importprint_function)
HTTPServer)bind_sockets)ApplicationRequestHandler)genNc                   >     e Zd Z fdZej        d             Z xZS )_DownloadViewc                 P     t          t          |           j        |g|R i | d S N)superr   __init__selfapplicationargskwargs	__class__s       Jlib/python3.11/site-packages/anaconda_project/internal/test/http_server.pyr   z_DownloadView.__init__   s6    +mT""+KI$III&IIIII    c              /     K   |                      d          }|                      dd           }t          |                      d                    }t          d|z             |r t          t          |                      }|                     d           |                     dt          |                     d                    d          }|}|d	k    rz|d |         }	|r|	                    |	           |t          |	          z
  }|                     |	           	 |                                 V  n# t          $ r}
|
d }
~
ww xY w|d	k    z|r!|                                | j        j        |<   |                                  d S )
Nidhash_algorithmlengthzPlanning to send %d bytes   zContent-Length@  abcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopzutf-8r   )get_argumentintprintgetattrhashlib
set_status
set_headerstrencodeupdatelenwriteflush	Exception	hexdigestr   hashesfinish)r   r   r   download_idr   r   hasherdata	remainingto_writees              r   getz_DownloadView.get   s     ''--**+;TBBT&&x0011)F2333 	85WWn5577F(#f++666'//88	!m 		JYJ'H (h'''!CMM1IJJx   jjll""""    !m 		  	F393C3C3E3ED#K0s   D6 6
E EE)__name__
__module____qualname__r   r	   	coroutiner5   __classcell__r   s   @r   r   r      sZ        J J J J J 	]  ]    r   r   c                   $     e Zd Z fdZd Z xZS )
_ErrorViewc                 P     t          t          |           j        |g|R i | d S r   )r   r=   r   r   s       r   r   z_ErrorView.__init__8   s6    (j$(FtFFFvFFFFFr   c                 X    |                      d           |                                  d S )Ni  )r#   r.   )r   r   r   s      r   r5   z_ErrorView.get<   s%    r   )r6   r7   r8   r   r5   r:   r;   s   @r   r=   r=   7   sL        G G G G G      r   r=   c                        e Zd Z fdZ xZS )_TestServerApplicationc                     t                      | _        dt          fdt          fg} t	          t
          |           j        |fi | d S )Nz	/downloadz/error)dictr-   r   r=   r   rA   r   )r   r   patternsr   s      r   r   z_TestServerApplication.__init__B   sN    ff!=1Iz3JK4$d++4XHHHHHHHr   )r6   r7   r8   r   r:   r;   s   @r   rA   rA   A   sA        I I I I I I I I Ir   rA   c                       e Zd Zd Zed             Zed             Zd Zej	        d             Z
d Zed             Zd Zd	 Zd
S )_TestServerc                 F   t                      | _        t          | j                  | _        t	          d d          }d | _        |D ]6}|j        t          j        k    r|	                                d         | _        7| j        J | j        
                    |           d S )Nz	127.0.0.1)portaddress   )rA   _applicationr   _httpr   _portfamilysocketAF_INETgetsocknameadd_sockets)r   socketsss      r   r   z_TestServer.__init__I   s    244 122
 D+>>>
 	0 	0Ax6>) 0]]__Q/
z%%%
w'''''r   c                     | j         S r   )rM   r   s    r   rH   z_TestServer.portY   s
    zr   c                     d| j         z  S )Nzhttp://localhost:%d/)rH   rV   s    r   urlz_TestServer.url]   s    %	11r   c                 :    | j                             d           d S )NrJ   )rL   startrV   s    r   rZ   z_TestServer.starta   s    
r   c                 8    | j                                          d S r   )rL   close_all_connectionsrV   s    r   	close_allz_TestServer.close_alld   s    
((*****r   c              #   h   K   | j                                          |                                 V  d S r   )rL   r\   r]   rV   s    r   unlistenz_TestServer.unlistenh   s6      
((***nnr   c                     | j         dz   S )Nerror)rX   rV   s    r   	error_urlz_TestServer.error_urll   s    x'!!r   c                     | j         dz   t          t          j                              z   dz   t          |          z   }|r|d|z   z  }|S )Nzdownload?id=z&length=z&hash_algorithm=)rX   r%   uuiduuid4)r   download_lengthr   rX   s       r   new_download_urlz_TestServer.new_download_urlp   sQ    x.(3tz||+<+<<zICP_L`L`` 	7%66C
r   c                     |                     d          }||dz   d          d d         }|| j        j        vrt          d|z            | j        j        |         S )Nzid=   $   z3It looks like the download from %s did not complete)indexrK   r-   RuntimeError)r   download_urlir/   s       r   'server_computed_hash_for_downloaded_urlz3_TestServer.server_computed_hash_for_downloaded_urlv   sj    u%%"AE88,SbS1d/66 	eTWccddd '44r   N)r6   r7   r8   r   propertyrH   rX   rZ   r	   r9   r]   r_   rb   rg   ro    r   r   rF   rF   H   s        ( ( (    X 2 2 X2   	]+ + ]+   " " X"  5 5 5 5 5r   rF   c                        e Zd Zd Zd Zd ZdS )HttpServerTestContextc                 ,    t                      | _        d S r   )rF   _serverrV   s    r   r   zHttpServerTestContext.__init__   s    "}}r   c                 8    | j                                          d S r   )ru   r_   )r   typevalue	tracebacks       r   __exit__zHttpServerTestContext.__exit__   s    r   c                 B    | j                                          | j         S r   )ru   rZ   rV   s    r   	__enter__zHttpServerTestContext.__enter__   s    |r   N)r6   r7   r8   r   rz   r|   rq   r   r   rs   rs   ~   sA        % % %         r   rs   )
__future__r   r   tornado.httpserverr   tornado.netutilr   tornado.webr   r   tornador	   rd   r"   rO   r   r=   rA   objectrF   rs   rq   r   r   <module>r      sn   7 6 6 6 6 6 6 6 ) ) ) ) ) ) ( ( ( ( ( ( 3 3 3 3 3 3 3 3         ! ! ! ! !N ! ! !H       I I I I I[ I I I35 35 35 35 35& 35 35 35l	 	 	 	 	F 	 	 	 	 	r   