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()
|