57 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
 | |
| App Providers
 | |
| =============
 | |
| 
 | |
| An :term:`app provider` is a :term:`provider` which can "extend" the
 | |
| main :term:`app handler`.
 | |
| 
 | |
| The provider generally does this by adding extra methods to the app
 | |
| handler.  Note that it does this regardless of which app handler is
 | |
| configured to be used.
 | |
| 
 | |
| :class:`~wuttjamaican.app.AppProvider` is the base class.
 | |
| 
 | |
| 
 | |
| Adding a new Provider
 | |
| ---------------------
 | |
| 
 | |
| First define your provider class.  Note that the method names should
 | |
| include a "prefix" unique to your project (``poser_`` in this case).
 | |
| This is to avoid naming collisions with the app handler itself, as
 | |
| well as other app providers.  So e.g. in ``poser/app.py``::
 | |
| 
 | |
|    from wuttjamaican.app import AppProvider
 | |
| 
 | |
|    class PoserAppProvider(AppProvider):
 | |
|        """
 | |
|        App provider for Poser system
 | |
|        """
 | |
| 
 | |
|        # nb. method name uses 'poser_' prefix
 | |
|        def poser_do_something(self, **kwargs):
 | |
|            """
 | |
|            Do something for Poser
 | |
|            """
 | |
|            print("did something")
 | |
| 
 | |
| Register the :term:`entry point` in your ``setup.cfg``:
 | |
| 
 | |
| .. code-block:: ini
 | |
| 
 | |
|    [options.entry_points]
 | |
| 
 | |
|    wutta.providers =
 | |
|        poser = poser.app:PoserAppProvider
 | |
| 
 | |
| Assuming you have not customized the app handler proper, then you will
 | |
| be using the *default* app handler yet it will behave as though it has
 | |
| the "provided" methods::
 | |
| 
 | |
|    from wuttjamaican.conf import make_config
 | |
| 
 | |
|    # make normal app
 | |
|    config = make_config()
 | |
|    app = config.get_app()
 | |
| 
 | |
|    # whatever this does..
 | |
|    app.poser_do_something()
 | 
