Projet

Général

Profil

0001-misc-expose-request-.GET-in-expression-variables-295.patch

Frédéric Péters, 08 janvier 2019 16:23

Télécharger (3,41 ko)

Voir les différences:

Subject: [PATCH] misc: expose request(.GET) in expression variables (#29565)

 tests/test_form_pages.py   | 31 ++++++++++++++++++++++++++++++-
 wcs/qommon/http_request.py |  3 ++-
 wcs/variables.py           |  9 +++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)
tests/test_form_pages.py
2189 2189
    assert resp.form['f0'].value == ''
2190 2190
    assert 'widget-prefilled' not in resp.body
2191 2191

  
2192
def test_form_page_query_string_prefill(pub):
2192
def test_form_page_session_var_prefill(pub):
2193 2193
    user = create_user(pub)
2194 2194
    formdef = create_formdef()
2195 2195
    formdef.data_class().wipe()
......
2246 2246

  
2247 2247
    os.unlink(os.path.join(pub.app_dir, 'site-options.cfg'))
2248 2248

  
2249
def test_form_page_query_string_list_prefill(pub):
2250
    user = create_user(pub)
2251
    formdef = create_formdef()
2252
    formdef.data_class().wipe()
2253
    formdef.fields = [fields.ItemField(id='1', label='item',
2254
        varname='item', required=False, data_source={'type': 'foobar'},
2255
        prefill={'type': 'string', 'value': '{{request.GET.preselect}}'},
2256
        )]
2257
    formdef.store()
2258

  
2259
    NamedDataSource.wipe()
2260
    data_source = NamedDataSource(name='foobar')
2261
    data_source.data_source = {'type': 'formula',
2262
            'value': repr([{'id': '1', 'text': 'un'},
2263
                           {'id': '2', 'text': 'deux'},
2264
                           {'id': '3', 'text': 'trois'},
2265
                           {'id': '4', 'text': 'quatre'},
2266
                           ])}
2267
    data_source.store()
2268

  
2269
    resp = get_app(pub).get('/test/')
2270
    assert resp.form['f1'].value == '1'
2271

  
2272
    resp = get_app(pub).get('/test/?preselect=2')
2273
    assert resp.form['f1'].value == '2'
2274
    resp = resp.form.submit('submit')
2275
    resp = resp.form.submit('submit').follow()
2276
    assert 'deux' in resp.body
2277

  
2249 2278
def test_form_page_profile_prefill_list(pub):
2250 2279
    user = create_user(pub)
2251 2280
    formdef = create_formdef()
wcs/qommon/http_request.py
85 85

  
86 86
    def get_substitution_variables(self):
87 87
        # environment variables APPNAME_* are exported to env_*
88
        from wcs.variables import LazyRequest
88 89
        prefix = get_publisher().APP_NAME.lower() + '_'
89
        variables = {}
90
        variables = {'request': LazyRequest(self)}
90 91
        for k, v in self.environ.items():
91 92
            if k.lower().startswith(prefix):
92 93
                variables['env_' + k.lower()[len(prefix):]] = v
wcs/variables.py
486 486
            return super(LazyUser, self).__getattr__(attr)
487 487
        except AttributeError:
488 488
            return getattr(self.user, attr)
489

  
490

  
491
class LazyRequest(object):
492
    def __init__(self, request):
493
        self.request = request
494

  
495
    @property
496
    def GET(self):
497
        return self.request.django_request.GET
489
-