U
    !h$                     @   st   d dl mZmZmZ d dlZd dlZd dlmZ d dlZd dl	Z	d dl	m
Z
mZ dd Zdd ZG d	d
 d
eZdS )    )absolute_importdivisionprint_functionN)deepcopy)api_requestorutilc                 C   sX   t | trH|pi }|  }t| t|  D ]}|| ||< q2|S | d k	rT| S dS )N )
isinstancedictcopysetkeys)currentpreviousdiffkey r   W/home/ankuromar296_gmail_com/.local/lib/python3.8/site-packages/telnyx/telnyx_object.py_compute_diff   s    
r   c                 C   sr   | pg } |pg }i }t | D ]P\}}t||kr8|| nd }t|drZ|||t|< qt|||t|< q|S )N	serialize)	enumeratelenhasattrr   strr   )arrayr   paramsivZprevious_itemr   r   r   _serialize_list   s    
r   c                       s  e Zd ZG dd dejZd1 fdd	Zedd Z fdd	Z	 fd
dZ
dd Z fddZ fddZ fddZ fddZdd Zdd Zed2ddZd3 fdd	Zedd  Zd4d!d"Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z fd-d.Z fd/d0Z  ZS )5TelnyxObjectc                       s   e Zd Z fddZ  ZS )zTelnyxObject.ReprJSONEncoderc                    s(   t |tjrt|S ttj| |S N)r	   datetimer   Z_encode_datetimesuperr   ReprJSONEncoderdefault)selfobj	__class__r   r   r$   (   s    
z$TelnyxObject.ReprJSONEncoder.default)__name__
__module____qualname__r$   __classcell__r   r   r'   r   r#   '   s   r#   Nc                    sN   t t|   t | _t | _|| _|| _d | _t	
| d| |rJ|| d< d S )Napi_keyid)r"   r   __init__r   _unsaved_values_transient_values_last_response_retrieve_params	_previousobject__setattr__)r%   r.   r-   last_responser   r'   r   r   r/   -   s    zTelnyxObject.__init__c                 C   s   | j S r    )r2   r%   r   r   r   r7   ;   s    zTelnyxObject.last_responsec                    s&   |D ]}| j | qtt| |S r    )r0   addr"   r   update)r%   Zupdate_dictkr'   r   r   r:   ?   s    zTelnyxObject.updatec                    s4   |d dks|| j kr(tt| ||S || |< d S Nr   _)__dict__r"   r   r6   r%   r;   r   r'   r   r   r6   E   s    zTelnyxObject.__setattr__c              
   C   sP   |d dkrt |z
| | W S  tk
rJ } zt |j W 5 d }~X Y nX d S r<   )AttributeErrorKeyErrorargsr%   r;   errr   r   r   __getattr__L   s    
zTelnyxObject.__getattr__c                    s0   |d dks|| j kr&tt| |S | |= d S r<   )r>   r"   r   __delattr__r%   r;   r'   r   r   rF   U   s    zTelnyxObject.__delattr__c                    sR   |dkrt d|t| |f t| ds0t | _| j| tt| || d S )Nr   zYou cannot set %s to an empty string. We interpret empty strings as None in requests.You may set %s.%s = None to delete the propertyr0   )	
ValueErrorr   r   r   r0   r9   r"   r   __setitem__r?   r'   r   r   rI   [   s    
zTelnyxObject.__setitem__c                    sj   zt t| |W S  tk
rd } z4|| jkrPtd||dt|  f n|W 5 d }~X Y nX d S )Nz%r.  HINT: The %r attribute was set in the past.It was then wiped when refreshing the object with the result returned by Telnyx's API, probably as a result of a save().  The attributes currently available on this object are: %sz, )r"   r   __getitem__rA   r1   joinlistr   rC   r'   r   r   rJ   k   s    
	zTelnyxObject.__getitem__c                    s*   t t| | t| dr&| j| d S )Nr0   )r"   r   __delitem__r   r0   removerG   r'   r   r   rM   {   s    
