???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
Uf|                 @   sZ  d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZ y d dlZd dlmZmZmZ W n* ek
r   d dljZeZeZeZY nX dZdZG d	d
 d
eZG dd dejZG dd deZG dd deZG dd deZG dd dZd%ddZ d&ddZ!G dd dZ"G dd dZ#d'dd Z$d(d!d"Z%e#Z&G d#d$ d$Z'dS ))    N)connections)sstrbstr)SmartIO)UserDictCase)IntType
StringTypeListTypezI2.8.62.8.6-8.module_el8.10.0+6858+3ddf28328.module_el8.10.0+6858+3ddf2832   c               @   s   e Zd ZdS )NotProcessedN)__name__
__module____qualname__ r   r    /usr/lib/python3.6/transports.pyr   $   s   r   c               @   s   e Zd Zde Zd'ddZd(ddZd	d
 Zdd Z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dZdd  Zd!d" Zd#d$ Zd%d& ZdS )+	Transportzrhn.rpclib.py/%sr   Nc             C   sz   d| _ ddd| _| j||d t | _d| _d | _d| _d | _|| _	|| _
d| _d | _d | _d | _d | _|| _|| _d S )NFr   )transferencodingPOSTi @  )Z_use_builtin_types_transport_flagsset_transport_flagsr   _headersverbose
connectionmethod_langrefreshCallbackprogressCallback
bufferSize
headers_inresponse_statusresponse_reason_redirectedZ_use_datetimetimeout)selfr   r   r   r   Zuse_datetimer#   r   r   r   __init__*   s"    zTransport.__init__ @  c             C   s   || _ || _d S )N)r   r   )r$   r   r   r   r   r   set_progress_callback?   s    zTransport.set_progress_callbackc             C   s
   || _ d S )N)r   )r$   r   r   r   r   set_refresh_callbackD   s    zTransport.set_refresh_callbackc             C   s   |d krd}|| _ d S )Ni @  )r   )r$   r   r   r   r   set_buffer_sizeJ   s    zTransport.set_buffer_sizec             C   s   |dkrt d| || _d S )NGETr   zUnknown request method %s)r*   r   )IOErrorr   )r$   r   r   r   r   
set_methodR   s    zTransport.set_methodc             K   s<   | j j| |d k	r|| j d< |d k	r0|| j d< | j  d S )Nr   r   )r   updatevalidate_transport_flags)r$   r   r   kwargsr   r   r   r   X   s    

zTransport.set_transport_flagsc             C   s
   | j j S )N)r   copy)r$   r   r   r   get_transport_flagsc   s    zTransport.get_transport_flagsc             C   sH   | j jd}t|dd}|| j d< | j jd}t|dd}|| j d< d S )Nr      )strictr   )r   getlookupTransferlookupEncoding)r$   r   r   r   r   r   r.   f   s    
z"Transport.validate_transport_flagsc             C   s@   t |t g t f gkr.dd |D | j|< nt|| j|< d S )Nc             S   s   g | ]}t |qS r   )str).0ar   r   r   
<listcomp>t   s    z(Transport.set_header.<locals>.<listcomp>)typer   r7   )r$   nameargr   r   r   
set_headerq   s    zTransport.set_headerc             C   sF   || j kr&| j | }t|ts4|g}ng  }| j |< |jt| d S )N)r   
isinstancer	   appendr7   )r$   r<   r=   Zvlistr   r   r   
add_headerx   s    


zTransport.add_headerc             C   s   | j j  d S )N)r   clear)r$   r   r   r   clear_headers   s    zTransport.clear_headersc             C   s8   | j rtd|f  | jr*tj|| jdS tj|S d S )NzConnecting via http to %s)r#   )r   printr#   r   HTTPConnection)r$   hostr   r   r   get_connection   s
    zTransport.get_connectionc             C   sX  || _ | j|\}}}|sg }| j|}|j| j | j rJ|j| j d  t|| jd}|jf | j	 |j
d| j x*t| jj | D ]\}	}
|j
|	|
 qW |j
