0001-forms-allow-prefilling-a-map-field-with-an-address-2.patch
tests/test_form_pages.py | ||
---|---|---|
3419 | 3419 |
data = formdef.data_class().get(data_id) |
3420 | 3420 |
assert data.data == {'1': 'bla', '0': '1.234;-1.234'} |
3421 | 3421 | |
3422 |
def test_form_map_field_prefill_address(pub): |
|
3423 |
formdef = create_formdef() |
|
3424 |
formdef.fields = [ |
|
3425 |
fields.PageField(id='0', label='1st page', type='page'), |
|
3426 |
fields.StringField(id='1', label='address', required=True, varname='address'), |
|
3427 |
fields.PageField(id='2', label='2nd page', type='page'), |
|
3428 |
fields.MapField(id='3', label='map', |
|
3429 |
prefill={'type': 'string', 'value': '{{ form_var_address }}'}), |
|
3430 |
] |
|
3431 |
formdef.store() |
|
3432 |
resp = get_app(pub).get('/test/') |
|
3433 |
formdef.data_class().wipe() |
|
3434 |
resp.form['f1'] = '169 rue du chateau, paris' |
|
3435 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page: |
|
3436 |
http_get_page.return_value = (None, 200, |
|
3437 |
json.dumps([{'lat':'48.8337085','lon':'2.3233693'}]), None) |
|
3438 |
resp = resp.form.submit('submit') |
|
3439 |
assert resp.form['f3$latlng'].value == '48.8337085;2.3233693' |
|
3440 |
assert 'chateau' in http_get_page.call_args[0][0] |
|
3441 | ||
3422 | 3442 |
def test_form_map_multi_page(pub): |
3423 | 3443 |
formdef = create_formdef() |
3424 | 3444 |
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'), |
wcs/fields.py | ||
---|---|---|
61 | 61 |
options = [x for x in options if x[0] in ('none', 'formula')] |
62 | 62 |
elif field and field.type == 'map': |
63 | 63 |
# limit choices to geolocation |
64 |
options = [x for x in options if x[0] in ('none', 'geolocation')] |
|
64 |
options = [x for x in options if x[0] in ('none', 'string', 'geolocation')]
|
|
65 | 65 | |
66 | 66 |
self.add(SingleSelectWidget, 'type', options=options, value=value.get('type'), |
67 | 67 |
attrs={'data-dynamic-display-parent': 'true'}) |
... | ... | |
1993 | 1993 |
'min_zoom', 'max_zoom', 'default_position', |
1994 | 1994 |
'init_with_geoloc'] |
1995 | 1995 | |
1996 |
def get_prefill_value(self, user=None, force_string=True): |
|
1997 |
if self.prefill.get('type') != 'string' or not self.prefill.get('value'): |
|
1998 |
return (None, False) |
|
1999 |
# string is actually interpreted as a template of a string that will be |
|
2000 |
# geocoded |
|
2001 |
from wcs.wf.geolocate import GeolocateWorkflowStatusItem |
|
2002 |
geolocate = GeolocateWorkflowStatusItem() |
|
2003 |
geolocate.method = 'address_string' |
|
2004 |
geolocate.address_string = self.prefill.get('value') |
|
2005 |
coords = geolocate.geolocate_address_string(None) |
|
2006 |
if not coords: |
|
2007 |
return (None, False) |
|
2008 |
return ('%(lat)s;%(lon)s' % coords, False) |
|
2009 | ||
1996 | 2010 |
def get_view_value(self, value): |
1997 | 2011 |
widget = self.widget_class('x%s' % random.random(), value, readonly=True) |
1998 | 2012 |
return widget.render_widget_content() |
wcs/forms/root.py | ||
---|---|---|
376 | 376 |
if verified: |
377 | 377 |
form.get_widget('f%s' % k).readonly = 'readonly' |
378 | 378 |
form.get_widget('f%s' % k).attrs['readonly'] = 'readonly' |
379 |
req.form['f%s' % k] = v |
|
379 |
if field.key == 'map': |
|
380 |
req.form['f%s$latlng' % k] = v |
|
381 |
else: |
|
382 |
req.form['f%s' % k] = v |
|
380 | 383 |
one = True |
381 | 384 | |
382 | 385 |
if not one: |
383 |
- |