Metadata-Version: 2.0
Name: shibari
Version: 0.0.2
Summary: Bind functions to run only once inside a desired scope.
Home-page: https://github.com/jsfehler/shibari
Author: Joshua Fehler
Author-email: jsfehler@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 4 - Beta

shibari
=======

.. image:: https://img.shields.io/pypi/v/shibari.svg
    :target: https://pypi.org/project/shibari
    :alt: PyPI

.. image:: https://img.shields.io/pypi/pyversions/shibari.svg
    :alt: PyPI - Python Version
    :target: https://github.com/jsfehler/shibari

.. image:: https://img.shields.io/github/license/jsfehler/shibari.svg
    :alt: GitHub
    :target: https://github.com/jsfehler/shibari/blob/master/LICENSE

.. image:: https://travis-ci.org/jsfehler/stere.svg?branch=master
    :target: https://travis-ci.org/jsfehler/stere

Bind functions to only run once inside a desired scope.

Documentation
-------------

The Rig class exposes two methods: `bind` and `free`. Bind takes one argument: A name for a scope to bind the function.

Functions wrapped with `bind` will be called only once until the scope it is inside is freed.

Functions wrapped with `free` will free all the bound functions in a specific scope after the function's execution.

Example:

.. code-block:: python

    import shibari


    rig = shibari.Rig('ebi')


    @rig.bind('ebi')
    def timestamp():
        return str(time.time())


    @rig.free('ebi')
    def finish():
        pass


    >>> t = timestamp()
    >>> t2 = timestamp()
    >>> assert t == t2

    >>> finish()

    >>> t3 = timestamp()
    >>> t4 == timestamp()
    >>> assert t != t3
    >>> assert t3 == t4

Functions that take arguments can be bound, but will always return the same result until they are freed.

Example:

.. code-block:: python

    import shibari


    rig = shibari.Rig('ebi')


    @rig.bind('ebi')
    def timestamp(a, b):
        return f'{a}_{str(time.time())}_{b}'


    >>> t = timestamp('goodbye', 'world')
    >>> t2 = timestamp('hello', 'space')
    >>> assert t == t2


