Metadata-Version: 1.1
Name: pyhooks
Version: 1.0.3
Summary: Python hooks for methods
Home-page: https://github.com/Shir0kamii/pyhooks
Author: Shir0kamii
Author-email: shir0kamii@gmail.com
License: UNKNOWN
Download-URL: https://github.com/Shir0kamii/pyhooks/tags
Description: #######
        PyHooks
        #######
        
        .. image:: https://img.shields.io/travis/Shir0kamii/pyhooks/master.svg
            :target: https://travis-ci.org/Shir0kamii/pyhooks
        .. image:: https://img.shields.io/coveralls/Shir0kamii/pyhooks/master.svg
        .. image:: https://img.shields.io/codeclimate/github/Shir0kamii/pyhooks.svg
            :alt:
        
        PyHooks is meant to expose method hook for classes
        
        ======
        Status
        ======
        
        This project is maintained, feel free to open issues or pull requests.
        
        =======
        Purpose
        =======
        
        Have you ever wanted to execute code before or after a method ? PyHooks solve
        this exact problem taking inspiration from marshmallow's hook system.
        
        ============
        Installation
        ============
        
        Like any other published python package, you can install it via `pip` : 
        
        .. code-block:: bash
        
            pip install pyhooks
        
        
        ============
        How to use ?
        ============
        
        To use it, you first need to implement a hooked method. You do this by
        decorating the method with `@Hook`.
        
        For example, suppose you have a class that at some moment save your data (such
        as a database). If you want to be able to plug new behavior, your code
        will look like this:
        
        .. code-block:: python 
        
            from pyhooks import Hook
        
        
            class DatabaseEntry(object):
                @Hook
                def save(self):
                    pass # save implementation here
        
        Thanks to the `@Hook` line, you will now be able to add functions that execute
        before and after the `save` method using the decorators `@precall_register` 
        and `@postcall_register`.
        
        For instance, if you want to increment a version variable before 
        saving, you could do:
        
        .. code-block:: python
        
            from pyhooks import precall_register
        
        
            class VersionnedEntry(DatabaseEntry):
                @precall_register("save")
                def increment_version(self):
                    self.version += 1
        
        
        The decorator directive indicates to your class that `increment_version` should
        be run before the `save` method that is passed to the decorator as argument.
        
        
        ========
        Examples
        ========
        
        You can find some more examples in the `examples/` directory of this
        repository.
        
        ==============
        Advanced usage
        ==============
        
        You can specialize a register decorator by calling it outside of a decorator
        context. The last example would yield:
        
        .. code-block:: python
        
            from pyhooks import precall_register
        
            pre_save = precall_register("save")
        
        
            class VersionnedEntry(DatabaseEntry):
                @pre_save
                def increment_version(self):
                    self.version += 1
        
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Software Development :: Libraries :: Python Modules
