3
 aG
                 @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dl	mZ d dl	mZ yd dlmZmZ W n ek
r   Y nX G d	d
 d
e jdZdS )    N)error)	urlencode)join)config)util)version)OptionalTypec               @   sd   e Zd ZdZeejddddZeejedddZ	dddd	d
dZ
dd ZdddZdS )UAServiceClientNzType[Exception])returnc             C   s   dS )z1Set in subclasses to the type of API error raisedN )selfr   r   8/usr/lib/python3/dist-packages/uaclient/serviceclient.pyapi_error_cls   s    zUAServiceClient.api_error_clsc             C   s   dS )z@String in subclasses, the UAConfig attribute containing base urlNr   )r   r   r   r   cfg_url_base_attr   s    z!UAServiceClient.cfg_url_base_attrzOptional[config.UAConfig])cfgr   c             C   s   |st j | _n|| _d S )N)r   UAConfigr   )r   r   r   r   r   __init__#   s    zUAServiceClient.__init__c             C   s   dj tj dddS )NzUA-Client/{}zapplication/json)z
user-agentacceptzcontent-type)formatr   get_version)r   r   r   r   headers)   s    zUAServiceClient.headersc             C   s0  |j d}|s| j }|jddkr8|r8tj|jd}tt| j| j	|}|rvdd t
|j D }|dt| 7 }ytj||||| jd\}}W n tjk
r& }	 zrt|	d	rytj|	j jdtjd
}
W n tk
r   d }
Y nX |
r| j|	|
tj|	t|	dd ||dW Y d d }	~	X nX ||fS )N/zcontent-typezapplication/jsonzutf-8c             S   s   i | ]\}}|d k	r||qS )Nr   ).0kvr   r   r   
<dictcomp>;   s   z/UAServiceClient.request_url.<locals>.<dictcomp>?)urldatar   methodtimeoutread)clscode)r$   r   r   )lstripr   getjsondumpsencodeurljoingetattrr   r   sorteditemsr   r   readurlurl_timeoutr   URLErrorhasattrloadsr"   decodeDatetimeAwareJSONDecoder
ValueErrorr   UrlError)r   pathr   r   r    query_paramsr   Zfiltered_paramsresponseeZerror_detailsr   r   r   request_url0   s<    


(zUAServiceClient.request_url)N)NNNN)__name__
__module____qualname__r/   propertyabcabstractmethodr   strr   r   r   r;   r   r   r   r   r
      s   r
   )	metaclass)r@   r'   urllibr   urllib.parser   	posixpathr   r*   uaclientr   r   r   typingr   r	   ImportErrorABCMetar
   r   r   r   r   <module>   s   