B
    v9a                 @   sT  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
 ddddddd	d
ddddddddddgZdZdZdZdZdZdZe ejj dd ejj D ZdZdZdZed jZed!jZed"Z d#d$d%hZ!d?d'd(Z"G d)d* d*ej#j$Z%e%fd+d,Z&G d-d dej'Z(G d.d dZ)yd dl*Z*W n e+k
rN   Y nX G d/d0 d0e)Z,e-d0 G d1d de.Z/G d2d de/Z0G d3d de/Z1G d4d de/Z2G d5d de/Z3G d6d	 d	e/Z4G d7d
 d
e/Z5G d8d de/Z6G d9d de6Z7G d:d de6Z8G d;d de6Z9G d<d de/Z:G d=d de/Z;G d>d de<e:Z=e/Z>dS )@    N)urlsplitHTTPResponseHTTPConnectionHTTPExceptionNotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead
InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReadyBadStatusLineLineTooLongRemoteDisconnectederror	responsesP   i  ZUNKNOWNZIdlezRequest-startedzRequest-sentc             C   s   i | ]}|j |qS  )phrase).0vr   r   /usr/lib/python3.7/client.py
<dictcomp>j   s    r   i   i   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]ZPATCHZPOSTZPUTdatac             C   sf   y
|  dS  tk
r` } z8t|j|j|j|jd| | |j|j |f d W d d }~X Y nX d S )Nzlatin-1z`%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)r   nameerrr   r   r   _encode   s    
r'   c               @   s   e Zd Zdd ZdS )HTTPMessagec             C   sn   |  d }t|}g }d}xL|  D ]@}|d |   |krDd}n|d d  sXd}|r&|| q&W |S )N:r      )lowerlenkeysisspaceappend)selfr%   nZlstZhitliner   r   r   getallmatchingheaders   s    
z!HTTPMessage.getallmatchingheadersN)__name__
__module____qualname__r3   r   r   r   r   r(      s   r(   c             C   s|   g }xR|  td }t|tkr(td|| t|tkrJtdt |dkrP qW d|d}t	j
j|d|S )Nr*   zheader linezgot more than %d headers)s   
   
    r8   z
iso-8859-1)_class)readline_MAXLINEr,   r   r/   _MAXHEADERSr   joindecodeemailparserZParserZparsestr)fpr9   headersr2   Zhstringr   r   r   parse_headers   s    

rC   c                   s  e Zd Zd@ddZdd Zdd Zd	d
 Zdd Z fddZ fddZ	dd Z
dd ZdAd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dBd(d)ZdCd*d+ZdD fd,d-	Zd.d/ Zd0d1 Zd2d3 ZdEd4d5Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z   Z!S )Fr   r   Nc             C   sR   | d| _|| _|| _d  | _| _t| _t| _t| _	t| _
t| _t| _t| _d S )Nrb)ZmakefilerA   
debuglevel_methodrB   msg_UNKNOWNversionstatusreasonchunked
chunk_leftlength
will_close)r0   sockrE   methodurlr   r   r   __init__   s    zHTTPResponse.__init__c             C   s  t | jtd d}t|tkr*td| jdkrBtdt| |sNt	dy|
d d\}}}W nF tk
r   y|
d d\}}d}W n tk
r   d}Y nX Y nX |d	s|   t|y$t|}|d
k s|dkrt|W n tk
r   t|Y nX |||fS )Nr*   z
iso-8859-1zstatus liner   zreply:z-Remote end closed connection without response    zHTTP/r   i  )strrA   r:   r;   r,   r   rE   printreprr   split
ValueError
startswith_close_connr   int)r0   r2   rI   rJ   rK   r   r   r   _read_status
  s2    

