resumeback icon indicating copy to clipboard operation
resumeback copied to clipboard

Python module for using callbacks to resume your code

============ resumeback

.. image:: https://github.com/FichteFoll/resumeback/workflows/CI/badge.svg :target: https://github.com/FichteFoll/resumeback/actions?query=workflow%3ACI+branch%3Amaster

.. image:: https://coveralls.io/repos/FichteFoll/resumeback/badge.svg :target: https://coveralls.io/github/FichteFoll/resumeback?branch=master

.. image:: https://img.shields.io/pypi/v/resumeback.svg :target: https://pypi.python.org/pypi/resumeback

.. image:: https://img.shields.io/pypi/pyversions/resumeback.svg :target: https://pypi.python.org/pypi/resumeback/

.. .. image:: https://img.shields.io/pypi/dd/resumeback.svg .. :target: https://pypi.python.org/pypi/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

.. code-block:: shell

$ pip install resumeback

Example Usage

.. code-block:: python

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.

__ https://python-poetry.org/ __ https://tox.readthedocs.io/ __ https://flake8.readthedocs.io/ __ https://github.com/features/actions

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.

__ https://forum.sublimetext.com/t/using-generators-for-fun-and-profit-utility-for-developers/14618 __ https://github.com/Varriount