- Added permissions to the partner service configuration

- Corrected a nasty bug where dynamic boolean fields were not returned correctly
This commit is contained in:
Josako
2025-04-11 21:47:41 +02:00
parent 35f0adef1b
commit 3eed546879
10 changed files with 96 additions and 25 deletions

View File

@@ -1,7 +1,7 @@
from flask_wtf import FlaskForm
from wtforms import (IntegerField, FloatField, BooleanField, StringField, TextAreaField, FileField,
validators, ValidationError)
from flask import current_app
from flask import current_app, request
import json
from wtforms.fields.choices import SelectField
@@ -56,13 +56,14 @@ class DynamicFormBase(FlaskForm):
self.dynamic_fields = {}
# Store formdata for later use
self.formdata = formdata
self.raw_formdata = request.form.to_dict()
def _create_field_validators(self, field_def):
"""Create validators based on field definition"""
validators_list = []
# Required validator
if field_def.get('required', False):
if field_def.get('required', False) and field_def.get('type', None) != 'boolean':
validators_list.append(validators.DataRequired())
else:
validators_list.append(validators.Optional())
@@ -343,12 +344,16 @@ class DynamicFormBase(FlaskForm):
data = {}
if collection_name not in self.dynamic_fields:
return data
prefix_length = len(collection_name) + 1 # +1 for the underscore
for full_field_name in self.dynamic_fields[collection_name]:
original_field_name = full_field_name[prefix_length:]
field = getattr(self, full_field_name)
# Parse JSON for special field types
if isinstance(field, (TaggingFieldsField, TaggingFieldsFilterField, DynamicArgumentsField)) and field.data:
if field.type == 'BooleanField':
data[original_field_name] = full_field_name in self.raw_formdata
current_app.logger.debug(f"Value for {original_field_name} is {data[original_field_name]}")
elif isinstance(field, (TaggingFieldsField, TaggingFieldsFilterField, DynamicArgumentsField)) and field.data:
try:
data[original_field_name] = json.loads(field.data)
except json.JSONDecodeError: