feat: add util.get_form_data()
convenience function
This commit is contained in:
parent
26d44390a5
commit
3b6b317377
|
@ -21,12 +21,33 @@
|
||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
"""
|
"""
|
||||||
Utilities
|
Web Utilities
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import importlib
|
import importlib
|
||||||
|
|
||||||
|
|
||||||
|
def get_form_data(request):
|
||||||
|
"""
|
||||||
|
Returns the effective form data for the given request.
|
||||||
|
|
||||||
|
Mostly this is a convenience, which simply returns one of the
|
||||||
|
following, depending on various attributes of the request.
|
||||||
|
|
||||||
|
* :attr:`pyramid:pyramid.request.Request.POST`
|
||||||
|
* :attr:`pyramid:pyramid.request.Request.json_body`
|
||||||
|
"""
|
||||||
|
# nb. we prefer JSON only if no POST is present
|
||||||
|
# TODO: this seems to work for our use case at least, but perhaps
|
||||||
|
# there is a better way? see also
|
||||||
|
# https://docs.pylonsproject.org/projects/pyramid/en/latest/api/request.html#pyramid.request.Request.is_xhr
|
||||||
|
if not request.POST and (
|
||||||
|
getattr(request, 'is_xhr', False)
|
||||||
|
or request.content_type == 'application/json'):
|
||||||
|
return request.json_body
|
||||||
|
return request.POST
|
||||||
|
|
||||||
|
|
||||||
def get_libver(
|
def get_libver(
|
||||||
request,
|
request,
|
||||||
key,
|
key,
|
||||||
|
|
|
@ -263,3 +263,30 @@ class TestGetLibUrl(TestCase):
|
||||||
self.config.setdefault('wuttaweb.liburl.bb_vue_fontawesome', '/lib/vue-fontawesome.js')
|
self.config.setdefault('wuttaweb.liburl.bb_vue_fontawesome', '/lib/vue-fontawesome.js')
|
||||||
url = util.get_liburl(self.request, 'bb_vue_fontawesome')
|
url = util.get_liburl(self.request, 'bb_vue_fontawesome')
|
||||||
self.assertEqual(url, '/lib/vue-fontawesome.js')
|
self.assertEqual(url, '/lib/vue-fontawesome.js')
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetFormData(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.config = WuttaConfig()
|
||||||
|
|
||||||
|
def make_request(self, **kwargs):
|
||||||
|
kwargs.setdefault('wutta_config', self.config)
|
||||||
|
kwargs.setdefault('POST', {'foo1': 'bar'})
|
||||||
|
kwargs.setdefault('json_body', {'foo2': 'baz'})
|
||||||
|
return testing.DummyRequest(**kwargs)
|
||||||
|
|
||||||
|
def test_default(self):
|
||||||
|
request = self.make_request()
|
||||||
|
data = util.get_form_data(request)
|
||||||
|
self.assertEqual(data, {'foo1': 'bar'})
|
||||||
|
|
||||||
|
def test_is_xhr(self):
|
||||||
|
request = self.make_request(POST=None, is_xhr=True)
|
||||||
|
data = util.get_form_data(request)
|
||||||
|
self.assertEqual(data, {'foo2': 'baz'})
|
||||||
|
|
||||||
|
def test_content_type(self):
|
||||||
|
request = self.make_request(POST=None, content_type='application/json')
|
||||||
|
data = util.get_form_data(request)
|
||||||
|
self.assertEqual(data, {'foo2': 'baz'})
|
||||||
|
|
Loading…
Reference in a new issue