From 58d7de49e97d0f2ff10840a9057ee6d8258a841b Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Fri, 1 Jan 2021 15:27:49 +0100 Subject: [PATCH] Refactor preference_layout_builder to a class named PreferenceLayout --- aleksis/core/util/forms.py | 47 ++++++++++++++++++++------------------ aleksis/core/views.py | 5 ++-- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/aleksis/core/util/forms.py b/aleksis/core/util/forms.py index 7a0442449..edacfa9ab 100644 --- a/aleksis/core/util/forms.py +++ b/aleksis/core/util/forms.py @@ -3,30 +3,33 @@ from collections import OrderedDict from material import Layout, Row -def preference_layout_builder(form_base_class, section=None): +class PreferenceLayout(Layout): """ - Return a django-material Layout object for the given form_base_class. + Create a django-material Layout object for the given form_base_class. :param form_base_class: A Form class used as the base. Must have a ``registry` attribute :param section: A section where the layout builder will load preferences """ - registry = form_base_class.registry - if section: - # Try to use section param - preferences_obj = registry.preferences(section=section) - - else: - # display all preferences in the form - preferences_obj = registry.preferences() - - rows = OrderedDict() - - for preference in preferences_obj: - row_name = preference.get("row", preference.identifier()) - rows.setdefault(row_name, []) - rows[row_name].append(preference.identifier()) - - rows_material = [] - for fields in rows.values(): - rows_material.append(Row(*fields)) - return Layout(*rows_material) + + def __init__(self, form_base_class, section=None): + + registry = form_base_class.registry + if section: + # Try to use section param + preferences_obj = registry.preferences(section=section) + + else: + # display all preferences in the form + preferences_obj = registry.preferences() + + rows = OrderedDict() + + for preference in preferences_obj: + row_name = preference.get("row", preference.identifier()) + rows.setdefault(row_name, []) + rows[row_name].append(preference.identifier()) + + rows_material = [] + for fields in rows.values(): + rows_material.append(Row(*fields)) + super().__init__(*rows_material) diff --git a/aleksis/core/views.py b/aleksis/core/views.py index 93bc5e5de..fb7f4513e 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -75,7 +75,7 @@ from .tables import ( from .util import messages from .util.apps import AppConfig from .util.core_helpers import objectgetter_optional -from .util.forms import preference_layout_builder +from .util.forms import PreferenceLayout @permission_required("core.view_dashboard") @@ -547,8 +547,7 @@ def preferences( form_class = preference_form_builder(form_class, instance=instance, section=section) # Get layout - layout = preference_layout_builder(form_class, section=section) - form_class.layout = layout + form_class.layout = PreferenceLayout(form_class, section=section) if request.method == "POST": form = form_class(request.POST, request.FILES or None) -- GitLab