zHTTPResponse._read_statusc       	      C   s  | j d k	rd S xh|  \}}}|tkr(P xJ| jtd }t|tkrNtd| }|s\P | j	dkr*t
d| q*W qW | | _| _| | _|dkrd| _n|drd| _nt|t| j | _ | _| j	dkrx&| j  D ]\}}t
d|d	 | qW | j d
}|r*| dkr*d| _d | _nd| _|  | _d | _| j d}| j d
}|r| jsyt|| _W n tk
r   d | _Y nX | jdk rd | _nd | _|tks|tksd|  krdk sn | jdkrd| _| js| js| jd krd| _d S )Nr*   zheader liner   zheader:)zHTTP/1.0zHTTP/0.9
   zHTTP/1.   r)   ztransfer-encodingrL   TFzcontent-lengthr      HEAD) rB   r^   ZCONTINUErA   r:   r;   r,   r   striprE   rW   coderJ   rK   rI   r[   r   rC   rG   itemsgetr+   rL   rM   _check_closerO   rN   r]   rZ   Z
NO_CONTENTZNOT_MODIFIEDrF   )	r0   rI   rJ   rK   skiphdrvalZtr_encrN   r   r   r   begin+  sf    





zHTTPResponse.beginc             C   sv   | j d}| jdkr.|r*d| kr*dS dS | j dr>dS |rRd| krRdS | j d}|rrd| krrdS dS )NZ
connectionr`   closeTFz
keep-alivezproxy-connection)rB   rf   rI   r+   )r0   ZconnZpconnr   r   r   rg   {  s    
zHTTPResponse._check_closec             C   s   | j }d | _ |  d S )N)rA   rl   )r0   rA   r   r   r   r\     s    zHTTPResponse._close_connc                s$   zt    W d | jr|   X d S )N)superrl   rA   r\   )r0   )	__class__r   r   rl     s    zHTTPResponse.closec                s   t    | jr| j  d S )N)rm   flushrA   )r0   )rn   r   r   ro     s    
zHTTPResponse.flushc             C   s   dS )NTr   )r0   r   r   r   readable  s    zHTTPResponse.readablec             C   s
   | j d kS )N)rA   )r0   r   r   r   isclosed  s    zHTTPResponse.isclosedc             C   s   | j d krdS | jdkr$|   dS |d k	rRt|}| |}t|d |  S | jr`|  S | j	d krv| j 
 }n6y| | j	}W n tk
r   |    Y nX d| _	|   |S d S )Nr8   rb   r   )rA   rF   r\   	bytearrayreadinto
memoryviewtobytesrL   _readall_chunkedrN   read
_safe_readr
   )r0   amtbr1   sr   r   r   rw     s*    



zHTTPResponse.readc             C   s   | j d krdS | jdkr$|   dS | jr4| |S | jd k	r^t|| jkr^t|d| j }| j |}|s||r||   n&| jd k	r|  j|8  _| js|   |S )Nr   rb   )	rA   rF   r\   rL   _readinto_chunkedrN   r,   rt   rs   )r0   rz   r1   r   r   r   rs     s$    





zHTTPResponse.readintoc             C   sp   | j td }t|tkr$td|d}|dkrB|d | }y
t|dS  tk
rj   |    Y nX d S )Nr*   z
chunk size   ;r      )	rA   r:   r;   r,   r   findr]   rZ   r\   )r0   r2   ir   r   r   _read_next_chunk_size   s    

z"HTTPResponse._read_next_chunk_sizec             C   s>   x8| j td }t|tkr&td|s,P |dkrP qW d S )Nr*   ztrailer line)s   
r7   r8   )rA   r:   r;   r,   r   )r0   r2   r   r   r   _read_and_discard_trailer  s    z&HTTPResponse._read_and_discard_trailerc             C   sl   | j }|sh|d k	r| d y|  }W n tk
rD   tdY nX |dkrb|   |   d }|| _ |S )NrT   r8   r   )rM   rx   r   rZ   r
   r   r\   )r0   rM   r   r   r   _get_chunk_left  s    
zHTTPResponse._get_chunk_leftc             C   sd   g }y8x,|   }|d krP || | d| _qW d|S  tk
r^   td|Y nX d S )Nr   r8   )r   r/   rx   rM   r=   r
   )r0   valuerM   r   r   r   rv   6  s    

