3 g" @sddlmZddlmZddlmZddlmZddlZddlZy ddlZWne k rjddl j ZYnXGddde Z Gdd d e ZdS) ) raise_with_tb) rpcServer) up2dateErrors) capabilitiesNc@s0eZdZdZddZddZddZdd Zd S) _DoCallWrapperze A callable object that will handle multiple levels of attributes, and catch exceptions. cCs||_||_dS)N)_server _method_name)selfZserver method_namer /usr/lib/python3.6/rhnserver.py__init__5sz_DoCallWrapper.__init__cCst|jd|j|fS)z= Recursively build up the method name to pass to the server. z%s.%s)rrr)r r r r r __getattr__9sz_DoCallWrapper.__getattr__c Ost|j|j}ytj|f||Stjk rLt|jt j dYnt j j k rtt j d}|jd}|jd}d}t|dkr|d}nt|dkr|d}|jd}|dkrttjnttj|YnXdS) z3 Call the method. Catch faults and translate them. z[()],z 'zcertificate verify failedN)getattrrrrZdoCall xmlrpclibZFaultr$_DoCallWrapper__exception_from_faultsysexc_infoOpenSSLZSSLErrorstrstripsplitlenrZSSLCertificateVerifyFailedErrorZ NetworkError)r argskwargsmethoderrorpiecesmessager r r __call__>s$      z_DoCallWrapper.__call__cCs|jdkrtj|j}n|jdkr4tj|j}n|jdkrNtj|j}nr|jdkrhtj|j}nX|jdkrtj|j}n>|jd krtj|j}n$|jd!krtj|j}n |jd"krtj|j}n|jd#krtj|j}n|jd$krtj |j}n|jd%kr"tj |j}nt |jd krBtj |j}n~t |jd krbtj |j}n^t |jdkr~tj}nBt |jdkrtj|j}n"|jdkrtj|j}nt |jdkrtj |j}n|jd&krtj|j}n|jd'kr tj|j}n|jd(kr&tj|j}n|jd)kr@tj|j}n|jd*ksX|jd+krftj|j}nZ|jd,krtj|j}n@|jd-krtj|j}n&|jd.krtj|j}n tj|j}|S)/Nrnr $1<Jic[jiXiYiZiii=iiiiiiiiiiiii/iDiCi)Z faultCoderZ$AuthenticationOrAccountCreationErrorZ faultStringZUnknownMethodExceptionZLoginMinLengthErrorZPasswordMinLengthErrorZValidationErrorZNoBaseChannelErrorZInsuffMgmntEntsErrorZ PasswordErrorabsZ AbuseErrorZAuthenticationTicketErrorZRegistrationDeniedErrorZRhnUuidUniquenessErrorZ DelayErrorZInvalidRegistrationNumberErrorZNotEntitlingErrorZPasswordMaxLengthErrorZActivationKeyUsageLimitErrorZUnableToCreateUserZCommunicationError)r ZfaultZ exceptionr r r Z__exception_from_faultXsr                          z%_DoCallWrapper.__exception_from_faultN)__name__ __module__ __qualname____doc__r rr$rr r r r r.s rc@s:eZdZdZd ddZddZeeZddZd d Z dS) RhnServerz` An rpc server object that calls doCall for you, and catches lower level exceptions NcCs*|dkrtj||d|_n||_d|_dS)N)serverOverridetimeout)rZ getServerr _capabilities)r rArBZrpcServerOverrider r r r s  zRhnServer.__init__cCsL|jdkrF|jj}|dkr0|jj|jj}tj|_|jj||jS)N)rCrZget_response_headersZ registrationZwelcome_messagerZ CapabilitiesZpopulate)r Zheadersr r r Z__get_capabilitiess      zRhnServer.__get_capabilitiescCs|jj||dS)N)r add_header)r keyvaluer r r rDszRhnServer.add_headercCs t|j|S)z8 Return a callable object that will do the work for us. )rr)r r r r r rszRhnServer.__getattr__)NNN) r<r=r>r?r Z_RhnServer__get_capabilitiespropertyrrDrr r r r r@s   r@)Zrhn.tbrZup2date_clientrrrrrr ImportErrorZ xmlrpc.clientZclientobjectrr@r r r r "s     x