0001-forms-allow-prefilling-a-map-field-with-an-address-2.patch
tests/test_form_pages.py | ||
---|---|---|
3226 | 3226 |
data = formdef.data_class().get(data_id) |
3227 | 3227 |
assert data.data == {'1': 'bla', '0': '1.234;-1.234'} |
3228 | 3228 | |
3229 |
def test_form_map_field_prefill_address(pub): |
|
3230 |
formdef = create_formdef() |
|
3231 |
formdef.fields = [ |
|
3232 |
fields.PageField(id='0', label='1st page', type='page'), |
|
3233 |
fields.StringField(id='1', label='address', required=True, varname='address'), |
|
3234 |
fields.PageField(id='2', label='2nd page', type='page'), |
|
3235 |
fields.MapField(id='3', label='map', |
|
3236 |
prefill={'type': 'string', 'value': '{{ form_var_address }}'}), |
|
3237 |
] |
|
3238 |
formdef.store() |
|
3239 |
resp = get_app(pub).get('/test/') |
|
3240 |
formdef.data_class().wipe() |
|
3241 |
resp.form['f1'] = '169 rue du chateau, paris' |
|
3242 |
with mock.patch('wcs.wf.geolocate.http_get_page') as http_get_page: |
|
3243 |
http_get_page.return_value = (None, 200, |
|
3244 |
json.dumps([{'lat':'48.8337085','lon':'2.3233693'}]), None) |
|
3245 |
resp = resp.form.submit('submit') |
|
3246 |
assert resp.form['f3$latlng'].value == '48.8337085;2.3233693' |
|
3247 | ||
3229 | 3248 |
def test_form_map_multi_page(pub): |
3230 | 3249 |
formdef = create_formdef() |
3231 | 3250 |
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'), |
wcs/fields.py | ||
---|---|---|
60 | 60 |
options = [x for x in options if x[0] in ('none', 'formula')] |
61 | 61 |
elif field and field.type == 'map': |
62 | 62 |
# limit choices to geolocation |
63 |
options = [x for x in options if x[0] in ('none', 'geolocation')] |
|
63 |
options = [x for x in options if x[0] in ('none', 'string', 'geolocation')]
|
|
64 | 64 | |
65 | 65 |
self.add(SingleSelectWidget, 'type', options=options, value=value.get('type'), |
66 | 66 |
attrs={'data-dynamic-display-parent': 'true'}) |
... | ... | |
1976 | 1976 |
'min_zoom', 'max_zoom', 'default_position', |
1977 | 1977 |
'init_with_geoloc'] |
1978 | 1978 | |
1979 |
def get_prefill_value(self, user=None, force_string=True): |
|
1980 |
if self.prefill.get('type') != 'string' or not self.prefill.get('value'): |
|
1981 |
return (None, False) |
|
1982 |
# string is actually interpreted as a template of a string that will be |
|
1983 |
# geocoded |
|
1984 |
from wcs.wf.geolocate import GeolocateWorkflowStatusItem |
|
1985 |
geolocate = GeolocateWorkflowStatusItem() |
|
1986 |
geolocate.method = 'address_string' |
|
1987 |
geolocate.address_string = self.prefill.get('value') |
|
1988 |
coords = geolocate.geolocate_address_string(None) |
|
1989 |
if not coords: |
|
1990 |
return (None, False) |
|
1991 |
return ('%(lat)s;%(lon)s' % coords, False) |
|
1992 | ||
1979 | 1993 |
def get_view_value(self, value): |
1980 | 1994 |
widget = self.widget_class('x%s' % random.random(), value, readonly=True) |
1981 | 1995 |
return widget.render_widget_content() |
wcs/forms/root.py | ||
---|---|---|
382 | 382 |
if verified: |
383 | 383 |
form.get_widget('f%s' % k).readonly = 'readonly' |
384 | 384 |
form.get_widget('f%s' % k).attrs['readonly'] = 'readonly' |
385 |
req.form['f%s' % k] = v |
|
385 |
if field.key == 'map': |
|
386 |
req.form['f%s$latlng' % k] = v |
|
387 |
else: |
|
388 |
req.form['f%s' % k] = v |
|
386 | 389 |
one = True |
387 | 390 | |
388 | 391 |
if not one: |
389 |
- |