a
    }a                     @   s   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 de	ZG d	d
 d
e	ZG dd deZG dd deZG dd deZdS )    )absolute_importprint_function)
HTTPServer)bind_sockets)ApplicationRequestHandler)genNc                       s*   e Zd Z fddZejdd Z  ZS )_DownloadViewc                    s"   t t| j|g|R i | d S N)superr	   __init__selfapplicationargskwargs	__class__ Ilib/python3.9/site-packages/anaconda_project/internal/test/http_server.pyr      s    z_DownloadView.__init__c              
   o   s   |  d}|  dd }t|  d}td|  |r@tt| }| d | dt| dd}|}|d	kr|d | }	|r|	|	 |t
|	 }| |	 z|  V  W qh ty }
 z|
W Y d }
~
qhd }
~
0 0 qh|r| | jj|< |   d S )
Nidhash_algorithmlengthzPlanning to send %d bytes   zContent-LengthA@  abcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopabcdefghijklmnopzutf-8r   )Zget_argumentintprintgetattrhashlib
set_statusZ
set_headerstrencodeupdatelenwriteflush	ExceptionZ	hexdigestr   hashesfinish)r   r   r   download_idr   r   ZhasherdataZ	remainingZto_writeer   r   r   get   s.    




z_DownloadView.get)__name__
__module____qualname__r   r   	coroutiner+   __classcell__r   r   r   r   r	      s   r	   c                       s$   e Zd Z fddZdd Z  ZS )
_ErrorViewc                    s"   t t| j|g|R i | d S r
   )r   r1   r   r   r   r   r   r   8   s    z_ErrorView.__init__c                 O   s   |  d |   d S )Ni  )r   r'   )r   r   r   r   r   r   r+   <   s    
z_ErrorView.get)r,   r-   r.   r   r+   r0   r   r   r   r   r1   7   s   r1   c                       s   e Zd Z fddZ  ZS )_TestServerApplicationc                    s4   t  | _dtfdtfg}tt| j|fi | d S )Nz	/downloadz/error)dictr&   r	   r1   r   r2   r   )r   r   patternsr   r   r   r   B   s    z_TestServerApplication.__init__)r,   r-   r.   r   r0   r   r   r   r   r2   A   s   r2   c                   @   sf   e Zd Zdd Zedd Zedd Zdd Zej	d	d
 Z
dd Zedd Zdd Zdd ZdS )_TestServerc                 C   sh   t  | _t| j| _td dd}d | _|D ]}|jtjkr*|	 d | _q*| jd usXJ | j
| d S )Nz	127.0.0.1)portZaddress   )r2   _applicationr   _httpr   _portZfamilysocketZAF_INETZgetsocknameZadd_sockets)r   Zsocketssr   r   r   r   I   s    z_TestServer.__init__c                 C   s   | j S r
   )r:   r   r   r   r   r6   Y   s    z_TestServer.portc                 C   s
   d| j  S )Nzhttp://localhost:%d/)r6   r=   r   r   r   url]   s    z_TestServer.urlc                 C   s   | j d d S )Nr7   )r9   startr=   r   r   r   r?   a   s    z_TestServer.startc                 C   s   | j   d S r
   )r9   close_all_connectionsr=   r   r   r   	close_alld   s    z_TestServer.close_allc                 c   s   | j   |  V  d S r
   )r9   r@   rA   r=   r   r   r   unlistenh   s    
z_TestServer.unlistenc                 C   s
   | j d S )Nerror)r>   r=   r   r   r   	error_urll   s    z_TestServer.error_urlc                 C   s6   | j d tt  d t| }|r2|d| 7 }|S )Nzdownload?id=z&length=z&hash_algorithm=)r>   r   uuidZuuid4)r   Zdownload_lengthr   r>   r   r   r   new_download_urlp   s    "z_TestServer.new_download_urlc                 C   sF   | d}||d d  d d }|| jjvr:td| | jj| S )Nzid=   $   z3It looks like the download from %s did not complete)indexr8   r&   RuntimeError)r   Zdownload_urlir(   r   r   r   'server_computed_hash_for_downloaded_urlv   s
    
z3_TestServer.server_computed_hash_for_downloaded_urlN)r,   r-   r.   r   propertyr6   r>   r?   r   r/   rA   rB   rD   rF   rL   r   r   r   r   r5   H   s   



r5   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )HttpServerTestContextc                 C   s   t  | _d S r
   )r5   _serverr=   r   r   r   r      s    zHttpServerTestContext.__init__c                 C   s   | j   d S r
   )rO   rB   )r   typevalue	tracebackr   r   r   __exit__   s    zHttpServerTestContext.__exit__c                 C   s   | j   | j S r
   )rO   r?   r=   r   r   r   	__enter__   s    
zHttpServerTestContext.__enter__N)r,   r-   r.   r   rS   rT   r   r   r   r   rN   ~   s   rN   )Z
__future__r   r   Ztornado.httpserverr   Ztornado.netutilr   Ztornado.webr   r   Ztornador   rE   r   r;   r	   r1   r2   objectr5   rN   r   r   r   r   <module>   s   $
6