use cleaned_data for config form parser

pull/208/head
simon 2 years ago
parent 39a6fbea74
commit b1a7a6a148
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4

@ -83,33 +83,32 @@ class AppConfig:
def update_config(self, form_post): def update_config(self, form_post):
"""update config values from settings form""" """update config values from settings form"""
config = self.config
for key, value in form_post.items(): for key, value in form_post.items():
to_write = value[0] if not value and not isinstance(value, int):
if len(to_write): continue
if to_write == "0":
to_write = False if value in ["0", 0]:
elif to_write == "1": to_write = False
to_write = True elif value == "1":
elif to_write.isdigit(): to_write = True
to_write = int(to_write) else:
to_write = value
config_dict, config_value = key.split("_", maxsplit=1) config_dict, config_value = key.split("_", maxsplit=1)
config[config_dict][config_value] = to_write self.config[config_dict][config_value] = to_write
RedisArchivist().set_message("config", config, expire=False) RedisArchivist().set_message("config", self.config, expire=False)
@staticmethod @staticmethod
def set_user_config(form_post, user_id): def set_user_config(form_post, user_id):
"""set values in redis for user settings""" """set values in redis for user settings"""
for key, value in form_post.items(): for key, value in form_post.items():
to_write = value[0] if not value:
if len(to_write): continue
if to_write.isdigit():
to_write = int(to_write) message = {"status": value}
message = {"status": to_write} redis_key = f"{user_id}:{key}"
redis_key = f"{user_id}:{key}" RedisArchivist().set_message(redis_key, message, expire=False)
RedisArchivist().set_message(redis_key, message, expire=False)
def get_colors(self): def get_colors(self):
"""overwrite config if user has set custom values""" """overwrite config if user has set custom values"""
@ -172,12 +171,11 @@ class ScheduleBuilder:
print("processing form, restart container for changes to take effect") print("processing form, restart container for changes to take effect")
redis_config = self.config redis_config = self.config
for key, value in form_post.items(): for key, value in form_post.items():
to_check = value[0] if key in self.SCHEDULES and value:
if key in self.SCHEDULES and to_check:
try: try:
to_write = self.value_builder(key, to_check) to_write = self.value_builder(key, value)
except ValueError: except ValueError:
print(f"failed: {key} {to_check}") print(f"failed: {key} {value}")
mess_dict = { mess_dict = {
"status": "message:setting", "status": "message:setting",
"level": "error", "level": "error",
@ -188,8 +186,8 @@ class ScheduleBuilder:
return return
redis_config["scheduler"][key] = to_write redis_config["scheduler"][key] = to_write
if key in self.CONFIG and to_check: if key in self.CONFIG and value:
redis_config["scheduler"][key] = int(to_check) redis_config["scheduler"][key] = int(value)
RedisArchivist().set_message("config", redis_config, expire=False) RedisArchivist().set_message("config", redis_config, expire=False)
mess_dict = { mess_dict = {
"status": "message:setting", "status": "message:setting",
@ -199,26 +197,26 @@ class ScheduleBuilder:
} }
RedisArchivist().set_message("message:setting", mess_dict) RedisArchivist().set_message("message:setting", mess_dict)
def value_builder(self, key, to_check): def value_builder(self, key, value):
"""validate single cron form entry and return cron dict""" """validate single cron form entry and return cron dict"""
print(f"change schedule for {key} to {to_check}") print(f"change schedule for {key} to {value}")
if to_check == "0": if value == "0":
# deactivate this schedule # deactivate this schedule
return False return False
if re.search(r"[\d]{1,2}\/[\d]{1,2}", to_check): if re.search(r"[\d]{1,2}\/[\d]{1,2}", value):
# number/number cron format will fail in celery # number/number cron format will fail in celery
print("number/number schedule formatting not supported") print("number/number schedule formatting not supported")
raise ValueError raise ValueError
keys = ["minute", "hour", "day_of_week"] keys = ["minute", "hour", "day_of_week"]
if to_check == "auto": if value == "auto":
# set to sensible default # set to sensible default
values = self.SCHEDULES[key].split() values = self.SCHEDULES[key].split()
else: else:
values = to_check.split() values = value.split()
if len(keys) != len(values): if len(keys) != len(values):
print(f"failed to parse {to_check} for {key}") print(f"failed to parse {value} for {key}")
raise ValueError("invalid input") raise ValueError("invalid input")
to_write = dict(zip(keys, values)) to_write = dict(zip(keys, values))

@ -8,7 +8,6 @@ import json
import urllib.parse import urllib.parse
from time import sleep from time import sleep
from django import forms
from django.conf import settings from django.conf import settings
from django.contrib.auth import login from django.contrib.auth import login
from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.forms import AuthenticationForm
@ -802,23 +801,25 @@ class SettingsView(View):
@staticmethod @staticmethod
def post(request): def post(request):
"""handle form post to update settings""" """handle form post to update settings"""
user_form = UserSettingsForm(request.POST)
form_response = forms.Form(request.POST) if user_form.is_valid():
if form_response.is_valid(): user_form_post = user_form.cleaned_data
form_post = dict(request.POST) if any(user_form_post.values()):
print(form_post) AppConfig().set_user_config(user_form_post, request.user.id)
del form_post["csrfmiddlewaretoken"]
config_handler = AppConfig() app_form = ApplicationSettingsForm(request.POST)
if "application-settings" in form_post: if app_form.is_valid():
del form_post["application-settings"] app_form_post = app_form.cleaned_data
config_handler.update_config(form_post) if app_form_post:
elif "user-settings" in form_post: print(app_form_post)
del form_post["user-settings"] AppConfig().update_config(app_form_post)
config_handler.set_user_config(form_post, request.user.id)
elif "scheduler-settings" in form_post: scheduler_form = SchedulerSettingsForm(request.POST)
del form_post["scheduler-settings"] if scheduler_form.is_valid():
print(form_post) scheduler_form_post = scheduler_form.cleaned_data
ScheduleBuilder().update_schedule_conf(form_post) if any(scheduler_form_post.values()):
print(scheduler_form_post)
ScheduleBuilder().update_schedule_conf(scheduler_form_post)
sleep(1) sleep(1)
return redirect("settings", permanent=True) return redirect("settings", permanent=True)

Loading…
Cancel
Save