Library for using callbacks to resume your code.
A Python library for using callbacks to resume your code.
resumeback provides a utility function decorator that enables using callback-based interfaces in a single line of execution – a single function.
Full docs are available here: http://fichtefoll.github.io/resumeback/
$ pip install resumeback
resumeback.send_self’s mechanic of sending a generator function a handle to itself is what allows for better flow control using callback-based interfaces. Essentially, it enables a single line of execution.
Following is a function that uses an asynchronous callback mechanism to signal that user input has been made:
from threading import Thread def ask_for_user_input(question, on_done): def watcher(): result = input(question) on_done(result) Thread(target=watcher).start()
The traditional way of using a function like ask_for_user_input would be to define a function of some way, either as a closure or using functools.partial so that we can preserve the state we already accumulated prior to executing said function.
For example like so:
def main(): arbitrary_value = 10 def on_done(number): number = str(number) print("Result:", number * arbitrary_value) ask_for_user_input("Please enter a number", on_done)
Because Python does not have multi-line inline functions, this is rather awkward, because we are jumping from the function call of ask_for_user_input back to our previously defined function on_done – which is only ever going to be called once in this context.
However, using resumeback.send_self, we can do something to flatten our line of execution by passing a callback to resume execution in our original function:
from resumeback import send_self @send_self def main(): this = yield # "this" is now a reference to the just-created generator arbitrary_value = 10 # Yield pauses execution until one of the generator methods is called, # such as `.send`, which we provide as the callback parameter. number = yield ask_for_user_input("Please enter a number", this.send) number = str(number) print("Result:", number * arbitrary_value)
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size & hash SHA256 hash help||File type||Python version||Upload date|
|resumeback-0.1.0-py2.py3-none-any.whl (8.5 kB) Copy SHA256 hash SHA256||Wheel||py2.py3||Dec 10, 2015|
|resumeback-0.1.0.zip (11.5 kB) Copy SHA256 hash SHA256||Source||None||Dec 10, 2015|