Commit c8c73eae authored by AUTOMATIC1111's avatar AUTOMATIC1111

fix incorrect save/display of new values in Defaults page in settings

parent 935d9d89
...@@ -7,6 +7,10 @@ from modules import errors ...@@ -7,6 +7,10 @@ from modules import errors
from modules.ui_components import ToolButton from modules.ui_components import ToolButton
def radio_choices(comp): # gradio 3.41 changes choices from list of values to list of pairs
return [x[0] if isinstance(x, tuple) else x for x in getattr(comp, 'choices', [])]
class UiLoadsave: class UiLoadsave:
"""allows saving and restoring default values for gradio components""" """allows saving and restoring default values for gradio components"""
...@@ -28,6 +32,8 @@ class UiLoadsave: ...@@ -28,6 +32,8 @@ class UiLoadsave:
self.error_loading = True self.error_loading = True
errors.display(e, "loading settings") errors.display(e, "loading settings")
def add_component(self, path, x): def add_component(self, path, x):
"""adds component to the registry of tracked components""" """adds component to the registry of tracked components"""
...@@ -73,7 +79,7 @@ class UiLoadsave: ...@@ -73,7 +79,7 @@ class UiLoadsave:
apply_field(x, 'step') apply_field(x, 'step')
if type(x) == gr.Radio: if type(x) == gr.Radio:
apply_field(x, 'value', lambda val: val in x.choices) apply_field(x, 'value', lambda val: val in radio_choices(x))
if type(x) == gr.Checkbox: if type(x) == gr.Checkbox:
apply_field(x, 'value') apply_field(x, 'value')
...@@ -86,10 +92,11 @@ class UiLoadsave: ...@@ -86,10 +92,11 @@ class UiLoadsave:
if type(x) == gr.Dropdown: if type(x) == gr.Dropdown:
def check_dropdown(val): def check_dropdown(val):
choices = radio_choices(x)
if getattr(x, 'multiselect', False): if getattr(x, 'multiselect', False):
return all(value in x.choices for value in val) return all(value in choices for value in val)
else: else:
return val in x.choices return val in choices
apply_field(x, 'value', check_dropdown, getattr(x, 'init_field', None)) apply_field(x, 'value', check_dropdown, getattr(x, 'init_field', None))
...@@ -146,12 +153,14 @@ class UiLoadsave: ...@@ -146,12 +153,14 @@ class UiLoadsave:
for (path, component), new_value in zip(self.component_mapping.items(), values): for (path, component), new_value in zip(self.component_mapping.items(), values):
old_value = current_ui_settings.get(path) old_value = current_ui_settings.get(path)
choices = getattr(component, 'choices', None) choices = radio_choices(component)
if isinstance(new_value, int) and choices: if isinstance(new_value, int) and choices:
if new_value >= len(choices): if new_value >= len(choices):
continue continue
new_value = choices[new_value] new_value = choices[new_value]
if isinstance(new_value, tuple):
new_value = new_value[0]
if new_value == old_value: if new_value == old_value:
continue continue
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment