U
    Jh<                     @   sR  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d
dddddddddddddddddddddd d!d"d#d$gZee ee e	eeef ee f d%d&d'Zeee e	eeef ee f d(d)d*Zd0eee eeee ed+d,d-ZG d.d/ d/ZdS )1    N)import_module)AnyCallableDictListOptionalTuple)AbstractProgresserrors)APIDataAPIResponseErrorWarningObject)UAConfig)IncorrectFieldTypeError)API_UNKNOWN_ARGWARN_NEW_VERSION_AVAILABLE)check_for_new_versionzu.pro.version.v1z,u.pro.attach.auto.configure_retry_service.v1z%u.pro.attach.auto.full_auto_attach.v1z'u.pro.attach.auto.should_auto_attach.v1z%u.pro.attach.guest.get_guest_token.v1zu.pro.attach.magic.initiate.v1zu.pro.attach.magic.revoke.v1zu.pro.attach.magic.wait.v1z'u.pro.attach.token.full_token_attach.v1zu.pro.detach.v1zu.pro.packages.summary.v1zu.pro.packages.updates.v1zu.pro.security.cves.v1z!u.pro.security.fix.cve.execute.v1zu.pro.security.fix.cve.plan.v1z!u.pro.security.fix.usn.execute.v1zu.pro.security.fix.usn.plan.v1z'u.pro.security.status.livepatch_cves.v1z(u.pro.security.status.reboot_required.v1zu.pro.services.dependencies.v1zu.pro.services.disable.v1zu.pro.services.enable.v1z u.pro.status.enabled_services.v1zu.pro.status.is_attached.v1zu.apt_news.current_news.v1zu.security.package_manifest.v1zu.unattended_upgrades.status.v1)optionsfieldsreturnc              	   C   s   i }g }| D ]|}z| d\}}W n  tk
rB   tj|dY nX |rL|sXtj|d||kr|ttj|djtj	i d |||< q||fS )N=argtitlecodemeta)
split
ValueErrorr
   ZAPIBadArgsFormatappendr   r   formatmsgname)r   r   kwargswarningsZoptionkv r'   2/usr/lib/python3/dist-packages/uaclient/api/api.py_process_options+   s&    
r)   )datar   r   c                 C   s   i }g }zt | }W n$ t jjk
r:   tj| dY nX | D ]8\}}||krt|tt	j
|djt	ji d |||< qD||fS )N)r*   r   r   )jsonloadsdecoderZJSONDecodeErrorr
   ZAPIJSONDataFormatErroritemsr   r   r   r    r!   r"   )r*   r   r#   r$   Z	json_datar%   r&   r'   r'   r(   _process_dataH   s"    
r/   )endpoint_pathr   r*   cfgprogress_objectr   c              
   C   s6  | t krttj| dS td|  }|j}g }|jrndd |jjD }z@|r`t||\}	}
n|rtt	||\}	}
n
i g  }	}
|
|
 W n2 tjk
r } zt| W Y S d }~X Y nX z|j|	}W n> tk
r } zttj|j| d W Y S d }~X Y nX z*|jr*|j|||d}n|||}W n2 tk
rj } zt| W Y S d }~X Y nX nx|sz|rttj| dS z&|jr|j||d}n
||}W n2 tk
r } zt| W Y S d }~X Y nX t }|r|ttj|djtji d t|j|j| t|j||jd	d
S )N)endpointzuaclient.api.c                 S   s   g | ]
}|j qS r'   )key).0fr'   r'   r(   
<listcomp>u   s     zcall_api.<locals>.<listcomp>)r   r3   )r2   )versionr   )typeZ
attributesr   )Z_schema_versionr$   r*   ) VALID_ENDPOINTSr
   Z	error_outZAPIInvalidEndpointr   r3   options_clsr   r)   r/   extendZAPIErrorZ	from_dictr   ZAPIMissingArgr4   supports_progressfn	ExceptionZAPINoArgsForEndpointr   r   r   r   r    r!   r"   r   r8   r$   r   r   )r0   r   r*   r1   r2   moduler3   Zoption_warningsr   r#   r$   eresultZnew_versionr'   r'   r(   call_apib   s    

   "
 
rC   c                   @   s"   e Zd ZdeeeedddZdS )APIEndpointF)r8   r"   r>   r=   c                 C   s"   || _ || _|| _|| _|| _d S )N)r8   r"   r>   r;   r=   )selfr8   r"   r>   r;   r=   r'   r'   r(   __init__   s
    zAPIEndpoint.__init__N)F)__name__
__module____qualname__strr   boolrF   r'   r'   r'   r(   rD      s    rD   )N) r+   	importlibr   typingr   r   r   r   r   r   Zuaclient.apir	   r
   Zuaclient.api.data_typesr   r   r   Zuaclient.configr   Zuaclient.data_typesr   Zuaclient.messagesr   r   Zuaclient.versionr   r:   rJ   r)   r/   rC   rD   r'   r'   r'   r(   <module>   sl        T