Change the error return type for bad limit= and offset=.

Each element in the errors value is now a dict, with a msg field and an
id field.  The id field contains a value out of errors.py that can be
used by the front end to key on.  The msg field is the same as what's
been there.

The idea is to keep the number of IDs somewhat limited so there's not a
huge number of things for the front end to know.

(cherry picked from commit 9677b012da)
This commit is contained in:
Chris Lumens 2018-08-08 10:22:22 -04:00
parent 6c3b0b3cd2
commit 2efbd7cae5
2 changed files with 26 additions and 4 deletions

21
src/pylorax/api/errors.py Normal file
View File

@ -0,0 +1,21 @@
#
# lorax-composer API server
#
# Copyright (C) 2018 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Returned from the API when ?limit= or ?offset= is given something that does
# not convert into an integer.
BAD_LIMIT_OR_OFFSET = "BadLimitOrOffset"

View File

@ -983,6 +983,7 @@ from pylorax.sysutils import joinpaths
from pylorax.api.checkparams import checkparams from pylorax.api.checkparams import checkparams
from pylorax.api.compose import start_build, compose_types from pylorax.api.compose import start_build, compose_types
from pylorax.api.crossdomain import crossdomain from pylorax.api.crossdomain import crossdomain
from pylorax.api.errors import * # pylint: disable=wildcard-import
from pylorax.api.projects import projects_list, projects_info, projects_depsolve from pylorax.api.projects import projects_list, projects_info, projects_depsolve
from pylorax.api.projects import modules_list, modules_info, ProjectsError, repo_to_source from pylorax.api.projects import modules_list, modules_info, ProjectsError, repo_to_source
from pylorax.api.projects import get_repo_sources, delete_repo_source, source_to_repo, dnf_repo_to_file_repo from pylorax.api.projects import get_repo_sources, delete_repo_source, source_to_repo, dnf_repo_to_file_repo
@ -1024,7 +1025,7 @@ def v0_api(api):
limit = int(request.args.get("limit", "20")) limit = int(request.args.get("limit", "20"))
offset = int(request.args.get("offset", "0")) offset = int(request.args.get("offset", "0"))
except ValueError as e: except ValueError as e:
return jsonify(status=False, errors=[str(e)]), 400 return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400
with api.config["GITLOCK"].lock: with api.config["GITLOCK"].lock:
blueprints = take_limits([f[:-5] for f in list_branch_files(api.config["GITLOCK"].repo, branch)], offset, limit) blueprints = take_limits([f[:-5] for f in list_branch_files(api.config["GITLOCK"].repo, branch)], offset, limit)
@ -1113,7 +1114,7 @@ def v0_api(api):
limit = int(request.args.get("limit", "20")) limit = int(request.args.get("limit", "20"))
offset = int(request.args.get("offset", "0")) offset = int(request.args.get("offset", "0"))
except ValueError as e: except ValueError as e:
return jsonify(status=False, errors=[str(e)]), 400 return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400
blueprints = [] blueprints = []
errors = [] errors = []
@ -1465,7 +1466,7 @@ def v0_api(api):
limit = int(request.args.get("limit", "20")) limit = int(request.args.get("limit", "20"))
offset = int(request.args.get("offset", "0")) offset = int(request.args.get("offset", "0"))
except ValueError as e: except ValueError as e:
return jsonify(status=False, errors=[str(e)]), 400 return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400
try: try:
with api.config["DNFLOCK"].lock: with api.config["DNFLOCK"].lock:
@ -1663,7 +1664,7 @@ def v0_api(api):
limit = int(request.args.get("limit", "20")) limit = int(request.args.get("limit", "20"))
offset = int(request.args.get("offset", "0")) offset = int(request.args.get("offset", "0"))
except ValueError as e: except ValueError as e:
return jsonify(status=False, errors=[str(e)]), 400 return jsonify(status=False, errors=[{"id": BAD_LIMIT_OR_OFFSET, "msg": str(e)}]), 400
if module_names: if module_names:
module_names = module_names.split(",") module_names = module_names.split(",")