U
    M[^                     @   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
 zd dlmZmZ W n ek
rt   Y nX G dd	 d	e jd
ZdS )    N)error)join)config)util)version)OptionalTypec                   @   s`   e 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 )UAServiceClientz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_attrNzOptional[config.UAConfig])cfgr
   c                 C   s   |st  | _n|| _d S )N)r   ZUAConfigr   )r   r   r   r   r   __init__   s    zUAServiceClient.__init__c                 C   s   d t dddS )NzUA-Client/{}application/json)z
user-agentZacceptcontent-type)formatr   Zget_versionr   r   r   r   headers$   s    zUAServiceClient.headersc           	      C   s   | d}|s|  }|ddkr8|r8t|d}tt| j| j	|}zt
j||||d\}}W n tjk
r } zjt|drzt| d}W n tk
r   d }Y nX |r| ||t
j|t|dd ||dW 5 d }~X Y nX ||fS )	N/r   r   zutf-8)urldatar   methodreadcode)r   r   r   )lstripr   getjsondumpsencodeurljoingetattrr   r   r   Zreadurlr   ZURLErrorhasattrloadsr   decode
ValueErrorr   ZUrlError)	r   pathr   r   r   r   ZresponseeZerror_detailsr   r   r   request_url+   s8    
   

 
  zUAServiceClient.request_url)N)NNN)__name__
__module____qualname__propertyabcabstractmethodr   strr   r   r   r*   r   r   r   r   r	      s   r	   )	metaclass)r/   r   Zurllibr   	posixpathr   r"   Zuaclientr   r   r   typingr   r   ImportErrorABCMetar	   r   r   r   r   <module>   s   