o
     JAf                     @   sN  	 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Zd dl	Z
d dlmZ g d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edjZedjZ edZ!edZ"h dZ#d>ddZ$G dd dej%j&Z'dd Z(e'fddZ)G dd dej*Z+G dd dZ,zd dl-Z-W n	 e.y   Y nw G d d! d!e,Z/e0d! G d"d# d#e1Z2G d$d% d%e2Z3G d&d' d'e2Z4G d(d) d)e2Z5G d*d+ d+e2Z6G d,d- d-e2Z7G d.d/ d/e2Z8G d0d1 d1e2Z9G d2d3 d3e9Z:G d4d5 d5e9Z;G d6d7 d7e9Z<G d8d9 d9e2Z=G d:d; d;e2Z>G d<d= d=e?e=Z@e2ZAd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.10/http/client.py
<dictcomp>l   s    r   i   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]>   ZPATCHZPOSTPUTdatac                 C   s\   	 z|  dW S  ty- } zt|j|j|j|jd| | |j|j |f d d }~ww )N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                   @      e Zd Zdd ZdS )HTTPMessagec                 C   sl   	 |  d }t|}g }d}|  D ] }|d |   |kr"d}n
|d d  s,d}|r3|| q|S )N:r      )lowerlenkeysisspaceappend)selfr'   nZlstZhitliner   r   r   getallmatchingheaders   s   	
z!HTTPMessage.getallmatchingheadersN)__name__
__module____qualname__r6   r   r   r   r   r+      s    r+   c                 C   s\   	 g }	 |  td }t|tkrtd|| t|tkr&tdt |dv r-	 |S q)NTr-   header linezgot more than %d headers   
   
    )readline_MAXLINEr/   r   r2   _MAXHEADERSr   )fpheadersr5   r   r   r   _read_headers   s   
rD   c                 C   s.   	 t | }d|d}tjj|d|S )Nr>   
iso-8859-1)_class)rD   joindecodeemailparserZParserZparsestr)rB   rF   rC   Zhstringr   r   r   parse_headers   s   	rK   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dAdd Zd!d" Zd#d$ Zd%d& ZdBd(d)ZdBd*d+ZdB fd,d-	Zd.d/ Zd0d1 Zd2d3 ZdAd4d5Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z   Z!S )Cr   r   Nc                 C   sR   | d| _|| _|| _d  | _| _t| _t| _t| _	t| _
t| _t| _t| _d S )Nrb)makefilerB   
debuglevel_methodrC   msg_UNKNOWNversionstatusreasonchunked
chunk_leftlength
will_close)r3   sockrN   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r!tdt| |s't	dz|
d d\}}}W n! tyS   z|
d d\}}d}W n tyP   d}Y nw Y nw |d	sa|   t|zt|}|d
k sn|dkrrt|W n ty~   t|w |||fS )Nr-   rE   zstatus liner   zreply:z-Remote end closed connection without response    zHTTP/r   i  )strrB   r?   r@   r/   r   rN   printreprr   split
ValueError
startswith_close_connr   int)r3   r5   rR   rS   rT   r   r   r   _read_status  s<   


