Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit b7c5a76848587629cc9358fe45258a2f1af884e7
Author: Jakub Kadl����k <jkadlcik(a)redhat.com>
Date: Thu Dec 17 17:23:54 2015 +0100
[frontend] merge group/user views for package routes
---------------------------------------------------------------
.../coprs_frontend/coprs/templates/_helpers.html | 7 +-
.../coprs/templates/coprs/detail/package_edit.html | 6 +-
.../coprs/views/coprs_ns/coprs_packages.py | 206 ++++++++------------
3 files changed, 84 insertions(+), 135 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/templates/_helpers.html
b/frontend/coprs_frontend/coprs/templates/_helpers.html
index b810198..82c5182 100644
--- a/frontend/coprs_frontend/coprs/templates/_helpers.html
+++ b/frontend/coprs_frontend/coprs/templates/_helpers.html
@@ -160,7 +160,12 @@
{% if not copr.is_a_group_project %}
{{ url_for(view, username=copr.owner.name, coprname=copr.name, **kwargs) }}
{% else %}
- {% set group_view = view.split(".")[0] + ".group_" +
view.split(".")[-1] %}
+ {# Only the listed views have merged functions for regular and group projects. Once
all views have it, @TODO remove the workaround #}
+ {% if view in ["coprs_ns.copr_add_package",
"coprs_ns.copr_new_package", "coprs_ns.copr_rebuild_package",
"coprs_ns.copr_packages", "coprs_ns.copr_package",
"coprs_ns.copr_edit_package"] %}
+ {% set group_view = view %}
+ {% else %}
+ {% set group_view = view.split(".")[0] + ".group_" +
view.split(".")[-1] %}
+ {% endif %}
{{ url_for(group_view, group_name=copr.group.name, coprname=copr.name, **kwargs) }}
{% endif %}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/package_edit.html
b/frontend/coprs_frontend/coprs/templates/coprs/detail/package_edit.html
index 59ec338..798d2bb 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/package_edit.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/package_edit.html
@@ -10,11 +10,7 @@
{% block detail_body %}
-{% if not copr.is_a_group_project %}
- <h2> Package: <a href="{{ url_for('coprs_ns.copr_package',
username=package.copr.owner.name, coprname=copr.name, package_name=package.name)
}}">{{ package.name }}</a></h2>
-{% else %}
- <h2> Package: <a href="{{ url_for('coprs_ns.group_copr_package',
group_name=package.copr.group.name, coprname=copr.name, package_name=package.name)
}}">{{ package.name }}</a></h2>
-{% endif %}
+<h2> Package: <a href="{{ copr_url('coprs_ns.copr_package', copr,
package_name=package.name) }}">{{ package.name }}</a></h2>
<p>You can choose and configure <b>exactly one</b> default source for
the {{ package.name }} package.</p>
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
index 05bfd92..3ab9026 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_packages.py
@@ -16,101 +16,111 @@ from coprs.exceptions import (ActionInProgressException,
@coprs_ns.route("/<username>/<coprname>/packages/")
-@req_with_copr
-def copr_packages(copr):
- return render_packages(copr)
-
-
@coprs_ns.route("/g/<group_name>/<coprname>/packages/")
@req_with_copr
-def group_copr_packages(copr):
- return render_packages(copr)
-
-
-def render_packages(copr):
+def copr_packages(copr):
packages = PackagesLogic.get_all(copr.id)
return flask.render_template("coprs/detail/packages.html",
packages=packages, copr=copr, empty_build=Build())
@coprs_ns.route("/<username>/<coprname>/package/<package_name>/")
+@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/")
@req_with_copr
def copr_package(copr, package_name):
- return render_package(copr, package_name)
+ package = ComplexLogic.get_package_safe(copr, package_name)
+ return flask.render_template("coprs/detail/package.html", package=package,
copr=copr)
-@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/")
+@coprs_ns.route("/<username>/<coprname>/package/<package_name>/rebuild")
+@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/rebuild")
@req_with_copr
-def group_copr_package(copr, package_name):
- return render_package(copr, package_name)
+def copr_rebuild_package(copr, package_name):
+ package = ComplexLogic.get_package_safe(copr, package_name)
+ data = package.source_json_dict
+ if package.source_type_text == "git_and_tito":
+ data["git_directory"] = data["git_dir"] # @FIXME workaround
+ form = forms.BuildFormTitoFactory
+ f = render_add_build_tito
+ view_suffix = "_tito"
+ elif package.source_type_text == "mock_scm":
+ form = forms.BuildFormMockFactory
+ f = render_add_build_mock
+ view_suffix = "_mock"
-def render_package(copr, package_name):
- package = ComplexLogic.get_package_safe(copr, package_name)
- return flask.render_template("coprs/detail/package.html", package=package,
copr=copr)
+ form = form(copr.active_chroots)(data=data)
+ return f(copr, form, view="coprs_ns.copr_new_build" + view_suffix,
package=package)
-@coprs_ns.route("/<username>/<coprname>/package/<package_name>/edit")
+@coprs_ns.route("/<username>/<coprname>/package/add")
+@coprs_ns.route("/g/<group_name>/<coprname>/package/add")
+@login_required
@req_with_copr
-def copr_edit_package(copr, package_name):
- return render_edit_package(copr, package_name,
view="coprs_ns.copr_edit_package")
+def copr_add_package(copr, package_name=None):
+ form = {
+ "git_and_tito": forms.PackageFormTito(),
+ "mock_scm": forms.PackageFormMock()
+ }
+ if flask.request.form:
+ form[flask.request.form["source_type"]].validate()
-@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/edit")
+ return flask.render_template("coprs/detail/add_package.html", copr=copr,
package=None,
+ view="coprs_ns.copr_new_package",
form_tito=form["git_and_tito"],
+ form_mock=form["mock_scm"])
+
+
+(a)coprs_ns.route("/<username>/<coprname>/package/new",
methods=["POST"])
+@coprs_ns.route("/g/<group_name>/<coprname>/package/new",
methods=["POST"])
+@login_required
@req_with_copr
-def group_copr_edit_package(copr, package_name):
- return render_edit_package(copr, package_name,
view="coprs_ns.copr_edit_package")
+def copr_new_package(copr):
+ url_on_success = copr_url("coprs_ns.copr_packages", copr)
+ return process_save_package(copr, package_name=None,
view="coprs_ns.copr_new_package",
+ view_method=copr_add_package,
url_on_success=url_on_success)
-def render_edit_package(copr, package_name, view, form_tito=None, form_mock=None):
+@coprs_ns.route("/<username>/<coprname>/package/<package_name>/edit")
+@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/edit")
+@req_with_copr
+def copr_edit_package(copr, package_name):
package = ComplexLogic.get_package_safe(copr, package_name)
-
data = package.source_json_dict
data["webhook_rebuild"] = package.webhook_rebuild
- if not form_tito:
- if "git_dir" in data:
- data["git_directory"] = data["git_dir"] # @FIXME
workaround
- form_tito = forms.PackageFormTito(data=data)
+ form_classes = {
+ "git_and_tito": forms.PackageFormTito,
+ "mock_scm": forms.PackageFormMock,
+ }
+ form = {k: v(formdata=None) for k, v in form_classes.items()}
- if not form_mock:
- form_mock = forms.PackageFormMock(data=data)
+ if "form" in kwargs:
+ form[kwargs["form"].source_type.data] = kwargs["form"]
+ elif package.source_type:
+ if package.source_type_text == "git_and_tito" and "git_dir"
in data:
+ data["git_directory"] = data["git_dir"] # @FIXME
workaround
+ form[package.source_type_text] =
form_classes[package.source_type_text](data=data)
- return flask.render_template("coprs/detail/package_edit.html",
package=package, copr=copr, form_tito=form_tito,
- form_mock=form_mock, view=view)
+ return flask.render_template("coprs/detail/package_edit.html",
package=package, copr=copr,
+ form_tito=form["git_and_tito"],
form_mock=form["mock_scm"],
+ view="coprs_ns.copr_edit_package")
@coprs_ns.route("/<username>/<coprname>/package/<package_name>/edit",
methods=["POST"])
-@login_required
-@req_with_copr
-def copr_edit_package_post(copr, package_name):
- url_on_success = url_for("coprs_ns.copr_packages",
- username=copr.owner_name,
- coprname=copr.name)
- return process_edit_package(copr, package_name,
view="coprs_ns.copr_edit_package", url_on_success=url_on_success)
-
-
@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/edit",
methods=["POST"])
@login_required
@req_with_copr
-def group_copr_edit_package_post(copr, package_name):
- url_on_success = url_for("coprs_ns.group_copr_packages",
- group_name=copr.group.name,
- coprname=copr.name)
- return process_edit_package(copr, package_name,
view="coprs_ns.copr_edit_package", url_on_success=url_on_success)
-
-
-def process_edit_package(copr, package_name, view, url_on_success):
- return process_save_package(copr, package_name, view,
view_method=render_edit_package,
- url_on_success=url_on_success)
+def copr_edit_package_post(copr, package_name):
+ url_on_success = copr_url("coprs_ns.copr_packages", copr)
+ return process_save_package(copr, package_name,
view="coprs_ns.copr_edit_package",
+ view_method=copr_edit_package,
url_on_success=url_on_success)
def process_save_package(copr, package_name, view, view_method, url_on_success):
if flask.request.form["source_type"] == "git_and_tito":
form = forms.PackageFormTito()
- form_var = "form_tito"
elif flask.request.form["source_type"] == "mock_scm":
form = forms.PackageFormMock()
- form_var = "form_mock"
else:
raise Exception("Wrong source type")
@@ -147,82 +157,20 @@ def process_save_package(copr, package_name, view, view_method,
url_on_success):
return flask.redirect(url_on_success)
- return view_method(copr, package_name, view, **{form_var: form})
-
-
-@coprs_ns.route("/<username>/<coprname>/package/<package_name>/rebuild")
-@req_with_copr
-def copr_rebuild_package(copr, package_name):
- return render_copr_rebuild_package(copr, package_name,
view="coprs_ns.copr_new_build")
-
-
-@coprs_ns.route("/g/<group_name>/<coprname>/package/<package_name>/rebuild")
-@req_with_copr
-def group_copr_rebuild_package(copr, package_name):
- return render_copr_rebuild_package(copr, package_name,
view="coprs_ns.copr_new_build")
-
-
-def render_copr_rebuild_package(copr, package_name, view):
- package = ComplexLogic.get_package_safe(copr, package_name)
- data = package.source_json_dict
+ return view_method(username=copr.owner.name, coprname=copr.name,
package_name=package_name)
- if package.source_type_text == "git_and_tito":
- data["git_directory"] = data["git_dir"] # @FIXME workaround
- form = forms.BuildFormTitoFactory
- f = render_add_build_tito
- view_suffix = "_tito"
- elif package.source_type_text == "mock_scm":
- form = forms.BuildFormMockFactory
- f = render_add_build_mock
- view_suffix = "_mock"
- form = form(copr.active_chroots)(data=data)
- return f(copr, form, view=view + view_suffix, package=package)
-
-
-@coprs_ns.route("/<username>/<coprname>/package/add")
-@login_required
-@req_with_copr
-def copr_add_package(copr):
- return render_add_package(copr, view="coprs_ns.copr_new_package")
-
-
-@coprs_ns.route("/g/<group_name>/<coprname>/package/add")
-@login_required
-@req_with_copr
-def group_copr_add_package(copr):
- return render_add_package(copr, view="coprs_ns.copr_new_package")
-
-
-def render_add_package(copr, package_name=None, view=None, form_tito=None,
form_mock=None):
- if not form_tito:
- form_tito = forms.PackageFormTito()
-
- if not form_mock:
- form_mock = forms.PackageFormMock()
- return flask.render_template("coprs/detail/add_package.html", copr=copr,
package=None, view=view,
- form_tito=form_tito, form_mock=form_mock)
-
-
-(a)coprs_ns.route("/<username>/<coprname>/package/new",
methods=["POST"])
-@login_required
-@req_with_copr
-def copr_new_package(copr):
- url_on_success = url_for("coprs_ns.copr_packages",
- username=copr.owner_name,
- coprname=copr.name)
- return process_new_package(copr, view="coprs_ns.copr_new_package",
url_on_success=url_on_success)
-
-
-@coprs_ns.route("/g/<group_name>/<coprname>/package/new",
methods=["POST"])
-@login_required
-@req_with_copr
-def group_copr_new_package(copr):
- url_on_success = url_for("coprs_ns.group_copr_packages",
- group_name=copr.group.name,
- coprname=copr.name)
- return process_new_package(copr, view="coprs_ns.copr_new_package",
url_on_success=url_on_success)
+def copr_url(view, copr, **kwargs):
+ """
+ Examine given copr and generate proper URL for the `view`
+ Values of `username/group_name` and `coprname` are automatically passed as the first
two URL parameters,
+ and therefore you should *not* pass them manually.
-def process_new_package(copr, view, url_on_success):
- return process_save_package(copr, None, view, view_method=render_add_package,
url_on_success=url_on_success)
+ Usage:
+ copr_url("coprs_ns.foo", copr)
+ copr_url("coprs_ns.foo", copr, arg1='bar', arg2='baz)
+ """
+ if copr.is_a_group_project:
+ return url_for(view, group_name=copr.group.name, coprname=copr.name, **kwargs)
+ return url_for(view, username=copr.owner.name, coprname=copr.name, **kwargs)