Ë
    åU.j  ã                   ó„   — d 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 dgZe	j                   G d	„ d«      «       Zy)
zPromise implementation.é    N)Údeque)Ú
WeakMethodÚrefé   )ÚThenable)ÚreraiseÚpromisec                   ó„   — e Zd ZdZ eed«      sdZ	 	 	 dd„Zed„ «       Z	d„ Z
d„ Zd	„ Zd
„ Zdd„Zdd„Zdd„Zed„ «       Zy)r	   a~  Promise of future evaluation.

    This is a special implementation of promises in that it can
    be used both for "promise of a value" and lazy evaluation.
    The biggest upside for this is that everything in a promise can also be
    a promise, e.g. filters, callbacks and errbacks can all be promises.

    Usage examples:

    .. code-block:: python

        >>> p = promise()
        >>> p.then(promise(print, ('OK',)))  # noqa
        >>> p.on_error = promise(print, ('ERROR',))  # noqa
        >>> p(20)
        OK, 20
        >>> p.then(promise(print, ('hello',)))  # noqa
        hello, 20


        >>> p.throw(KeyError('foo'))
        ERROR, KeyError('foo')


        >>> p2 = promise()
        >>> p2.then(print)  # noqa
        >>> p2.cancel()
        >>> p(30)

    Example:
    .. code-block:: python

        from vine import promise, wrap

        class Protocol:

            def __init__(self):
                self.buffer = []

            def receive_message(self):
                return self.read_header().then(
                    self.read_body).then(
                        wrap(self.prepare_body))

            def read(self, size, callback=None):
                callback = callback or promise()
                tell_eventloop_to_read(size, callback)
                return callback

            def read_header(self, callback=None):
                return self.read(4, callback)

            def read_body(self, header, callback=None):
                body_size, = unpack('>L', header)
                return self.read(body_size, callback)

            def prepare_body(self, value):
                self.buffer.append(value)
    Úpypy_version_info)ÚfunÚargsÚkwargsÚreadyÚfailedÚvalueÚignore_resultÚreasonÚ
_svpendingÚ
_lvpendingÚon_errorÚ	cancelledÚweakÚ__weakref__Ú__dict__Nc                 ó^  — || _         || _        | j                  ||¬«      | _        |xs d| _        |xs i | _        d| _        d| _        d | _        d | _	        d | _
        d | _        || _        d| _        |�| j                  |«       | j                  r| j                  rt        |«      sJ ‚y y )N©r   r   © F)r   r   Ú_get_fun_or_weakrefr   r   r   r   r   r   r   r   r   r   r   ÚthenÚcallable)Úselfr   r   r   Úcallbackr   r   r   s           úOC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\vine/promises.pyÚ__init__zpromise.__init__T   s­   € ð ˆŒ	Ø*ˆÔØ×+Ñ+°¸$Ð+Ó?ˆŒØ’J˜BˆŒ	Ø’l ˆŒØˆŒ
