enum entity was abstracted to be able do more specific schema validations

This commit is contained in:
iLLiCiTiT 2021-03-23 17:48:26 +01:00
parent 42752c4648
commit 5c7ea9d9e4
4 changed files with 51 additions and 33 deletions

View file

@ -96,6 +96,7 @@ from .input_entities import (
)
from .enum_entity import (
BaseEnumEntity,
EnumEntity,
AppsEnumEntity,
ToolsEnumEntity
@ -141,6 +142,7 @@ __all__ = (
"PathInput",
"RawJsonEntity",
"BaseEnumEntity",
"EnumEntity",
"AppsEnumEntity",
"ToolsEnumEntity",

View file

@ -6,34 +6,14 @@ from .lib import (
)
class EnumEntity(InputEntity):
schema_types = ["enum"]
class BaseEnumEntity(InputEntity):
def _item_initalization(self):
self.multiselection = self.schema_data.get("multiselection", False)
self.enum_items = self.schema_data["enum_items"]
if not self.enum_items:
raise ValueError("Attribute `enum_items` is not defined.")
valid_keys = set()
for item in self.enum_items:
valid_keys.add(tuple(item.keys())[0])
self.valid_keys = valid_keys
if self.multiselection:
self.valid_value_types = (list, )
self.value_on_not_set = []
else:
for key in valid_keys:
if self.value_on_not_set is NOT_SET:
self.value_on_not_set = key
break
self.valid_value_types = (STRING_TYPE, )
# GUI attribute
self.placeholder = self.schema_data.get("placeholder")
self.multiselection = True
self.value_on_not_set = None
self.enum_items = None
self.valid_keys = None
self.valid_value_types = None
self.placeholder = None
def schema_validations(self):
if not isinstance(self.enum_items, list):
@ -78,7 +58,7 @@ class EnumEntity(InputEntity):
for item in check_values:
if item not in self.valid_keys:
raise ValueError(
"{} Invalid value \"{}\". Expected: {}".format(
"{} Invalid value \"{}\". Expected one of: {}".format(
self.path, item, self.valid_keys
)
)
@ -86,7 +66,42 @@ class EnumEntity(InputEntity):
self._on_value_change()
class AppsEnumEntity(EnumEntity):
class EnumEntity(BaseEnumEntity):
schema_types = ["enum"]
def _item_initalization(self):
self.multiselection = self.schema_data.get("multiselection", False)
self.enum_items = self.schema_data.get("enum_items")
valid_keys = set()
for item in self.enum_items or []:
valid_keys.add(tuple(item.keys())[0])
self.valid_keys = valid_keys
if self.multiselection:
self.valid_value_types = (list, )
self.value_on_not_set = []
else:
for key in valid_keys:
if self.value_on_not_set is NOT_SET:
self.value_on_not_set = key
break
self.valid_value_types = (STRING_TYPE, )
# GUI attribute
self.placeholder = self.schema_data.get("placeholder")
def schema_validations(self):
if not self.enum_items and "enum_items" not in self.schema_data:
raise EntitySchemaError(
self, "Enum item must have defined `enum_items`"
)
super().schema_validations()
class AppsEnumEntity(BaseEnumEntity):
schema_types = ["apps-enum"]
def _item_initalization(self):
@ -139,7 +154,7 @@ class AppsEnumEntity(EnumEntity):
self._current_value = new_value
class ToolsEnumEntity(EnumEntity):
class ToolsEnumEntity(BaseEnumEntity):
schema_types = ["tools-enum"]
def _item_initalization(self):

View file

@ -175,7 +175,8 @@ class RootEntity(BaseItemEntity):
entities.BaseItemEntity,
entities.ItemEntity,
entities.EndpointEntity,
entities.InputEntity
entities.InputEntity,
entities.BaseEnumEntity
)
self._loaded_types = {}

View file

@ -15,7 +15,7 @@ from pype.settings.entities import (
NumberEntity,
BoolEntity,
EnumEntity,
BaseEnumEntity,
TextEntity,
PathInput,
RawJsonEntity,
@ -112,7 +112,7 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
elif isinstance(entity, RawJsonEntity):
return RawJsonWidget(*args)
elif isinstance(entity, EnumEntity):
elif isinstance(entity, BaseEnumEntity):
return EnumeratorWidget(*args)
elif isinstance(entity, PathEntity):