o
    Ni&                     @   sR   d dl mZ zd dlmZ W n ey   d dlmZ Y nw 	 G dd deZd	S )
    )partial)IterableF   )Promise)AnyOptionalTupleUnionListType
Collectionc                   @   sd   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
edd Zdd Zdd ZdS )PromiseList)_values_length_total_resolvedpromise_promise_classc                 C   s\   || _ |   | _d| _d| _d | _| j }||r'|| }| | d S | 	| d S )Nr   )
r   r   r   r   r   is_thenable_try_convert_to_promise_target_init_promise_init)selfvaluespromise_classr   values_as_promise r   H/home/ubuntu/.local/lib/python3.10/site-packages/promise/promise_list.py__init__   s   

zPromiseList.__init__c                 C   s   | j S N)r   r   r   r   r   __len__)   s   zPromiseList.__len__c                 C   sD   |j r| }n|jr| |  d S d| j_|| j| j d S )NT)	is_fulfilled_valueis_rejected_reject_reasonr   _is_async_guaranteed_thenr   )r   r   r   r   r   r   -   s   
zPromiseList._init_promisec                 C   sT   || _ t|tstdt|}| j|d d S |s#| g  d S | 	| d S )Nz.PromiseList requires an iterable. Received {}.F)
r   
isinstancer   	Exceptionformatreprr   _reject_callback_resolve_iterate)r   r   errr   r   r   r   9   s   


zPromiseList._initc                 C   s   | j }d}t|| _d g| j | _| j}t|D ]G\}}||rU|| }|j	r>|
t| j|d| jd  || j|< n|jrJ| | |}n|jrT| | }n| ||}|r_ nq|sgd|_d S d S )NF)iT)r   lenr   r   r   	enumerater   r   r   
is_pending_add_callbacksr   _promise_fulfilled_promise_rejectedr"   r#   r$   r&   r'   )r   r   r   is_resolvedresultr1   valmaybe_promiser   r   r   r/   J   s6   


zPromiseList._iteratec                 C   sB   | j rdS || j|< |  jd7  _| j| jkr| | j dS dS NFr   T)r8   r   r   r   r.   )r   valuer1   r   r   r   r6   o   s   
zPromiseList._promise_fulfilledc                 C   s&   | j rdS |  jd7  _| | dS r<   )r8   r   r%   r   reasonr   r   r   r7   }   s
   
zPromiseList._promise_rejectedc                 C   s
   | j d u S r   )r   r    r   r   r   r8      s   
zPromiseList.is_resolvedc                 C   s0   | j rJ t|| jrJ d | _| j| d S r   )r8   r)   r   r   r   _fulfill)r   r=   r   r   r   r.      s   
zPromiseList._resolvec                 C   s"   | j rJ d | _| j|d d S )NF)r8   r   r   r-   r>   r   r   r   r%      s   
zPromiseList._rejectN)__name__
__module____qualname__	__slots__r   r!   r   r   r/   r6   r7   propertyr8   r.   r%   r   r   r   r   r      s    %

r   N)	functoolsr   collections.abcr   ImportErrorcollectionsr   r   typingr   r   r   r	   r
   r   r   objectr   r   r   r   r   <module>   s    