dd |j| xdD ]}|j| qW |j||\}}| j rtd x$|j D ]\}	}
td	|	|
f  qW |jdkr6|d | _|j| _d S || _|j| _|j| _| j||S )Nr2   )r   r   z
User-AgentzContent-Typeztext/xmlContent-LengthHostzIncoming headers:z	%s : %s-  .  ZLocation)rH   rI   )rJ   rK   )r   get_host_inforG   Zset_user_agent
user_agentZset_debuglevelOutputr   r   r   r>   listr   itemsprocessclear_header	send_httprD   statusr"   r    r   reasonr!   _process_response)r$   rF   handlerZrequest_bodyr   extra_headersx509r   Zreqheadervaluehheadersfdr   r   r   request   s<    



zTransport.requestc             C   sb   t | j| j| jd}|j|}t|trPt|j|j	|j
| j| jd}|j|_|S |j  | j|S )N)r   r   )r   r   )Inputr   r   r   decoder?   InputStreamFiler^   lengthr<   closeparse_response)r$   r^   r   Zrespfr   r   r   rV      s    




zTransport._process_responsec             C   s   | j S )N)r"   )r$   r   r   r   
redirected   s    zTransport.redirectedc             C   sf   | j  \}}x@|jd}|sP | jr,| j  | jr@tdt| |j| qW |j  |j  |j S )Ni   zbody:)Z	getparserreadr   r   rD   reprZfeedre   )r$   rg   puresponser   r   r   rf      s    
zTransport.parse_responsec             C   s
   || _ d S )N)r   )r$   langr   r   r   setlang   s    zTransport.setlang)r   r   NNNN)r&   )NN)r   )r   r   r   __version__rM   r%   r'   r(   r)   r,   r   r1   r.   r>   rA   rC   rG   r_   rV   rh   rf   ro   r   r   r   r   r   '   s&    


	
8r   c               @   s&   e Zd Zd	ddZdd Zdd ZdS )
SafeTransportr   Nc             C   s<   t j| |||||d g | _x|p$g D ]}| j| q&W d S )N)r   r   r#   )r   r%   trusted_certsadd_trusted_cert)r$   r   r   r   r   rr   r#   certfiler   r   r   r%      s    
zSafeTransport.__init__c             C   s*   t j|t jstd| | jj| d S )Nz%Certificate file %s is not accessible)osaccessR_OK
ValueErrorrr   r@   )r$   rt   r   r   r   rs     s    zSafeTransport.add_trusted_certc             C   sR   | j |\}}}| jr$td|f  | jr>tj|| j| jdS tj|| jdS d S )NzConnecting via https to %s)rr   r#   )rr   )rL   r   rD   r#   r   ZHTTPSConnectionrr   )r$   rF   rX   rY   r   r   r   rG     s    zSafeTransport.get_connection)r   r   NNNN)r   r   r   r%   rs   rG   r   r   r   r   rq      s    
rq   c               @   s   e Zd ZdddZdd ZdS )ProxyTransportNr   c	       	      C   s,   t j| |||||d || _|| _|| _d S )N)r   r   r#   )r   r%   _proxy_proxy_username_proxy_password)	r$   proxyproxyUsernameproxyPasswordr   r   r   r   r#   r   r   r   r%     s    
zProxyTransport.__init__c             C   s^   | j r td|| j| j| jf  | jrBtj| j|| j| j| jdS tj| j|| j| jdS d S )Nz8Connecting via http to %s proxy %s, username %s, pass %s)usernamepasswordr#   )r   r   )r   rD   rz   r{   r|   r#   r   ZHTTPProxyConnection)r$   rF   r   r   r   rG   #  s    


zProxyTransport.get_connection)NNr   r   NNN)r   r   r   r%   rG   r   r   r   r   ry     s     
ry   c               @   s&   e Zd Zd	ddZdd Zdd ZdS )
SafeProxyTransportNr   c
             C   sB   t j| ||||||||	d	 g | _x|p*g D ]}
