3 �Xj%" � @ s� d dl mZ d dl mZ d dlZd dlZyd dlZW n ek rR d dljZY nX G dd� de �Z G dd� de �ZG dd � d e�ZdS ) � )� rpcServer)� up2dateErrorsNc @ s0 e Zd ZdZdd� Zdd� Zdd� Zdd � Zd S )�_DoCallWrapperze A callable object that will handle multiple levels of attributes, and catch exceptions. c C s || _ || _d S )N)�_server�_method_name)�selfZserver�method_name� r �/usr/lib/python3.6/rhnserver.py�__init__2 s z_DoCallWrapper.__init__c C s t | jd| 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__6 s z_DoCallWrapper.__getattr__c O s� t | j| j�}ytj|f|�|�S tjk rH | jtj � d ��Y n� t jjk r� t tj � d �}|jd�}|jd�}d}t|�dkr�|d }nt|�dkr�|d }|jd�}d|kr�tj� �n tj|��Y nX dS ) z3 Call the method. Catch faults and translate them. � z[()]�,� � z 'zcertificate verify failedN)�getattrr r r ZdoCall� xmlrpclibZFault�$_DoCallWrapper__exception_from_fault�sys�exc_info�requests� exceptionsZSSLError�str�strip�split�lenr ZSSLCertificateVerifyFailedErrorZNetworkError)r �args�kwargs�method�error�pieces�messager r r �__call__; s$ z_DoCallWrapper.__call__c C s� |j dkrtj|j�}�n�|j dkr4tj|j�}�n�|j dkrNtj|j�}�nr|j dkrhtj|j�}�nX|j dkr�tj|j�}�n>|j d kr�tj|j�}�n$|j d!kr�tj|j�}�n |j d"kr�tj|j�}�n�|j d#kr�tj|j�}�n�|j d$k�rtj |j�}�n�|j d%k�r"tj |j�}�n�t|j �dk�rBtj|j�}�n~t|j �d k�rbtj |j�}�n^t|j �dk�r~tj� }�nBt|j �dk�r�tj|j�}�n"|j dk�r�tj|j�}�nt|j �dk�r�tj |j�}n�|j d&k�r�tj|j�}n�|j d'k�rtj|j�}n�|j d(k�r&tj|j�}n�|j d)k�r@tj|j�}n�|j d*k�sX|j d+k�rftj|j�}nZ|j d,k�r�tj|j�}n@|j d-k�r�tj|j�}n&|j d.k�r�tj|j�}ntj|j�}|S )/N� r �n r � � � � � � �$ �1 �<