o
    e*                     @   s   d Z ddlZddlmZ G dd dZG dd deZG dd	 d	eZG d
d deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZdS )z7
Base classes, used to deal with every Plivo resource.
    N)InvalidRequestErrorc                   @   s   e Zd Zdd ZdS )Metac                 C   s"   d | _ d | _d | _d | _d | _d S N)limitnextoffsetprevioustotal_countself r   =/var/www/html/venv/lib/python3.10/site-packages/plivo/base.py__init__   s
   
zMeta.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdddZdS )PlivoGenericResponsezA generic response to cover it all!

    This provides a generic blanket response based on what is received from
    Plivo servers.

    This will be used only during POST and DELETE requests.
    Nc                 C   s>   |D ]	}|| | j |< q|r||v r|| | j d< d S d S d S )Nid__dict__)r   params_dict	id_stringir   r   r   r      s
   zPlivoGenericResponse.__init__r   )r   r   r   __doc__r   r   r   r   r   r      s    r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )ResponseObjectc                 C   s   | j | d S r   )r   update)r   dctr   r   r   r   &   s   zResponseObject.__init__c                 C   s
   || j v S r   r   r   itemr   r   r   __contains__)      
zResponseObject.__contains__c                 C   s.   z| j |W S  ty   | j| Y S w r   )r   __getitem__KeyErrorobjectsr   r   r   r   r!   ,   s
   zResponseObject.__getitem__c                 C   s   | j || d S r   )r   __setitem__)r   keyvaluer   r   r   r$   2   s   zResponseObject.__setitem__c                 C   s   | ` d S r   r   )r   r%   r   r   r   __delitem__5      zResponseObject.__delitem__c                 C      t | jS r   pprintpformatr   r
   r   r   r   __str__8      zResponseObject.__str__c                 C   r)   r   r*   r
   r   r   r   __repr__;   r.   zResponseObject.__repr__N)
r   r   r   r   r   r!   r$   r'   r-   r/   r   r   r   r   r   %   s    r   c                       D   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )ListSessionResponseObjectc                    L   t t| | |dd | _|dd | _|dd | _|dd | _d S )Nerrorsessionsmetaapi_id)superr1   r   getr3   r4   r5   apiIDr   clientr   	__class__r   r   r   @   
   z"ListSessionResponseObject.__init__c                 C      | j d ur
| j  S tg S r   )r4   __iter__iterr
   r   r   r   r@   F      

z"ListSessionResponseObject.__iter__c                 C      | j d ur
t| j S dS Nr   )r4   lenr
   r   r   r   __len__L      

z!ListSessionResponseObject.__len__c                 C   0   | j d ur| j| j| j d}t|S t| jS )Nr6   r5   r4   )r4   r9   r5   r+   r,   strr3   r   response_dictr   r   r   r-   R      


z!ListSessionResponseObject.__str__c                 C   8   | j d ur| j| jdd | j D d}t|S t| jS )Nc                 S      g | ]}|qS r   r   .0sessionr   r   r   
<listcomp>[       z6ListSessionResponseObject.__repr__.<locals>.<listcomp>rI   )r4   r9   r5   rJ   r3   rK   r   r   r   r/   Y      

z"ListSessionResponseObject.__repr__c                 C   
   | j d uS r   r3   r
   r   r   r   	has_error`   r    z#ListSessionResponseObject.has_error
r   r   r   r   r@   rF   r-   r/   rX   __classcell__r   r   r<   r   r1   ?   s    r1   c                       r0   )ListMessagesResponseObjectc                    r2   Nr3   r#   r5   r6   )r7   r[   r   r8   r3   r#   r5   r9   r:   r<   r   r   r   e   r>   z#ListMessagesResponseObject.__init__c                 C   r?   r   r#   r@   rA   r
   r   r   r   r@   l   rB   z#ListMessagesResponseObject.__iter__c                 C   rC   rD   r#   rE   r
   r   r   r   rF   r   rG   z"ListMessagesResponseObject.__len__c                 C   rH   Nr6   r5   r#   r#   r9   r5   r+   r,   rJ   r3   rK   r   r   r   r-   x   rM   z"ListMessagesResponseObject.__str__c                 C   rN   )Nc                 S   rO   r   r   rP   r   r   r   rS      rT   z7ListMessagesResponseObject.__repr__.<locals>.<listcomp>r`   r#   r9   r5   rJ   r3   rK   r   r   r   r/      rU   z#ListMessagesResponseObject.__repr__c                 C   rV   r   rW   r
   r   r   r   rX      r    z$ListMessagesResponseObject.has_errorrY   r   r   r<   r   r[   d       r[   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )ListResponseObjectc                    s   t t| | d S r   )r7   rd   r   r:   r<   r   r   r         zListResponseObject.__init__c                 C   s
   | j  S r   )r#   r@   r
   r   r   r   r@      r    zListResponseObject.__iter__c                 C   s
   t | jS r   )rE   r#   r
   r   r   r   rF      r    zListResponseObject.__len__c                 C   r)   r   )r+   r,   r#   r
   r   r   r   r-      r.   zListResponseObject.__str__c                 C   s   t dd | jD S )Nc                 S   rO   r   r   )rQ   objectr   r   r   rS      rT   z/ListResponseObject.__repr__.<locals>.<listcomp>)rJ   r#   r
   r   r   r   r/      re   zListResponseObject.__repr__)	r   r   r   r   r@   rF   r-   r/   rZ   r   r   r<   r   rd      s    rd   c                       r0   )&ListTollfreeVerificationResponseObjectc                    sL   t t| | |dd | _|dg | _|dd | _|dd | _d S r\   )r7   rg   r   r8   r3   r#   r5   r9   r:   r<   r   r   r      r>   z/ListTollfreeVerificationResponseObject.__init__c                 C   r?   r   r]   r
   r   r   r   r@      rB   z/ListTollfreeVerificationResponseObject.__iter__c                 C   rC   rD   r^   r
   r   r   r   rF      rG   z.ListTollfreeVerificationResponseObject.__len__c                 C   rH   r_   ra   rK   r   r   r   r-      rM   z.ListTollfreeVerificationResponseObject.__str__c                 C   rN   )Nc                 S   rO   r   r   rP   r   r   r   rS      rT   zCListTollfreeVerificationResponseObject.__repr__.<locals>.<listcomp>r`   rb   rK   r   r   r   r/      rU   z/ListTollfreeVerificationResponseObject.__repr__c                 C   rV   r   rW   r
   r   r   r   rX      r    z0ListTollfreeVerificationResponseObject.has_errorrY   r   r   r<   r   rg      rc   rg   c                       sz   e Zd ZdZdZedd Z fddZdd Zd	d
 Z	dd Z