zHTTPResponse._readall_chunkedc             C   s   d}t |}yvxp|  }|d kr$|S t||krL| |}|| | _|| S |d | }| |}||d  }||7 }d| _qW W n( tk
r   tt|d| Y nX d S )Nr   )rt   r   r,   _safe_readintorM   r
   bytes)r0   rz   total_bytesmvbrM   r1   temp_mvbr   r   r   r|   D  s$    


zHTTPResponse._readinto_chunkedc             C   sX   g }xH|dkrL| j t|t}|s4td|||| |t|8 }qW d|S )Nr   r8   )rA   rw   min	MAXAMOUNTr
   r=   r/   r,   )r0   ry   r{   chunkr   r   r   rx   \  s    

zHTTPResponse._safe_readc             C   s   d}t |}xt|t|k rtt|k r@|dt }| j|}n| j|}|sjtt|d| t|||d  }||7 }qW |S )Nr   )rt   r,   r   rA   rs   r
   r   )r0   rz   r   r   r   r1   r   r   r   r   s  s    zHTTPResponse._safe_readintoc             C   s   | j d ks| jdkrdS | jr(| |S | jd k	rJ|dk sD|| jkrJ| j}| j |}|sh|rh|   n| jd k	r|  jt|8  _|S )Nrb   r8   r   )rA   rF   rL   _read1_chunkedrN   read1r\   r,   )r0   r1   resultr   r   r   r     s    


zHTTPResponse.read1c             C   s4   | j d ks| jdkrdS | jr(| |S | j |S )Nrb   r8   )rA   rF   rL   _peek_chunkedpeek)r0   r1   r   r   r   r     s
    
zHTTPResponse.peekc                s   | j d ks| jdkrdS | jr*t |S | jd k	rL|dk sF|| jkrL| j}| j |}|sj|rj|   n| jd k	r|  jt|8  _|S )Nrb   r8   r   )rA   rF   rL   rm   r:   rN   r\   r,   )r0   limitr   )rn   r   r   r:     s    

