Skip to content

FichteFoll/resumeback

Repository files navigation

resumeback

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.

Documentation

https://fichtefoll.github.io/resumeback/

Installation

$ pip install resumeback

Example Usage

from threading import Thread
from resumeback import send_self

def ask_for_user_input(question, on_done):
    def watcher():
        result = input(question)
        on_done(result)

    Thread(target=watcher).start()

@send_self
def main(this):  # "this" is a reference to the created generator instance
    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 = int(number)
    print("Result:", number * arbitrary_value)

if __name__ == "__main__":
    main()

Development

Requires Python, poetry, and GNU Make.

Use make help to show the available targets.

  • poetry is used for dependency and virtualenv management.
  • tox is used as a test runner for multiple isolated environments.
  • flake8 is used for code linting.
  • Github Actions are used for CI.

Acknowledgements

Project started initially after a forum post from @Varriount on the Sublime Text forum. I just took his idea "to the next (abstraction) level" and made it more convenient to use.