Fix the error responses from lorax-composer

They are now all consistent, returning status 400, including a json
object with status=flase, and an error message inside the error object.
This commit is contained in:
Brian C. Lane 2018-03-13 14:35:21 -07:00
parent 60874d0197
commit 2e61bc8bf9

View File

@ -949,7 +949,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(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
with api.config["GITLOCK"].lock: with api.config["GITLOCK"].lock:
recipes = take_limits(map(lambda f: f[:-5], list_branch_files(api.config["GITLOCK"].repo, branch)), offset, limit) recipes = take_limits(map(lambda f: f[:-5], list_branch_files(api.config["GITLOCK"].repo, branch)), offset, limit)
@ -1020,7 +1020,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(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
recipes = [] recipes = []
errors = [] errors = []
@ -1156,7 +1156,7 @@ def v0_api(api):
old_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name, from_commit) old_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name, from_commit)
except Exception as e: except Exception as e:
log.error("(v0_recipes_diff) %s", str(e)) log.error("(v0_recipes_diff) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
try: try:
if to_commit == "WORKSPACE": if to_commit == "WORKSPACE":
@ -1174,7 +1174,7 @@ def v0_api(api):
new_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name, to_commit) new_recipe = read_recipe_commit(api.config["GITLOCK"].repo, branch, recipe_name, to_commit)
except Exception as e: except Exception as e:
log.error("(v0_recipes_diff) %s", str(e)) log.error("(v0_recipes_diff) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
diff = recipe_diff(old_recipe, new_recipe) diff = recipe_diff(old_recipe, new_recipe)
return jsonify(diff=diff) return jsonify(diff=diff)
@ -1295,14 +1295,14 @@ 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(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
try: try:
with api.config["YUMLOCK"].lock: with api.config["YUMLOCK"].lock:
available = projects_list(api.config["YUMLOCK"].yb) available = projects_list(api.config["YUMLOCK"].yb)
except ProjectsError as e: except ProjectsError as e:
log.error("(v0_projects_list) %s", str(e)) log.error("(v0_projects_list) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
projects = take_limits(available, offset, limit) projects = take_limits(available, offset, limit)
return jsonify(projects=projects, offset=offset, limit=limit, total=len(available)) return jsonify(projects=projects, offset=offset, limit=limit, total=len(available))
@ -1316,7 +1316,7 @@ def v0_api(api):
projects = projects_info(api.config["YUMLOCK"].yb, project_names.split(",")) projects = projects_info(api.config["YUMLOCK"].yb, project_names.split(","))
except ProjectsError as e: except ProjectsError as e:
log.error("(v0_projects_info) %s", str(e)) log.error("(v0_projects_info) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
return jsonify(projects=projects) return jsonify(projects=projects)
@ -1329,7 +1329,7 @@ def v0_api(api):
deps = projects_depsolve(api.config["YUMLOCK"].yb, project_names.split(",")) deps = projects_depsolve(api.config["YUMLOCK"].yb, project_names.split(","))
except ProjectsError as e: except ProjectsError as e:
log.error("(v0_projects_depsolve) %s", str(e)) log.error("(v0_projects_depsolve) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
return jsonify(projects=deps) return jsonify(projects=deps)
@ -1342,7 +1342,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(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
if module_names: if module_names:
module_names = module_names.split(",") module_names = module_names.split(",")
@ -1352,7 +1352,7 @@ def v0_api(api):
available = modules_list(api.config["YUMLOCK"].yb, module_names) available = modules_list(api.config["YUMLOCK"].yb, module_names)
except ProjectsError as e: except ProjectsError as e:
log.error("(v0_modules_list) %s", str(e)) log.error("(v0_modules_list) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
modules = take_limits(available, offset, limit) modules = take_limits(available, offset, limit)
return jsonify(modules=modules, offset=offset, limit=limit, total=len(available)) return jsonify(modules=modules, offset=offset, limit=limit, total=len(available))
@ -1366,7 +1366,7 @@ def v0_api(api):
modules = modules_info(api.config["YUMLOCK"].yb, module_names.split(",")) modules = modules_info(api.config["YUMLOCK"].yb, module_names.split(","))
except ProjectsError as e: except ProjectsError as e:
log.error("(v0_modules_info) %s", str(e)) log.error("(v0_modules_info) %s", str(e))
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
return jsonify(modules=modules) return jsonify(modules=modules)
@ -1465,7 +1465,7 @@ def v0_api(api):
"""Cancel a running compose and delete its results directory""" """Cancel a running compose and delete its results directory"""
status = uuid_status(api.config["COMPOSER_CFG"], uuid) status = uuid_status(api.config["COMPOSER_CFG"], uuid)
if status is None: if status is None:
return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 return jsonify(status=False, error={"msg":"%s is not a valid build uuid" % uuid}), 400
if status["queue_status"] not in ["WAITING", "RUNNING"]: if status["queue_status"] not in ["WAITING", "RUNNING"]:
return jsonify(status=False, uuid=uuid, msg="Cannot cancel a build that is in the %s state" % status["queue_status"]) return jsonify(status=False, uuid=uuid, msg="Cannot cancel a build that is in the %s state" % status["queue_status"])
@ -1515,9 +1515,9 @@ def v0_api(api):
"""Return a tar of the metadata for the build""" """Return a tar of the metadata for the build"""
status = uuid_status(api.config["COMPOSER_CFG"], uuid) status = uuid_status(api.config["COMPOSER_CFG"], uuid)
if status is None: if status is None:
return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 return jsonify(status=False, error={"msg":"%s is not a valid build uuid" % uuid}), 400
if status["queue_status"] not in ["FINISHED", "FAILED"]: if status["queue_status"] not in ["FINISHED", "FAILED"]:
return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") return jsonify(status=False, error={"msg":"Build %s not in FINISHED or FAILED state." % uuid}), 400
else: else:
return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=False, logs=False), return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=False, logs=False),
mimetype="application/x-tar", mimetype="application/x-tar",
@ -1530,9 +1530,9 @@ def v0_api(api):
"""Return a tar of the metadata and the results for the build""" """Return a tar of the metadata and the results for the build"""
status = uuid_status(api.config["COMPOSER_CFG"], uuid) status = uuid_status(api.config["COMPOSER_CFG"], uuid)
if status is None: if status is None:
return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 return jsonify(status=False, error={"msg":"%s is not a valid build uuid" % uuid}), 400
elif status["queue_status"] not in ["FINISHED", "FAILED"]: elif status["queue_status"] not in ["FINISHED", "FAILED"]:
return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") return jsonify(status=False, error={"msg":"Build %s not in FINISHED or FAILED state." % uuid}), 400
else: else:
return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=True, logs=True), return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=True, image=True, logs=True),
mimetype="application/x-tar", mimetype="application/x-tar",
@ -1545,9 +1545,9 @@ def v0_api(api):
"""Return a tar of the metadata for the build""" """Return a tar of the metadata for the build"""
status = uuid_status(api.config["COMPOSER_CFG"], uuid) status = uuid_status(api.config["COMPOSER_CFG"], uuid)
if status is None: if status is None:
return jsonify(status=False, msg="%s is not a valid build uuid"), 400 return jsonify(status=False, error={"msg":"%s is not a valid build uuid" % uuid}), 400
elif status["queue_status"] not in ["FINISHED", "FAILED"]: elif status["queue_status"] not in ["FINISHED", "FAILED"]:
return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") return jsonify(status=False, error={"msg":"Build %s not in FINISHED or FAILED state." % uuid}), 400
else: else:
return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=False, image=False, logs=True), return Response(uuid_tar(api.config["COMPOSER_CFG"], uuid, metadata=False, image=False, logs=True),
mimetype="application/x-tar", mimetype="application/x-tar",
@ -1560,15 +1560,15 @@ def v0_api(api):
"""Return the output image for the build""" """Return the output image for the build"""
status = uuid_status(api.config["COMPOSER_CFG"], uuid) status = uuid_status(api.config["COMPOSER_CFG"], uuid)
if status is None: if status is None:
return jsonify(status=False, msg="%s is not a valid build uuid" % uuid), 400 return jsonify(status=False, error={"msg":"%s is not a valid build uuid" % uuid}), 400
elif status["queue_status"] not in ["FINISHED", "FAILED"]: elif status["queue_status"] not in ["FINISHED", "FAILED"]:
return jsonify(status=False, uuid=uuid, msg="Build not in FINISHED or FAILED.") return jsonify(status=False, error={"msg":"Build %s not in FINISHED or FAILED state." % uuid}), 400
else: else:
image_name, image_path = uuid_image(api.config["COMPOSER_CFG"], uuid) image_name, image_path = uuid_image(api.config["COMPOSER_CFG"], uuid)
# Make sure it really exists # Make sure it really exists
if not os.path.exists(image_path): if not os.path.exists(image_path):
return jsonify(status=False, uuid=uuid, error={"msg":"Build %s is missing image file %s" % (uuid, image_name)}), 400 return jsonify(status=False, error={"msg":"Build %s is missing image file %s" % (uuid, image_name)}), 400
# Make the image name unique # Make the image name unique
image_name = uuid + "-" + image_name image_name = uuid + "-" + image_name
@ -1582,7 +1582,7 @@ def v0_api(api):
try: try:
size = int(request.args.get("size", "1024")) size = int(request.args.get("size", "1024"))
except ValueError as e: except ValueError as e:
return jsonify(error={"msg":str(e)}), 400 return jsonify(status=False, error={"msg":str(e)}), 400
status = uuid_status(api.config["COMPOSER_CFG"], uuid) status = uuid_status(api.config["COMPOSER_CFG"], uuid)
if status is None or status["queue_status"] == "WAITING": if status is None or status["queue_status"] == "WAITING":