better sqlalchemy integration

This commit is contained in:
2016-10-01 20:15:08 +02:00
parent d545c6883c
commit c81a2bcdbf
7 changed files with 297 additions and 50 deletions

View File

@ -36,7 +36,7 @@ class ChoiceOption(Option):
The option can also have the value ``None``
"""
__slots__ = tuple()
__slots__ = tuple('_init')
display_name = _('choice')
def __init__(self, name, doc, values, default=None,
@ -55,8 +55,10 @@ class ChoiceOption(Option):
if not isinstance(values, tuple): # pragma: optional cover
raise TypeError(_('values must be a tuple or a function for {0}'
).format(name))
self.impl_set_choice_values_params(values, values_params)
session = self.getsession()
#cannot add values and values_params in database before add option
#set in _init temporary
self._init = (values, values_params)
super(ChoiceOption, self).__init__(name, doc, default=default,
default_multi=default_multi,
callback=callback,
@ -66,19 +68,30 @@ class ChoiceOption(Option):
validator=validator,
validator_params=validator_params,
properties=properties,
warnings_only=warnings_only)
warnings_only=warnings_only,
session=session)
self.impl_set_choice_values_params(values, values_params, session)
session.commit()
del(self._init)
def impl_get_values(self, context, current_opt=undefined,
returns_raise=False):
if current_opt is undefined:
current_opt = self
params = undefined
#FIXME cache? but in context...
values = self._choice_values
if '_init' in dir(self):
values, params = self._init
else:
values = self._choice_values
if isinstance(values, FunctionType):
if context is None:
values = []
else:
values_params = self.impl_get_choice_values_params()
if params is not undefined:
values_params = params
else:
values_params = self.impl_get_choice_values_params()
values = carry_out_calculation(current_opt, context=context,
callback=values,
callback_params=values_params,