Source code for goblin.manager

"""Managers for multi cardinality vertex properties"""


[docs]class VertexPropertyManager: def __init__(self, data_type, vertex_prop, card): self._data_type = data_type self._vertex_prop = vertex_prop self._card = card self._mapper_func = vertex_prop.__mapping__.mapper_func @property def mapper_func(self): return self._mapper_func def __call__(self, val): results = [] for v in self: if v.value == val: results.append(v) if len(results) == 1: results = results[0] elif not results: results = None return results
[docs]class ListVertexPropertyManager(list, VertexPropertyManager): def __init__(self, data_type, vertex_prop, card, obj): VertexPropertyManager.__init__(self, data_type, vertex_prop, card) list.__init__(self, obj) self._vp_map = {} @property def vp_map(self): return self._vp_map
[docs] def append(self, val): vp = self._vertex_prop(self._data_type, card=self._card) vp.value = self._data_type.validate(val) super().append(vp)
[docs]class SetVertexPropertyManager(set, VertexPropertyManager): def __init__(self, data_type, vertex_prop, card, obj): VertexPropertyManager.__init__(self, data_type, vertex_prop, card) set.__init__(self, obj)
[docs] def add(self, val): vp = self._vertex_prop(self._data_type, card=self._card) vp.value = self._data_type.validate(val) super().add(vp)