zHTTPResponse._read_statusc           	      C   s  | j d urd S 	 |  \}}}|tkrnt| j}| jdkr#td| ~q| | _| _|	 | _
|dv r8d| _n|drAd| _nt|t| j | _ | _| jdkre| j  D ]\}}td|d	 | qX| j d
}|rz| dkrzd| _d | _nd| _|  | _d | _| j d}|r| jszt|| _W n ty   d | _Y nw | 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 u rd| _d S d S d S d S )NTr   zheaders:)zHTTP/1.0zHTTP/0.9
   zHTTP/1.   header:r,   transfer-encodingrU   Fcontent-lengthr      HEAD)rC   rg   ZCONTINUErD   rB   rN   r`   coderS   striprT   rR   rd   r   rK   rP   itemsgetr.   rU   rV   _check_closerX   rW   rf   rc   Z
NO_CONTENTZNOT_MODIFIEDrO   )	r3   rR   rS   rT   Zskipped_headershdrvalZtr_encrW   r   r   r   begin7  sf   














zHTTPResponse.beginc                 C   sv   | j d}| jdkr|rd| v rdS dS | j drdS |r)d| v r)dS | j d}|r9d| v r9dS dS )N
connectionri   closeTFz
keep-alivezproxy-connection)rC   rr   rR   r.   )r3   connZpconnr   r   r   rs     s   
zHTTPResponse._check_closec                 C   s   | j }d | _ |  d S N)rB   rx   )r3   rB   r   r   r   re     s   zHTTPResponse._close_connc                    s6   zt    W | jr|   d S d S | jr|   w w rz   )superrx   rB   re   r3   	__class__r   r   rx     s   

zHTTPResponse.closec                    s"   t    | jr| j  d S d S rz   )r{   flushrB   r|   r}   r   r   r     s   
zHTTPResponse.flushc                 C   s   	 dS )NTr   r|   r   r   r   readable  s   zHTTPResponse.readablec                 C   s   	 | j d u S rz   )rB   r|   r   r   r   isclosed  s   
zHTTPResponse.isclosedc                 C   s   | j d u rdS | jdkr|   dS | jr| |S |d urR| jd ur+|| jkr+| j}| j |}|s;|r;|   |S | jd urP|  jt|8  _| jsP|   |S | jd u r]| j  }nz| | j}W n t	yq   |    w d| _|   |S )Nr>   rn   r   )
rB   rO   re   rU   _read_chunkedrW   readr/   
_safe_readr
   )r3   amtsr   r   r   r     s<   




zHTTPResponse.readc                 C   s   	 | j d u rdS | jdkr|   dS | jr| |S | jd ur0t|| jkr0t|d| j }| j |}|s@|r@|   |S | jd urS|  j|8  _| jsS|   |S )Nr   rn   )	rB   rO   re   rU   _readinto_chunkedrW   r/   
memoryviewreadinto)r3   br4   r   r   r   r     s(   




zHTTPResponse.readintoc                 C   sh   | j td }t|tkrtd|d}|dkr!|d | }zt|dW S  ty3   |    w )Nr-   z
chunk size   ;r      )	rB   r?   r@   r/   r   findrf   rc   re   )r3   r5   ir   r   r   _read_next_chunk_size  s   
z"HTTPResponse._read_next_chunk_sizec                 C   s<   	 | j td }t|tkrtd|sd S |dv rd S q)NTr-   ztrailer liner;   )rB   r?   r@   r/   r   r3   r5   r   r   r   _read_and_discard_trailer  s   z&HTTPResponse._read_and_discard_trailerc                 C   sf   | j }|s1|d ur| d z|  }W n ty   tdw |dkr.|   |   d }|| _ |S )Nr]   r>   r   )rV   r   r   rc   r
   r   re   )r3   rV   r   r   r   _get_chunk_left)  s   
zHTTPResponse._get_chunk_leftc                 C   s   g }z:	 |   }|d u rn*|d ur#||kr#|| | || | _n|| | |d ur3||8 }d| _qd|W S  tyJ   td|w )NTr   r>   )r   r2   r   rV   rG   r
   )r3   r   valuerV   r   r   r   r   A  s&   
zHTTPResponse._read_chunkedc                 C   s   d}t |}z:	 |  }|d u r|W S t||kr(| |}|| | _|| W S |d | }| |}||d  }||7 }d| _q tyQ   tt|d| w )Nr   )r   r   r/   _safe_readintorV   r
   bytes)r3   r   Ztotal_bytesZmvbrV   r4   Ztemp_mvbr   r   r   r   W  s(   



zHTTPResponse._readinto_chunkedc                 C   s0   	 | j |}t||k rt||t| |S rz   )rB   r   r/   r
   )r3   r   r   r   r   r   r   o  s
   zHTTPResponse._safe_readc                 C   s<   	 t |}| j|}||k rtt|d | || |S rz   )r/   rB   r   r
   r   )r3   r   r   r4   r   r   r   r   {  s   zHTTPResponse._safe_readintoc                 C   s   	 | j d u s| jdkrdS | jr| |S | jd ur&|dk s#|| jkr&| j}| j |}|s6|r6|   |S | jd urD|  jt|8  _|S Nrn   r>   r   )rB   rO   rU   _read1_chunkedrW   read1re   r/   )r3   r4   resultr   r   r   r     s   

zHTTPResponse.read1c                 C   s4   | j d u s
| jdkrdS | jr| |S | j |S )Nrn   r>   )rB   rO   rU   _peek_chunkedpeek)r3   r4   r   r   r   r     s
   
zHTTPResponse.peekc                    s   | j d u s
| jdkrdS | jrt |S | jd ur&|dk s#|| jkr&| j}| j |}|s6|r6|   |S | jd urD|  jt|8  _|S r   )rB   rO   rU   r{   r?   rW   re   r/   )r3   limitr   r}   r   r   r?     s   
zHTTPResponse.readlinec                 C   sd   |   }|d u s|dkrdS d|  kr|ksn |}| j|}|  jt|8  _|s0td|S )Nr   r>   )r   rB   r   rV   r/   r
   )r3   r4   rV   r   r   r   r   r     s   zHTTPResponse._read1_chunkedc                 C   sB   z|   }W n
 ty   Y dS w |d u rdS | j|d | S )Nr>   )r   r
   rB   r   )r3   r4   rV   r   r   r   r     s   zHTTPResponse._peek_chunkedc                 C   s
   | j  S rz   )rB   filenor|   r   r   r   r        
zHTTPResponse.filenoc                 C   sD   	 | j d u r	t | j |p|}t|tst|ds|S d|S )N__iter__z, )rC   r   Zget_all
isinstancer_   hasattrrG   )r3   r'   defaultrC   r   r   r   	getheader  s   

zHTTPResponse.getheaderc                 C   s    	 | j d u r	t t| j  S rz   )rC   r   listrq   r|   r   r   r   
getheaders  s   
zHTTPResponse.getheadersc                 C   s   | S rz   r   r|   r   r   r   r     s   zHTTPResponse.__iter__c                 C      	 | j S rz   )rC   r|   r   r   r   info  s   zHTTPResponse.infoc                 C   r   rz   )r[   r|   r   r   r   geturl  s   	zHTTPResponse.geturlc                 C   r   rz   )rS   r|   r   r   r   getcode  s   zHTTPResponse.getcode)r   NNrz   )r   )"r7   r8   r9   r\   rg   rv   rs   re   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   r   r   r   r   r   r   r   __classcell__r   r   r}   r   r      s>    
	!H

'"


	
r   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d7d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d8d d!Z		d9d"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Z d:dd.d/d0Z!d	i fdd.d1d2Z"d3d4 Z#d5d6 Z$d	S );r   ri   zHTTP/1.1r-   r   c                 C   s   	 t | tjS rz   )r   io
TextIOBase)streamr   r   r   
_is_textIO  s   zHTTPConnection._is_textIOc                 C   sf   	 | d u r|  tv rdS d S t| drd S zt| }|jW S  ty'   Y nw t| tr1t| S d S )Nr   r   )	upper_METHODS_EXPECTING_BODYr   r   nbytes	TypeErrorr   r_   r/   )bodyrZ   mvr   r   r   _get_content_length%  s    

z"HTTPConnection._get_content_lengthN    c                 C   sn   || _ || _|| _d | _g | _d | _t| _d | _d | _	d | _
i | _| ||\| _| _| | j tj| _d S rz   )timeoutsource_address	blocksizerY   _buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__staterO   _tunnel_host_tunnel_port_tunnel_headers_get_hostporthostport_validate_hostsocketcreate_connection_create_connection)r3   r   r   r   r   r   r   r   r   r\   E  s   zHTTPConnection.__init__c                 C   s@   	 | j rtd| ||\| _| _|r|| _d S | j  d S )Nz.Can't set up tunnel for established connection)rY   RuntimeErrorr   r   r   r   clear)r3   r   r   rC   r   r   r   
set_tunnel[  s   
zHTTPConnection.set_tunnelc                 C   s   |d u r`| d}| d}||krIzt||d d  }W n# tyA   ||d d  dkr3| j}ntd||d d   Y nw |d | }n| j}|r`|d dkr`|d dkr`|dd }||fS )	Nr,   ]r-   r^   znonnumeric port: '%s'r   [r   )rfindrf   rc   default_portr   )r3   r   r   r   jr   r   r   r   s  s"   

