formdefs: add a form_objects substitution variable with more info (#6964)

This commit is contained in:
Frédéric Péters 2015-04-16 15:36:23 +02:00
parent afb9068f2c
commit befd0e0461
2 changed files with 42 additions and 2 deletions

View File

@ -2,6 +2,8 @@ import datetime
import sys
import shutil
import pytest
from quixote import cleanup
from wcs import formdef
from wcs.formdef import FormDef
@ -105,6 +107,28 @@ def test_substitution_variables():
wf.store()
formdef.workflow_id = wf.id
assert formdef.get_substitution_variables() == {'form_name': 'foo'}
assert 'form_name' in formdef.get_substitution_variables()
assert formdef.get_substitution_variables()['form_name'] == 'foo'
formdef.workflow_options = {'foo': 'bar'}
assert formdef.get_substitution_variables() == {'form_name': 'foo', 'form_option_foo': 'bar'}
assert 'form_option_foo' in formdef.get_substitution_variables()
assert formdef.get_substitution_variables()['form_option_foo'] == 'bar'
def test_substitution_variables_object():
formdef = FormDef()
formdef.name = 'foo'
formdef.store()
formdef.data_class().wipe()
assert 'form_objects' in formdef.get_substitution_variables()
substs = formdef.get_substitution_variables().get('form_objects')
assert substs.count == 0
assert substs.count_status_1 == 0
d = formdef.data_class()()
d.status = 'wf-1'
d.store()
assert substs.count == 1
assert substs.count_status_1 == 1
with pytest.raises(AttributeError):
assert substs.foobar

View File

@ -767,6 +767,7 @@ class FormDef(StorableObject):
def get_substitution_variables(self, minimal=False):
d = {
'form_name': self.name,
'form_objects': FormDefSubstVar(self),
}
if self.category:
d.update(self.category.get_substitution_variables(minimal=minimal))
@ -941,6 +942,21 @@ class FormDef(StorableObject):
self._workflow = None
class FormDefSubstVar(object):
def __init__(self, formdef):
self.formdef = formdef
@property
def count(self):
return self.formdef.data_class().count()
def __getattr__(self, attribute):
if attribute.startswith('count_status_'):
status = attribute[len('count_status_'):]
return len(self.formdef.data_class().get_ids_with_indexed_value(
'status', 'wf-%s' % status))
return super(FormDefSubstVar, self).__getattr__(attribute)
from qommon.admin.emails import EmailsDirectory
EmailsDirectory.register('new_user', N_('Notification of creation to user'),