basic overrides values getting implemented

This commit is contained in:
iLLiCiTiT 2020-08-19 12:06:59 +02:00
parent 8b7d565208
commit 7e65e5c830
2 changed files with 150 additions and 12 deletions

View file

@ -304,6 +304,7 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.is_overidable = False
self.ignore_value_changes = False
self.project_name = None
self.input_fields = []
@ -373,7 +374,6 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def _on_project_change(self):
project_name = self.project_list_widget.project_name()
if project_name is None:
overrides = None
self.is_overidable = False
@ -381,12 +381,28 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
overrides = config.project_preset_overrides(project_name)
self.is_overidable = True
self.project_name = project_name
self.ignore_value_changes = True
for item in self.input_fields:
item.apply_overrides(overrides)
self.ignore_value_changes = False
def _save(self):
if self.project_name is None:
self._save_defaults()
else:
self._save_overrides()
def _save_overrides(self):
output = {}
for item in self.input_fields:
value = item.overrides()
if value is not NOT_SET:
output.update(value)
print(json.dumps(output, indent=4))
def _save_defaults(self):
output = {}
for item in self.input_fields:
output.update(item.config_value())
@ -396,3 +412,46 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
output = _output
print(json.dumps(output, indent=4))
return
# TODO check implementation copied from studio
all_values = {}
for item in self.input_fields:
all_values.update(item.config_value())
for key in reversed(self.keys):
_all_values = {key: all_values}
all_values = _all_values
# Skip first key
all_values = all_values["studio"]
# Load studio data with metadata
current_presets = config.studio_presets()
keys_to_file = config.file_keys_from_schema(self.schema)
for key_sequence in keys_to_file:
# Skip first key
key_sequence = key_sequence[1:]
subpath = "/".join(key_sequence) + ".json"
origin_values = current_presets
for key in key_sequence:
if key not in origin_values:
origin_values = {}
break
origin_values = origin_values[key]
new_values = all_values
for key in key_sequence:
new_values = new_values[key]
origin_values.update(new_values)
output_path = os.path.join(
config.studio_presets_path, subpath
)
dirpath = os.path.dirname(output_path)
if not os.path.exists(dirpath):
os.makedirs(dirpath)
with open(output_path, "w") as file_stream:
json.dump(origin_values, file_stream, indent=4)

View file

@ -177,6 +177,11 @@ class BooleanWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
value_changed = QtCore.Signal(object)
@ -321,6 +326,11 @@ class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
value_changed = QtCore.Signal(object)
@ -473,6 +483,11 @@ class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
value_changed = QtCore.Signal(object)
@ -617,6 +632,11 @@ class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
value_changed = QtCore.Signal(object)
@ -757,6 +777,11 @@ class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class RawJsonInput(QtWidgets.QPlainTextEdit):
tab_length = 4
@ -955,6 +980,11 @@ class RawJsonWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class TextListItem(QtWidgets.QWidget, PypeConfigurationWidget):
_btn_size = 20
@ -1248,6 +1278,11 @@ class TextListWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overriden:
return NOT_SET
return self.config_value()
class DictExpandWidget(QtWidgets.QWidget, PypeConfigurationWidget):
value_changed = QtCore.Signal(object)
@ -1473,6 +1508,18 @@ class DictExpandWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.input_fields.append(item)
return item
def overrides(self):
if not self.is_overriden and not self.child_overriden:
return NOT_SET
values = {}
for input_field in self.input_fields:
value = input_field.overrides()
if value is NOT_SET:
continue
values.update(value)
return {self.key: values}
class DictInvisible(QtWidgets.QWidget, PypeConfigurationWidget):
# TODO is not overridable by itself
@ -1612,6 +1659,18 @@ class DictInvisible(QtWidgets.QWidget, PypeConfigurationWidget):
)
self.update_style()
def overrides(self):
if not self.is_overriden and not self.child_overriden:
return NOT_SET
values = {}
for input_field in self.input_fields:
value = input_field.overrides()
if value is NOT_SET:
continue
values.update(value)
return {self.key: values}
class DictFormWidget(QtWidgets.QWidget):
value_changed = QtCore.Signal(object)
@ -1628,7 +1687,7 @@ class DictFormWidget(QtWidgets.QWidget):
self.any_parent_is_group = any_parent_is_group
self.is_modified = False
self.is_overriden = False
self._is_overriden = False
self.is_group = False
super(DictFormWidget, self).__init__(parent)
@ -1646,13 +1705,9 @@ class DictFormWidget(QtWidgets.QWidget):
return
self.value_changed.emit(self)
def item_value(self):
output = {}
for input_field in self.input_fields.values():
# TODO maybe merge instead of update should be used
# NOTE merge is custom function which merges 2 dicts
output.update(input_field.config_value())
return output
@property
def is_overriden(self):
return self._parent.is_overriden
@property
def child_modified(self):
@ -1676,9 +1731,6 @@ class DictFormWidget(QtWidgets.QWidget):
def ignore_value_changes(self):
return self._parent.ignore_value_changes
def config_value(self):
return self.item_value()
def add_children_gui(self, child_configuration, values):
item_type = child_configuration["type"]
key = child_configuration["key"]
@ -1697,6 +1749,28 @@ class DictFormWidget(QtWidgets.QWidget):
self.input_fields[key] = item
return item
def item_value(self):
output = {}
for input_field in self.input_fields.values():
# TODO maybe merge instead of update should be used
# NOTE merge is custom function which merges 2 dicts
output.update(input_field.config_value())
return output
def config_value(self):
return self.item_value()
def overrides(self):
if not self.is_overiden and not self.child_overriden:
return NOT_SET
values = {}
for input_field in self.input_fields:
value = input_field.overrides()
if value is not NOT_SET:
values.update(value)
return values
class ModifiableDictItem(QtWidgets.QWidget, PypeConfigurationWidget):
_btn_size = 20
@ -2064,6 +2138,11 @@ class ModifiableDict(ExpandingWidget, PypeConfigurationWidget):
def config_value(self):
return {self.key: self.item_value()}
def overrides(self):
if not self.is_overiden:
return NOT_SET
return self.config_value()
TypeToKlass.types["boolean"] = BooleanWidget
TypeToKlass.types["text-singleline"] = TextSingleLineWidget