o
    4g=                     @   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!   \/var/www/html/Testing_prj/Navya-Bakers/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   sZ   d|v rd|d v r||d d  S t | }|| j }t|dkr)||  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   z$Page Records can not be deserialized)setkeys	META_KEYSlenpopr   )r   r    r4   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"   r9   S   s
   zPage.previous_page_urlc                 C   r8   )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=   a   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(   m   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_pagev   
   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;   r@   request_asyncrB   r   rC   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?   )r9   r   r;   r@   rA   rB   r   rC   r!   r!   r"   previous_page   rE   zPage.previous_pagec                    rF   )zf
        Asynchronously return the `Page` before this one.
        :return The previous page.
        Nr?   )r9   r   r;   r@   rG   rB   r   rC   r!   r!   r"   previous_page_async   rI   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__r5   r   r#   r%   r'   r&   classmethodr   r   r   strr   propertyr   r9   r=   r(   rD   rH   rJ   rK   rL   r!   r!   r!   r"   r      s(    	r   )r,   typingr   r   r   twilio.base.exceptionsr   twilio.http.responser   objectr   r!   r!   r!   r"   <module>   s
    