From 1744e8706c78bd284f020f310d87021276ef2392 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 20 Aug 2024 22:13:33 -0500 Subject: [PATCH] fix: add app handler methods: `get_node_title()`, `get_node_type()` --- src/wuttjamaican/app.py | 39 +++++++++++++++++++++++++++++++++++++++ tests/test_app.py | 22 ++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/src/wuttjamaican/app.py b/src/wuttjamaican/app.py index 9b38960..0d1eb77 100644 --- a/src/wuttjamaican/app.py +++ b/src/wuttjamaican/app.py @@ -152,6 +152,45 @@ class AppHandler: return self.config.get(f'{self.appname}.app_title', default=default or self.default_app_title) + def get_node_title(self, default=None): + """ + Returns the configured title for the local app node. + + If none is configured, and no default provided, will return + the value from :meth:`get_title()`. + + :param default: Value to use if the node title is not + configured. + + :returns: Title for the local app node. + """ + title = self.config.get(f'{self.appname}.node_title') + if title: + return title + return self.get_title(default=default) + + def get_node_type(self, default=None): + """ + Returns the "type" of current app node. + + The framework itself does not (yet?) have any notion of what a + node type means. This abstraction is here for convenience, in + case it is needed by a particular app ecosystem. + + :returns: String name for the node type, or ``None``. + + The node type must be configured via file; this cannot be done + with a DB setting. Depending on :attr:`appname` that is like + so: + + .. code-block:: ini + + [wutta] + node_type = warehouse + """ + return self.config.get(f'{self.appname}.node_type', default=default, + usedb=False) + def get_distribution(self, obj=None): """ Returns the appropriate Python distribution name. diff --git a/tests/test_app.py b/tests/test_app.py index d57b756..35ec466 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -179,6 +179,28 @@ class TestAppHandler(TestCase): def test_get_title(self): self.assertEqual(self.app.get_title(), 'WuttJamaican') + def test_get_node_title(self): + + # default + self.assertEqual(self.app.get_node_title(), 'WuttJamaican') + + # will fallback to app title + self.config.setdefault('wuttatest.app_title', "WuttaTest") + self.assertEqual(self.app.get_node_title(), 'WuttaTest') + + # will read from config + self.config.setdefault('wuttatest.node_title', "WuttaNode") + self.assertEqual(self.app.get_node_title(), 'WuttaNode') + + def test_get_node_type(self): + + # default + self.assertIsNone(self.app.get_node_type()) + + # will read from config + self.config.setdefault('wuttatest.node_type', 'warehouse') + self.assertEqual(self.app.get_node_type(), 'warehouse') + def test_get_distribution(self): try: