Trees | Indices | Help |
---|
|
1 import flask 2 import wtforms 3 from . import query_params, pagination, get_copr, Paginator, GET, POST, PUT, DELETE 4 from .json2form import get_form_compatible_data, get_input 5 from coprs.exceptions import ApiError 6 from coprs.exceptions import (ApiError, InsufficientRightsException, ActionInProgressException, 7 NoPackageSourceException, ObjectNotFound, BadRequest) 8 from coprs.views.misc import api_login_required 9 from coprs import db, models, forms 10 from coprs.views.apiv3_ns import apiv3_ns 11 from coprs.logic.packages_logic import PackagesLogic 12 13 # @TODO if we need to do this on several places, we should figure a better way to do it 14 from coprs.views.apiv3_ns.apiv3_builds import to_dict as build_to_dict 15 16 # @TODO Don't import things from APIv1 17 from coprs.views.api_ns.api_general import process_package_add_or_edit21 source_dict = package.source_json_dict 22 if "srpm_build_method" in source_dict: 23 source_dict["source_build_method"] = source_dict.pop("srpm_build_method") 24 return { 25 "id": package.id, 26 "name": package.name, 27 "projectname": package.copr.name, 28 "ownername": package.copr.owner_name, 29 "source_type": package.source_type_text, 30 "source_dict": source_dict, 31 "auto_rebuild": package.webhook_rebuild, 32 }3336 replace = { 37 "is_background": "background", 38 "memory_limit": "memory_reqs", 39 "source_build_method": "srpm_build_method", 40 } 41 output = input.copy() 42 for from_name, to_name in replace.items(): 43 if from_name not in output: 44 continue 45 output[to_name] = output.pop(from_name) 46 return output4748 49 @apiv3_ns.route("/package", methods=GET) 50 @query_params() 51 -def get_package(ownername, projectname, packagename):52 copr = get_copr(ownername, projectname) 53 try: 54 package = PackagesLogic.get(copr.main_dir.id, packagename)[0] 55 except IndexError: 56 raise ObjectNotFound("No package with name {name} in copr {copr}".format(name=packagename, copr=copr.name)) 57 return flask.jsonify(to_dict(package))5859 60 @apiv3_ns.route("/package/list/", methods=GET) 61 @pagination() 62 @query_params() 63 -def get_package_list(ownername, projectname, **kwargs):64 copr = get_copr(ownername, projectname) 65 paginator = Paginator(PackagesLogic.get_all(copr.main_dir.id), models.Package, **kwargs) 66 packages = paginator.map(to_dict) 67 return flask.jsonify(items=packages, meta=paginator.meta)6869 70 @apiv3_ns.route("/package/add/<ownername>/<projectname>/<package_name>/<source_type_text>", methods=POST) 71 @api_login_required 72 -def package_add(ownername, projectname, package_name, source_type_text):73 copr = get_copr(ownername, projectname) 74 data = rename_fields(get_input()) 75 process_package_add_or_edit(copr, source_type_text, data=data) 76 package = PackagesLogic.get(copr.main_dir.id, package_name).first() 77 return flask.jsonify(to_dict(package))7879 80 @apiv3_ns.route("/package/edit/<ownername>/<projectname>/<package_name>/<source_type_text>", methods=PUT) 81 @api_login_required 82 -def package_edit(ownername, projectname, package_name, source_type_text=None):83 copr = get_copr(ownername, projectname) 84 data = rename_fields(get_input()) 85 try: 86 package = PackagesLogic.get(copr.main_dir.id, package_name)[0] 87 source_type_text = source_type_text or package.source_type_text 88 except IndexError: 89 raise ObjectNotFound("Package {name} does not exists in copr {copr}." 90 .format(name=package_name, copr=copr.full_name)) 91 92 process_package_add_or_edit(copr, source_type_text, package=package, data=data) 93 return flask.jsonify(to_dict(package))9495 96 @apiv3_ns.route("/package/reset", methods=PUT) 97 @api_login_required 98 -def package_reset():99 copr = get_copr() 100 form = forms.BasePackageForm() 101 try: 102 package = PackagesLogic.get(copr.main_dir.id, form.package_name.data)[0] 103 except IndexError: 104 raise ObjectNotFound("No package with name {name} in copr {copr}" 105 .format(name=form.package_name.data, copr=copr.name)) 106 107 PackagesLogic.reset_package(flask.g.user, package) 108 db.session.commit() 109 return flask.jsonify(to_dict(package))110111 112 @apiv3_ns.route("/package/build", methods=POST) 113 @api_login_required 114 -def package_build():115 copr = get_copr() 116 data = rename_fields(get_form_compatible_data()) 117 form = forms.RebuildPackageFactory.create_form_cls(copr.active_chroots)(data, csrf_enabled=False) 118 try: 119 package = PackagesLogic.get(copr.main_dir.id, form.package_name.data)[0] 120 except IndexError: 121 raise ObjectNotFound("No package with name {name} in copr {copr}" 122 .format(name=form.package_name.data, copr=copr.name)) 123 if form.validate_on_submit(): 124 buildopts = {k: v for k, v in form.data.items() if k in data} 125 build = PackagesLogic.build_package(flask.g.user, copr, package, form.selected_chroots, **buildopts) 126 db.session.commit() 127 else: 128 raise BadRequest(form.errors) 129 return flask.jsonify(build_to_dict(build))130131 132 @apiv3_ns.route("/package/delete", methods=DELETE) 133 @api_login_required 134 -def package_delete():135 copr = get_copr() 136 form = forms.BasePackageForm() 137 try: 138 package = PackagesLogic.get(copr.main_dir.id, form.package_name.data)[0] 139 except IndexError: 140 raise ObjectNotFound("No package with name {name} in copr {copr}" 141 .format(name=form.package_name.data, copr=copr.name)) 142 143 PackagesLogic.delete_package(flask.g.user, package) 144 db.session.commit() 145 return flask.jsonify(to_dict(package))146
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 | http://epydoc.sourceforge.net |