a
    !f=                     @   sH   d dl Z d dlmZmZmZ d dlmZ d dlmZ G dd de	Z
dS )    N)AnyDictOptionalTwilioException)Responsec                   @   s  e Zd ZdZh dZi fedddZdd Zdd	 Zd
d Z	e
eedddZeeef dddZeee dddZeee dddZeeef edddZed  dddZed  dddZed  dddZed  dd d!Zedd"d#Zd$S )%Pagez
    Represents a page of records in a collection.

    A `Page` lets you iterate over its records and fetch the next and previous
    pages in the collection.
    >   Zlast_page_uriZ	num_pagesZ	page_sizeendstartnext_page_uriprevious_page_uriuriZfirst_page_uritotalpage)responsec                 C   s0   |  |}|| _|| _|| _t| || _d S N)process_response_version_payload	_solutioniter	load_page_records)selfversionr   Zsolutionpayload r   Q/var/www/html/python-backend/venv/lib/python3.9/site-packages/twilio/base/page.py__init__   s
    
zPage.__init__c                 C   s   | S )z/
        A `Page` is a valid iterator.
        r   r   r   r   r   __iter__&   s    zPage.__iter__c                 C   s   |   S r   )nextr   r   r   r   __next__,   s    zPage.__next__c                 C   s   |  t| jS )z8
        Returns the next record in the `Page`.
        )get_instancer!   r   r   r   r   r   r!   /   s    z	Page.next)r   returnc                 C   s    |j dkrtd|t|jS )z}
        Load a JSON response.

        :param response: The HTTP response.
        :return The JSON-loaded content.
           zUnable to fetch page)status_coder   jsonloadstext)clsr   r   r   r   r   5   s    

zPage.process_response)r   c                 C   s^   d|v r$d|d v r$||d d  S t | }|| j }t|dkrR||  S tddS )z
        Parses the collection of records out of a list payload.

        :param payload: The JSON-loaded content.
        :return list: The list of records.
        metakey   z$Page Records can not be deserializedN)setkeys	META_KEYSlenpopr   )r   r   r/   r,   r   r   r   r   B   s    
zPage.load_page)r$   c                 C   sR   d| j v r&d| j d v r&| j d d S d| j v rN| j d rN| jj| j d S dS )z`
        :return str: Returns a link to the previous_page_url or None if doesn't exist.
        r+   previous_page_urlr   Nr   r   domainZabsolute_urlr   r   r   r   r3   S   s    zPage.previous_page_urlc                 C   sR   d| j v r&d| j d v r&| j d d S d| j v rN| j d rN| jj| j d S dS )z\
        :return str: Returns a link to the next_page_url or None if doesn't exist.
        r+   next_page_urlr   Nr4   r   r   r   r   r6   a   s
    zPage.next_page_url)r   r$   c                 C   s   t ddS )z
        :param dict payload: A JSON-loaded representation of an instance record.
        :return: A rich, resource-dependent object.
        z<Page.get_instance() must be implemented in the derived classNr   )r   r   r   r   r   r#   m   s    zPage.get_instancec                 C   s6   | j s
dS | jjjd| j }t| }|| j|| jS )zR
        Return the `Page` after this one.
        :return The next page.
        NGET)r6   r   r5   twiliorequesttyper   r   r   r*   r   r   r   	next_pagev   s
    zPage.next_pagec                    s<   | j s
dS | jjjd| j I dH }t| }|| j|| jS )za
        Asynchronously return the `Page` after this one.
        :return The next page.
        Nr7   )r6   r   r5   r8   request_asyncr:   r   r;   r   r   r   next_page_async   s    

zPage.next_page_asyncc                 C   s6   | j s
dS | jjjd| j }t| }|| j|| jS )zW
        Return the `Page` before this one.
        :return The previous page.
        Nr7   )r3   r   r5   r8   r9   r:   r   r;   r   r   r   previous_page   s
    zPage.previous_pagec                    s<   | j s
dS | jjjd| j I dH }t| }|| j|| jS )zf
        Asynchronously return the `Page` before this one.
        :return The previous page.
        Nr7   )r3   r   r5   r8   r=   r:   r   r;   r   r   r   previous_page_async   s    

zPage.previous_page_asyncc                 C   s   dS )Nz<Page>r   r   r   r   r   __repr__   s    zPage.__repr__N)__name__
__module____qualname____doc__r0   r   r   r    r"   r!   classmethodr   r   r   strr   propertyr   r3   r6   r#   r<   r>   r?   r@   rA   r   r   r   r   r      s&   	r   )r'   typingr   r   r   Ztwilio.base.exceptionsr   Ztwilio.http.responser   objectr   r   r   r   r   <module>   s   