From 3841b36a252e6e832fdf17a3f0900d472b39841a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 11 2016 10:31:26 +0000 Subject: Add endpoint to save the custom fields set for a project --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index f68584a..9bb1bfb 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -2097,3 +2097,61 @@ def update_close_status(repo, username=None, namespace=None): return flask.redirect(flask.url_for( 'view_settings', username=username, repo=repo.name, namespace=namespace)) + + +@APP.route('//update/custom_keys', methods=['POST']) +@APP.route('///update/custom_keys', methods=['POST']) +@APP.route('/fork///update/custom_keys', methods=['POST']) +@APP.route( + '/fork////update/custom_keys', + methods=['POST']) +@login_required +def update_custom_keys(repo, username=None, namespace=None): + """ Update the custom_keys of a project. + """ + if admin_session_timedout(): + flask.flash('Action canceled, try it again', 'error') + url = flask.url_for( + 'view_settings', username=username, repo=repo, + namespace=namespace) + return flask.redirect( + flask.url_for('auth_login', next=url)) + + repo = flask.g.repo + + if not repo.settings.get('issue_tracker', True): + flask.abort(404, 'No issue tracker found for this project') + + if not flask.g.repo_admin: + flask.abort( + 403, + 'You are not allowed to change the settings for this project') + + form = pagure.forms.ConfirmationForm() + + error = False + if form.validate_on_submit(): + custom_keys = [ + w.strip() for w in flask.request.form.getlist('custom_keys') + if w.strip() + ] + custom_keys_type = [ + w.strip() for w in flask.request.form.getlist('custom_keys_type') + if w.strip() + ] + + try: + msg = pagure.lib.set_custom_key_fields( + SESSION, repo, custom_keys, custom_keys_type) + SESSION.commit() + flask.flash(msg) + except pagure.exceptions.PagureException as msg: + SESSION.rollback() + flask.flash(msg, 'error') + except SQLAlchemyError as err: # pragma: no cover + SESSION.rollback() + flask.flash(str(err), 'error') + + return flask.redirect(flask.url_for( + 'view_settings', username=username, repo=repo.name, + namespace=namespace))