From 8e4b5a2971a923e875a262047576beaccb31562e Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Thu, 14 Sep 2023 13:21:24 -0500 Subject: [PATCH] Add rattail provider for NationBuilder integration and use it to generate NB URLs --- rattail_nationbuilder/app.py | 56 +++++++++++++++++++++ rattail_nationbuilder/nationbuilder/util.py | 12 +++-- setup.cfg | 3 ++ 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 rattail_nationbuilder/app.py diff --git a/rattail_nationbuilder/app.py b/rattail_nationbuilder/app.py new file mode 100644 index 0000000..0fa8ccb --- /dev/null +++ b/rattail_nationbuilder/app.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8; -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2023 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Rattail. If not, see . +# +################################################################################ +""" +App Handler supplement +""" + +from rattail.app import RattailProvider, GenericHandler + + +class NationBuilderProvider(RattailProvider): + """ + App provider for NationBuilder integration. + """ + + def get_nationbuilder_handler(self, **kwargs): + if 'nationbuilder' not in self.handlers: + spec = self.config.get('rattail', 'nationbuilder.handler', + default='rattail_nationbuilder.app:NationBuilderHandler') + factory = self.load_object(spec) + self.handlers['nationbuilder'] = factory(self.config, **kwargs) + return self.handlers['nationbuilder'] + + +class NationBuilderHandler(GenericHandler): + """ + Handler for NationBuilder integration. + """ + + def get_url(self, require=False, **kwargs): + """ + Returns the base URL for the NationBuilder web app. + """ + getter = self.config.require if require else self.config.get + url = getter('nationbuilder', 'url') + if url: + return url.rstrip('/') diff --git a/rattail_nationbuilder/nationbuilder/util.py b/rattail_nationbuilder/nationbuilder/util.py index 2701122..963b935 100644 --- a/rattail_nationbuilder/nationbuilder/util.py +++ b/rattail_nationbuilder/nationbuilder/util.py @@ -24,8 +24,14 @@ NationBuilder utils """ +import warnings + def get_nationbuilder_url(config): - url = config.get('nationbuilder', 'url') - if url: - return url.rstrip('/') + warnings.warn("get_nationbuilder_url() function is deprecated; " + "please use nationbuilder_handler.get_url() instead", + DeprecationWarning, stacklevel=2) + + app = config.get_app() + nationbuilder = app.get_nationbuilder_handler() + return nationbuilder.get_url() diff --git a/setup.cfg b/setup.cfg index 17bf32c..9ae2888 100644 --- a/setup.cfg +++ b/setup.cfg @@ -39,3 +39,6 @@ rattail.config.extensions = rattail.importing = to_rattail.from_nationbuilder.import = rattail_nationbuilder.importing.nationbuilder:FromNationBuilderToRattail + +rattail.providers = + rattail_nationbuilder = rattail_nationbuilder.app:NationBuilderProvider