zHTTPResponse.readlinec             C   sd   |   }|d ks|dkrdS d|  kr0|ks6n |}| j|}|  jt|8  _|s`td|S )Nr   r8   )r   rA   r   rM   r,   r
   )r0   r1   rM   rw   r   r   r   r     s    zHTTPResponse._read1_chunkedc             C   sB   y|   }W n tk
r    dS X |d kr.dS | j|d | S )Nr8   )r   r
   rA   r   )r0   r1   rM   r   r   r   r     s    zHTTPResponse._peek_chunkedc             C   s
   | j  S )N)rA   fileno)r0   r   r   r   r     s    zHTTPResponse.filenoc             C   sF   | j d krt | j |p|}t|ts4t|ds8|S d|S d S )N__iter__z, )rB   r   Zget_all
isinstancerV   hasattrr=   )r0   r%   defaultrB   r   r   r   	getheader  s    
zHTTPResponse.getheaderc             C   s   | j d krt t| j  S )N)rB   r   listre   )r0   r   r   r   
getheaders  s    
zHTTPResponse.getheadersc             C   s   | S )Nr   )r0   r   r   r   r     s    zHTTPResponse.__iter__c             C   s   | j S )N)rB   )r0   r   r   r   info  s    zHTTPResponse.infoc             C   s   | j S )N)rR   )r0   r   r   r   geturl  s    
zHTTPResponse.geturlc             C   s   | j S )N)rJ   )r0   r   r   r   getcode  s    zHTTPResponse.getcode)r   NN)N)r   )r   )r   )N)"r4   r5   r6   rS   r^   rk   rg   r\   rl   ro   rp   rq   rw   rs   r   r   r   rv   r|   rx   r   r   r   r:   r   r   r   r   r   r   r   r   r   __classcell__r   r   )rn   r   r      s<   	
!P

 "

	
c               @   s   e Zd ZdZdZeZeZdZ	dZ
edd Zedd Zd	ejd	d
f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d0d d!Zd1d"d#Zd$d% Zd2dd&d'd(Zd	i fdd&d)d*Zd+d, Zd-d. Z d	S )3r   r`   zHTTP/1.1r*   r   c             C   s   t | tjS )N)r   io
TextIOBase)streamr   r   r   
_is_textIO  s    zHTTPConnection._is_textIOc             C   sd   | d kr|  tkrdS d S t| dr*d S yt| }|jS  tk
rL   Y nX t| tr`t| S d S )Nr   rw   )	upper_METHODS_EXPECTING_BODYr   rt   nbytes	TypeErrorr   rV   r,   )bodyrQ   Zmvr   r   r   _get_content_length%  s    

z"HTTPConnection._get_content_lengthNi    c             C   sb   || _ || _|| _d | _g | _d | _t| _d | _d | _	d | _
i | _| ||\| _| _tj| _d S )N)timeoutsource_address	blocksizerP   _buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__staterF   _tunnel_host_tunnel_port_tunnel_headers_get_hostporthostportsocketZcreate_connection_create_connection)r0   r   r   r   r   r   r   r   r   rS   E  s    zHTTPConnection.__init__c             C   s<   | j rtd| ||\| _| _|r.|| _n
| j  d S )Nz.Can't set up tunnel for established connection)rP   RuntimeErrorr   r   r   r   clear)r0   r   r   rB   r   r   r   
set_tunnelY  s    zHTTPConnection.set_tunnelc             C   s   |d kr| d}| d}||kryt||d d  }W nH tk
r   ||d d  dkrh| j}ntd||d d   Y nX |d | }n| j}|r|d dkr|d dkr|dd }||fS )	Nr)   ]r*   rU   znonnumeric port: '%s'r   [r   )rfindr]   rZ   default_portr   )r0   r   r   r   jr   r   r   r   q  s    

zHTTPConnection._get_hostportc             C   s
   || _ d S )N)rE   )r0   levelr   r   r   set_debuglevel  s    zHTTPConnection.set_debuglevelc             C   s  d| j | jf }|d}| | x6| j D ](\}}d||f }|d}| | q0W | d | j| j| jd}|	 \}}	}
|	t
jjkr|   td|	|
 f xP|jtd }t|tkrtd	|sP |d
krP | jdkrtd|  qW d S )NzCONNECT %s:%d HTTP/1.0
asciiz%s: %s
zlatin-1s   
)rQ   zTunnel connection failed: %d %sr*   zheader line)s   
r7   r8   r   zheader:)r   r   r   sendr   re   response_classrP   rF   r^   http
HTTPStatusZOKrl   OSErrorrc   rA   r:   r;   r,   r   rE   rW   r>   )r0   Zconnect_strZconnect_bytesheaderr   Z
header_strZheader_bytesresponserI   rd   messager2   r   r   r   _tunnel  s2    





zHTTPConnection._tunnelc             C   sB   |  | j| jf| j| j| _| jtjtj	d | j
r>|   d S )Nr*   )r   r   r   r   r   rP   Z
setsockoptr   ZIPPROTO_TCPZTCP_NODELAYr   r   )r0   r   r   r   connect  s
    zHTTPConnection.connectc             C   sB   t | _z| j}|r d | _|  W d | j}|r<d | _|  X d S )N)r   r   rP   rl   r   )r0   rP   r   r   r   r   rl     s    zHTTPConnection.closec             C   s  | j d kr | jr|   nt | jdkr8tdt| t|dr| jdkrTtd | |}|rt| jdkrttd x0|	| j
}|sP |r|d}| j | qvW d S y| j | W nP tk
r
   t|tjjrx*|D ]}| j | qW ntdt| Y nX d S )Nr   zsend:rw   zsendIng a read()ablezencoding file using iso-8859-1z
iso-8859-1z9data should be a bytes-like object or an iterable, got %r)rP   	auto_openr   r   rE   rW   rX   r   r   rw   r   r   Zsendallr   r   collectionsabcIterabletype)r0   r   r   	datablockdr   r   r   r     s8    







zHTTPConnection.sendc             C   s   | j | d S )N)r   r/   )r0   r{   r   r   r   _output  s    zHTTPConnection._outputc             c   sb   | j dkrtd | |}|r2| j dkr2td x*|| j}|sFP |rT|d}|V  q4W d S )Nr   zsendIng a read()ablezencoding file using iso-8859-1z
iso-8859-1)rE   rW   r   rw   r   r   )r0   rp   r   r   r   r   r   _read_readable  s    


zHTTPConnection._read_readableFc             C   s$  | j d d| j }| j d d = | | |d k	r t|drN| |}nZyt| W nF tk
r   yt|}W n$ tk
r   tdt	| Y nX Y nX |f}xZ|D ]R}|s| j
dkrtd q|r| jdkrt|dd	d
| d }| | qW |r | jdkr | d d S )N)r8   r8   s   
rw   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredr`   Xz
r   s   0

)r   extendr=   r   r   r   rt   r   iterr   rE   rW   	_http_vsnr,   r   )r0   message_bodyencode_chunkedrG   Zchunksr   r   r   r   _send_output  s4    




