validator in sqlalchemy
This commit is contained in:
@ -149,6 +149,25 @@ class _Information(SqlAlchemyBase):
|
||||
#____________________________________________________________
|
||||
#
|
||||
# callback
|
||||
def load_callback_parm(collection_type, proxy):
|
||||
def getter(obj):
|
||||
if obj is None:
|
||||
return None
|
||||
ret = []
|
||||
requires = getattr(obj, proxy.value_attr)
|
||||
for require in requires:
|
||||
if require.value is not None:
|
||||
ret.append(require.value)
|
||||
else:
|
||||
option = session.query(_Base).filter_by(id=require.option).first()
|
||||
ret.append((option, require.force_permissive))
|
||||
return tuple(ret)
|
||||
|
||||
def setter(obj, value):
|
||||
setattr(obj, proxy.value_attr, value)
|
||||
return getter, setter
|
||||
|
||||
|
||||
class _CallbackParamOption(SqlAlchemyBase):
|
||||
__tablename__ = 'callback_param_option'
|
||||
id = Column(Integer, primary_key=True)
|
||||
@ -169,11 +188,11 @@ class _CallbackParam(SqlAlchemyBase):
|
||||
__tablename__ = 'callback_param'
|
||||
id = Column(Integer, primary_key=True)
|
||||
callback = Column(Integer, ForeignKey('baseoption.id'))
|
||||
name = Column(String)
|
||||
key = Column(String)
|
||||
params = relationship('_CallbackParamOption')
|
||||
|
||||
def __init__(self, name, params):
|
||||
self.name = name
|
||||
def __init__(self, key, params):
|
||||
self.key = key
|
||||
for param in params:
|
||||
if isinstance(param, tuple):
|
||||
self.params.append(_CallbackParamOption(option=param[0],
|
||||
@ -220,10 +239,20 @@ class _Base(SqlAlchemyBase):
|
||||
_requires = association_proxy("_reqs", "requires", getset_factory=load_requires)
|
||||
_multi = Column(Boolean)
|
||||
_multitype = Column(String)
|
||||
######
|
||||
_callback = Column(PickleType)
|
||||
_callback_params = relationship('_CallbackParam')
|
||||
_call_params = relationship('_CallbackParam',
|
||||
collection_class=
|
||||
attribute_mapped_collection('key'))
|
||||
_callback_params = association_proxy("_call_params", "params",
|
||||
getset_factory=load_callback_parm)
|
||||
_validator = Column(PickleType)
|
||||
_validator_params = relationship('_CallbackParam')
|
||||
_val_params = relationship('_CallbackParam',
|
||||
collection_class=
|
||||
attribute_mapped_collection('key'))
|
||||
_validator_params = association_proxy("_call_params", "params",
|
||||
getset_factory=load_callback_parm)
|
||||
######
|
||||
_parent = Column(Integer, ForeignKey('baseoption.id'))
|
||||
_children = relationship('BaseOption', enable_typechecks=False)
|
||||
#FIXME pas 2 fois la meme properties dans la base ...
|
||||
@ -261,15 +290,6 @@ class _Base(SqlAlchemyBase):
|
||||
prop_obj = _PropertyOption(propname)
|
||||
return prop_obj
|
||||
|
||||
#def _add_require(self, require):
|
||||
# self._requires.append(_RequireOption(*require))
|
||||
|
||||
def _add_callback(self, key, values):
|
||||
self._callback_params.append(_CallbackParam(key, values))
|
||||
|
||||
def _add_validator(self, key, values):
|
||||
self._validator_params.append(_CallbackParam(key, values))
|
||||
|
||||
def _add_consistency(self, func, all_cons_opts):
|
||||
_Consistency(func, all_cons_opts)
|
||||
|
||||
|
Reference in New Issue
Block a user