3
0
Fork 0

feat: allow arbitrary kwargs for config.get() and app.get_setting()

also `app.save_setting()` and `app.delete_setting()`
This commit is contained in:
Lance Edgar 2025-08-08 08:00:05 -05:00
parent e38c45b15a
commit 988749d80e
2 changed files with 20 additions and 6 deletions

View file

@ -586,7 +586,7 @@ class AppHandler:
return short_session(**kwargs) return short_session(**kwargs)
def get_setting(self, session, name): def get_setting(self, session, name, **kwargs):
""" """
Get a :term:`config setting` value from the DB. Get a :term:`config setting` value from the DB.
@ -602,6 +602,9 @@ class AppHandler:
:param name: Name of the setting to get. :param name: Name of the setting to get.
:param \\**kwargs: Any remaining kwargs are ignored by the
default logic, but subclass may override.
:returns: Setting value as string, or ``None``. :returns: Setting value as string, or ``None``.
""" """
from .db import get_setting from .db import get_setting
@ -614,6 +617,7 @@ class AppHandler:
name, name,
value, value,
force_create=False, force_create=False,
**kwargs
): ):
""" """
Save a :term:`config setting` value to the DB. Save a :term:`config setting` value to the DB.
@ -636,6 +640,9 @@ class AppHandler:
exists. exists.
(Theoretically the latter offers a slight efficiency gain.) (Theoretically the latter offers a slight efficiency gain.)
:param \\**kwargs: Any remaining kwargs are ignored by the
default logic, but subclass may override.
""" """
model = self.model model = self.model
@ -652,7 +659,7 @@ class AppHandler:
# set value # set value
setting.value = value setting.value = value
def delete_setting(self, session, name): def delete_setting(self, session, name, **kwargs):
""" """
Delete a :term:`config setting` from the DB. Delete a :term:`config setting` from the DB.
@ -661,6 +668,9 @@ class AppHandler:
:param session: Current :term:`db session`. :param session: Current :term:`db session`.
:param name: Name of the setting to delete. :param name: Name of the setting to delete.
:param \\**kwargs: Any remaining kwargs are ignored by the
default logic, but subclass may override.
""" """
model = self.model model = self.model
setting = session.get(model.Setting, name) setting = session.get(model.Setting, name)

View file

@ -334,6 +334,7 @@ class WuttaConfig:
usedb=None, usedb=None,
preferdb=None, preferdb=None,
session=None, session=None,
**kwargs
): ):
""" """
Retrieve a string value from config. Retrieve a string value from config.
@ -414,6 +415,9 @@ class WuttaConfig:
:param session: Optional SQLAlchemy session to use for DB lookups. :param session: Optional SQLAlchemy session to use for DB lookups.
NOTE: This param is not yet implemented; currently ignored. NOTE: This param is not yet implemented; currently ignored.
:param \\**kwargs: Any remaining kwargs are passed as-is to
the :meth:`get_from_db()` call, if applicable.
:returns: Value as string. :returns: Value as string.
""" """
@ -428,7 +432,7 @@ class WuttaConfig:
# read from db first if so requested # read from db first if so requested
if usedb and preferdb: if usedb and preferdb:
value = self.get_from_db(key, session=session) value = self.get_from_db(key, session=session, **kwargs)
if value is not None: if value is not None:
return value return value
@ -448,7 +452,7 @@ class WuttaConfig:
# read from db last if so requested # read from db last if so requested
if usedb and not preferdb: if usedb and not preferdb:
value = self.get_from_db(key, session=session) value = self.get_from_db(key, session=session, **kwargs)
if value is not None: if value is not None:
return value return value
@ -461,7 +465,7 @@ class WuttaConfig:
if default is not UNSPECIFIED: if default is not UNSPECIFIED:
return default return default
def get_from_db(self, key, session=None): def get_from_db(self, key, session=None, **kwargs):
""" """
Retrieve a config value from database settings table. Retrieve a config value from database settings table.
@ -470,7 +474,7 @@ class WuttaConfig:
""" """
app = self.get_app() app = self.get_app()
with app.short_session(session=session) as s: with app.short_session(session=session) as s:
return app.get_setting(s, key) return app.get_setting(s, key, **kwargs)
def require(self, *args, **kwargs): def require(self, *args, **kwargs):
""" """