From b752a9741ab86e7685a94a820b0fbdcb7ccb86e6 Mon Sep 17 00:00:00 2001 From: mprahl Date: Mon, 27 Nov 2017 11:51:36 -0500 Subject: [PATCH] Return a friendly error when the 'id' is provided as a query parameter --- module_build_service/views.py | 8 +++++++- tests/test_views/test_views.py | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/module_build_service/views.py b/module_build_service/views.py index a0213dd6..52cdc839 100644 --- a/module_build_service/views.py +++ b/module_build_service/views.py @@ -28,7 +28,7 @@ This is the implementation of the orchestrator's public RESTful API. import json import module_build_service.auth -from flask import request, jsonify +from flask import request, jsonify, url_for from flask.views import MethodView from module_build_service import app, conf, log, models, db, version @@ -92,6 +92,12 @@ class AbstractQueryableBuildAPI(MethodView): @cors_header() def get(self, id): + id_flag = request.args.get('id') + if id_flag: + endpoint = request.endpoint.split('s_list')[0] + raise ValidationError( + 'The "id" query option is invalid. Did you mean to go to "{0}"?'.format( + url_for(endpoint, id=id_flag))) verbose_flag = request.args.get('verbose', 'false').lower() short_flag = request.args.get('short', 'false').lower() json_func_kwargs = {} diff --git a/tests/test_views/test_views.py b/tests/test_views/test_views.py index e60c7dae..aea68f47 100644 --- a/tests/test_views/test_views.py +++ b/tests/test_views/test_views.py @@ -309,6 +309,18 @@ class TestViews(unittest.TestCase): ] self.assertEquals(items, expected) + def test_query_builds_with_id_error(self): + rv = self.client.get('/module-build-service/1/module-builds/?id=1') + actual = json.loads(rv.data) + msg = ('The "id" query option is invalid. Did you mean to go to ' + '"/module-build-service/1/module-builds/1"?') + expected = { + 'error': 'Bad Request', + 'message': msg, + "status": 400 + } + self.assertEqual(actual, expected) + def test_query_component_build(self): rv = self.client.get('/module-build-service/1/component-builds/1') data = json.loads(rv.data)