From 8fbd71f17f0d9a6e11496b50417076e0e60dd7c3 Mon Sep 17 00:00:00 2001 From: Jan Mach <jan.mach@cesnet.cz> Date: Mon, 24 Feb 2020 10:30:31 +0100 Subject: [PATCH] Redesigned working with response_context in AJAX and Snippet view mixins. --- lib/hawat/base.py | 65 ++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/lib/hawat/base.py b/lib/hawat/base.py index be579b44a..37ce54078 100644 --- a/lib/hawat/base.py +++ b/lib/hawat/base.py @@ -658,10 +658,10 @@ class AJAXMixin: redirect = get_redirect_target(target_url, default_url, exclude_url) ) return flask.jsonify( - self.process_response_context() + self.process_response_context(self.response_context) ) - def process_response_context(self): + def process_response_context(self, response_context): """ Perform additional mangling with the response context before generating the response. This method can be useful to delete some context keys, that @@ -671,13 +671,26 @@ class AJAXMixin: :return: Possibly updated response context. :rtype: dict """ + # Prevent certain response context keys to appear in final response. + response_context[self.KW_RESP_VIEW_TITLE] = self.get_view_title() + response_context[self.KW_RESP_VIEW_ICON] = self.get_view_icon() + + flashed_messages = flask.get_flashed_messages(with_categories = True) + if flashed_messages: + for category, message in flashed_messages: + response_context.\ + setdefault(self.KW_RESP_FLASH_MESSAGES, {}).\ + setdefault(category, []).\ + append(message) + # Prevent certain response context keys to appear in final response. for key in ('search_form', 'item_form'): try: - del self.response_context[key] + del response_context[key] except KeyError: pass - return self.response_context + + return response_context def generate_response(self, view_template = None): # pylint: disable=locally-disabled,unused-argument """ @@ -686,19 +699,8 @@ class AJAXMixin: :param str view_template: Override internally preconfigured page template. """ - self.response_context[self.KW_RESP_VIEW_TITLE] = self.get_view_title() - self.response_context[self.KW_RESP_VIEW_ICON] = self.get_view_icon() - - flashed_messages = flask.get_flashed_messages(with_categories = True) - if flashed_messages: - for category, message in flashed_messages: - self.response_context.\ - setdefault(self.KW_RESP_FLASH_MESSAGES, {}).\ - setdefault(category, []).\ - append(message) - return flask.jsonify( - self.process_response_context() + self.process_response_context(self.response_context) ) @@ -754,32 +756,29 @@ class SnippetMixin(AJAXMixin): ) ) - def generate_response(self, view_template = None): # pylint: disable=locally-disabled,unused-argument + def process_response_context(self, response_context): """ - Generate the response appropriate for this view class, in this case JSON - document containing ready to use HTML snippets. - - :param str view_template: Override internally preconfigured page template. + Reimplementation of :py:func:`hawat.base.AJAXMixin.process_response_context`. """ - self.response_context[self.KW_RESP_VIEW_TITLE] = self.get_view_title() - self.response_context[self.KW_RESP_VIEW_ICON] = self.get_view_icon() - self.response_context[self.KW_RESP_RENDER] = flask.request.args.get( + response_context[self.KW_RESP_VIEW_TITLE] = self.get_view_title() + response_context[self.KW_RESP_VIEW_ICON] = self.get_view_icon() + response_context[self.KW_RESP_RENDER] = flask.request.args.get( 'render', self.renders[0] ) or self.renders[0] - if self.response_context[self.KW_RESP_RENDER] not in self.renders: + if response_context[self.KW_RESP_RENDER] not in self.renders: self.abort( 400, gettext( 'Invalid value %(val)s for snippet rendering parameter.', - val = self.response_context[self.KW_RESP_RENDER] + val = response_context[self.KW_RESP_RENDER] ) ) flashed_messages = flask.get_flashed_messages(with_categories = True) if flashed_messages: for category, message in flashed_messages: - self.response_context.\ + response_context.\ setdefault(self.KW_RESP_SNIPPETS, {}).\ setdefault(self.KW_RESP_FLASH_MESSAGES, {}).\ setdefault(category, []).\ @@ -791,9 +790,7 @@ class SnippetMixin(AJAXMixin): ) ) - return flask.jsonify( - self.process_response_context() - ) + return response_context class SQLAlchemyMixin: @@ -814,7 +811,7 @@ class SQLAlchemyMixin: @property def search_by(self): """ - Return model`s attribute (column) according to which to search for the item. + Return model`s attribute (column) according to which to search for a single item. """ return self.dbmodel.id @@ -1112,7 +1109,7 @@ class BaseView(flask.views.View): Return title for the view, that will be displayed in the ``title`` tag of HTML ``head`` element and also as the content of page header in ``h2`` tag. - Default implementation returns the return value of :py:func:`mydojo.base.BaseView.get_menu_title` + Default implementation returns the return value of :py:func:`hawat.base.BaseView.get_menu_title` method by default. :param dict kwargs: Optional parameters. @@ -1126,7 +1123,7 @@ class BaseView(flask.views.View): """ Return menu entry title for the view. - Default implementation returns the return value of :py:func:`mydojo.base.BaseView.get_view_title` + Default implementation returns the return value of :py:func:`hawat.base.BaseView.get_view_title` method by default. :param dict kwargs: Optional parameters. @@ -1140,7 +1137,7 @@ class BaseView(flask.views.View): """ Return menu entry legend for the view (menu entry hover tooltip). - Default implementation returns the return value of :py:func:`mydojo.base.BaseView.get_menu_title` + Default implementation returns the return value of :py:func:`hawat.base.BaseView.get_menu_title` method by default. :param dict kwargs: Optional parameters. -- GitLab