From d2c85051c548ac598e3a77d26a3a2a6e74a88c6d Mon Sep 17 00:00:00 2001 From: Leonie Chamberlin-Medd Date: Wed, 13 Aug 2025 14:00:36 +0000 Subject: [PATCH] Add support for custom forms Adds two custom forms: DateForm and CheckBoxForm, to be used by future patches for improving dashboard features. These follow the same format as in the Horizon OpenStack Dashboard [1]. 1. https://opendev.org/openstack/horizon/src/branch/master/horizon/forms Change-Id: I3e708cb7e69778a4632b19cb355c7f595caaf21a Signed-off-by: Leonie Chamberlin-Medd --- cloudkittydashboard/forms/__init__.py | 28 ++++++++++++++++ cloudkittydashboard/forms/base.py | 48 +++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 cloudkittydashboard/forms/__init__.py create mode 100644 cloudkittydashboard/forms/base.py diff --git a/cloudkittydashboard/forms/__init__.py b/cloudkittydashboard/forms/__init__.py new file mode 100644 index 0000000..0514cd6 --- /dev/null +++ b/cloudkittydashboard/forms/__init__.py @@ -0,0 +1,28 @@ +# Copyright 2012 Nebula, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# Importing non-modules that are not used explicitly +from django.forms.fields import BooleanField +from django.forms.fields import DateField +from django.forms.forms import Form + +# Convenience imports for public API components. +from cloudkittydashboard.forms.base import CheckBoxForm +from cloudkittydashboard.forms.base import DateForm + +__all__ = [ + "DateForm", + "CheckBoxForm", + 'DateField', 'BooleanField', + 'Form', +] diff --git a/cloudkittydashboard/forms/base.py b/cloudkittydashboard/forms/base.py new file mode 100644 index 0000000..ee5bfb8 --- /dev/null +++ b/cloudkittydashboard/forms/base.py @@ -0,0 +1,48 @@ +# Copyright 2012 United States Government as represented by the +# Administrator of the National Aeronautics and Space Administration. +# All Rights Reserved. +# +# Copyright 2012 Nebula, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +from django import forms + + +class DateForm(forms.Form): + """A simple form for selecting a range of time.""" + start = forms.DateField(input_formats=("%Y-%m-%d",)) + end = forms.DateField(input_formats=("%Y-%m-%d",)) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.fields['start'].widget.attrs['data-date-format'] = "yyyy-mm-dd" + self.fields['end'].widget.attrs['data-date-format'] = "yyyy-mm-dd" + + +class CheckBoxForm(forms.Form): + """A form for selecting fields to group by in the rating summary.""" + checkbox_fields = ["type", "id", "user_id"] + for field in checkbox_fields: + locals()[field] = forms.BooleanField(required=False) + + def get_selected_fields(self): + """Return list of selected groupby fields.""" + if not self.is_valid(): + return [] + # Get all selected checkbox fields + selected = [ + field for field in self.checkbox_fields + if self.cleaned_data.get(field) + ] + return selected