B
    2*\Q                 @   sJ  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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
rD   Y nX G d.d/ d/e(Z+e,d/ G d0d de-Z.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e5Z6G d9d de5Z7G d:d de5Z8G d;d de.Z9G d<d de.Z:G d=d de;e9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   6C:\ALexclude\prg\programme\Python37\Lib\http\client.py
<dictcomp>j   s    r   i   i   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])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	 | j | 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   getr+   rL   rM   _check_closerO   rN   r]   rZ   Z
NO_CONTENTZNOT_MODIFIEDrF   )r0   rI   rJ   rK   skiphdrZ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   re   rI   r+   )r0   ZconnZpconnr   r   r   rf   q  s    
zHTTPResponse._check_closec             C   s   | j }d | _ |  d S )N)rA   rj   )r0   rA   r   r   r   r\     s    zHTTPResponse._close_connc                s$   zt    W d | jr|   X d S )N)superrj   rA   r\   )r0   )	__class__r   r   rj     s    zHTTPResponse.closec                s   t    | jr| j  d S )N)rk   flushrA   )r0   )rl   r   r   rm     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   ru     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,   rr   rq   )r0   rx   r1   r   r   r   rq     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   rv   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/   rv   rM   r=   r
   )r0   valuerM   r   r   r   rt   ,  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   )rr   r   r,   _safe_readintorM   r
   bytes)r0   rx   total_bytesmvbrM   r1   temp_mvbr   r   r   rz   :  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   ru   min	MAXAMOUNTr
   r=   r/   r,   )r0   rw   ry   chunkr   r   r   rv   R  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   )rr   r,   r   rA   rq   r
   r   )r0   rx   r   r   r   r1   r   r   r   r   i  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   y  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   rk   r:   rN   r\   r,   )r0   limitr   )rl   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   ru   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   listitems)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^   ri   rf   r\   rj   rm   rn   ro   ru   rq   r   r   r   rt   rz   rv   r   r   r   r:   r   r   r   r   r   r   r   r   r   __classcell__r   r   )rl   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   ru   )	upper_METHODS_EXPECTING_BODYr   rr   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   ;  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_tunnelO  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   g  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   r   response_classrP   rF   r^   http
HTTPStatusZOKrj   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   rj   r   )r0   rP   r   r   r   r   rj     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:ru   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   ru   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   ry   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   ru   r   r   )r0   rn   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   
ru   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   rr   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}d||| jf }| |	d | j
dkr|svd}|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
r    |		d}Y nX |	d	d
kr>d| d }|
| jkrX| d| n|d}| dd||
f  |s| dd n d S )N/z%s %s %sr   r`   rU   r   ZidnaZHostr)   r      [   ]z%s:%szAccept-Encodingidentity)r   ro   r   r   _CS_REQ_STARTEDr   rF   _http_vsn_strr   r   r   r[   r   r   	putheaderr   r   r   r   r}   r   r>   )r0   rQ   rR   	skip_hostskip_accept_encodingrequestZnetlocZnilZ
netloc_encr   r   Zhost_encr   r   r   
putrequest%  sN    




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   r   r   r'   r   )r0   rQ   rR   r   rB   r   Zheader_namesZskipsZcontent_lengthrh   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   ro   r   r   r   rE   r   rP   rF   ri   ConnectionErrorrj   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   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s8    
	&
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rdt	 }|j
tjk}|d kr~|j}|r|std|s|r||| || _|d k	r|| j_d S )N)r   r   zTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rT   zMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rk   r   rS   warningswarnDeprecationWarningkey_file	cert_filesslZ_create_default_https_contextZverify_modeZ	CERT_NONEr   rZ   Zload_cert_chain_context)r0   r   r   r   r   r   r   r   r   r   r   Zwill_verify)rl   r   r   rS   H  s,    zHTTPSConnection.__init__c                s6   t    | jr| j}n| j}| jj| j|d| _d S )N)server_hostname)rk   r   r   r   r   Zwrap_socketrP   )r0   r  )rl   r   r   r   e  s    

zHTTPSConnection.connect)
r4   r5   r6   
HTTPS_PORTr   r   r   rS   r   r   r   r   )rl   r   r   A  s   r   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   t  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   y  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  rl   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   searchr   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    51
