58 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			58 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()
							 |