dd Z				dddZdd Zdd Zdd Z  ZS )PlivoResourcezuThe Plivo resource object

    This provides an interface to deal with all Plivo resources and
    sub-resources
    Nc                 C   (   | j | jd }|std| j|S Nz{} must be set)r   r8   _identifier_string
ValueErrorformatr   r&   r   r   r   r         zPlivoResource.idc                    s*   t t| | | jp| jj| _|| _dS )z?Sets up the resource URI along with a hack for Account resourceN)r7   rh   r   _namer=   r   r;   r   r;   datar<   r   r   r      s   
zPlivoResource.__init__c                 C   r)   r   r*   r
   r   r   r   r-      s   zPlivoResource.__str__c                 C   s   |   S r   )r-   r
   r   r   r   r/      r(   zPlivoResource.__repr__c                 K   s   | j jd||fi | dS )z`
        Test Update
        :param params:
        :param path:
        :param random:
        POSTN)r;   request)r   paramspathkwargsr   r   r   r      s   zPlivoResource.updatec                 C   s`   | j stdj| jd| jj| jd|d}|D ]	}|| | j|< q|D ]	}|| | j|< q$| S )Nz>Cannot update a {resource_type} resource without an identifierresource_typers   methodrr   )r   r   rm   rp   r;   send_request_PlivoResource__resource_urir   )r   ru   response_jsonr%   r   r   r   _update   s   zPlivoResource._updateGETFc                 C   s   |s| j j| j||d}n| j j| j| d ||d}|s|S || _|   z|| j | _W n	 ty7   Y nw |dkrC|| _|   | S )Nrz   /rs   )r;   r|   r}   _PlivoResource__resource_json_PlivoResource__parse_jsonrk   r   AttributeError)r   actionr{   ru   parseresponser   r   r   _execute_action   s(   zPlivoResource._execute_actionc                 C   s.   | j stdj| jdt| jj| jddS )Nz>Cannot delete a {resource_type} resource without an identifierrx   DELETE)r{   )r   r   rm   rp   r   r;   r|   r}   r
   r   r   r   delete  s   zPlivoResource.deletec                 C   s4   | j stdj| jd| j| j| _|   | S )Nz;Cannot get a {resource_type} resource without an identifierrx   )	r   r   rm   rp   r;   r|   r}   r   r   r
   r   r   r   r8     s   zPlivoResource.getc                 C   sF   | j rtdj| j| j dd }| jr| j}t| jj| j|dd|S )NzCannot create a {resource_type} resource because another {resource_type} resource exists with the same identifier: {identifier}.)ry   
identifierrs   )rr   r{   )	r   r   rm   rp   rk   r   r;   r|   r}   )r   ru   r   r   r   r   create(  s    zPlivoResource.create)Nr   NF)r   r   r   r   rk   propertyr   r   r-   r/   r   r   r   r   r8   r   rZ   r   r   r<   r   rh      s$    
	
	
rh   c                       s0   e Zd ZdZdZedd Z fddZ  ZS )SecondaryPlivoResourcez
        SecondaryPlivoResource resource object
        This provides an interface to deal with resources where identifier is has a mid level parent
    Nc                 C   ri   rj   )r   r8   _secondary_identifier_stringrl   rm   rn   r   r   r   secondary_id@  ro   z#SecondaryPlivoResource.secondary_idc                    s,   t t| || | jp| jj| _|| _dS )zSets up the PlivoResourceN)r7   r   r   rp   r=   r   r;   rq   r<   r   r   r   G  s   
zSecondaryPlivoResource.__init__)	r   r   r   r   r   r   r   r   rZ   r   r   r<   r   r   9  s    
r   c                   @   s    e Zd ZdZdd Zdd ZdS )PlivoResourceInterfaceTc                 K   s
   || _ d S r   )r;   )r   r;   rw   r   r   r   r   Q  r    zPlivoResourceInterface.__init__c                    s,   t  dr	 jjstd fdd}| S )Nlistz'list is not supported for this resourcec                  3   s>    d} d}	  j | |d}|jsd S |D ]}|V  q|| 7 }q)N   r   T)r   r   )r   r#   )r   r   r   r   r
   r   r   genY  s   z,PlivoResourceInterface.__iter__.<locals>.gen)getattrr=   	_iterableNotImplementedError)r   r   r   r
   r   r@   T  s   zPlivoResourceInterface.__iter__N)r   r   r   r   r   r@   r   r   r   r   r   N  s    r   )r   r+   plivo.exceptionsr   r   rf   r   r   r1   r[   rd   rg   rh   r   r   r   r   r   r   <module>   s   	%&%z