File: //usr/local/lib/python3.9/site-packages/vine/__pycache__/promises.cpython-39.pyc
a
X>h � @ sf d Z ddlZddlZddlmZ ddlmZmZ ddlm Z ddl
mZ dgZe j
G d d� d��ZdS )
zPromise implementation.� N)�deque)�
WeakMethod�ref� )�Thenable)�reraise�promisec @ s~ e Zd ZdZeed�sdZddd�Zedd � �Z d
d� Z
dd
� Zdd� Zdd� Z
ddd�Zddd�Zddd�Zedd� �ZdS )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__NFc C s� || _ || _| j||d�| _|p"d| _|p,i | _d| _d| _d | _d | _ d | _
d | _|| _d| _
|d urr| �|� | jr�| jr�t|�s�J �d S )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 r r �7/usr/local/lib/python3.9/site-packages/vine/promises.py�__init__T s"