
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
UZ                 @   s   d dl mZ d dl mZ yd dlZW n ek
r@   d dlZY nX d dlZejdddZe	edsjeje_
ej
Zdd	idd
idd
idd
idd
idd
idd
idd
idZdd ZG dd dejZdS )    )config)up2dateErrorsNzrhn-client-toolsT)ZfallbackugettextversionZ211)caneatCheesesupportsAutoUp2dateOptionzregistration.finish_messagez xmlrpc.packages.extended_profilezregistration.delta_packagesz registration.update_contact_infoz$registration.extended_update_supportzregistration.smbiosc       	      C   s   d }| j d}g }x|D ]}ydd |j ddD \}}W n tk
rP   wY nX |j dd\}}|d
 dkrvtd |d d }||d	}|j||f qW |S )N,c             S   s   g | ]}|j  qS  )strip).0ir
   r
   "/usr/lib/python3.6/capabilities.py
<listcomp>#   s    zparseCap.<locals>.<listcomp>=   ()z2something broke in parsing the capabilited headers)r   valuer   )split
ValueErrorprintappend)	Z	capstringr   ZcapscapslistcapZkey_versionkeyr   datar
   r
   r   parseCap   s    


r   c               @   sN   e Zd Z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S )Capabilitiesc             C   s&   t j j|  i | _t| _tj | _d S )N)UserDict__init__missingCaps
neededCapsr   ZinitUp2dateConfigcfg)selfr
   r
   r   r!   :   s    zCapabilities.__init__c             C   sJ   xD|j  D ]8\}}|j dkr
t|}x|D ]\}}|| j|< q,W q
W d S )Nzx-rhn-server-capability)itemslowerr   r   )r%   Zheadersr   valr   r   r   r
   r
   r   populateC   s
    zCapabilities.populatec             C   sx   |j d}|dkrF|jd}|d }|d }tt|t|d }|S |jd}t|dkrndd |D }|S t|gS )N-r   r   :c             S   s   g | ]}t |qS r
   )int)r   ar
   r
   r   r   W   s    z0Capabilities.parseCapVersion.<locals>.<listcomp>)findr   ranger,   len)r%   ZversionStringindexrngstartendZversionsZversr
   r
   r   parseCapVersionK   s    


zCapabilities.parseCapVersionc             C   sZ   || j kr"td| }d | j|< n4| j | }t|d | j|d krV| j| | j|< d S )NzXThis client requires the server to support %s, which the current server does not supportr   )r   _r"   r,   r5   r#   )r%   r   ZcapvalueZerrstrr   r
   r
   r   validateCap\   s    

zCapabilities.validateCapc             C   s2   x$| j j D ]}| j|| j |  qW | j  d S )N)r#   keysr7   workaroundMissingCaps)r%   r   r
   r
   r   validateh   s    zCapabilities.validatec             C   s,   || j krd| j|< | j |= n
d| j|< d S )Nr   r   )tmpCapsr$   )r%   r   Z
configItemr
   r
   r   	setConfign   s    


zCapabilities.setConfigc       	      C   sZ  | j | _d}|| jkr | j|= n dddddddd	}x |j D ]}| j|||  q>W g }g }t| jrx>| jD ]4}| j| }|d kr|j||f qp|j||f qpW d
}g }t|rxH|D ]@\}}|d||d | j| d f  }|j||| j| d qW t|r@x0|D ](\}}|d|  }|j||d
d qW t|rVtj||d S )Nr   r   ZsupportsFinishMessageZsupportsUpdateContactInfoZsupportsDeltaPackagesZsupportsExtendedPackageProfileZsupportsEUSZsupportsSMBIOS)r   zregistration.finish_messagez registration.update_contact_infozregistration.delta_packagesz xmlrpc.packages.extended_profilez$registration.extended_update_supportzregistration.smbios z3Needs %s of version: %s but server has version: %s
r   )ZcapNamecapInfoZserverVersionz5Needs %s but server does not support that capability
)	r"   r;   r8   r<   r0   r   r   r   ZServerCapabilityError)	r%   r   ZcapsConfigMapr"   ZwrongVersionCapsr   r>   Z	errStringZ	errorListr
   r
   r   r9   u   sF    

	




z"Capabilities.workaroundMissingCapsNc             C   sR   |dkst |j st|| jkr&dS |rN| j| }t|| j|d krNdS dS )a  Checks if the server supports a capability and optionally a version.
        Returns True or False.

        This complements the neededCaps mechanism provided by this module.
        Using hasCapability makes it easier to do something only if the server
        supports it or to put workaround code in the user of this class. The
        neededCaps mechanism makes it easier to put workaround code in this
        module, which makes sense if it is to be shared.

        'capability' should be a string such as 'registration.foobar'. It can
        be a capability in 'neededCaps' above or one that isn't there. 'version'
        can be a string (where isdigit() is True) or an int.

        NFr   T)strisdigitAssertionErrorr   r,   r5   )r%   Z
capabilityr   r   r
   r
   r   hasCapability   s    

zCapabilities.hasCapability)N)__name__
__module____qualname__r!   r)   r5   r7   r:   r<   r9   rB   r
   r
   r
   r   r   9   s   	<r   )Zup2date_clientr   r   r    ImportErrorcollectionsgettextZtranslationthasattrr   r6   r#   r   r   r
   r
   r
   r   <module>   s(   
