From f5bb2dca8c6c1bcbd47203be2e4b553692058d27 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Tue, 6 Aug 2019 15:44:36 -0700 Subject: [PATCH] Move common functions into pylorax.api.utils This is so that they can be used from multiple versions of the API. eg. v0.py, v1.py, etc. --- src/pylorax/api/utils.py | 49 ++++++++++++++++++++++++++++++++++++++++ src/pylorax/api/v0.py | 38 ++++--------------------------- 2 files changed, 53 insertions(+), 34 deletions(-) create mode 100644 src/pylorax/api/utils.py diff --git a/src/pylorax/api/utils.py b/src/pylorax/api/utils.py new file mode 100644 index 00000000..ccab5ca2 --- /dev/null +++ b/src/pylorax/api/utils.py @@ -0,0 +1,49 @@ +# +# Copyright (C) 2019 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 . +""" API utility functions +""" +from pylorax.api.recipes import RecipeError, RecipeFileError, read_recipe_commit + +def take_limits(iterable, offset, limit): + """ Apply offset and limit to an iterable object + + :param iterable: The object to limit + :type iterable: iter + :param offset: The number of items to skip + :type offset: int + :param limit: The total number of items to return + :type limit: int + :returns: A subset of the iterable + """ + return iterable[offset:][:limit] + +def blueprint_exists(api, branch, blueprint_name): + """Return True if the blueprint exists + + :param api: flask object + :type api: Flask + :param branch: Branch name + :type branch: str + :param recipe_name: Recipe name to read + :type recipe_name: str + """ + try: + with api.config["GITLOCK"].lock: + read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) + + return True + except (RecipeError, RecipeFileError): + return False diff --git a/src/pylorax/api/v0.py b/src/pylorax/api/v0.py index 56a28b12..5d63c525 100644 --- a/src/pylorax/api/v0.py +++ b/src/pylorax/api/v0.py @@ -65,47 +65,17 @@ from pylorax.api.projects import modules_list, modules_info, ProjectsError, repo from pylorax.api.projects import get_repo_sources, delete_repo_source, source_to_repo, dnf_repo_to_file_repo from pylorax.api.queue import queue_status, build_status, uuid_delete, uuid_status, uuid_info from pylorax.api.queue import uuid_tar, uuid_image, uuid_cancel, uuid_log -from pylorax.api.recipes import RecipeError, list_branch_files, read_recipe_commit, recipe_filename, list_commits +from pylorax.api.recipes import list_branch_files, read_recipe_commit, recipe_filename, list_commits from pylorax.api.recipes import recipe_from_dict, recipe_from_toml, commit_recipe, delete_recipe, revert_recipe from pylorax.api.recipes import tag_recipe_commit, recipe_diff, RecipeFileError from pylorax.api.regexes import VALID_API_STRING, VALID_BLUEPRINT_NAME import pylorax.api.toml as toml +from pylorax.api.utils import take_limits, blueprint_exists from pylorax.api.workspace import workspace_read, workspace_write, workspace_delete # The API functions don't actually get called by any code here # pylint: disable=unused-variable -def take_limits(iterable, offset, limit): - """ Apply offset and limit to an iterable object - - :param iterable: The object to limit - :type iterable: iter - :param offset: The number of items to skip - :type offset: int - :param limit: The total number of items to return - :type limit: int - :returns: A subset of the iterable - """ - return iterable[offset:][:limit] - -def blueprint_exists(branch, blueprint_name): - """Return True if the blueprint exists - - :param api: flask object - :type api: Flask - :param branch: Branch name - :type branch: str - :param recipe_name: Recipe name to read - :type recipe_name: str - """ - try: - with api.config["GITLOCK"].lock: - read_recipe_commit(api.config["GITLOCK"].repo, branch, blueprint_name) - - return True - except (RecipeError, RecipeFileError): - return False - # Create the v0 routes Blueprint with skip_routes support v0_api = BlueprintSkip("v0_routes", __name__) @@ -653,7 +623,7 @@ def v0_blueprints_diff(blueprint_name, from_commit, to_commit): if VALID_API_STRING.match(branch) is None: return jsonify(status=False, errors=[{"id": INVALID_CHARS, "msg": "Invalid characters in branch argument"}]), 400 - if not blueprint_exists(branch, blueprint_name): + if not blueprint_exists(api, branch, blueprint_name): return jsonify(status=False, errors=[{"id": UNKNOWN_BLUEPRINT, "msg": "Unknown blueprint name: %s" % blueprint_name}]) try: @@ -1523,7 +1493,7 @@ def v0_compose_start(): if VALID_BLUEPRINT_NAME.match(blueprint_name) is None: errors.append({"id": INVALID_CHARS, "msg": "Invalid characters in API path"}) - if not blueprint_exists(branch, blueprint_name): + if not blueprint_exists(api, branch, blueprint_name): errors.append({"id": UNKNOWN_BLUEPRINT, "msg": "Unknown blueprint name: %s" % blueprint_name}) if errors: