o
    ׹iv                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z
 dZd	Zee ZG d
d deZG dd de
jZdS )    N)as_bytes)	as_string)encodestring)PY2)urlparse)asynchat_25      
c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Listenerc                 C      d S N )selfurlstatusr   r   S/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/supervisor/http_client.pyr         zListener.statusc                 C   s   t jd||f  d S )Nz%s %s
)sysstderrwrite)r   r   errorr   r   r   r      s   zListener.errorc                 C   r   r   r   )r   r   namevaluer   r   r   response_header   r   zListener.response_headerc                 C   r   r   r   r   r   r   r   r   done   r   zListener.donec                 C   s   zt |}W n ty   d| }Y nw ztj| W n ty8   tr,tj| n
dtjj }t|Y nw tj	  d S )NzUndecodable: %rz<Unable to write Unicode to stdout because it has encoding %s)
r   UnicodeDecodeErrorr   stdoutr   UnicodeEncodeErrorr   encoding
ValueErrorflush)r   r   datasdatasr   r   r   feed   s"   
zListener.feedc                 C   r   r   r   r   r   r   r   close4   r   zListener.closeN)	__name__
__module____qualname__r   r   r   r   r%   r&   r   r   r   r   r
      s    r
   c                   @   s   e Zd Z				d'ddZd(ddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& ZdS ))HTTPHandler Nc                 C   st   t j| || || _d| _d| _| t d| _| j	| _
d| _d| _d| _d| _d | _|| _|| _d | _d| _d S )NzSupervisor HTTP Client    r   F)asynchat
async_chat__init__listener
user_agentbufferset_terminatorCRLF	connectedstatus_linepart
chunk_size
chunk_readlength_readlengthr   usernamepasswordr   error_handled)r   r0   r<   r=   connmapr   r   r   r/   8   s    

zHTTPHandler.__init__c                 C   s   | j d ur	td|| | _ t| j \}}}}}}|dvr t|| _d|v r4|dd\}	}
t|
}
n|}	d}
|| _|
| _|dkrV|	}| 	t
jt
j | || jf d S |dkro|dd  }| 	t
jt
j | | d S d S )	NzAlready doing a get)httpunix:   P   rA   rB      )r   AssertionErrorr   NotImplementedErrorhostsplitintpathportcreate_socketsocketAF_INETSOCK_STREAMconnectAF_UNIX)r   	serverurlrL   schemerI   path_ignoredparamsqueryfragmenthostnamerM   ip
socketnamer   r   r   getQ   s2   


zHTTPHandler.getc                 C   s0   | j | j d| _|   | j  d| _d S )Nr   CLOSED)r0   r&   r   r5   del_channelrO   r   r   r   r   r&   m   s
   

zHTTPHandler.closec                 C   s    |  d||f  |  t d S )Nz%s: %s)pushr4   r   r   r   r   r   r   headert   s   zHTTPHandler.headerc                 C   sV   | j rd S 	 t \}}}d||f }| j| j| | j| _| 	  d| _ ~~~d S )NrD   zCannot connect, error: %s (%s)T)
r>   r5   r   exc_infor0   r   r   ignorer7   r&   )r   tvtbmsgr   r   r   handle_errorx   s   zHTTPHandler.handle_errorc                 C   s   d| _ d}d}| d|| j|f  | t | d| j | dd | dd	 | d
| j | jrNd| j| jf }t	t
t| }| dd|  | t | t d S )NrD   GETzHTTP/1.1z%s %s %sHostzAccept-EncodingchunkedAcceptz*/*z
User-agentz%s:%sAuthorizationzBasic %s)r5   ra   rL   r4   rc   rI   r1   r=   r<   r   r   r   strip)r   methodversionauthr   r   r   handle_connect   s   

zHTTPHandler.handle_connectc                 C   s   | j | j| d S r   )r0   r%   r   )r   r"   r   r   r   r%      s   zHTTPHandler.feedc                 C   s2   | j | | _ | j| jkr| | j  d| _ d S d S Nr,   )r2   r7   bodyr%   )r   bytesr   r   r   collect_incoming_data   s
   
z!HTTPHandler.collect_incoming_datac                 C   s   |    d| _d S ru   )r7   r2   r`   r   r   r   found_terminator   s   
zHTTPHandler.found_terminatorc                 C   s
   d| _ d S ru   )r2   r`   r   r   r   re      s   
zHTTPHandler.ignorec                 C   s   | j }|d d\}}}t|}|dst|| j| j| |dkr*| j| _	n| j
| _	d| }| j| j| |   |||fS )N   s   HTTP/   zCannot read, status code %s)r2   rJ   rK   
startswithr    r0   r   r   headersr7   re   r   r&   )r   linerr   r   reasonri   r   r   r   r6      s   


zHTTPHandler.status_linec                 C   s   | j }|s| jdkr| j| _d S | j| _| | j d S |dd\}}|rI|rK| }|	 }|dkr8|| _n	|dkrAt
|| _| || d S d S d S )Ns   chunked   :rD   s   transfer-encodings   content-length)r2   r   chunked_sizer7   rv   r3   r;   rJ   lowerrp   rK   r   )r   r~   r   r   r   r   r   r}      s    

zHTTPHandler.headersc                 C   s   | j | j|| d S r   )r0   r   r   rb   r   r   r   r      s   zHTTPHandler.response_headerc                 C   s   |    |   d S r   )r   r&   r`   r   r   r   rv      s   zHTTPHandler.bodyc                 C   s   | j | j d S r   )r0   r   r   r`   r   r   r   r      s   zHTTPHandler.donec                 C   sV   | j }|sd S t| d d}|dkr| j| _n	| | | j| _|  j|7  _d S )Nr      )r2   rK   rJ   trailerr7   r3   chunked_bodyr;   )r   r~   r8   r   r   r   r      s   

zHTTPHandler.chunked_sizec                 C   s&   | j }| t | j| _| | d S r   )r2   r3   r4   r   r7   r%   r   r~   r   r   r   r      s   
zHTTPHandler.chunked_bodyc                 C   s&   | j }|tkr|   |   d S d S r   )r2   r4   r   r&   r   r   r   r   r      s
   zHTTPHandler.trailer)r+   NNN)r+   )r'   r(   r)   r/   r]   r&   rc   rj   rt   r%   rx   ry   re   r6   r}   r   rv   r   r   r   r   r   r   r   r   r*   7   s.    

r*   )r   rO   supervisor.compatr   r   r   r   r   supervisor.medusar   r-   CRLFr4   objectr
   r.   r*   r   r   r   r   <module>   s   &