From a1d3b8180701faae9270a8675197a613bd8480a4 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:03:52 +0200 Subject: [PATCH 01/15] renamed `1_examples.json` to `example_schema.json` --- .../system_schema/{1_examples.json => example_schema.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pype/tools/settings/settings/gui_schemas/system_schema/{1_examples.json => example_schema.json} (100%) diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/1_examples.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json similarity index 100% rename from pype/tools/settings/settings/gui_schemas/system_schema/1_examples.json rename to pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json From 39cf227447f2d82d8631dbae40ec3199a4afacfb Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:09:48 +0200 Subject: [PATCH 02/15] added example template --- .../system_schema/example_template.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 pype/tools/settings/settings/gui_schemas/system_schema/example_template.json diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json new file mode 100644 index 0000000000..bf09ea6716 --- /dev/null +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json @@ -0,0 +1,14 @@ +[ + { + "type": "rawj-json", + "label": "{env_label}", + "key": "{env_group_key}", + "env_group_key": "{env_group_key}" + }, { + "type": "path-widget", + "key": "executable_paths", + "label": "{executable_label} - Full paths to executables", + "multiplatform": true, + "multipath": true + } +] From be135af8cee02d6c762311c04bbbec07b5799446 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:17:28 +0200 Subject: [PATCH 03/15] fixed example template --- .../gui_schemas/system_schema/example_template.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json index bf09ea6716..fb629c6170 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json @@ -1,13 +1,13 @@ [ { - "type": "rawj-json", - "label": "{env_label}", - "key": "{env_group_key}", - "env_group_key": "{env_group_key}" + "type": "raw-json", + "label": "{host_label} Environments", + "key": "{host_name}_environments", + "env_group_key": "{host_name}" }, { "type": "path-widget", - "key": "executable_paths", - "label": "{executable_label} - Full paths to executables", + "key": "{host_name}_executables", + "label": "{host_label} - Full paths to executables", "multiplatform": true, "multipath": true } From 3d07421dd95acc7a16dc2efa648a0943aecc79ec Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:17:43 +0200 Subject: [PATCH 04/15] added schema template to example schema --- .../system_schema/example_schema.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json index 06ce23321a..ddd4fc7235 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json @@ -5,6 +5,27 @@ "is_file": true, "children": [ { + "type": "dict", + "key": "schema_templates", + "label": "Schema template examples", + "children": [ + { + "type": "schema_template", + "name": "example_template", + "template_data": { + "host_label": "Maya 2019", + "host_name": "maya_2019" + } + }, { + "type": "schema_template", + "name": "example_template", + "template_data": { + "host_label": "Maya 2020", + "host_name": "maya_2020" + } + } + ] + }, { "key": "env_group_test", "label": "EnvGroup Test", "type": "dict", From 42fa4c9871ddb9b7b07eab198f39fb6884ba7835 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:18:58 +0200 Subject: [PATCH 05/15] schemas are also loaded in all subfolders --- pype/tools/settings/settings/widgets/lib.py | 27 ++++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index 87f6554612..69f88df954 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -389,19 +389,22 @@ def gui_schema(subfolder, main_schema_name): ) loaded_schemas = {} - for filename in os.listdir(dirpath): - basename, ext = os.path.splitext(filename) - if ext != ".json": - continue + for root, _, filenames in os.walk(dirpath): + for filename in filenames: + basename, ext = os.path.splitext(filename) + if ext != ".json": + continue - filepath = os.path.join(dirpath, filename) - with open(filepath, "r") as json_stream: - try: - schema_data = json.load(json_stream) - except Exception as e: - raise Exception((f"Unable to parse JSON file {json_stream}\n " - f" - {e}")) from e - loaded_schemas[basename] = schema_data + filepath = os.path.join(root, filename) + with open(filepath, "r") as json_stream: + try: + schema_data = json.load(json_stream) + except Exception as exc: + raise Exception(( + f"Unable to parse JSON file {filepath}\n{exc}" + )) from exc + + loaded_schemas[basename] = schema_data main_schema = _fill_inner_schemas( loaded_schemas[main_schema_name], From c81d491198896290c7b0589f675514b7e58fd267 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:19:35 +0200 Subject: [PATCH 06/15] if schema json contain list it is stored as template --- pype/tools/settings/settings/widgets/lib.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index 69f88df954..377f947d83 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -389,6 +389,7 @@ def gui_schema(subfolder, main_schema_name): ) loaded_schemas = {} + loaded_schema_templates = {} for root, _, filenames in os.walk(dirpath): for filename in filenames: basename, ext = os.path.splitext(filename) @@ -403,8 +404,10 @@ def gui_schema(subfolder, main_schema_name): raise Exception(( f"Unable to parse JSON file {filepath}\n{exc}" )) from exc - - loaded_schemas[basename] = schema_data + if isinstance(schema_data, list): + loaded_schema_templates[basename] = schema_data + else: + loaded_schemas[basename] = schema_data main_schema = _fill_inner_schemas( loaded_schemas[main_schema_name], From dd29192ffe970587b5288043ae7994911670ecd6 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:20:48 +0200 Subject: [PATCH 07/15] implemented filling data of schema template --- pype/tools/settings/settings/widgets/lib.py | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index 377f947d83..7e4d5b126c 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -1,4 +1,5 @@ import os +import re import json import copy from pype.settings.lib import M_OVERRIDEN_KEY, M_ENVIRONMENT_KEY @@ -15,6 +16,8 @@ METADATA_KEY = type("METADATA_KEY", (), {})() OVERRIDE_VERSION = 1 CHILD_OFFSET = 15 +key_pattern = re.compile(r"(\{.*?[^{0]*\})") + def convert_gui_data_with_metadata(data, ignored_keys=None): if not data or not isinstance(data, dict): @@ -96,6 +99,58 @@ def convert_overrides_to_gui_data(data, first=True): return output +def _fill_schema_template_data( + template, template_data, required_keys=None, missing_keys=None +): + first = False + if required_keys is None: + first = True + required_keys = set() + missing_keys = set() + + if not template: + output = template + + elif isinstance(template, list): + output = [] + for item in template: + output.append(_fill_schema_template_data( + item, template_data, required_keys, missing_keys + )) + + elif isinstance(template, dict): + output = {} + for key, value in template.items(): + output[key] = _fill_schema_template_data( + value, template_data, required_keys, missing_keys + ) + + elif isinstance(template, str): + # TODO find much better way how to handle filling template data + for replacement_string in key_pattern.findall(template): + key = str(replacement_string[1:-1]) + required_keys.add(key) + if key not in template_data: + missing_keys.add(key) + continue + + value = template_data[key] + if replacement_string == template: + # Replace the value with value from templates data + # - with this is possible to set value with different type + template = value + else: + # Only replace the key in string + template = template.replace(replacement_string, value) + output = template + + else: + output = template + + if first and missing_keys: + raise SchemaTemplateMissingKeys(missing_keys, required_keys) + + return output def _fill_inner_schemas(schema_data, schema_collection): if schema_data["type"] == "schema": raise ValueError("First item in schema data can't be schema.") From 3a53f8a9441e471d989e5be22dff2fcfb10d6d92 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:21:26 +0200 Subject: [PATCH 08/15] implemented function for handling `schema_template` item --- pype/tools/settings/settings/widgets/lib.py | 39 +++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index 7e4d5b126c..aec28c949c 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -151,6 +151,45 @@ def _fill_schema_template_data( raise SchemaTemplateMissingKeys(missing_keys, required_keys) return output + + +def _fill_schema_template(child_data, schema_collection, schema_templates): + template_name = child_data["name"] + template = schema_templates.get(template_name) + if template is None: + if template_name in schema_collection: + raise KeyError(( + "Schema \"{}\" is used as `schema_template`" + ).format(template_name)) + raise KeyError("Schema template \"{}\" was not found".format( + template_name + )) + + template_data = child_data.get("template_data") or {} + try: + filled_child = _fill_schema_template_data( + template, template_data + ) + + except SchemaTemplateMissingKeys as exc: + raise SchemaTemplateMissingKeys( + exc.missing_keys, exc.required_keys, template_name + ) + + output = [] + for item in filled_child: + filled_item = _fill_inner_schemas( + item, schema_collection, schema_templates + ) + if filled_item["type"] == "schema_template": + output.extend(_fill_schema_template( + filled_item, schema_collection, schema_templates + )) + else: + output.append(filled_item) + return output + + def _fill_inner_schemas(schema_data, schema_collection): if schema_data["type"] == "schema": raise ValueError("First item in schema data can't be schema.") From 93f489d0c36cf52ef601e17c51271a918461bf94 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:21:52 +0200 Subject: [PATCH 09/15] implemented exception for missing keys --- pype/tools/settings/settings/widgets/lib.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index aec28c949c..a20bf0608f 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -215,6 +215,26 @@ def _fill_inner_schemas(schema_data, schema_collection): return schema_data +class SchemaTemplateMissingKeys(Exception): + def __init__(self, missing_keys, required_keys, template_name=None): + self.missing_keys = missing_keys + self.required_keys = required_keys + if template_name: + msg = f"Schema template \"{template_name}\" require more keys.\n" + else: + msg = "" + msg += "Required keys: {}\nMissing keys: {}".format( + self.join_keys(required_keys), + self.join_keys(missing_keys) + ) + super(SchemaTemplateMissingKeys, self).__init__(msg) + + def join_keys(self, keys): + return ", ".join([ + f"\"{key}\"" for key in keys + ]) + + class SchemaMissingFileInfo(Exception): def __init__(self, invalid): full_path_keys = [] From bb786b27db619e4107bb339921dcbb2eb3f011fe Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:23:12 +0200 Subject: [PATCH 10/15] _fill_inner_schemas now can work with schema templates --- pype/tools/settings/settings/widgets/lib.py | 42 ++++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index a20bf0608f..9624a0df6a 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -190,7 +190,7 @@ def _fill_schema_template(child_data, schema_collection, schema_templates): return output -def _fill_inner_schemas(schema_data, schema_collection): +def _fill_inner_schemas(schema_data, schema_collection, schema_templates): if schema_data["type"] == "schema": raise ValueError("First item in schema data can't be schema.") @@ -200,16 +200,37 @@ def _fill_inner_schemas(schema_data, schema_collection): new_children = [] for child in children: - if child["type"] != "schema": - new_child = _fill_inner_schemas(child, schema_collection) - new_children.append(new_child) + child_type = child["type"] + if child_type == "schema": + schema_name = child["name"] + if schema_name not in schema_collection: + if schema_name in schema_templates: + raise KeyError(( + "Schema template \"{}\" is used as `schema`" + ).format(schema_name)) + raise KeyError( + "Schema \"{}\" was not found".format(schema_name) + ) + + filled_child = _fill_inner_schemas( + schema_collection[schema_name], + schema_collection, + schema_templates + ) + + elif child_type == "schema_template": + for filled_child in _fill_schema_template( + child, schema_collection, schema_templates + ): + new_children.append(filled_child) continue - new_child = _fill_inner_schemas( - schema_collection[child["name"]], - schema_collection - ) - new_children.append(new_child) + else: + filled_child = _fill_inner_schemas( + child, schema_collection, schema_templates + ) + + new_children.append(filled_child) schema_data["children"] = new_children return schema_data @@ -525,7 +546,8 @@ def gui_schema(subfolder, main_schema_name): main_schema = _fill_inner_schemas( loaded_schemas[main_schema_name], - loaded_schemas + loaded_schemas, + loaded_schema_templates ) validate_schema(main_schema) return main_schema From 0c79c09a7e182fe23f325f6d353142ad0ac9af8c Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:30:41 +0200 Subject: [PATCH 11/15] added possibility of default values in template --- pype/tools/settings/settings/widgets/lib.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index 9624a0df6a..569e7bfbb7 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -108,6 +108,19 @@ def _fill_schema_template_data( required_keys = set() missing_keys = set() + _template = [] + default_values = {} + for item in template: + if isinstance(item, dict) and "__default_values__" in item: + default_values = item["__default_values__"] + else: + _template.append(item) + template = _template + + for key, value in default_values.items(): + if key not in template_data: + template_data[key] = value + if not template: output = template From af9be455d9d1a09c197efab502cc258e1bb0645d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 14:31:02 +0200 Subject: [PATCH 12/15] added default values of templates ability to examples --- .../settings/gui_schemas/system_schema/example_schema.json | 3 ++- .../gui_schemas/system_schema/example_template.json | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json index ddd4fc7235..09624006f9 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json @@ -14,7 +14,8 @@ "name": "example_template", "template_data": { "host_label": "Maya 2019", - "host_name": "maya_2019" + "host_name": "maya_2019", + "multiplath_executables": false } }, { "type": "schema_template", diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json index fb629c6170..29d3da26c9 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json @@ -1,5 +1,9 @@ [ { + "__default_values__": { + "multiplath_executables": true + } + }, { "type": "raw-json", "label": "{host_label} Environments", "key": "{host_name}_environments", @@ -8,7 +12,7 @@ "type": "path-widget", "key": "{host_name}_executables", "label": "{host_label} - Full paths to executables", - "multiplatform": true, + "multiplatform": "{multiplath_executables}", "multipath": true } ] From d241877895cee6c55a3239b5a6f82e5cdc2b9ce6 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 15:02:46 +0200 Subject: [PATCH 13/15] added schema_template to readme --- pype/tools/settings/settings/README.md | 82 ++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/pype/tools/settings/settings/README.md b/pype/tools/settings/settings/README.md index e8b7fcdb57..974a9c932b 100644 --- a/pype/tools/settings/settings/README.md +++ b/pype/tools/settings/settings/README.md @@ -19,6 +19,7 @@ - GUI schemas are huge json files, to be able to split whole configuration into multiple schema there's type `schema` - system configuration schemas are stored in `~/tools/settings/settings/gui_schemas/system_schema/` and project configurations in `~/tools/settings/settings/gui_schemas/projects_schema/` - each schema name is filename of json file except extension (without ".json") +- if content is dictionary content will be used as `schema` else will be used as `schema_template` ### schema - can have only key `"children"` which is list of strings, each string should represent another schema (order matters) string represebts name of the schema @@ -31,6 +32,87 @@ } ``` +### schema_template +- allows to define schema "templates" to not duplicate same content multiple times +```javascript +// EXAMPLE json file content (filename: example_template.json) +[ + { + "__default_values__": { + "multiplath_executables": true + } + }, { + "type": "raw-json", + "label": "{host_label} Environments", + "key": "{host_name}_environments", + "env_group_key": "{host_name}" + }, { + "type": "path-widget", + "key": "{host_name}_executables", + "label": "{host_label} - Full paths to executables", + "multiplatform": "{multiplath_executables}", + "multipath": true + } +] +``` +```javascript +// EXAMPLE usage of the template in schema +{ + "type": "dict", + "key": "schema_template_examples", + "label": "Schema template examples", + "children": [ + { + "type": "schema_template", + // filename of template (example_template.json) + "name": "example_template", + "template_data": { + "host_label": "Maya 2019", + "host_name": "maya_2019", + "multiplath_executables": false + } + }, { + "type": "schema_template", + "name": "example_template", + "template_data": { + "host_label": "Maya 2020", + "host_name": "maya_2020" + } + } + ] +} +``` +- item in schema mush contain `"type"` and `"name"` keys but it is also expected that `"template_data"` will be entered too +- all items in the list, except `__default_values__`, will replace `schema_template` item in schema +- template may contain another template or schema +- it is expected that schema template will have unfilled fields as in example + - unfilled fields are allowed only in values of schema dictionary +```javascript +{ + ... + // Allowed + "key": "{to_fill}" + ... + // Not allowed + "{to_fill}": "value" + ... +} +``` +- Unfilled fields can be also used for non string values, in that case value must contain only one key and value for fill must contain right type. +```javascript +{ + ... + // Allowed + "multiplatform": "{executable_multiplatform}" + ... + // Not allowed + "multiplatform": "{executable_multiplatform}_enhanced_string" + ... +} +``` +- It is possible to define default values for unfilled fields to do so one of items in list must be dictionary with key `"__default_values__"` and value as dictionary with default key: values (as in example above). + + ## Basic Dictionary inputs - these inputs wraps another inputs into {key: value} relation From 03e8f647fd2799652355ec4532ccc30b030698dd Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 15:03:16 +0200 Subject: [PATCH 14/15] modified example key --- .../settings/gui_schemas/system_schema/example_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json index 09624006f9..814fe95d0c 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json @@ -6,7 +6,7 @@ "children": [ { "type": "dict", - "key": "schema_templates", + "key": "schema_template_exaples", "label": "Schema template examples", "children": [ { From 7364c6c29def5d779266b451069133d28898c7ab Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 2 Oct 2020 15:09:19 +0200 Subject: [PATCH 15/15] fixed typo --- pype/tools/settings/settings/README.md | 6 +++--- .../settings/gui_schemas/system_schema/example_schema.json | 2 +- .../gui_schemas/system_schema/example_template.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pype/tools/settings/settings/README.md b/pype/tools/settings/settings/README.md index 974a9c932b..4f4e9d305a 100644 --- a/pype/tools/settings/settings/README.md +++ b/pype/tools/settings/settings/README.md @@ -39,7 +39,7 @@ [ { "__default_values__": { - "multiplath_executables": true + "multipath_executables": true } }, { "type": "raw-json", @@ -50,7 +50,7 @@ "type": "path-widget", "key": "{host_name}_executables", "label": "{host_label} - Full paths to executables", - "multiplatform": "{multiplath_executables}", + "multiplatform": "{multipath_executables}", "multipath": true } ] @@ -69,7 +69,7 @@ "template_data": { "host_label": "Maya 2019", "host_name": "maya_2019", - "multiplath_executables": false + "multipath_executables": false } }, { "type": "schema_template", diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json index 814fe95d0c..7612e54116 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_schema.json @@ -15,7 +15,7 @@ "template_data": { "host_label": "Maya 2019", "host_name": "maya_2019", - "multiplath_executables": false + "multipath_executables": false } }, { "type": "schema_template", diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json index 29d3da26c9..48a3c955b9 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/example_template.json @@ -1,7 +1,7 @@ [ { "__default_values__": { - "multiplath_executables": true + "multipath_executables": true } }, { "type": "raw-json", @@ -12,7 +12,7 @@ "type": "path-widget", "key": "{host_name}_executables", "label": "{host_label} - Full paths to executables", - "multiplatform": "{multiplath_executables}", + "multiplatform": "{multipath_executables}", "multipath": true } ]