bind settings methods to class
This commit is contained in:
@ -14,94 +14,96 @@ class Setting(Tab):
|
||||
super().__init__(answer, type=type)
|
||||
|
||||
def _build(self):
|
||||
self.key_picker()
|
||||
self.keys_controls()
|
||||
|
||||
def key_picker(self):
|
||||
def keys_controls():
|
||||
with ui.column() as col:
|
||||
col.tailwind.width("[560px]").align_items("center")
|
||||
with ui.card() as card:
|
||||
card.tailwind.width("full")
|
||||
key_select = ui.select(list(self.keys.keys()), label="key", new_value_mode="add", with_input=True)
|
||||
key_select.tailwind.width("full")
|
||||
def keys_controls(self):
|
||||
with ui.column() as col:
|
||||
col.tailwind.width("[560px]").align_items("center")
|
||||
with ui.card() as card:
|
||||
card.tailwind.width("full")
|
||||
key_select = ui.select(list(self.keys.keys()), label="key", new_value_mode="add", with_input=True)
|
||||
key_select.tailwind.width("full")
|
||||
with ui.row() as row:
|
||||
row.tailwind.width("full").align_items("center").justify_content("between")
|
||||
with ui.row() as row:
|
||||
row.tailwind.width("full").align_items("center").justify_content("between")
|
||||
with ui.row() as row:
|
||||
row.tailwind.align_items("center")
|
||||
self.help = None
|
||||
key = el.FInput(label="key", on_change=lambda e: key_changed(e), read_only=True)
|
||||
key.bind_value_from(key_select)
|
||||
row.tailwind.align_items("center")
|
||||
self.help = None
|
||||
key = el.FInput(label="key", on_change=lambda e: self.key_changed(e.value), read_only=True)
|
||||
key.bind_value_from(key_select)
|
||||
with ui.button(icon="help"):
|
||||
self.help = ui.tooltip("NA")
|
||||
ui.button(icon="add", on_click=lambda key=key: self.add_key(key.value))
|
||||
ui.separator()
|
||||
self._scroll = ui.scroll_area()
|
||||
self._scroll.tailwind.width("full").height("[480px]")
|
||||
items = storage.answer(self.answer)
|
||||
if self.type is not None and self.type in items:
|
||||
for key, value in items[self.type].items():
|
||||
if isinstance(value, list):
|
||||
self.add_key(key, "[" + ",".join(str(v) for v in value) + "]")
|
||||
else:
|
||||
self.add_key(key, str(value))
|
||||
|
||||
def add_key(self, key: str, value: str = ""):
|
||||
if self.key_valid(key) is True:
|
||||
with self._scroll:
|
||||
with ui.row() as key_row:
|
||||
key_row.tailwind.width("full").align_items("center").justify_content("between")
|
||||
with ui.row() as row:
|
||||
row.tailwind.align_items("center")
|
||||
self._elements[key] = {
|
||||
"control": el.FInput(
|
||||
key,
|
||||
password=True if key == "root_password" else False,
|
||||
autocomplete=self.keys[key]["options"] if key in self.keys and "options" in self.keys[key] else None,
|
||||
on_change=lambda e, key=key: self.set_key(key, e.value),
|
||||
),
|
||||
"row": key_row,
|
||||
}
|
||||
self._elements[key]["control"].value = value
|
||||
if key in self.keys:
|
||||
with ui.button(icon="help"):
|
||||
self.help = ui.tooltip("NA")
|
||||
ui.button(icon="add", on_click=lambda key=key: add_key(key.value))
|
||||
ui.separator()
|
||||
self._scroll = ui.scroll_area()
|
||||
self._scroll.tailwind.width("full").height("[480px]")
|
||||
items = storage.answer(self.answer)
|
||||
if self.type is not None and self.type in items:
|
||||
for key, value in items[self.type].items():
|
||||
if isinstance(value, list):
|
||||
add_key(key, "[" + ",".join(str(v) for v in value) + "]")
|
||||
else:
|
||||
add_key(key, str(value))
|
||||
ui.tooltip(self.keys[key]["description"])
|
||||
ui.button(icon="remove", on_click=lambda _, key=key: self.remove_key(key))
|
||||
|
||||
def add_key(key: str, value: str = ""):
|
||||
if key is not None and key != "" and key not in self._elements.keys():
|
||||
with self._scroll:
|
||||
with ui.row() as key_row:
|
||||
key_row.tailwind.width("full").align_items("center").justify_content("between")
|
||||
with ui.row() as row:
|
||||
row.tailwind.align_items("center")
|
||||
self._elements[key] = {
|
||||
"control": el.FInput(
|
||||
key,
|
||||
password=True if key == "root_password" else False,
|
||||
autocomplete=self.keys[key]["options"] if key in self.keys and "options" in self.keys[key] else None,
|
||||
on_change=lambda e, key=key: set_key(key, e.value),
|
||||
),
|
||||
"row": key_row,
|
||||
}
|
||||
self._elements[key]["control"].value = value
|
||||
if key in self.keys:
|
||||
with ui.button(icon="help"):
|
||||
ui.tooltip(self.keys[key]["description"])
|
||||
ui.button(icon="remove", on_click=lambda _, key=key: remove_key(key))
|
||||
def key_valid(self, key: str) -> bool:
|
||||
if key is not None and key != "" and key not in self._elements.keys():
|
||||
return True
|
||||
return False
|
||||
|
||||
def remove_key(key):
|
||||
self._scroll.remove(self._elements[key]["row"])
|
||||
del self._elements[key]
|
||||
if key in storage.answer(self.answer)[self.type]:
|
||||
del storage.answer(self.answer)[self.type][key]
|
||||
def remove_key(self, key: str):
|
||||
self._scroll.remove(self._elements[key]["row"])
|
||||
del self._elements[key]
|
||||
if key in storage.answer(self.answer)[self.type]:
|
||||
del storage.answer(self.answer)[self.type][key]
|
||||
|
||||
def set_key(key, value: str):
|
||||
v: Any = None
|
||||
if len(value) > 0:
|
||||
if key in self.keys and "type" in self.keys[key]:
|
||||
if self.keys[key]["type"] == "list":
|
||||
v = value[1:-1].split(",")
|
||||
elif self.keys[key]["type"] == "int":
|
||||
v = int(value)
|
||||
else:
|
||||
v = value
|
||||
def set_key(self, key: str, value: str):
|
||||
v: Any = ""
|
||||
if len(value) > 0:
|
||||
if key in self.keys and "type" in self.keys[key]:
|
||||
if self.keys[key]["type"] == "list":
|
||||
v = value[1:-1].split(",")
|
||||
elif self.keys[key]["type"] == "int":
|
||||
v = int(value)
|
||||
else:
|
||||
if len(value) > 2 and value.strip()[0] == "[" and value.strip()[-1] == "]":
|
||||
v = value[1:-1].split(",")
|
||||
elif value.isnumeric():
|
||||
v = int(value)
|
||||
else:
|
||||
v = value
|
||||
if self.type not in storage.answer(self.answer):
|
||||
storage.answer(self.answer)[self.type] = {}
|
||||
storage.answer(self.answer)[self.type][key] = v
|
||||
|
||||
def key_changed(e):
|
||||
if self.help is not None:
|
||||
if e.value in self.keys:
|
||||
self.help.text = self.keys[e.value]["description"]
|
||||
v = value
|
||||
else:
|
||||
if len(value) > 2 and value.strip()[0] == "[" and value.strip()[-1] == "]":
|
||||
v = value[1:-1].split(",")
|
||||
elif value.isnumeric():
|
||||
v = int(value)
|
||||
else:
|
||||
self.help.text = "NA"
|
||||
v = value
|
||||
if self.type not in storage.answer(self.answer):
|
||||
storage.answer(self.answer)[self.type] = {}
|
||||
storage.answer(self.answer)[self.type][key] = v
|
||||
|
||||
keys_controls()
|
||||
def key_changed(self, value: str):
|
||||
if self.help is not None:
|
||||
if value in self.keys:
|
||||
self.help.text = self.keys[value]["description"]
|
||||
else:
|
||||
self.help.text = "NA"
|
||||
|
||||
|
||||
class Global(Setting):
|
||||
|
||||
Reference in New Issue
Block a user