o
    dil                      @   s   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZ ddlmZ G d	d
 d
eZG dd deZG dd dZdS )    )partialN)PaginationError)PageIterator	Paginator)register_feature_id)merge_dictsset_value_from_jmespath   )with_current_contextc                   @   sJ   e Zd Zdd Zeeeddd Zdd Zdd	 Z	d
d Z
dd ZdS )AioPageIteratorc                 C      |   S N	__anext__self r   H/home/ubuntu/.local/lib/python3.10/site-packages/aiobotocore/paginate.py	__aiter__      zAioPageIterator.__aiter__	PAGINATORc                    s   | j di |I d H S )Nr   )_method)r   current_kwargsr   r   r   _make_request   s   zAioPageIterator._make_requestc                 C  s  | j }d }dd | jD }| jd ur|  d }d}d}| jd }d}| | 	 | |I d H }| |}	|rM| jd urE| |	||}d}| 	|	 nd}|
|	}
|
d u rZg }
t|
}d}| jd url|| | j }|dkr~| |	|||| |V  d S |V  ||7 }| |	}tdd | D rd S | jd ur|| jkr|| _d S |d ur||krd| }t|d	| || |}q*)
Nc                 S   s   i | ]}|d qS r   r   ).0keyr   r   r   
<dictcomp>   s    z-AioPageIterator.__anext__.<locals>.<dictcomp>r   TFc                 s   s    | ]}|d u V  qd S r   r   )r   tr   r   r   	<genexpr>P   s    z,AioPageIterator.__anext__.<locals>.<genexpr>z(The same next token was received twice: )message)
_op_kwargs_input_token_starting_token_parse_starting_tokenresult_keys_inject_starting_paramsr   _extract_parsed_response_handle_first_request _record_non_aggregate_key_valuessearchlen
_max_items_truncate_response_get_next_tokenallvaluesresume_tokenr   _inject_token_into_kwargs)r   r   previous_next_token
next_tokentotal_itemsfirst_requestprimary_result_keystarting_truncationresponseparsedcurrent_responsenum_current_responsetruncate_amountr   r   r   r   r      sr   










zAioPageIterator.__anext__c                 C  sP   t |}| 2 z3 d H W }||}t|tr!|D ]}|V  qq|V  q6 d S r   )jmespathcompiler)   
isinstancelist)r   
expressioncompiledpageresultselementr   r   r   r)   e   s   


zAioPageIterator.searchc                 C   s(   t | t| j}dd t|| jD S )Nc                 S   s   g | ]	\}}t ||qS r   )ResultKeyIterator)r   i
result_keyr   r   r   
<listcomp>q   s    z4AioPageIterator.result_key_iters.<locals>.<listcomp>)aioitertoolsteer*   r$   zip)r   teed_resultsr   r   r   result_key_iterso   s   
z AioPageIterator.result_key_itersc                    s   i }| 2 zT3 d H W }|}t |trt|dkr|d }| jD ]9}||}|d u r+q||}|d u r<t||j| qt |trG|| qt |t	t
tfrXt||j||  qq6 t|| j | jd urk| j|d< |S )N   r	   	NextToken)r?   tupler*   r$   r)   r   rA   r@   extendintfloatstrr   non_aggregate_partr0   )r   complete_resultr8   rC   result_expressionresult_valueexisting_valuer   r   r   build_full_resultv   sB   



*

z!AioPageIterator.build_full_resultN)__name__
__module____qualname__r   r
   r   r   r   r   r)   rN   r[   r   r   r   r   r      s    
P
r   c                   @   s   e Zd ZeZdS )AioPaginatorN)r\   r]   r^   r   PAGE_ITERATOR_CLSr   r   r   r   r_      s    r_   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	rF   a  Iterates over the results of paginated responses.

    Each iterator is associated with a single result key.
    Iterating over this object will give you each element in
    the result key list.

    :param pages_iterator: An iterator that will give you
        pages of results (a ``PageIterator`` class).
    :param result_key: The JMESPath expression representing
        the result key.

    c                 C   s   || _ || _d S r   )_pages_iteratorrH   )r   pages_iteratorrH   r   r   r   __init__   s   
zResultKeyIterator.__init__c                 C   r   r   r   r   r   r   r   r      r   zResultKeyIterator.__aiter__c                 C  sD   | j 2 z3 d H W }| j|}|d u rg }|D ]}|V  qq6 d S r   )ra   rH   r)   )r   rC   rD   resultr   r   r   r      s   zResultKeyIterator.__anext__N)r\   r]   r^   __doc__rc   r   r   r   r   r   r   rF      s
    rF   )	functoolsr   rJ   r=   botocore.exceptionsr   botocore.paginater   r   botocore.useragentr   botocore.utilsr   r   contextr
   r   r_   rF   r   r   r   r   <module>   s     