Skip to main content

Promises/A+ implementation for Python

Project description

Promise

This is a implementation of Promises in Python. It is a super set of Promises/A+ designed to have readable, performant code and to provide just the extensions that are absolutely necessary for using promises in Python.

Its fully compatible with the Promises/A+ spec

travis pypi coveralls

Installation

$ pip install pypromise

Usage

The example below shows how you can load the promise library. It then demonstrates creating a promise from scratch. You simply call Promise(fn). There is a complete specification for what is returned by this method in Promises/A+.

from promise import Promise

promise = Promise(
    lambda resolve, reject: resolve('RESOLVED!')
)

API

Before all examples, you will need:

from promise import Promise

Promise(resolver)

This creates and returns a new promise. resolver must be a function. The resolver function is passed two arguments:

  1. resolve should be called with a single argument. If it is called with a non-promise value then the promise is fulfilled with that value. If it is called with a promise (A) then the returned promise takes on the state of that new promise (A).

  2. reject should be called with a single argument. The returned promise will be rejected with that argument.

Static Functions

These methods are invoked by calling Promise.methodName.

Promise.resolve(value)

Converts values and foreign promises into Promises/A+ promises. If you pass it a value then it returns a Promise for that value. If you pass it something that is close to a promise (such as a jQuery attempt at a promise) it returns a Promise that takes on the state of value (rejected or fulfilled).

Promise.reject(value)

Returns a rejected promise with the given value.

Promise.all(list)

Returns a promise for a list. If it is called with a single argument then this returns a promise for a copy of that list with any promises replaced by their fulfilled values. e.g.

p = Promise.all([Promise.resolve('a'), 'b', Promise.resolve('c')]) \
       .then(lambda res: res == ['a', 'b', 'c'])

assert p.value is True

Instance Methods

These methods are invoked on a promise instance by calling myPromise.methodName

promise.then(on_fulfilled, on_rejected)

This method follows the Promises/A+ spec. It explains things very clearly so I recommend you read it.

Either on_fulfilled or on_rejected will be called and they will not be called more than once. They will be passed a single argument and will always be called asynchronously (in the next turn of the event loop).

If the promise is fulfilled then on_fulfilled is called. If the promise is rejected then on_rejected is called.

The call to .then also returns a promise. If the handler that is called returns a promise, the promise returned by .then takes on the state of that returned promise. If the handler that is called returns a value that is not a promise, the promise returned by .then will be fulfilled with that value. If the handler that is called throws an exception then the promise returned by .then is rejected with that exception.

promise.catch(on_rejected)

Sugar for promise.then(None, on_rejected), to mirror catch in synchronous code.

promise.done(on_fulfilled, on_rejected)

The same semantics as .then except that it does not return a promise and any exceptions are re-thrown so that they can be logged (crashing the application in non-browser environments)

Other package functions

is_thenable(obj)

This function checks if the obj is a Promise, or could be promisifyed.

promisify(obj)

This function wraps the obj act as a Promise if possible. Python Futures are supported, with a callback to promise.done when resolved.

Notes

This package is heavily insipired in aplus.

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypromise-0.4.tar.gz (6.8 kB view details)

Uploaded Source

File details

Details for the file pypromise-0.4.tar.gz.

File metadata

  • Download URL: pypromise-0.4.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pypromise-0.4.tar.gz
Algorithm Hash digest
SHA256 54ef0ccde1e0dab3478cd2cc7211213f1c360eda0de39c0ee4321d4d12deffb1
MD5 14991ab65536764130a1239db5172a08
BLAKE2b-256 600c051e825255eb642a1f92688c9956a7a93f1d6d29ee4042c7828c3df946f9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page