0002-misc-add-parent-variable-to-lazy-formdata-39803.patch
tests/test_formdata.py | ||
---|---|---|
1867 | 1867 |
assert formdef.data_class().get(formdata.id).user_id is None |
1868 | 1868 |
assert formdef.data_class().get(formdata.id).user_label == 'blah xxx' |
1869 | 1869 |
assert formdef.data_class().get(formdata.id).get_user_label() == 'blah xxx' |
1870 | ||
1871 | ||
1872 |
def test_form_parent(pub): |
|
1873 |
formdef = FormDef() |
|
1874 |
formdef.name = 'foobar' |
|
1875 |
formdef.fields = [fields.StringField(id='0', label='foo', varname='foo')] |
|
1876 |
formdef.store() |
|
1877 | ||
1878 |
parent = formdef.data_class()() |
|
1879 |
parent.data = {'0': 'hello'} |
|
1880 |
parent.store() |
|
1881 | ||
1882 |
child = formdef.data_class()() |
|
1883 |
child.data = {'0': 'world'} |
|
1884 |
child.submission_context = { |
|
1885 |
'orig_formdef_id': formdef.id, |
|
1886 |
'orig_formdata_id': parent.id, |
|
1887 |
} |
|
1888 |
variables = parent.get_substitution_variables() |
|
1889 |
assert variables.get('form_var_foo') == 'hello' |
|
1890 |
assert variables.get('form_parent') is None |
|
1891 | ||
1892 |
assert str(variables['form'].var.foo) == 'hello' |
|
1893 |
assert variables['form'].parent is None |
|
1894 | ||
1895 |
variables = child.get_substitution_variables() |
|
1896 |
assert variables.get('form_var_foo') == 'world' |
|
1897 |
assert variables.get('form_parent_form_var_foo') == 'hello' |
|
1898 |
assert variables.get('form_parent') is not None |
|
1899 | ||
1900 |
assert str(variables['form'].var.foo) == 'world' |
|
1901 |
assert str(variables['form'].parent['form'].var.foo) == 'hello' |
|
1902 |
assert variables['form'].parent is not None |
wcs/backoffice/management.py | ||
---|---|---|
2661 | 2661 |
r += htmltext(' <div class="value"><span>%s</span>') % v |
2662 | 2662 |
elif isinstance(v, (types.FunctionType, types.MethodType)): |
2663 | 2663 |
continue |
2664 |
elif k.endswith('form_parent') and isinstance(v, CompatibilityNamesDict) and 'form' in v: |
|
2665 |
r += htmltext('<li><code title="%s">%s_…</code>') % (k, k) |
|
2666 |
r += htmltext(' <div class="value"><span>%(caption)s ' |
|
2667 |
'(<a href="%(inspect_url)s">%(display_name)s)</a></span>') % { |
|
2668 |
'caption': htmltext(_('<var>/variables from parent\'s request/</var>')), |
|
2669 |
'inspect_url': v['form'].get_inspect_url(), |
|
2670 |
'display_name': v['form_display_name'], |
|
2671 |
} |
|
2664 | 2672 |
elif hasattr(v, 'inspect_keys') or isinstance(v, dict): |
2665 | 2673 |
# skip expanded |
2666 | 2674 |
continue |
wcs/variables.py | ||
---|---|---|
21 | 21 |
from django.utils.functional import SimpleLazyObject |
22 | 22 | |
23 | 23 |
from quixote import get_publisher, get_request |
24 |
from quixote.html import htmltext |
|
24 | 25 | |
25 | 26 |
from pyproj import Geod |
26 | 27 | |
... | ... | |
29 | 30 |
from .qommon.templatetags.qommon import parse_datetime |
30 | 31 |
from .qommon.storage import (Or, Equal, NotEqual) |
31 | 32 | |
33 |
from .formdef import FormDef |
|
34 | ||
32 | 35 | |
33 | 36 |
class LazyFormDefObjectsManager(object): |
34 | 37 |
def __init__(self, formdef, formdata=None, criterias=None, order_by=None): |
... | ... | |
211 | 214 |
if key[0] == '_' or key in blacklist: |
212 | 215 |
continue |
213 | 216 |
if key == 'parent': |
214 |
yield key, False # = recurse |
|
217 |
if self.parent: # hide parent when it's None |
|
218 |
yield key, False # = do not recurse |
|
215 | 219 |
else: |
216 | 220 |
yield key |
217 | 221 | |
... | ... | |
441 | 445 | |
442 | 446 |
return LazyFormDataLinks(self._formdata) |
443 | 447 | |
448 |
@property |
|
449 |
def parent(self): |
|
450 |
if not self._formdata.submission_context: |
|
451 |
return None |
|
452 |
if 'orig_formdef_id' not in self._formdata.submission_context: |
|
453 |
return None |
|
454 |
if 'orig_formdata_id' not in self._formdata.submission_context: |
|
455 |
return None |
|
456 |
formdef = FormDef.get(self._formdata.submission_context['orig_formdef_id'], ignore_errors=True) |
|
457 |
if formdef is None: |
|
458 |
return None |
|
459 |
formdata = formdef.data_class().get(self._formdata.submission_context['orig_formdata_id'], ignore_errors=True) |
|
460 |
if formdata is None: |
|
461 |
return None |
|
462 |
return formdata.get_substitution_variables() |
|
463 | ||
444 | 464 |
def export_to_json(self, include_files=True): |
445 | 465 |
# this gets used to generate an email attachment :/ |
446 | 466 |
return self._formdata.export_to_json(include_files=include_files) |
... | ... | |
455 | 475 |
return self._formdata.data.get(field.id) |
456 | 476 |
raise |
457 | 477 | |
478 |
def get_inspect_url(self): |
|
479 |
return '%sinspect' % self.backoffice_url |
|
480 | ||
458 | 481 | |
459 | 482 |
class LazyFormDataVar(object): |
460 | 483 |
def __init__(self, fields, data, formdata=None): |
461 |
- |