Move creating a frozen recipe into recipes.py
Also adds .package_names and .module_names properties. Call recipe.freeze with a list of NEVRA dependencies and it will return a new Recipe object with all of the packages and modules set to the depsolved version.
This commit is contained in:
parent
0346a04dad
commit
6087ef2932
@ -25,6 +25,7 @@ import os
|
|||||||
import pytoml as toml
|
import pytoml as toml
|
||||||
import semantic_version as semver
|
import semantic_version as semver
|
||||||
|
|
||||||
|
from pylorax.api.projects import dep_evra
|
||||||
from pylorax.base import DataHolder
|
from pylorax.base import DataHolder
|
||||||
from pylorax.sysutils import joinpaths
|
from pylorax.sysutils import joinpaths
|
||||||
|
|
||||||
@ -62,6 +63,16 @@ class Recipe(dict):
|
|||||||
modules=modules,
|
modules=modules,
|
||||||
packages=packages)
|
packages=packages)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def package_names(self):
|
||||||
|
"""Return the names of the packages"""
|
||||||
|
return map(lambda p: p["name"], self["packages"] or [])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def module_names(self):
|
||||||
|
"""Return the names of the modules"""
|
||||||
|
return map(lambda m: m["name"], self["modules"] or [])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def filename(self):
|
def filename(self):
|
||||||
"""Return the Recipe's filename
|
"""Return the Recipe's filename
|
||||||
@ -108,6 +119,28 @@ class Recipe(dict):
|
|||||||
# Return the new version
|
# Return the new version
|
||||||
return str(semver.Version(self["version"]))
|
return str(semver.Version(self["version"]))
|
||||||
|
|
||||||
|
def freeze(self, deps):
|
||||||
|
""" Return a new Recipe with full module and package NEVRA
|
||||||
|
|
||||||
|
:param deps: A list of dependency NEVRA to use to fill in the modules and packages
|
||||||
|
:type deps: list(
|
||||||
|
:returns: A new Recipe object
|
||||||
|
:rtype: Recipe
|
||||||
|
"""
|
||||||
|
module_names = self.module_names
|
||||||
|
package_names = self.package_names
|
||||||
|
|
||||||
|
new_modules = []
|
||||||
|
new_packages = []
|
||||||
|
for dep in deps:
|
||||||
|
if dep["name"] in package_names:
|
||||||
|
new_packages.append(RecipePackage(dep["name"], dep_evra(dep)))
|
||||||
|
elif dep["name"] in module_names:
|
||||||
|
new_modules.append(RecipeModule(dep["name"], dep_evra(dep)))
|
||||||
|
|
||||||
|
return Recipe(self["name"], self["description"], self["version"],
|
||||||
|
new_modules, new_packages)
|
||||||
|
|
||||||
class RecipeModule(dict):
|
class RecipeModule(dict):
|
||||||
def __init__(self, name, version):
|
def __init__(self, name, version):
|
||||||
dict.__init__(self, name=name, version=version)
|
dict.__init__(self, name=name, version=version)
|
||||||
|
@ -620,11 +620,11 @@ from flask import jsonify, request
|
|||||||
|
|
||||||
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.projects import projects_list, projects_info, projects_depsolve, dep_evra
|
from pylorax.api.projects import projects_list, projects_info, projects_depsolve
|
||||||
from pylorax.api.projects import modules_list, modules_info, ProjectsError
|
from pylorax.api.projects import modules_list, modules_info, ProjectsError
|
||||||
from pylorax.api.recipes import 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 recipe_from_dict, recipe_from_toml, commit_recipe, delete_recipe, revert_recipe
|
||||||
from pylorax.api.recipes import tag_recipe_commit, recipe_diff, Recipe, RecipePackage, RecipeModule
|
from pylorax.api.recipes import tag_recipe_commit, recipe_diff
|
||||||
from pylorax.api.workspace import workspace_read, workspace_write, workspace_delete
|
from pylorax.api.workspace import workspace_read, workspace_write, workspace_delete
|
||||||
|
|
||||||
# The API functions don't actually get called by any code here
|
# The API functions don't actually get called by any code here
|
||||||
@ -918,8 +918,8 @@ def v0_api(api):
|
|||||||
|
|
||||||
# Combine modules and packages and depsolve the list
|
# Combine modules and packages and depsolve the list
|
||||||
# TODO include the version/glob in the depsolving
|
# TODO include the version/glob in the depsolving
|
||||||
module_names = map(lambda m: m["name"], recipe["modules"] or [])
|
module_names = recipe.module_names
|
||||||
package_names = map(lambda p: p["name"], recipe["packages"] or [])
|
package_names = recipe.package_names
|
||||||
projects = sorted(set(module_names+package_names), key=lambda n: n.lower())
|
projects = sorted(set(module_names+package_names), key=lambda n: n.lower())
|
||||||
deps = []
|
deps = []
|
||||||
try:
|
try:
|
||||||
@ -929,20 +929,7 @@ def v0_api(api):
|
|||||||
errors.append({"recipe":recipe_name, "msg":str(e)})
|
errors.append({"recipe":recipe_name, "msg":str(e)})
|
||||||
log.error("(v0_recipes_freeze) %s", str(e))
|
log.error("(v0_recipes_freeze) %s", str(e))
|
||||||
|
|
||||||
# Change the recipe's modules and packages to use the depsolved version
|
recipes.append({"recipe": recipe.freeze(deps)})
|
||||||
new_modules = []
|
|
||||||
new_packages = []
|
|
||||||
for dep in deps:
|
|
||||||
if dep["name"] in package_names:
|
|
||||||
new_packages.append(RecipePackage(dep["name"], dep_evra(dep)))
|
|
||||||
elif dep["name"] in module_names:
|
|
||||||
new_modules.append(RecipeModule(dep["name"], dep_evra(dep)))
|
|
||||||
|
|
||||||
recipes.append({"recipe":Recipe(recipe["name"],
|
|
||||||
recipe["description"],
|
|
||||||
recipe["version"],
|
|
||||||
new_modules,
|
|
||||||
new_packages)})
|
|
||||||
|
|
||||||
return jsonify(recipes=recipes, errors=errors)
|
return jsonify(recipes=recipes, errors=errors)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user