zHTTPConnection._get_hostportc                 C   s
   || _ d S rz   )rN   )r3   levelr   r   r   set_debuglevel  r   zHTTPConnection.set_debuglevelc           
      C   s  d| j d| jf }|g}| j D ]\}}|| d| dd q|d | d| ~| j| j	| j
d}| \}}}|tjjkrZ|   td	| d
|  	 |jtd }	t|	tkrmtd|	sqd S |	dv rwd S | jdkrtd|	  q[)Ns   CONNECT %s:%d HTTP/1.0
asciiz: 
r   r<   r>   rZ   zTunnel connection failed:  Tr-   r:   r;   r   rj   )r   r    r   r   rq   r2   sendrG   response_classrY   rO   rg   http
HTTPStatusZOKrx   OSErrorrp   rB   r?   r@   r/   r   rN   r`   rH   )
r3   connectrC   headerr   responserR   ro   messager5   r   r   r   _tunnel  s2   

zHTTPConnection._tunnelc              
   C   s   	 t d| | j| j | | j| jf| j| j| _z| jt	j
t	jd W n ty> } z|jtjkr4 W Y d }~nd }~ww | jrH|   d S d S )Nzhttp.client.connectr-   )sysauditr   r   r   r   r   rY   
setsockoptr   IPPROTO_TCPTCP_NODELAYr   errnoZENOPROTOOPTr   r   r3   er   r   r   r     s    zHTTPConnection.connectc                 C   s`   	 t | _z| j}|rd | _|  W | j}|r d | _|  d S d S | j}|r/d | _|  w w rz   )r   r   rY   rx   r   )r3   rY   r   r   r   r   rx     s$   
zHTTPConnection.closec                 C   s"  	 | j d u r| jr|   nt | jdkrtdt| t|dr\| jdkr+td | |}|r;| jdkr;td 	 |	| j
}|sG	 d S |rN|d}td| | | j | q<td| | z	| j | W d S  ty   t|tjjr|D ]}| j | q|Y d S td	t| w )
Nr   zsend:r   sendIng a read()ableencoding file using iso-8859-1r-   rE   zhttp.client.sendz9data should be a bytes-like object or an iterable, got %r)rY   	auto_openr   r   rN   r`   ra   r   r   r   r   r    r   r   sendallr   r   collectionsabcIterabletype)r3   r   r    	datablockdr   r   r   r     sF   






	zHTTPConnection.sendc                 C   s   	 | j | d S rz   )r   r2   )r3   r   r   r   r   _output  s   zHTTPConnection._outputc                 c   s`    | j dkr
