DashMachine/dashmachine/main/modify_config.py
Ross Mountjoy 62191b21b8 ##### Updated to version 0.6!
> Version 0.6 brings DashMachine one big step forward to being a finished product by adding a gui to edit the various settings in the config.ini.

**Changelog**
- improvements to /home including 'pinned' cards, multi-select tag filtering, 'action providers' allowing you to do web searches from the searchbar
- rebuilt sidenav with list view, mirroring filter/search/collapse state of the homepage
- /settings and /home now on same route
- dynamic reloading of settings (no more page reloads)
- dedicated config.ini editor slide-out
- settings editor slide-out
- card editor slide-out
- better access group control
- dedicated documentation pages
- improved documentation
- new system for automatically generating documentation for platforms
- ability to load custom platforms
- added an 'on_starup' method for platforms allowing for registering api routes. (example coming soon)
2020-05-07 09:27:18 -04:00

92 lines
2.9 KiB
Python

import os
from configparser import ConfigParser
from flask import jsonify
from dashmachine.paths import user_data_folder
from dashmachine.main.read_config import read_config
from dashmachine.main.utils import make_dict_list_string, convert_form_boolean
from dashmachine.main.models import DataSources
def modify_config(form):
form = dict(form)
config = ConfigParser(interpolation=None)
try:
config.read(os.path.join(user_data_folder, "config.ini"))
except Exception as e:
return {"msg": f"Invalid Config: {e}."}
ini_section = form.get("ini_section")
ini_id = form.get("ini_id")
prev_name = form.get("prev_name", None)
del form["ini_section"]
del form["ini_id"]
del form["prev_name"]
ds = DataSources.query.filter_by(name=ini_id).first()
if ds and ds.platform == ini_section:
prev_name = ds.name
form["name"] = form["variable_name"]
ini_section = "Data Sources"
del form["variable_name"]
if ini_section == "Settings":
prev_name = "Settings"
action_providers = []
tags = []
for key, value in form.items():
if "action_providers-" in key:
action_providers.append((key, value))
if "tags-" in key:
tags.append((key, value))
dict_list_string, ini_variable, form = make_dict_list_string(
action_providers, form
)
form[ini_variable] = dict_list_string
dict_list_string, ini_variable, form = make_dict_list_string(tags, form)
form[ini_variable] = dict_list_string
if ini_section == "Users":
ini_section = form["username"]
del form["username"]
if ini_section == "Collection":
urls = []
for key, value in form.items():
if "urls-" in key:
urls.append((key, value))
dict_list_string, ini_variable, form = make_dict_list_string(urls, form)
form[ini_variable] = dict_list_string
if ini_section in [
"App",
"Custom Card",
"Access Groups",
"Collection",
]:
ini_section = form["name"]
del form["name"]
if ini_section == form.get("platform", None):
ini_section = form["variable_name"]
del form["variable_name"]
if prev_name != "None":
config.remove_section(prev_name)
if ini_section in config.sections():
while ini_section in config.sections():
ini_section = f"{ini_section}(1)"
if ini_section not in config.sections():
config.add_section(ini_section)
# print(f"{ini_section}")
for key, value in form.items():
# print(f"{key} - {value}")
value = convert_form_boolean(value)
config.set(ini_section, key, value)
config.write(open(os.path.join(user_data_folder, "config.ini"), "w"))
msg = read_config()
if msg["msg"] != "success":
read_config(from_backup=True)
return jsonify(data=msg)