From f90c769f266690cc72134e54c11700b864a83e5d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 15 Jun 2021 15:11:53 +0200 Subject: [PATCH] implemented enumerator attribute definition --- .../pipeline/lib/attribute_definitions.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/openpype/pipeline/lib/attribute_definitions.py b/openpype/pipeline/lib/attribute_definitions.py index efe99a7a05..86949f8bf0 100644 --- a/openpype/pipeline/lib/attribute_definitions.py +++ b/openpype/pipeline/lib/attribute_definitions.py @@ -121,6 +121,40 @@ class TextDef(AbtractAttrDef): if isinstance(value, six.string_types): return value return self.default + + +class EnumDef(AbtractAttrDef): + """Enumeration of single item from items. + + Args: + items: Items definition that can be coverted to + `collections.OrderedDict`. Dictionary represent {value: label} + relation. + default: Default value. Must be one key(value) from passed items. + """ + + def __init__(self, items, default=None): + if not items: + raise ValueError(( + "Empty 'items' value. {} must have" + " defined values on initialization." + ).format(self.__class__.__name__)) + + items = collections.OrderedDict(items) + if default not in items: + for key in items.keys(): + default = key + break + + self.items = items + self.default = default + + def convert_value(self, value): + if value in self.items: + return value + return self.default + + class BoolDef(AbtractAttrDef): """Boolean representation.