td | |}|r| j dkrtd 	 || j}|s%d S |r,|d}|V  q)Nr   r   r   TrE   )rN   r`   r   r   r   r    )r3   r   r    r   r   r   r   _read_readable  s   


zHTTPConnection._read_readableFc                 C   s   	 | j d d| j }| j d d = | | |d urt|dr'| |}n)zt| W n tyL   zt|}W n tyI   tdt	| w Y nw |f}|D ])}|s`| j
dkr_td qR|rv| jdkrvt|dd	d
| d }| | qR|r| jdkr| d d S d S d S d S )N)r>   r>   r<   r   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredri   Xr   r   s   0

)r   extendrG   r   r   r   r   r   iterr   rN   r`   	_http_vsnr/   r    )r3   message_bodyencode_chunkedrP   chunkschunkr   r   r   _send_output  sF   



'zHTTPConnection._send_outputc                 C   s  	 | j r| j  rd | _ | jtkrt| _nt| j| | || _|p%d}| | d||| j	f }| 
| | | jdkr|sd}|drRt|\}}}}}|rqz|d}W n tyi   |d}Y nw | d| nN| jr{| j}	| j}
n| j}	| j}
z|	d}W n ty   |	d}Y nw |	d	d
krd| d }|
| jkr| d| n|d}| dd||
f  |s| dd d S d S 	 d S )N/z%s %s %sri   r^   r   r   ZidnaZHostr,   r      [   ]z%s:%szAccept-Encodingidentity)r   r   r   r   _CS_REQ_STARTEDr   _validate_methodrO   _validate_path_http_vsn_strr   _encode_requestr   rd   r   r    r!   	putheaderr   r   r   r   r   r   rH   )r3   rZ   r[   	skip_hostskip_accept_encodingrequestnetlocnilZ
netloc_encr   r   Zhost_encr   r   r   
putrequest:  sX   









zHTTPConnection.putrequestc                 C   s
   | dS )Nr   )r    )r3   r
  r   r   r   r    s   
zHTTPConnection._encode_requestc                 C   .   	 t |}|rtd|d| dd S )Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchrc   group)r3   rZ   matchr   r   r   r    s   
zHTTPConnection._validate_methodc                 C   r  Nz&URL can't contain control characters. r  r  !_contains_disallowed_url_pchar_rer  r   r  )r3   r[   r  r   r   r   r       


zHTTPConnection._validate_pathc                 C   r  r  r  )r3   r   r  r   r   r   r     r  zHTTPConnection._validate_hostc                 G   s   	 | j tkr	t t|dr|d}t|std|f t|}t|D ].\}}t|dr7|d||< nt	|t
rEt|d||< t|| rTtd|| f q&d|}|d | }| | d S )Nr    r   zInvalid header name %rr   zInvalid header value %rs   
	s   : )r   r  r   r   r    _is_legal_header_namerc   r   	enumerater   rf   r_   _is_illegal_header_valuerG   r   )r3   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 )Nr  )r   r  _CS_REQ_SENTr   r   )r3   r   r   r   r   r   
endheaders  s
   
zHTTPConnection.endheadersc                C   s   	 |  ||||| d S rz   )_send_request)r3   rZ   r[   r   rC   r   r   r   r   r
    s   zHTTPConnection.requestc                 C   s   t dd |D }i }d|v rd|d< d|v rd|d< | j||fi | d|vrZd	|vrYd
}| ||}|d u rQ|d urP| jdkrHtd|  d}| dd n| dt| nd
}| D ]
\}	}
| |	|
 q`t|trut	|d}| j
