better sqlalchemy integration
This commit is contained in:
@ -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,
|
||||
|
Reference in New Issue
Block a user