Source code for yggdrasil.metaschema.properties.ClassMetaschemaProperty

from yggdrasil.metaschema.properties.MetaschemaProperty import MetaschemaProperty


[docs]class ClassMetaschemaProperty(MetaschemaProperty): r"""Property class for 'class' property.""" name = 'class' schema = {'description': ('One or more classes that the object should be ' 'an instance of.'), 'anyOf': [{'type': 'class'}, {'type': 'array', 'items': {'type': 'class'}, 'minItems': 1}]}
[docs] @classmethod def encode(cls, instance, typedef=None): r"""Encoder for the 'class' property.""" return type(instance)
@classmethod def _validate(cls, validator, value, instance, schema): r"""Validator for 'class' property.""" # TODO: Normalization can be removed if metadata is normalized from yggdrasil.metaschema import validate_instance value = validate_instance(value, cls.schema, normalize=True) if not isinstance(instance, value): yield "Instance %s is not of type(s) %s" % (instance, value)
[docs] @classmethod def compare(cls, prop1, prop2, root1=None, root2=None): r"""Method to determine compatiblity of one property value with another. This method is not necessarily symmetric in that the second value may not be compatible with the first even if the first is compatible with the second. Args: prop1 (object): Property value to compare against prop2. prop2 (object): Property value to compare against. Yields: str: Comparision failure messages. """ # TODO: Normalization can be removed if metadata is normalized from yggdrasil.metaschema import validate_instance prop1 = validate_instance(prop1, cls.schema, normalize=True) prop2 = validate_instance(prop2, cls.schema, normalize=True) if not isinstance(prop1, (list, tuple)): prop1 = (prop1, ) if not isinstance(prop2, (list, tuple)): prop2 = (prop2, ) if not (set(prop1) & set(prop2)): yield 'No overlap between %s and %s' % (prop1, prop2)