diff --git a/goblin/meta.py b/goblin/meta.py index be20765f80c15f97b3f7f8e6013c6796c6c6325b..0531080ab83252ea002cd21c84fa5703741b2f2d 100644 --- a/goblin/meta.py +++ b/goblin/meta.py @@ -24,9 +24,8 @@ class ElementMeta(type): props[k] = v if not isinstance(v, properties.Property): vertex_property = v.__class__ - vertex_property.__data_type__ = v.data_type v = properties.VertexPropertyDescriptor( - k, vertex_property, default=v.default) + k, vertex_property, v.data_type, default=v.default) else: v = properties.PropertyDescriptor( k, v.data_type, default=v.default) diff --git a/goblin/properties.py b/goblin/properties.py index a35c7e7cab5b0ce42dc92c5c46bc98e58cdd4b99..abbdd626f5acbdfd0084442a859f3c3fe007e094 100644 --- a/goblin/properties.py +++ b/goblin/properties.py @@ -31,30 +31,36 @@ class PropertyDescriptor: del attr -class VertexPropertyDescriptor(PropertyDescriptor): +class VertexPropertyDescriptor: """Descriptor that validates user property input and gets/sets properties as instance attributes.""" + def __init__(self, name, vertex_property, data_type, *, default=None): + self._name = '_' + name + self._vertex_property = vertex_property + self._data_type = data_type + self._default = default + def __get__(self, obj, objtype): if obj is None: - return self._data_type + return self._vertex_property default = self._default if default: - default = self._data_type(self._default) + default = self._data_type.validate(default) + default = self._vertex_property(self._default) return getattr(obj, self._name, default) def __set__(self, obj, val): if isinstance(val, (list, tuple , set)): vertex_property = [] for v in val: - v = self._data_type.__data_type__.validate(v) + v = self._data_type.validate(v) vertex_property.append( - self._data_type(self._data_type.__data_type__, value=v)) + self._vertex_property(self._data_type, value=v)) else: - val = self._data_type.__data_type__.validate(val) - vertex_property = self._data_type( - self._data_type.__data_type__, value=val) + val = self._data_type.validate(val) + vertex_property = self._vertex_property(self._data_type, value=val) setattr(obj, self._name, vertex_property) @@ -74,10 +80,6 @@ class Property(abc.BaseProperty): def data_type(self): return self._data_type - @property - def vertex_property(self): - return self._vertex_property - @property def default(self): return self._default