69 lines
1.8 KiB
ReStructuredText
69 lines
1.8 KiB
ReStructuredText
|
|
||
|
App Handler
|
||
|
===========
|
||
|
|
||
|
There is one special "global" type of :term:`handler` which
|
||
|
corresponds to the :term:`app` itself, whereas all other handlers
|
||
|
correspond to some "portion" of the app.
|
||
|
|
||
|
The :term:`app handler` provides:
|
||
|
|
||
|
* various "global" utilities
|
||
|
* primary interface for obtaining all other handlers
|
||
|
|
||
|
The base class and default app handler is
|
||
|
:class:`wuttjamaican.app.AppHandler`.
|
||
|
|
||
|
The :term:`config object` is responsible for creating the app handler
|
||
|
via :meth:`~wuttjamaican.conf.WuttaConfig.get_app()`::
|
||
|
|
||
|
from wuttjamaican.conf import make_config
|
||
|
|
||
|
config = make_config()
|
||
|
app = config.get_app()
|
||
|
|
||
|
|
||
|
Overriding the App Handler
|
||
|
--------------------------
|
||
|
|
||
|
It is expected that many apps will want a more customized app handler.
|
||
|
To do this, first create your app handler class e.g. in
|
||
|
``poser/app.py``::
|
||
|
|
||
|
from wuttjamaican.app import AppHandler
|
||
|
|
||
|
class PoserAppHandler(AppHandler):
|
||
|
"""
|
||
|
Custom app handler for the Poser system.
|
||
|
"""
|
||
|
|
||
|
def make_session(self, **kwargs):
|
||
|
"""
|
||
|
Override this method to specify extra/default params etc.
|
||
|
"""
|
||
|
#kwargs.setdefault('foo', 'bar')
|
||
|
session = super().make_session(**kwargs)
|
||
|
return session
|
||
|
|
||
|
def hello(self):
|
||
|
"""
|
||
|
Extra method to print a hello message.
|
||
|
"""
|
||
|
print("hello from", self.appname)
|
||
|
|
||
|
|
||
|
Then in your config file, specify that your app handler should be used
|
||
|
instead of the default. Note that the config section will need to
|
||
|
match whatever the :term:`app name` is. (And note that the app name
|
||
|
is not necessarily the same as your :term:`package` name!)
|
||
|
|
||
|
.. code-block:: ini
|
||
|
|
||
|
# nb. this is the default
|
||
|
[wutta]
|
||
|
app.handler = poser.app:PoserAppHandler
|
||
|
|
||
|
# but if appname is 'foobar' then it should be this
|
||
|
[foobar]
|
||
|
app.handler = poser.app:PoserAppHandler
|