zHTTPConnection._send_outputc             C   s  | j r| j  rd | _ | jtkr(t| _n
t| j|| _|s@d}t|}|rht	d|d|
 dd||| jf }| |d | jdkr|sd}|d	rt|\}}}}}|ry|d}	W n tk
r   |d
}	Y nX | d|	 n| jr| j}
| j}n| j}
| j}y|
d}W n  tk
rJ   |
d
}Y nX |
ddkrhd| d }|| jkr| d| n|d}| dd||f  |s| dd n d S )N/z&URL can't contain control characters. z (found at least )z%s %s %sr   r`   rU   r   ZidnaZHostr)   r      [   ]z%s:%szAccept-Encodingidentity)r   rq   r   r   _CS_REQ_STARTEDr   rF   !_contains_disallowed_url_pchar_researchr   group_http_vsn_strr   r   r   r[   r   r   	putheaderr   r   r   r   r   r   r>   )r0   rQ   rR   	skip_hostskip_accept_encodingmatchrequestZnetlocZnilZ
netloc_encr   r   Zhost_encr   r   r   
putrequest/  sT    





zHTTPConnection.putrequestc             G   s   | j tkrt t|dr$|d}t|s:td|f t|}xht|D ]\\}}t|drn|d||< nt	|t
rt|d||< t|| rLtd|| f qLW d|}|d | }| | d S )Nr   r   zInvalid header name %rzlatin-1zInvalid header value %rs   
	s   : )r   r   r   r   r   _is_legal_header_namerZ   r   	enumerater   r]   rV   _is_illegal_header_valuer=   r   )r0   r   valuesr   Z	one_valuer   r   r   r   r     s"    





zHTTPConnection.putheader)r   c            C   s*   | j tkrt| _ nt | j||d d S )N)r   )r   r   _CS_REQ_SENTr   r   )r0   r   r   r   r   r   
endheaders  s    
zHTTPConnection.endheadersc            C   s   |  ||||| d S )N)_send_request)r0   rQ   rR   r   rB   r   r   r   r   r     s    zHTTPConnection.requestc             C   s   t dd |D }i }d|kr&d|d< d|kr6d|d< | j||f| d|krd	|krd
}| ||}|d kr|d k	r| jdkrtd|  d}| dd q| dt| nd
}x | D ]\}	}
| |	|
 qW t|trt	|d}| j
||d d S )Nc             s   s   | ]}|  V  qd S )N)r+   )r   kr   r   r   	<genexpr>  s    z/HTTPConnection._send_request.<locals>.<genexpr>r   r*   r   zaccept-encodingr   zcontent-lengthztransfer-encodingFr   zUnable to determine size of %rTzTransfer-EncodingrL   zContent-Lengthr   )r   )	frozensetr   r   rE   rW   r   rV   re   r   r'   r   )r0   rQ   rR   r   rB   r   Zheader_namesZskipsZcontent_lengthri   r   r   r   r   r     s0    	


