3
ûâdeÿ  ã               @   s†   d Z ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZ erdddlmZmZ ejeƒZG dd	„ d	ejjƒZdS )
z#xmlrpclib.Transport implementation
é    N)ÚTYPE_CHECKINGÚTuple)ÚNetworkConnectionError)Ú
PipSession)Úraise_for_status)Ú	_HostTypeÚ_Marshallablec                   sJ   e Zd ZdZdeeeddœ‡ fdd„Zddeeee	d d
œdd„Z
‡  ZS )ÚPipXmlrpcTransportzRProvide a `xmlrpclib.Transport` implementation via a `PipSession`
    object.
    FN)Ú	index_urlÚsessionÚuse_datetimeÚreturnc                s*   t ƒ j|ƒ tjj|ƒ}|j| _|| _d S )N)ÚsuperÚ__init__ÚurllibÚparseÚurlparseÚschemeÚ_schemeÚ_session)Úselfr
   r   r   Úindex_parts)Ú	__class__© ú;/tmp/pip-build-red6nood/pip/pip/_internal/network/xmlrpc.pyr      s    zPipXmlrpcTransport.__init__r   r   .)ÚhostÚhandlerÚrequest_bodyÚverboser   c       
      C   s¨   t |tƒst‚| j||d d d f}tjj|ƒ}y6ddi}| jj|||dd�}t	|ƒ || _
| j|jƒS  tk
r¢ }	 z$|	js~t‚tjd|	jj|ƒ ‚ W Y d d }	~	X nX d S )NzContent-Typeztext/xmlT)ÚdataÚheadersÚstreamzHTTP error %s while getting %s)Ú
isinstanceÚstrÚAssertionErrorr   r   r   Ú
urlunparser   Úpostr   r   Úparse_responseÚrawr   ÚresponseÚloggerÚcriticalÚstatus_code)
r   r   r   r   r   ÚpartsÚurlr    r)   Úexcr   r   r   Úrequest    s(    
zPipXmlrpcTransport.request)F)F)r   .)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r   Úboolr   Úbytesr   r0   Ú__classcell__r   r   )r   r   r	      s
   
r	   )r4   ÚloggingÚurllib.parser   Zxmlrpc.clientZxmlrpcÚtypingr   r   Zpip._internal.exceptionsr   Zpip._internal.network.sessionr   Zpip._internal.network.utilsr   r   r   Ú	getLoggerr1   r*   ÚclientÚ	Transportr	   r   r   r   r   Ú<module>   s   
