Package coprs :: Package views :: Package apiv3_ns :: Module apiv3_project_chroots
[hide private]
[frames] | no frames]

Source Code for Module coprs.views.apiv3_ns.apiv3_project_chroots

  1  import flask 
  2  from . import query_params, get_copr, file_upload, GET, POST, PUT, DELETE 
  3  from .json2form import get_form_compatible_data 
  4  from coprs.helpers import generate_build_config, generate_additional_repos 
  5  from coprs.views.misc import api_login_required 
  6  from coprs.views.apiv3_ns import apiv3_ns 
  7  from coprs.logic.complex_logic import ComplexLogic 
  8  from coprs.exceptions import ApiError, ObjectNotFound, BadRequest 
  9  from coprs import db, models, forms 
 10  from coprs.logic.coprs_logic import CoprChrootsLogic 
11 12 13 -def to_dict(project_chroot):
14 return { 15 "mock_chroot": project_chroot.mock_chroot.name, 16 "projectname": project_chroot.copr.name, 17 "ownername": project_chroot.copr.owner_name, 18 "comps_name": project_chroot.comps_name, 19 "additional_repos": project_chroot.repos_list, 20 "additional_packages": project_chroot.buildroot_pkgs_list, 21 "with_opts": str_to_list(project_chroot.with_opts), 22 "without_opts": str_to_list(project_chroot.without_opts), 23 }
24
25 26 -def to_build_config_dict(project_chroot):
27 return { 28 "chroot": project_chroot.name, 29 "additional_packages": (project_chroot.buildroot_pkgs or "").split(), 30 "additional_repos": generate_additional_repos(project_chroot), 31 "use_bootstrap_container": project_chroot.copr.use_bootstrap_container, 32 "enable_net": project_chroot.copr.enable_net, 33 "with_opts": str_to_list(project_chroot.with_opts), 34 "without_opts": str_to_list(project_chroot.without_opts), 35 }
36
37 38 -def rename_fields(input):
39 replace = { 40 "additional_repos": "repos", 41 "additional_packages": "buildroot_pkgs", 42 } 43 output = input.copy() 44 for from_name, to_name in replace.items(): 45 if from_name not in output: 46 continue 47 output[to_name] = output.pop(from_name) 48 return output
49
50 51 -def str_to_list(value):
52 return (value or "").split()
53
54 55 @apiv3_ns.route("/project-chroot", methods=GET) 56 @query_params() 57 -def get_project_chroot(ownername, projectname, chrootname):
58 copr = get_copr(ownername, projectname) 59 chroot = ComplexLogic.get_copr_chroot_safe(copr, chrootname) 60 return flask.jsonify(to_dict(chroot))
61
62 63 @apiv3_ns.route("/project-chroot/build-config", methods=GET) 64 @query_params() 65 -def get_build_config(ownername, projectname, chrootname):
66 copr = get_copr(ownername, projectname) 67 chroot = ComplexLogic.get_copr_chroot_safe(copr, chrootname) 68 if not chroot: 69 raise ObjectNotFound('Chroot not found.') 70 config = to_build_config_dict(chroot) 71 return flask.jsonify(config)
72
73 74 @apiv3_ns.route("/project-chroot/edit/<ownername>/<projectname>/<chrootname>", methods=PUT) 75 @file_upload() 76 @api_login_required 77 -def edit_project_chroot(ownername, projectname, chrootname):
78 copr = get_copr(ownername, projectname) 79 data = rename_fields(get_form_compatible_data()) 80 form = forms.ModifyChrootForm(data, csrf_enabled=False) 81 chroot = ComplexLogic.get_copr_chroot_safe(copr, chrootname) 82 83 if not form.validate_on_submit(): 84 raise BadRequest(form.errors) 85 86 buildroot_pkgs = repos = comps_xml = comps_name = with_opts = without_opts = None 87 if "buildroot_pkgs" in data: 88 buildroot_pkgs = form.buildroot_pkgs.data 89 if "repos" in data: 90 repos = form.repos.data 91 if "with_opts" in data: 92 with_opts = form.with_opts.data 93 if "without_opts" in data: 94 without_opts = form.without_opts.data 95 if form.upload_comps.has_file(): 96 comps_xml = form.upload_comps.data.stream.read() 97 comps_name = form.upload_comps.data.filename 98 if form.delete_comps.data: 99 CoprChrootsLogic.remove_comps(flask.g.user, chroot) 100 CoprChrootsLogic.update_chroot( 101 flask.g.user, chroot, buildroot_pkgs, repos, comps=comps_xml, comps_name=comps_name, 102 with_opts=with_opts, without_opts=without_opts) 103 db.session.commit() 104 return flask.jsonify(to_dict(chroot))
105