zHTTPConnection._send_requestc             C   s   | j r| j  rd | _ | jtks&| j r0t| j| jdkrR| j| j| j| jd}n| j| j| jd}yLy|	  W n t
k
r   |    Y nX t| _|jr|   n|| _ |S    |   Y nX d S )Nr   )rQ   )r   rq   r   r   r   rE   r   rP   rF   rk   ConnectionErrorrl   r   rO   )r0   r   r   r   r   getresponse  s,    


zHTTPConnection.getresponse)NN)NF)FF)N)!r4   r5   r6   r   r   r   r   	HTTP_PORTr   r   rE   staticmethodr   r   r   _GLOBAL_DEFAULT_TIMEOUTrS   r   r   r   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s:    
	&
6 
 .c                   sD   e Zd ZeZdddejdfdddd fddZ fddZ  Z	S )HTTPSConnectionNi    )contextcheck_hostnamer   c               s   t t| j|||||	d |d k	s2|d k	s2|d k	rHdd l}
|
dtd || _|| _|d krtt	 }|j
d k	rtd|_
|jtjk}|d kr|j}|r|std|s|r||| |j
d k	rd|_
|| _|d k	r|| j_d S )N)r   r   zTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rT   TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rm   r   rS   warningswarnDeprecationWarningkey_file	cert_filesslZ_create_default_https_contextZpost_handshake_authZverify_modeZ	CERT_NONEr   rZ   Zload_cert_chain_context)r0   r   r   r  r  r   r   r   r   r   r   Zwill_verify)rn   r   r   rS   W  s4    

zHTTPSConnection.__init__c                s6   t    | jr| j}n| j}| jj| j|d| _d S )N)server_hostname)rm   r   r   r   r  Zwrap_socketrP   )r0   r  )rn   r   r   r   {  s    

zHTTPSConnection.connect)
r4   r5   r6   
HTTPS_PORTr   r   r   rS   r   r   r   r   )rn   r   r   P  s   !r   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             C   s   |f| _ || _d S )N)argsrI   )r0   rI   r   r   r   rS     s    zUnknownProtocol.__init__N)r4   r5   r6   rS   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r	   N)r4   r5   r6   r   r   r   r   r	     s   c               @   s&   e Zd ZdddZdd Zdd ZdS )	r
   Nc             C   s   |f| _ || _|| _d S )N)r	  partialexpected)r0   r
  r  r   r   r   rS     s    zIncompleteRead.__init__c             C   s2   | j d k	rd| j  }nd}d| jjt| j|f S )Nz, %i more expectedrU   z%s(%i bytes read%s))r  rn   r4   r,   r
  )r0   er   r   r   __repr__  s
    
zIncompleteRead.__repr__c             C   s   t | S )N)rX   )r0   r   r   r   __str__  s    zIncompleteRead.__str__)N)r4   r5   r6   rS   r  r  r   r   r   r   r
     s   
c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             C   s   |st |}|f| _|| _d S )N)rX   r	  r2   )r0   r2   r   r   r   rS     s    zBadStatusLine.__init__N)r4   r5   r6   rS   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             C   s   t | dt|f  d S )Nz&got more than %d bytes when reading %s)r   rS   r;   )r0   Z	line_typer   r   r   rS     s    zLineTooLong.__init__N)r4   r5   r6   rS   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             O   s"   t | d tj| f|| d S )NrU   )r   rS   ConnectionResetError)r0   poskwr   r   r   rS     s    zRemoteDisconnected.__init__N)r4   r5   r6   rS   r   r   r   r   r     s   )r   )?Zemail.parserr?   Zemail.messager   r   rer   Zcollections.abcr   Zurllib.parser   __all__r   r  rH   r   r   r   globalsupdater   __members__r   r   r   r;   r<   compile	fullmatchr   r   r   r   r   r'   r   ZMessager(   rC   BufferedIOBaser   r   r  ImportErrorr   r/   	Exceptionr   r   r   r   r   r	   r
   r   r   r   r   r   r   r  r   r   r   r   r   r   <module>G   s~   


    6    :8
