
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
UZ"                 @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dlZyd dlZW n e	k
rj   d dl
jZY nX G dd deZG dd	 d	eZdS )
    )raise_with_tb)	rpcServer)up2dateErrors)capabilitiesNc               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_DoCallWrapperze
    A callable object that will handle multiple levels of attributes,
    and catch exceptions.
    c             C   s   || _ || _d S )N)_server_method_name)selfZservermethod_name r   /usr/lib/python3.6/rhnserver.py__init__5   s    z_DoCallWrapper.__init__c             C   s   t | jd| j|f S )z= Recursively build up the method name to pass to the server. z%s.%s)r   r   r   )r	   r
   r   r   r   __getattr__9   s    z_DoCallWrapper.__getattr__c             O   s   t | j| j}ytj|f||S  tjk
rL   t| jt	j
 d  Y n tjjk
r   tt	j
 d }|jd}|jd}d}t|dkr|d }nt|dkr|d }|jd}|dkrttj  nttj| Y nX dS )	z3 Call the method. Catch faults and translate them.    z[()],    z 'zcertificate verify failedN)getattrr   r   r   ZdoCall	xmlrpclibZFaultr   $_DoCallWrapper__exception_from_faultsysexc_infoOpenSSLZSSLErrorstrstripsplitlenr   ZSSLCertificateVerifyFailedErrorZNetworkError)r	   argskwargsmethoderrorpiecesmessager   r   r   __call__>   s$    



z_DoCallWrapper.__call__c             C   s  |j dkrtj|j}n|j dkr4tj|j}n|j dkrNtj|j}nr|j dkrhtj|j}nX|j dkrtj|j}n>|j d krtj|j}n$|j d!krtj|j}n
|j d"krtj|j}n|j d#krtj|j}n|j d$krtj	|j}n|j d%kr"tj
|j}nt|j dkrBtj|j}n~t|j dkrbtj|j}n^t|j dkr~tj }nBt|j dkrtj|j}n"|j dkrtj|j}nt|j dkrtj	|j}n|j d&krtj|j}n|j d'krtj|j}n|j d(kr&tj|j}n|j d)kr@tj|j}n|j d*ksX|j d+krftj|j}nZ|j d,krtj|j}n@|j d-krtj|j}n&|j d.krtj|j}ntj|j}|S )/N   r   n   r                     $   1   <   J   i   c   [   j   iX  iY  iZ  i  i  i  =      iiiiiiiiiiiii/iDiCi)Z	faultCoder   Z$AuthenticationOrAccountCreationErrorZfaultStringZUnknownMethodExceptionZLoginMinLengthErrorZPasswordMinLengthErrorZValidationErrorZNoBaseChannelErrorZInsuffMgmntEntsErrorZPasswordErrorabsZ
AbuseErrorZAuthenticationTicketErrorZRegistrationDeniedErrorZRhnUuidUniquenessErrorZ
DelayErrorZInvalidRegistrationNumberErrorZNotEntitlingErrorZPasswordMaxLengthErrorZActivationKeyUsageLimitErrorZUnableToCreateUserZCommunicationError)r	   ZfaultZ	exceptionr   r   r   Z__exception_from_faultX   sr    












z%_DoCallWrapper.__exception_from_faultN)__name__
__module____qualname____doc__r   r   r$   r   r   r   r   r   r   .   s
   r   c               @   s:   e Zd ZdZdddZdd ZeeZdd Zd	d
 Z	dS )	RhnServerz`
    An rpc server object that calls doCall for you, and catches lower
    level exceptions
    Nc             C   s*   |d krt j||d| _n|| _d | _d S )N)serverOverridetimeout)r   Z	getServerr   _capabilities)r	   rA   rB   ZrpcServerOverrider   r   r   r      s
    zRhnServer.__init__c             C   sL   | j d krF| jj }|d kr0| jj  | jj }tj | _ | j j| | j S )N)rC   r   Zget_response_headersZregistrationZwelcome_messager   ZCapabilitiesZpopulate)r	   Zheadersr   r   r   Z__get_capabilities   s    




zRhnServer.__get_capabilitiesc             C   s   | j j|| d S )N)r   
add_header)r	   keyvaluer   r   r   rD      s    zRhnServer.add_headerc             C   s   t | j|S )z8 Return a callable object that will do the work for us. )r   r   )r	   r
   r   r   r   r      s    zRhnServer.__getattr__)NNN)
r<   r=   r>   r?   r   Z_RhnServer__get_capabilitiespropertyr   rD   r   r   r   r   r   r@      s   

r@   )Zrhn.tbr   Zup2date_clientr   r   r   r   r   r   ImportErrorZxmlrpc.clientZclientobjectr   r@   r   r   r   r   <module>"   s   x