| j|
 q,W d S )N)r~   r   r   r   r   r   r#   )ry   r%   rr   rs   )r$   r}   r~   r   r   r   r   r   rr   r#   rt   r   r   r   r%   0  s    zSafeProxyTransport.__init__c             C   s*   t j|t jstd| | jj| d S )Nz%Certificate file %s is not accessible)ru   rv   rw   rx   rr   r@   )r$   rt   r   r   r   rs   =  s    z#SafeProxyTransport.add_trusted_certc             C   sf   | j r td|| j| j| jf  | jrFtj| j|| j| j| j| jdS tj| j|| j| j| jdS d S )Nz9Connecting via https to %s proxy %s, username %s, pass %s)r   r   rr   r#   )r   r   rr   )	r   rD   rz   r{   r|   r#   r   ZHTTPSProxyConnectionrr   )r$   rF   r   r   r   rG   B  s    

z!SafeProxyTransport.get_connection)NNr   r   NNNN)r   r   r   r%   rs   rG   r   r   r   r   r   /  s
     
r   c               @   s:   e Zd ZdddZejfddZejfdd	Zd
d ZdS )r`   N    @  c             C   s  d | _ d | _d | _d| _d| _d| _|| _|| _|| _|sdt	j
krTt	j
d j | _ dt	j
krnt	j
d j | _dt	j
krt	j
d j | _dt	j
krtt	j
d | _dt	j
krt	j
d | _d	t	j
krt	j
d	 | _nx|j D ]}|| }|j }|d
kr&yt|| _W n tk
r"   d| _Y nX q|dkr<|j | _ q|dkrR|j | _q|dkrh|j | _q|dkr~|j | _q|dkr|| _qW d | _d S )Nr   C ZHTTP_CONTENT_TRANSFER_ENCODINGZHTTP_CONTENT_ENCODINGzCONTENT-TYPEZCONTENT_LENGTHZHTTP_ACCEPT_LANGUAGEZHTTP_X_PACKAGE_FILENAMEzcontent-lengthzcontent-transfer-encodingzcontent-encodingzcontent-typezaccept-languagezx-package-filename)r   r   r;   rd   rn   r<   r   r   max_mem_sizeru   environlowerintkeysrx   io)r$   r]   r   r   r   rZ   r[   r\   r   r   r   r%   h  sR    











zInput.__init__c             C   s   | j dkrd S | jr2t|| j| j| j| jd| _n
t|| _| j sN| jdkrRd S | jdkrdd l	}| j}|j
dd t| jd| _|j|| j n
t| jd S )Nzapplication/octet-stream)r   r   r   binarybase64r   )r   )r;   rd   _smart_readr   r   r   r   _smart_total_readr   r   seekr   ra   NotImplementedError)r$   r^   r   Zold_ior   r   r   ri     s"    


z
Input.readc             C   s^  | j dkr t|| j| j|jdS | js0| j| t|drB|j  | j sT| jdkrVn| jdkrdd l	}|j
 }| jjdd |j| jj |j  }~t|| _t| jd| _| jj| n| jdkr dd l}| jjdd |jdt| jd}|j }t|| _t| jd| _| jj| n*| jdkr<t| j| jnt| j| j| jjdd | jS )Nzapplication/octet-stream)re   re   __plainx-zlibdeflater   )r   x-gzipgziprb)modecompresslevelfileobjzx-gpg)r   r   )r   r   )r;   rb   rd   r<   re   r   ri   hasattrr   zlibZdecompressobjr   Z
decompressflushlenr   r   writer   GzipFileCOMPRESS_LEVELr   r   )r$   r^   r   objdatar   gzr   r   r   ra     s>    






zInput.decodec             C   s   | j S )N)rn   )r$   r   r   r   getlang  s    zInput.getlang)NNr   r   )	r   r   r   r%   sysstdinri   ra   r   r   r   r   r   r`   g  s
    