||d d S )Nc                 s   s    | ]}|  V  qd S rz   )r.   )r   kr   r   r   	<genexpr>  s    z/HTTPConnection._send_request.<locals>.<genexpr>r   r-   r  zaccept-encodingr	  rl   rk   Fr   zUnable to determine size of %rTzTransfer-EncodingrU   zContent-Lengthr   r  )	frozensetr  r   rN   r`   r  r_   rq   r   r)   r  )r3   rZ   r[   r   rC   r   Zheader_namesZskipsZcontent_lengthrt   r   r   r   r   r     s4   	


zHTTPConnection._send_requestc                 C   s   	 | j r| j  rd | _ | jtks| j rt| j| jdkr*| j| j| j| jd}n	| j| j| jd}z&z|	  W n t
yF   |    w t| _|jrT|   |W S || _ |W S    |   )Nr   r   )r   r   r   r  r   rN   r   rY   rO   rv   ConnectionErrorrx   r   rX   )r3   r   r   r   r   getresponse2  s4   

zHTTPConnection.getresponse)NN)NF)FFrz   )%r7   r8   r9   r   r  r   r   	HTTP_PORTr   r   rN   staticmethodr   r   r   _GLOBAL_DEFAULT_TIMEOUTr\   r   r   r   r   r   rx   r   r   r   r   r  r  r  r  r   r  r  r
  r   r%  r   r   r   r   r     sL    



 (
6
	.r   c                       sF   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 )HTTPSConnectionNr   )contextcheck_hostnamer   c                   s   t t| j|||||	d |d us|d us|d ur$dd l}
|
dtd || _|| _|d u rEt	 }| j
dkr=|dg |jd urEd|_|jtjk}|d u rR|j}|rZ|sZtd|s^|rl||| |jd urld|_|| _|d ury|| j_d S d S )	N)r   r   zTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.r]   ri   zhttp/1.1TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)r{   r)  r\   warningswarnDeprecationWarningkey_file	cert_filesslZ_create_default_https_contextr   Zset_alpn_protocolsZpost_handshake_authZverify_modeZ	CERT_NONEr+  rc   Zload_cert_chain_context)r3   r   r   r/  r0  r   r   r*  r+  r   r,  Zwill_verifyr}   r   r   r\   }  s>   


zHTTPSConnection.__init__c                    s8   	 t    | jr| j}n| j}| jj| j|d| _d S )N)server_hostname)r{   r   r   r   r2  Zwrap_socketrY   )r3   r3  r}   r   r   r     s   

zHTTPSConnection.connect)
r7   r8   r9   
HTTPS_PORTr   r   r(  r\   r   r   r   r   r}   r   r)  v  s    'r)  c                   @      e Zd ZdS )r   Nr7   r8   r9   r   r   r   r   r     s    r   c                   @   r5  )r   Nr6  r   r   r   r   r         r   c                   @   r5  )r   Nr6  r   r   r   r   r     r7  r   c                   @   r*   )r   c                 C   s   |f| _ || _d S rz   )argsrR   )r3   rR   r   r   r   r\     s   
zUnknownProtocol.__init__Nr7   r8   r9   r\   r   r   r   r   r         r   c                   @   r5  )r   Nr6  r   r   r   r   r     r7  r   c                   @   r5  )r	   Nr6  r   r   r   r   r	     r7  r	   c                   @   s$   e Zd ZdddZdd ZejZdS )r
   Nc                 C   s   |f| _ || _|| _d S rz   )r8  partialexpected)r3   r;  r<  r   r   r   r\     s   
zIncompleteRead.__init__c                 C   s2   | j d urd| j  }nd}d| jjt| j|f S )Nz, %i more expectedr^   z%s(%i bytes read%s))r<  r~   r7   r/   r;  r   r   r   r   __repr__  s   

zIncompleteRead.__repr__rz   )r7   r8   r9   r\   r=  r#   __str__r   r   r   r   r
     s    

r
   c                   @   r5  )r   Nr6  r   r   r   r   r     r7  r   c                   @   r5  )r   Nr6  r   r   r   r   r     r7  r   c                   @   r5  )r   Nr6  r   r   r   r   r     r7  r   c                   @   r5  )r   Nr6  r   r   r   r   r     r7  r   c                   @   r*   )r   c                 C   s   |st |}|f| _|| _d S rz   )ra   r8  r5   r   r   r   r   r\     s   
zBadStatusLine.__init__Nr9  r   r   r   r   r     r:  r   c                   @   r*   )r   c                 C   s   t | dt|f  d S )Nz&got more than %d bytes when reading %s)r   r\   r@   )r3   Z	line_typer   r   r   r\     s   
zLineTooLong.__init__Nr9  r   r   r   r   r     r:  r   c                   @   r*   )r   c                 O   s(   t | d tj| g|R i | d S )Nr^   )r   r\   ConnectionResetError)r3   poskwr   r   r   r\     s   zRemoteDisconnected.__init__Nr9  r   r   r   r   r     r:  r   )r   )BZemail.parserrI   Zemail.messager   r   r   rer   r   collections.abcr   urllib.parser   __all__r&  r4  rQ   r   r  r  globalsupdater   __members__r  r   r@   rA   compile	fullmatchr  r  r  r  r  r   r)   r   ZMessager+   rD   rK   BufferedIOBaser   r   r1  ImportErrorr)  r2   	Exceptionr   r   r   r   r   r	   r
   r   r   r   r   r   r   r?  r   r   r   r   r   r   <module>   s~    F


    *    `
;