75 lines
1.9 KiB
ReStructuredText
75 lines
1.9 KiB
ReStructuredText
|
|
Settings Table
|
|
==============
|
|
|
|
Sometimes the :term:`config settings<config setting>` may come from a
|
|
:term:`settings table` as opposed to :term:`config file`.
|
|
|
|
The settings table resides in the :term:`app database`.
|
|
|
|
Note that as of writing, the WuttJamaican package *does not address*
|
|
how to create or setup the app database. However it does have the
|
|
ability to query the settings table if present.
|
|
|
|
|
|
Table Structure
|
|
---------------
|
|
|
|
Currently the table *must* be named ``setting`` and have (at least) 2
|
|
columns, ``name`` and ``value``:
|
|
|
|
.. code-block:: sql
|
|
|
|
CREATE TABLE setting (
|
|
name VARCHAR(255) NOT NULL PRIMARY KEY,
|
|
value TEXT
|
|
);
|
|
|
|
|
|
Configuring the DB Connection
|
|
-----------------------------
|
|
|
|
You must add some entries to your config file, to tell the app where
|
|
its database lives, and that it should be used for this purpose:
|
|
|
|
.. code-block:: ini
|
|
|
|
[wutta.config]
|
|
usedb = true
|
|
preferdb = true
|
|
|
|
[wutta.db]
|
|
default.url = postgresql://wutta:wuttapass@localhost/wuttadb
|
|
|
|
This uses `SQLAlchemy`_ under the hood, so it should support anything
|
|
that does; see also
|
|
:meth:`~wuttjamaican.app.AppHandler.make_engine_from_config()`.
|
|
|
|
.. _SQLAlchemy: https://www.sqlalchemy.org
|
|
|
|
See :ref:`where-config-settings-come-from` for more about the
|
|
``usedb`` and ``preferdb`` flags.
|
|
|
|
|
|
Querying the Table
|
|
------------------
|
|
|
|
Normally there is no need to query directly, but rather the
|
|
:term:`config object` may do so automatically.
|
|
|
|
Assuming the config object knows to look in the settings table, then
|
|
it's just a matter of calling its normal
|
|
:meth:`~wuttjamaican.conf.WuttaConfig.get()` and similar methods::
|
|
|
|
from wuttjamaican.conf import make_config
|
|
|
|
config = make_config()
|
|
|
|
config.get('foo.bar')
|
|
config.get_bool('foo.flag')
|
|
|
|
If your config object does *not* check the settings table by default,
|
|
you can always ask it to explicitly::
|
|
|
|
config.get('foo.bar', usedb=True, preferdb=True)
|