70r`       @  c             C   s.   t |d}x| j|}|sP |j| qW |S )z
    Tries to read data from the supplied stream, and puts the results into a
    StmartIO object. The data will be in memory or in a temporary file,
    depending on how much it's been read
    Returns a SmartIO object
    )r   )r   ri   r   )r^   r   r   r   chunkr   r   r   r     s    

r   c             C   s   t j  }|}t|d}|}x|dkrt j  }	t||}
| j|
}t|}
|
sNP ||
 }|j| |d krjq|	| dks~|dkr|	}t|| }||	| d  }|dkrd}n|| }||||| qW |jdd |S )N)r   r   r2   gư>)timer   minri   r   r   floatr   )r^   amtr   r   r   Z	startTimeZlastTimebufZorigsizeZcurTimelr   Z	bytesReadZspeedZsecsr   r   r   r      s2    




r   c               @   s   e Zd ZdddZdd ZdS )rb   	<unknown>Nc             C   s    || _ t|| _|| _|| _d S )N)r^   r   rd   r<   re   )r$   r^   rd   r<   re   r   r   r   r%   =  s    
zInputStream.__init__c             C   s   d| j | jf S )Nz0Input data is a stream of %d bytes for file %s.
)rd   r<   )r$   r   r   r   __repr__C  s    zInputStream.__repr__)r   N)r   r   r   r%   r   r   r   r   r   rb   <  s   
rb   c               @   s   e Zd ZdZdZdZdZdZdZdZ	ddgddgd	d
gdggZ
dddgZd ddZdd Zdd Zdd Zd!ddZd"ddZdd Zdd ZdS )#
BaseOutputr   r2         Nr   zx-gzipr   zx-zlibr   zx-gpgr   r   r   c             C   s   |rt |tjstd|| _|| _d | _t | _d| _	d| _
i | _d | _d | _d | _d | _d | _d | _| j||d d| _d S )Nz&Expected an HTTPConnection type objectr   )r   r   )r?   r   rE   	Exceptionr   _connectionr   r   r]   r   r   transport_flagsr   r   _hostZ_handlerZ
_http_typeZ	_protocolr   _BaseOutput__processed)r$   r   r   r   r   r   r   r   r%   c  s$    zBaseOutput.__init__c             C   sB   t |t g t f gkr0djtt|| j|< nt|| j|< d S )N,)r;   joinmapr7   r]   )r$   r<   r=   r   r   r   r>     s    zBaseOutput.set_headerc             C   s   || j kr| j |= d S )N)r]   )r$   r<   r   r   r   rR     s    
zBaseOutput.clear_headerc             C   s  || _ | j| jkrdd l}| j| j d }| jd| tdd}|jdt|d}t	j
d dkrn|jt| n|jt| |j  |j | _ |j  n| j| jkrdd l}| j| j d }| jd| |jt}|j||j  | _ n8| j| jkr t| j| j| j| j d }| jd| | j| jkrT| j| j }| jd| | jd	d
 nH| j| jkrdd l}	| j| j }| jd| | jd	d |	j| j | _ | jdt| j  t}
ttj dkrtj d }
| jdd|
  d| _ d S )Nr   zContent-Encodingr2   )Z	force_memwb)r   r   r   r   zContent-Transfer-EncodingzContent-Typezapplication/binaryztext/base64zContent-LengthzX-Transport-Infoz=Extended Capabilities Transport (C) Red Hat, Inc (version %s))!r   r   ENCODE_GZIPr   	encodingsr>   r   r   r   r   version_infor   r   r   re   getvalueENCODE_ZLIBr   Zcompressobjcompressr   
ENCODE_GPGr   r   TRANSFER_BINARY	transfersTRANSFER_BASE64r   Zencodestringr   rp   splitr   )r$   r   r   Zencoding_namerg   r   r   r   Ztransfer_namer   Zrpc_versionr   r   r   rQ     sT    



zBaseOutput.processc             K   s   || _ || _| jj| d S )N)r   r   r   r-   )r$   r   r   r/   r   r   r   r     s    zBaseOutput.set_transport_flags/RPC2c             C   s   | j s
t|| _| jd kr"td| jj  | jj| j|t| j	| j
d | jj }| j|s~tjd| j|f |j|j|j|j|fS )NzNo connection object found)Zbodyr]   z%s %s)r   r   r   r   r   Zconnectr_   r   r   r   r]   Zgetresponseresponse_acceptable	xmlrpclibZProtocolErrorrT   rU   msg)r$   rF   rW   rm   r   r   r   rS     s    




zBaseOutput.send_httpc             C   sP   |j dkrdS |j d
krdS |j dkr*dS | jjds:dS |jd d	krLdS dS )z*Returns true if the response is acceptable   r2   -  .     r   Zallow_partial_contentzContent-Typezapplication/octet-stream)r   r   )rT   r   r4   r   )r$   rm   r   r   r   r     s    


zBaseOutput.response_acceptablec             C   s   | j r| j j  d | _ d S )N)r   re   )r$   r   r   r   re     s    
zBaseOutput.close)r   r   Nr   )r   r   )r   )r   r   r   ZENCODE_NONEr   r   r   ZTRANSFER_NONEr   r   r   r   r%   r>   rR   rQ   r   rS   r   re   r   r   r   r   r   I  s,   
8

r   c             C   s   | dkrdS t | tr8d|   ko.ttjk n  r8| S t | trpx,tttjD ]}tj| | j krR|S qRW |rtd|  dS )zTGiven a string or numeric representation of a transfer, return the
    transfer codeNr   zUnsupported transfer %s)	r?   r   r   rN   r   r   ranger   rx   )r   r3   ir   r   r   r5      s    (
r5   c             C   s   | dkrdS t | tr8d|   ko.ttjk n  r8| S t | trpx,tttjD ]}| j tj| krR|S qRW |rtd|  dS )zUGiven a string or numeric representation of an encoding, return the
    encoding codeNr   zUnsupported encoding %s)	r?   r   r   rN   r   r   r   r   rx   )r   r3   r   r   r   r   r6     s    (
r6   c               @   s@   e Zd ZdddZdd Zddd	Zd
d Zdd Zdd ZdS )rc   r   N @  c             C   sF   || _ || _|j| _|| _d| _|r<||jdd d  | _|| _d S )Nr   /r2   )rd   file_objre   r   r<   rfindr   )r$   r   rd   r<   r   r   r   r   r   r%   &  s    zFile.__init__c             C   s   | j S )N)rd   )r$   r   r   r   __len__1  s    zFile.__len__c             C   s$   |d kr| j  }|j S | jj|S )N)	_get_fileri   r   )r$   r   r^   r   r   r   ri   4  s    z	File.readc             C   sP   | j  }xB|j| j}|sP tjd dkr:|jt| q
|jt| q
W |S )zHCopies the contents of this File object into another file
        objectr   r   )r   ri   r   r   r   r   r   r   )r$   filer^   r   r   r   r   read_to_file<  s    zFile.read_to_filec             C   sL   | j r,t| j| j | j| jd}|jdd nt| j| jd}|jdd |S )zRead everything into a temporary file and call the progress
        callbacks if the file length is defined, or just reads till EOF)r   r   r   )r   )rd   r   r   r   r   r   r   )r$   r   r   r   r   r   J  s    

zFile._get_filec             C   s   | j r| j   d | _ d S )N)re   )r$   r   r   r   __del__X  s    zFile.__del__)r   NNr   )N)	r   r   r   r%   r   ri   r   r   r   r   r   r   r   rc   %  s    


rc   )r   r   )r   Nr   )r   )r   )(ru   r   r   Zrhnr   Zrhn.i18nr   r   Zrhn.SmartIOr   Zrhn.UserDictCaser   r   typesr   r   r	   ImportErrorZxmlrpc.clientZclientr   bytesrO   rp   r   r   r   r   rq   ry   r   r`   r   r   rb   r   r5   r6   rN   rc   r   r   r   r   <module>   sD   

 V8 	
 
; 8

