general: add support for explicit int and float query params (#36609)
This commit is contained in:
parent
c98ed032d9
commit
eca46f8bd8
|
@ -316,6 +316,17 @@ class GenericEndpointView(GenericConnectorMixin, SingleObjectMixin, View):
|
|||
d[parameter] = False
|
||||
else:
|
||||
raise InvalidParameterValue(parameter)
|
||||
elif parameter_info.get('type') == 'int':
|
||||
try:
|
||||
d[parameter] = int(d[parameter])
|
||||
except ValueError:
|
||||
raise InvalidParameterValue(parameter)
|
||||
elif parameter_info.get('type') == 'float':
|
||||
d[parameter] = d[parameter].replace(',', '.')
|
||||
try:
|
||||
d[parameter] = float(d[parameter])
|
||||
except ValueError:
|
||||
raise InvalidParameterValue(parameter)
|
||||
|
||||
if request.method == 'POST' and self.endpoint.endpoint_info.post:
|
||||
request_body = self.endpoint.endpoint_info.post.get('request_body')
|
||||
|
|
|
@ -344,3 +344,62 @@ def test_https_warnings(app, db, monkeypatch, httpbin_secure, relax_openssl):
|
|||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('error')
|
||||
resource.requests.get(httpbin_secure.join('/get/'))
|
||||
|
||||
|
||||
def test_endpoint_typed_params(app, db, monkeypatch):
|
||||
|
||||
@endpoint(methods=['get'],
|
||||
parameters={
|
||||
'boolean': {
|
||||
'type': 'bool',
|
||||
},
|
||||
'integer': {
|
||||
'type': 'int',
|
||||
},
|
||||
'floating': {
|
||||
'type': 'float',
|
||||
},
|
||||
})
|
||||
def httpcall(obj, request, boolean=False, integer=1, floating=1.1):
|
||||
return {'boolean': boolean, 'integer': integer, 'floating': floating}
|
||||
|
||||
monkeypatch.setattr(StubInvoicesConnector, 'httpcall', httpcall, raising=False)
|
||||
|
||||
connector = StubInvoicesConnector(slug='fake')
|
||||
connector.save()
|
||||
|
||||
json_res = app.get('/stub-invoices/fake/httpcall').json
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?boolean=True').json
|
||||
assert json_res['boolean'] is True
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?boolean=on').json
|
||||
assert json_res['boolean'] is True
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?boolean=False').json
|
||||
assert json_res['boolean'] is False
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?boolean=off').json
|
||||
assert json_res['boolean'] is False
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?boolean=notabool', status=400).json
|
||||
assert json_res['err'] == 1
|
||||
assert json_res['err_desc'] == 'invalid value for parameter "boolean"'
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?boolean=', status=400).json
|
||||
assert json_res['err'] == 1
|
||||
assert json_res['err_desc'] == 'invalid value for parameter "boolean"'
|
||||
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?integer=2').json
|
||||
assert json_res['integer'] == 2
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?integer=notanint', status=400).json
|
||||
assert json_res['err'] == 1
|
||||
assert json_res['err_desc'] == 'invalid value for parameter "integer"'
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?integer=', status=400).json
|
||||
assert json_res['err'] == 1
|
||||
assert json_res['err_desc'] == 'invalid value for parameter "integer"'
|
||||
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?floating=1.5').json
|
||||
assert json_res['floating'] == 1.5
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?floating=1,5').json
|
||||
assert json_res['floating'] == 1.5
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?floating=notafloat', status=400).json
|
||||
assert json_res['err'] == 1
|
||||
assert json_res['err_desc'] == 'invalid value for parameter "floating"'
|
||||
json_res = app.get('/stub-invoices/fake/httpcall?floating=', status=400).json
|
||||
assert json_res['err'] == 1
|
||||
assert json_res['err_desc'] == 'invalid value for parameter "floating"'
|
||||
|
|
Loading…
Reference in New Issue