o
    f>h                     @   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defddZdd Zdd	 Zd
d Z	e
dedefddZdeeef fddZedee fddZedee fddZdeeef defddZded  fddZded  fddZded  fddZded  fddZdef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.
    >   enduripagestarttotal	num_pages	page_sizelast_page_urinext_page_urifirst_page_uriprevious_page_uriresponsec                 C   s0   |  |}|| _|| _|| _t| || _d S N)process_response_version_payload	_solutioniter	load_page_records)selfversionr   solutionpayload r!   C/var/www/html/venv/lib/python3.10/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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_responser    c                 C   sj   d|v rd|d v r||d d  S t | }|| j }t|dkr)||  S d|v r1|d S td)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   	Resourcesz$Page Records can not be deserialized)setkeys	META_KEYSlenpopr   )r   r    r5   r1   r!   r!   r"   r   B   s   
zPage.load_pagec                 C   R   d| j v rd| j d v r| j d d S d| j v r'| j d r'| jj| j d S dS )z`
        :return str: Returns a link to the previous_page_url or None if doesn't exist.
        r0   previous_page_urlr   Nr   r   domainabsolute_urlr$   r!   r!   r"   r:   U   s
   zPage.previous_page_urlc                 C   r9   )z\
        :return str: Returns a link to the next_page_url or None if doesn't exist.
        r0   next_page_urlr   Nr;   r$   r!   r!   r"   r>   c   s
   zPage.next_page_urlc                 C   s   t d)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 classr   )r   r    r!   r!   r"   r(   o   s   zPage.get_instancec                 C   6   | 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)r>   r   r<   twiliorequesttyper   r   r   r/   r!   r!   r"   	next_pagex   
   zPage.next_pagec                    >   | 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.
        Nr@   )r>   r   r<   rA   request_asyncrC   r   rD   r!   r!   r"   next_page_async      

zPage.next_page_asyncc                 C   r?   )zW
        Return the `Page` before this one.
        :return The previous page.
        Nr@   )r:   r   r<   rA   rB   rC   r   rD   r!   r!   r"   previous_page   rF   zPage.previous_pagec                    rG   )zf
        Asynchronously return the `Page` before this one.
        :return The previous page.
        Nr@   )r:   r   r<   rA   rH   rC   r   rD   r!   r!   r"   previous_page_async   rJ   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__r6   r   r#   r%   r'   r&   classmethodr   r   r   strr   propertyr   r:   r>   r(   rE   rI   rK   rL   rM   r!   r!   r!   r"   r      s(    	r   )r,   typingr   r   r   twilio.base.exceptionsr   twilio.http.responser   objectr   r!   r!   r!   r"   <module>   s
    