U
    lHJe                     @   s4  d dl Z d dlmZ d dlmZmZmZmZmZ d dl	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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eee eeed$d%d&ZG d'd( d(ZdS ))    N)import_module)AnyCallableDictListTuple)errors)APIDataAPIResponseErrorWarningObject)UAConfig)IncorrectFieldTypeError)API_UNKNOWN_ARGWARN_NEW_VERSION_AVAILABLE)check_for_new_versionz,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.magic.initiate.v1zu.pro.attach.magic.revoke.v1zu.pro.attach.magic.wait.v1zu.pro.packages.summary.v1zu.pro.packages.updates.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.status.enabled_services.v1zu.pro.status.is_attached.v1zu.pro.version.v1zu.security.package_manifest.v1zu.unattended_upgrades.status.v1zu.apt_news.current_news.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   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 ]T\}}|rT|shtjd||d||kr|	t
tj|djtji d |||< qD||fS )N)r)   z{}:{}r   r   )jsonloadsdecoderZJSONDecodeErrorr   ZAPIJSONDataFormatErroritemsr   r   r   r   r   r    r!   )r)   r   r"   r#   Z	json_datar$   r%   r&   r&   r'   _process_dataA   s&    
r.   )endpoint_pathr   r)   cfgr   c              
   C   s  | t krttj| dS td|  }|j}g }|jrTd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|||}W n2 tk
rP }
 zt|
 W Y S d }
~
X Y nX n`|s`|rrttj| dS z||}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>m   s     zcall_api.<locals>.<listcomp>)r   r1   )versionr   )typeZ
attributesr   )Z_schema_versionr#   r)   )VALID_ENDPOINTSr   Z	error_outZAPIInvalidEndpointr   r1   options_clsr   r(   r.   extendZAPIErrorZ	from_dictr   ZAPIMissingArgr2   fn	ExceptionZAPINoArgsForEndpointr   r   r   r   r   r    r!   r
   r6   r#   r	   r   )r/   r   r)   r0   moduler1   Zoption_warningsr   r"   r#   eresultZnew_versionr&   r&   r'   call_api^   sp    

 "
 
r@   c                   @   s   e Zd ZeeedddZdS )APIEndpoint)r6   r!   r;   c                 C   s   || _ || _|| _|| _d S )N)r6   r!   r;   r9   )selfr6   r!   r;   r9   r&   r&   r'   __init__   s    zAPIEndpoint.__init__N)__name__
__module____qualname__strr   rC   r&   r&   r&   r'   rA      s   rA   )r*   	importlibr   typingr   r   r   r   r   Zuaclient.apir   Zuaclient.api.data_typesr	   r
   r   Zuaclient.configr   Zuaclient.data_typesr   Zuaclient.messagesr   r   Zuaclient.versionr   r8   rG   r(   r.   r@   rA   r&   r&   r&   r'   <module>   sX        H