ØˆŒØˆŒ
ØˆŒð
 ˆŒØˆŒØ ˆŒØˆŒàÐØ�I‰I�hÔà�8Š8Ø—8’8¤¨¤Ð-Ð- ð ó    c                 ó`   — |s| S t        j                  | «      rt        | «      S t        | «      S )zbReturn the callable or a weak reference.

        Handles both bound and unbound methods.
        )ÚinspectÚismethodr   r   r   s     r#   r   zpromise._get_fun_or_weakrefo   s-   € ñ ØˆJä×Ñ˜CÔ Ü˜c“?Ð"ä�s“8ˆOr%   c                 óš   — | j                   rdndj                  t        | «      j                  › dt	        | «      d›�| j                   «      S )Nz<{0} --> {1!r}>z<{0}>z@0xÚx)r   ÚformatÚtypeÚ__name__Úid©r!   s    r#   Ú__repr__zpromise.__repr__}   sC   € Ø%)§X¢XÑ!°7×BÑBÜ�D‹z×"Ñ"Ð# 3¤r¨$£x° lÐ3°T·X±Xó
ð 	
r%   c                 ó€  — d| _         	 | j                  �| j                  j                  «        | j                  �!| j                  D ]  }|j                  «        Œ t	        | j
                  t        «      r| j
                  j                  «        d x| _        x| _        | _        y # d x| _        x| _        | _        w xY w)NT)r   r   Úcancelr   Ú
isinstancer   r   )r!   Úpendings     r#   r2   zpromise.cancel‚   s”   € ØˆŒð		EØ�‰Ð*Ø—‘×&Ñ&Ô(Ø�‰Ð*Ø#Ÿœ�GØ—N‘NÕ$ð  /ä˜$Ÿ-™-¬Ô2Ø—‘×$Ñ$Ô&à@DÐDˆDŒOÐD˜dœo°µøÀÐDˆDŒOÐD˜dœo°µús   ‰BB& Â&B=c                 ó~  — d }| j                   ry |r| j                  |z   n| j                  }|rt        | j                  fi |¤Žn| j                  }| j	                  | j
                  «      }|�2	 | j                  r ||i |¤Ž d}i }n ||i |¤Ž}|fi fx| _        \  }}n||fx| _        \  }}d| _
        | j                  }	|	�	  |	|i |¤Ž d | _        |S | j                  }
	 |
r|
j                  «       } ||i |¤Ž |
rŒd | _        |S # t        $ r | j                  «       cY S w xY w# d | _        w xY w# d | _        w xY w)Nr   T)r   r   Údictr   Ú_fun_is_aliver   r   r   Ú	ExceptionÚthrowr   r   r   Úpopleft)r!   r   r   ÚretvalÚ
final_argsÚfinal_kwargsr   ÚcaÚckÚ	svpendingÚ	lvpendingÚps               r#   Ú__call__zpromise.__call__�   sc  € ØˆØ�>Š>ØÙ)-�T—Y‘Y Ò%°4·9±9ˆ
Ù6<”t˜DŸK™KÑ2¨6Ò2À$Ç+Á+ˆà× Ñ  §¡Ó*ˆØˆ?ð	$Ø×%Ò%Ù˜Ð4 |Ò4Ø�BØ‘Bá  *Ð=°Ñ=�FØ-3¨I°r¨MÐ9�D”J¡ " bøð %/°Ð$<Ð<ˆDŒJ™˜"˜bØˆŒ
Ø—O‘Oˆ	ØÐ ð'Ù˜2Ð$ Ò$à"&�”ð ˆð Ÿ™ˆIð'ÙØ!×)Ñ)Ó+�AÙ�r�L˜R’Lò  ð #'�”Øˆøô' ò $Ø—z‘z“|Ò#ð$ûð #'�•ûð #'�•ús*   Á/0D ÃD' Ã"D3 ÄD$Ä#D$Ä'	D0Ä3	D<c                 ó@   — | j                   r |«       S | j                  S ©N)r   r   )r!   r   s     r#   r7   zpromise._fun_is_aliveµ   s   € ØŸ	š	‰s‹uÐ/ t§x¡xÐ/r%   c                 óÂ  — t        |t        «      st        ||¬«      }| j                  r|j	                  «        |S | j
                  r|j                  | j                  «       n#| j                  r| j                  \  }} ||i |¤Ž | j                  €1| j                  }|�d t        |g«      c| _        | _
        n	|| _        |S | j                  j                  |«       |S )N)r   )r3   r   r	   r   r2   r   r9   r   r   r   r   r   r   Úappend)r!   r"   r   r   r   r@   s         r#   r   zpromise.then¸   s¹   € Ü˜(¤HÔ-Ü˜x°(Ô;ˆHØ�>Š>Ø�O‰OÔØˆOØ�;Š;Ø�N‰N˜4Ÿ;™;Õ'Ø�ZŠZØŸ:™:‰LˆD�&Ù�dÐ%˜fÒ%Ø�?‰?Ð"ØŸ™ˆIØÐ$Ø37¼À	¸{Ó9KÐ0�” ¥à"*�”Ø�Ø�‰×Ñ˜xÔ(Øˆr%   c                 óà   — | j                   sb|�|nt        j                  «       d   }d|c| _        | _        | j
                  r+ | j
                  | j                  |fz   i | j                  ¤Ž y y y )Nr   T)r   ÚsysÚexc_infor   r   r   r   r   )r!   Úexcs     r#   Úthrow1zpromise.throw1Í   sb   € Ø�~Š~Ø˜‘#¬c¯l©l«n¸QÑ.?ˆCØ'+¨SÐ$ˆDŒK˜œØ�}Š}Ø�—‘˜tŸy™y¨C¨6Ñ1ÐA°T·[±[ÓAð ð r%   c                 ó2  — | j                   s¿t        j                  «       d   }|�|n|}	 | j                  |«       | j                  }|�	 |j                  |«       d | _        n8| j
                  }	 |r"|j                  «       j                  |«       |rŒ"d | _        | j                  €#|r |€|�||u r‚ t        t        |«      ||«       y y y y # d | _        w xY w# d | _        w xY w# | j                  €#|r |€|�||u r‚ t        t        |«      ||«       w w w xY w)Nr   )
r   rI   rJ   rL   r   r   r:   r   r   r,   )r!   rK   ÚtbÚ	propagateÚcurrent_excr@   rA   s          r#   r9   zpromise.throwÔ   s  € Ø�~Š~ÜŸ,™,›.¨Ñ+ˆKØ˜‘#¨kˆCð0Ø—‘˜CÔ Ø ŸO™O�	ØÐ(ð/Ø!×(Ñ(¨Ô-à*.˜�à $§¡�Ið/Ù'Ø%×-Ñ-Ó/×6Ñ6°sÔ;ò (ð +/˜œà—=‘=Ð(©YØ�z s {°c¸[Ñ6HØÜœD ›I s¨BÕ/ð .7Ð(ð' øð +/˜�ûð +/˜�ûà—=‘=Ð(©YØ�z s {°c¸[Ñ6HØÜœD ›I s¨BÕ/ð .7Ð(ús;   «C% ÁC ÁC% Á1#C ÂC% Ã	CÃC% Ã	C"Ã"C% Ã%1Dc                 óL   — | j                   r| j                   S | j                  gS rE   )r   r   r/   s    r#   Ú	listenerszpromise.listenersí   s    € à�?Š?Ø—?‘?Ð"Ø—‘Ð Ð r%   )NNNNNFFrE   )NNT)r-   Ú
__module__Ú__qualname__Ú__doc__ÚhasattrrI   Ú	__slots__r$   Ústaticmethodr   r0   r2   rC   r7   r   rL   r9   ÚpropertyrR   r   r%   r#   r	   r	      sz   „ ñ:ñx �3Ð+Ô,ð
ˆ	ð 48Ø49Ø$ó.ð6 ñó ðò
ò
Eò$òL0óó*Bó0ð2 ñ!ó ñ!r%   )rU   r'   rI   Úcollectionsr   Úweakrefr   r   Úabstractr   Úutilsr   Ú__all__Úregisterr	   r   r%   r#   Ú<module>r`      sC   ðÙ Û Û 
Ý ß #å Ý àˆ+€ð 
×Ñ÷c!ð c!ó ñc!r%   