zTelnyxObject.__delitem__c                 C   s   |  | d S r    )r:   )r%   stater   r   r   __setstate__   s    zTelnyxObject.__setstate__c                 C   s$   t | | dd | jft| f}|S Nr.   )typegetr-   r
   )r%   Zreduce_valuer   r   r   
__reduce__   s
    zTelnyxObject.__reduce__c                 C   s(   | | d||d}|j|||d |S )Nr.   )r-   r7   )rS   refresh_from)clsvaluesr   r7   instancer   r   r   construct_from   s    zTelnyxObject.construct_fromFc                    s   |pt |dd | _|p t |dd | _|r:| jt| | _n0t|  t| }| j|B | _t | _|   | jt| | _t	|D ]"\}}t
t| |t|| q|| _d S )Nr-   r2   )getattrr-   r2   r0   r   r   r1   clearsix	iteritemsr"   r   rI   r   convert_to_telnyx_objectr4   )r%   rW   r-   partialr7   removedr;   r   r'   r   r   rU      s    
 
zTelnyxObject.refresh_fromc                 C   s   d S r    r   )rV   r   r   r   api_base   s    zTelnyxObject.api_basec                 C   sB   |d kr| j }tj| j|  d}|||||\}}t||S )N)r   ra   )r3   r   ZAPIRequestorr-   ra   requestr   r^   )r%   methodurlr   headersZ	requestorresponser-   r   r   r   rb      s     zTelnyxObject.requestc                 C   s   t | jg}t| dtjr.|| d t| dtjrV|d| df  dd|tt	| t
| f }tjr|dS |S d S )NZrecord_typer.   zid=%sz<%s at %s> JSON: %s zutf-8)rR   r)   r	   rS   r\   string_typesappendrK   hexr.   r   PY2encode)r%   Zident_partsZunicode_reprr   r   r   __repr__   s    

zTelnyxObject.__repr__c                 C   s   t j|  dd| jdS )NT   )	sort_keysindentrV   )jsondumpsto_dict_recursiver#   r8   r   r   r   __str__   s       zTelnyxObject.__str__c                 C   s   t | S r    )r
   r8   r   r   r   to_dict   s    zTelnyxObject.to_dictc                 C   s6   t | }t|D ]\}}t|tr| ||< q|S r    )r
   r\   r]   r	   r   rs   )r%   dr;   r   r   r   r   rs      s
    
zTelnyxObject.to_dict_recursivec                 C   s   i }| j pt }|p| jpi }t| D ]\}}|dks(t|trP|drPq(q(t|tj	j
jrdq(q(t|dr|||d }|i kr|||< q(||krt|||d ||< q(|dkr(|d k	r(t|||d ||< q(t|}|S )Nr.   r=   r   Zadditional_owners)r0   r   r4   r\   r]   r	   r   
startswithtelnyxZapi_resourcesZabstractZAPIResourcer   r   rS   r   r   r   Zrewrite_reserved_words)r%   r   r   Zunsaved_keysr;   r   childr   r   r   r      s$    


zTelnyxObject.serializec                    sD   t | d| j}| j|_t| D ]\}}tt ||| q$|S rQ   )r   rS   r-   r3   r\   r]   r"   rI   )r%   copiedr;   r   r'   r   r   __copy__   s
    zTelnyxObject.__copy__c                    sD   |   }||t| < t| D ] \}}tt||t|| q|S r    )r{   r.   r\   r]   r"   r   rI   r   )r%   memorz   r;   r   r'   r   r   __deepcopy__  s
    zTelnyxObject.__deepcopy__)NNN)N)NFN)NN)r)   r*   r+   rq   JSONEncoderr#   r/   propertyr7   r:   r6   rE   rF   rI   rJ   rM   rP   rT   classmethodrY   rU   ra   rb   rm   rt   ru   rs   r   r{   r}   r,   r   r   r'   r   r   &   s4   
	



r   )
__future__r   r   r   r!   rq   r   r   r\   rx   r   r   r   r   r
   r   r   r   r   r   <module>   s   
