[copr] master: W: 5, 0: Unused validates_schema imported from marshmallow (unused-import) (94278b7)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 94278b775abfd2878d63cfce349b78e2978ddd7c
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Fri Nov 13 13:37:01 2015 +0100
W: 5, 0: Unused validates_schema imported from marshmallow (unused-import)
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/rest_api/schemas.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/schemas.py b/frontend/coprs_frontend/coprs/rest_api/schemas.py
index af47743..7e8bfac 100644
--- a/frontend/coprs_frontend/coprs/rest_api/schemas.py
+++ b/frontend/coprs_frontend/coprs/rest_api/schemas.py
@@ -2,7 +2,7 @@
from collections import Iterable
from marshmallow import Schema, fields
-from marshmallow import Schema, fields, validates_schema, ValidationError, validate
+from marshmallow import Schema, fields, ValidationError, validate
from six import string_types
8 years, 6 months
[copr] master: remove forgotten pdb calls (2e9cfc8)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 2e9cfc88783044ae850c55fb2f4bb581d748c8fc
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Fri Nov 13 13:41:03 2015 +0100
remove forgotten pdb calls
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/rest_api/__init__.py | 3 +--
frontend/coprs_frontend/coprs/rest_api/schemas.py | 1 -
frontend/coprs_frontend/tests/coprs_test_case.py | 1 -
.../test_views/test_coprs_ns/test_coprs_builds.py | 1 -
4 files changed, 1 insertions(+), 5 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/__init__.py b/frontend/coprs_frontend/coprs/rest_api/__init__.py
index 2710704..d1e8337 100644
--- a/frontend/coprs_frontend/coprs/rest_api/__init__.py
+++ b/frontend/coprs_frontend/coprs/rest_api/__init__.py
@@ -41,7 +41,6 @@ class RootR(Resource):
class MyApi(Api):
# flask-restfull error handling quite buggy right now
def error_router(self, original_handler, e):
- # import ipdb; ipdb.set_trace()
return original_handler(e)
# # def handle_error(self, e):
# #
@@ -83,7 +82,7 @@ def register_api_error_handler(app):
"""
:param ApiError error:
"""
- # import ipdb; ipdb.set_trace()
+
content = {
"message": error.msg,
}
diff --git a/frontend/coprs_frontend/coprs/rest_api/schemas.py b/frontend/coprs_frontend/coprs/rest_api/schemas.py
index ba68c58..d848355 100644
--- a/frontend/coprs_frontend/coprs/rest_api/schemas.py
+++ b/frontend/coprs_frontend/coprs/rest_api/schemas.py
@@ -12,7 +12,6 @@ def validate_any(fn_list):
:raises ValidationError: otherwise
"""
def func(value):
- # import ipdb; ipdb.set_trace()
errors = []
for fn in fn_list:
try:
diff --git a/frontend/coprs_frontend/tests/coprs_test_case.py b/frontend/coprs_frontend/tests/coprs_test_case.py
index 10ac272..8ea8c0d 100644
--- a/frontend/coprs_frontend/tests/coprs_test_case.py
+++ b/frontend/coprs_frontend/tests/coprs_test_case.py
@@ -235,7 +235,6 @@ class CoprsTestCase(object):
[self.b1, self.b2, self.b3, self.b4],
[self.b1_bc, self.b2_bc, self.b3_bc, self.b4_bc]):
- # import ipdb; ipdb.set_trace()
status = None
if build is self.b1: # this build is going to be deleted
status = StatusEnum("succeeded")
diff --git a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
index 02ef73a..3588b20 100644
--- a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
+++ b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
@@ -284,7 +284,6 @@ class TestCoprRepeatBuild(CoprsTestCase):
data={},
follow_redirects=True)
- # import ipdb; ipdb.set_trace()
assert b"You are not allowed to repeat this build." in r.data
@TransactionDecorator("u1")
8 years, 6 months
[copr] master: R: 19, 4: Method could be a function (no-self-use) (8683732)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 86837328a78cf1c3121882ab4c13f6df2bc58405
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Fri Nov 13 13:39:16 2015 +0100
R: 19, 4: Method could be a function (no-self-use)
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/rest_api/__init__.py | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/__init__.py b/frontend/coprs_frontend/coprs/rest_api/__init__.py
index 0f87c4f..2710704 100644
--- a/frontend/coprs_frontend/coprs/rest_api/__init__.py
+++ b/frontend/coprs_frontend/coprs/rest_api/__init__.py
@@ -16,7 +16,8 @@ URL_PREFIX = "/api_2"
class RootR(Resource):
- def get(self):
+ @classmethod
+ def get(cls):
return {
"_links": {
"self": {"href": url_for(".rootr")},
8 years, 6 months
[copr] master: W: 5, 0: Reimport Schema (imported line 4) (reimported) (bc7c751)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit bc7c751355c72d4ee8e5d76f065efd74a0e0e24a
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Fri Nov 13 13:38:13 2015 +0100
W: 5, 0: Reimport Schema (imported line 4) (reimported)
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/rest_api/schemas.py | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/schemas.py b/frontend/coprs_frontend/coprs/rest_api/schemas.py
index 7e8bfac..ba68c58 100644
--- a/frontend/coprs_frontend/coprs/rest_api/schemas.py
+++ b/frontend/coprs_frontend/coprs/rest_api/schemas.py
@@ -1,7 +1,6 @@
# coding: utf-8
from collections import Iterable
-from marshmallow import Schema, fields
from marshmallow import Schema, fields, ValidationError, validate
from six import string_types
8 years, 6 months
[copr] master: [backend] fixed failing tests (20d56a6)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 20d56a6f72146ece425862189a232d9bbcbe9a4a
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Nov 13 14:33:02 2015 +0100
[backend] fixed failing tests
>---------------------------------------------------------------
backend/backend/actions.py | 18 ++++++++++++++++++
backend/backend/createrepo.py | 4 ++--
backend/run/copr_prune_results.py | 2 +-
backend/tests/deamons/test_job_grab.py | 7 +------
backend/tests/run/test_copr_prune_results.py | 2 +-
5 files changed, 23 insertions(+), 10 deletions(-)
diff --git a/backend/backend/actions.py b/backend/backend/actions.py
index d246dfe..b6fa8fb 100644
--- a/backend/backend/actions.py
+++ b/backend/backend/actions.py
@@ -7,6 +7,7 @@ from urllib import urlretrieve
from munch import Munch
from copr.exceptions import CoprRequestException
+from .sign import create_user_keys, CoprKeygenRequestError
from .createrepo import createrepo
from .exceptions import CreateRepoError
from .helpers import get_redis_logger, silent_remove
@@ -213,6 +214,19 @@ class Action(object):
self.log.info("Removing log {0}".format(log_path))
os.remove(log_path)
+ def handle_generate_gpg_key(self, result):
+ self.log.debug("Action generate gpg key")
+
+ ext_data = json.loads(self.data["data"])
+ username = ext_data["username"]
+ projectname = ext_data["projectname"]
+
+ try:
+ create_user_keys(username, projectname, self.opts)
+ result.results = ActionResult.SUCCESS
+ except CoprKeygenRequestError:
+ result.result = ActionResult.FAILURE
+
def run(self):
""" Handle action (other then builds) - like rename or delete of project """
result = Munch()
@@ -240,6 +254,9 @@ class Action(object):
elif action_type == ActionType.UPDATE_COMPS:
self.handle_comps_update(result)
+ elif action_type == ActionType.GEN_GPG_KEY:
+ self.handle_generate_gpg_key(result)
+
if "result" in result:
if result.result == ActionResult.SUCCESS and \
not getattr(result, "job_ended_on", None):
@@ -254,6 +271,7 @@ class ActionType(object):
LEGAL_FLAG = 2
CREATEREPO = 3
UPDATE_COMPS = 4
+ GEN_GPG_KEY = 5
class ActionResult(object):
diff --git a/backend/backend/createrepo.py b/backend/backend/createrepo.py
index f6302d4..0c750c5 100644
--- a/backend/backend/createrepo.py
+++ b/backend/backend/createrepo.py
@@ -1,5 +1,5 @@
import os
-import subprocess
+from subprocess import Popen, PIPE
from setproctitle import getproctitle, setproctitle
from shlex import split
@@ -22,7 +22,7 @@ def run_cmd_unsafe(comm_str, lock_path):
# TODO change this to logger
setproctitle("[locked] in createrepo")
with LockFile(lock_path):
- cmd = subprocess.Popen(comm, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ cmd = Popen(comm, stdout=PIPE, stderr=PIPE)
out, err = cmd.communicate()
except Exception as err:
raise CreateRepoError(msg="Failed to execute: {}".format(err), cmd=comm_str)
diff --git a/backend/run/copr_prune_results.py b/backend/run/copr_prune_results.py
index cfed3c0..878faa4 100755
--- a/backend/run/copr_prune_results.py
+++ b/backend/run/copr_prune_results.py
@@ -17,7 +17,7 @@ import pwd
log = logging.getLogger(__name__)
-from copr.client.exceptions import CoprException, CoprRequestException
+from copr.exceptions import CoprException, CoprRequestException
sys.path.append("/usr/share/copr/")
diff --git a/backend/tests/deamons/test_job_grab.py b/backend/tests/deamons/test_job_grab.py
index 6cbc59f..7632cb7 100644
--- a/backend/tests/deamons/test_job_grab.py
+++ b/backend/tests/deamons/test_job_grab.py
@@ -73,9 +73,6 @@ class TestJobGrab(object):
def setup_method(self, method):
- self.mc_mpp_patcher = mock.patch("{}.Process".format(MODULE_REF))
- self.mc_mpp = self.mc_mpp_patcher.start()
-
self.test_time = time.time()
subdir = "test_createrepo_{}".format(time.time())
self.tmp_dir_path = os.path.join(tempfile.gettempdir(), subdir)
@@ -121,7 +118,6 @@ class TestJobGrab(object):
)
def teardown_method(self, method):
- self.mc_mpp_patcher.stop()
shutil.rmtree(self.tmp_dir_path)
if hasattr(self, "cbl"):
@@ -213,9 +209,8 @@ class TestJobGrab(object):
assert not self.jg.task_queues_by_arch["x86_64"].enqueue.called
assert not self.jg.task_queues_by_arch["armv7"].enqueue.called
- @mock.patch("backend.daemons.job_grab.FrontendClient")
@mock.patch("backend.daemons.job_grab.Action", spec=backend.actions.Action)
- def test_process_action(self, mc_action, mc_fe_c, init_jg):
+ def test_process_action(self, mc_action, init_jg):
test_action = MagicMock()
self.jg.process_action(test_action)
diff --git a/backend/tests/run/test_copr_prune_results.py b/backend/tests/run/test_copr_prune_results.py
index 62ba57c..db74613 100644
--- a/backend/tests/run/test_copr_prune_results.py
+++ b/backend/tests/run/test_copr_prune_results.py
@@ -8,7 +8,7 @@ import tempfile
import time
from munch import Munch
from subprocess import Popen, PIPE
-from copr.client.exceptions import CoprException
+from copr.exceptions import CoprException
import pytest
8 years, 6 months
[copr] master: [frontend] Permission -> Permissions (bd7ae9d)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit bd7ae9de0ab4fcaa3c4ae409415b7fb746636f56
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Fri Nov 13 13:34:23 2015 +0100
[frontend] Permission -> Permissions
>---------------------------------------------------------------
.../coprs/templates/coprs/detail.html | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail.html b/frontend/coprs_frontend/coprs/templates/coprs/detail.html
index 7e2de7a..d8866cb 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail.html
@@ -78,7 +78,7 @@
{% endif %}
{% if g.user and not copr.is_a_group_project %}
- {{ nav_element("permissions", "Permission", url_for(
+ {{ nav_element("permissions", "Permissions", url_for(
'coprs_ns.copr_permissions', username = copr.owner.name, coprname = copr.name))
}}
{% endif %}
8 years, 6 months
[copr] master: [frontend] Make the New Build forms more organized (4ffb360)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 4ffb360211b5e2b7af6823e8be33fb93efc4e778
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Fri Nov 13 12:52:30 2015 +0100
[frontend] Make the New Build forms more organized
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/forms.py | 2 +-
.../templates/coprs/detail/_builds_forms.html | 28 ++++++++-----------
.../templates/coprs/detail/add_build/mock.html | 3 +-
.../templates/coprs/detail/add_build/tito.html | 4 +-
.../templates/coprs/detail/add_build/upload.html | 2 +-
.../templates/coprs/detail/add_build/url.html | 4 +-
6 files changed, 20 insertions(+), 23 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/forms.py b/frontend/coprs_frontend/coprs/forms.py
index a7269e3..f0aa6bc 100644
--- a/frontend/coprs_frontend/coprs/forms.py
+++ b/frontend/coprs_frontend/coprs/forms.py
@@ -463,7 +463,7 @@ class BuildFormMockFactory(object):
wtforms.validators.Optional()])
spec = wtforms.StringField(
- "Spec file",
+ "Spec File",
validators=[
wtforms.validators.Regexp(
"^.+\.spec$",
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
index 3836c53..464db46 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
@@ -47,6 +47,12 @@
{% endif %}"
method="post" enctype="multipart/form-data">
{% endif %}
+ <h3> Source of the Build </h3>
+{% endmacro %}
+
+
+{% macro copr_build_form_end(form, view, copr) %}
+ <h3> Build Options </h3>
<div class="form-group">
<label class="col-sm-2 control-label" for="textInput-markup">
Chroots
@@ -62,10 +68,6 @@
{% endfor %}{% endfor %}
</div>
</div>
-{% endmacro %}
-
-
-{% macro copr_build_form_end(form, view, copr) %}
{{ form.csrf_token }}
{% if g.user.proven %}
{{ render_field(form.memory_reqs) }}
@@ -76,7 +78,7 @@
{% endif %}
<div class="form-group">
<label class="col-sm-2 control-label" for="textInput-markup">
- Build Options
+ Other Options
</label>
<div class="col-sm-10">
{{ form.enable_net(checked=copr.build_enable_net) }} Enable internet access during this build
@@ -98,7 +100,7 @@
{% macro copr_build_form_url(form, view, copr) %}
{{ copr_build_form_begin(form, view, copr) }}
- {{ render_field(form.pkgs, label='URLs of packages to build', rows = 10, cols = 50) }}
+ {{ render_field(form.pkgs, label='URLs to SRPM Files', rows = 10, cols = 50) }}
{{ copr_build_form_end(form, view, copr) }}
{% endmacro %}
@@ -109,7 +111,7 @@
<div class="form-group">
<label class="col-sm-2 control-label" for="textInput-markup">
- Package File
+ SRPM File
</label>
<div class="col-sm-10">
{{ form.pkgs }}
@@ -142,17 +144,11 @@
{% macro copr_build_form_mock(form, view, copr) %}
{{ copr_build_form_begin(form, view, copr) }}
+ {{ render_field(form.scm_type) }}
+ {{ render_field(form.scm_url, placeholder="URL to your Git or SVN repository") }}
- <div class="form-group">
- <label class="col-sm-2 control-label" for="textInput-markup">SCM URL</label>
- <div class="col-sm-10">
- {{ form.scm_type(class="form-control") }}
- {{ form.scm_url(class="form-control", placeholder="URL to your Git or SVN directory") }}
- </div>
- </div>
-
- {{ render_field(form.scm_branch, placeholder="Optional - A branch you want to build from.") }}
{{ render_field(form.spec, placeholder="Path from repository root directory to your .spec file") }}
+ {{ render_field(form.scm_branch, placeholder="Optional - A branch you want to build from.") }}
{{ copr_build_form_end(form, view, copr) }}
{% endmacro %}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/mock.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/mock.html
index 1b5e515..8eca2ed 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/mock.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/mock.html
@@ -10,7 +10,8 @@
{%endblock%}
{% block build_form %}
-<h3>Build from Mock SCM</h3>
+<h2> New Build <small>From a Git or SVN Repository Using Mock SCM</small></h2>
+<p> Provide a URL of a Git or SVN repository and path to the SPEC file within the repository. You can optionally build from a specific branch. </p>
{{ copr_build_form_mock(form, 'coprs_ns.copr_new_build_mock', copr) }}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/tito.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/tito.html
index cda988b..b682a07 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/tito.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/tito.html
@@ -10,8 +10,8 @@
{%endblock%}
{% block build_form %}
-<h3> Build From URL of a SRPM Package</h3>
-<p> Provide a URL of a Git repository. </p>
+<h2> New Build <small>From a Git Repository Using Tito</small></h2>
+<p> Provide a URL of a Git repository. You can optionally specify a directory within that repository and Git branch. You can also choose to build from the last commit instead of the last release.</p>
{{ copr_build_form_tito(form, 'coprs_ns.copr_new_build_tito', copr) }}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/upload.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/upload.html
index d9a84d2..06fd6fc 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/upload.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/upload.html
@@ -12,7 +12,7 @@
{%endblock%}
{% block build_form %}
-<h3> Build From an Uploaded SRPM Package </h3>
+<h2> New Build <small>From a SRPM File</small> </h2>
<p> Upload a SRPM package directly into Copr to build it. </p>
{{ copr_build_form_upload(form, view, copr) }}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/url.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/url.html
index 9696165..cfd4bb3 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/url.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/add_build/url.html
@@ -11,8 +11,8 @@
{%endblock%}
{% block build_form %}
-<h3> Build From URL of a SRPM Package</h3>
-<p> Provide an external URL link to the package you want to build. You can provide more than one URL. </p>
+<h2> New Build <small>From URLs to SRPM Files</small></h2>
+<p> Provide an external URL link to the package you want to build. You can provide more than one URL. This is the only option to submit more builds at once. </p>
{{ copr_build_form_url(form, view, copr) }}
8 years, 6 months
[copr] master: [frontend] fix breadcrumb (a6ef1cb)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit a6ef1cb7f4ccc0db424c1040cdac33eebd425d4b
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Fri Nov 13 10:47:02 2015 +0100
[frontend] fix breadcrumb
>---------------------------------------------------------------
.../coprs/templates/coprs/detail.html | 2 ++
.../coprs_frontend/coprs/templates/layout.html | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail.html b/frontend/coprs_frontend/coprs/templates/coprs/detail.html
index 8ac1c53..7e2de7a 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail.html
@@ -22,6 +22,7 @@
{% block breadcrumbs %}
+<ol class="breadcrumb">
{{ render_crumb(url_for('coprs_ns.coprs_show'), 'Home') }}
{% if copr.is_a_group_project %}
{{ render_crumb(url_for('groups_ns.list_projects_by_group', group_name=copr.group.name),
@@ -38,6 +39,7 @@
{%block project_breadcrumb %}
{%endblock%}
+</ol>
{%endblock%}
{% block body scoped %}
diff --git a/frontend/coprs_frontend/coprs/templates/layout.html b/frontend/coprs_frontend/coprs/templates/layout.html
index 9f0f645..4a2e437 100644
--- a/frontend/coprs_frontend/coprs/templates/layout.html
+++ b/frontend/coprs_frontend/coprs/templates/layout.html
@@ -69,10 +69,8 @@
</nav>
<div class="breadcrumb-panel">
<div class="container">
- <ol class="breadcrumb">
{% block breadcrumbs %}
{% endblock %}
- </ol>
</div>
</div>
{#
8 years, 6 months
[copr] master: [frontend] using raw SQL for builds view (b166fde)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit b166fde86c164baf6471a9cbeaa90b2d931bd1fb
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Thu Nov 12 13:57:00 2015 +0100
[frontend] using raw SQL for builds view
Using just one select to speed up. Tested with PostrgreSQL and SQLite.
>---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 96 ++++++++++++++++++++
.../coprs_frontend/coprs/templates/_helpers.html | 8 ++
.../templates/coprs/detail/_builds_table.html | 19 +++--
.../coprs/views/coprs_ns/coprs_builds.py | 2 +-
4 files changed, 117 insertions(+), 8 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index ed6aa04..335175c 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -6,6 +6,8 @@ import os
import pprint
import time
import flask
+import sqlite3
+from sqlalchemy.sql import text
from sqlalchemy import or_
from sqlalchemy import and_
from sqlalchemy.orm import joinedload
@@ -122,6 +124,100 @@ class BuildsLogic(object):
models.Copr.owner == user)
@classmethod
+ def get_copr_builds_list(cls, copr):
+ query_functions = """
+CREATE OR REPLACE FUNCTION status_to_order (x integer)
+RETURNS integer AS $$ BEGIN
+ RETURN CASE WHEN x = 0 THEN 0
+ WHEN x = 3 THEN 1
+ WHEN x = 6 THEN 2
+ WHEN x = 7 THEN 3
+ WHEN x = 4 THEN 4
+ WHEN x = 1 THEN 5
+ WHEN x = 5 THEN 6
+ ELSE 1000
+ END; END;
+ $$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION order_to_status (x integer)
+RETURNS integer AS $$ BEGIN
+ RETURN CASE WHEN x = 0 THEN 0
+ WHEN x = 1 THEN 3
+ WHEN x = 2 THEN 6
+ WHEN x = 3 THEN 7
+ WHEN x = 4 THEN 4
+ WHEN x = 5 THEN 1
+ WHEN x = 6 THEN 5
+ ELSE 1000
+ END; END;
+ $$ LANGUAGE plpgsql;
+"""
+ query_select = """
+SELECT build.id, MAX(package.name) AS pkg_name, build.pkg_version, build.submitted_on,
+ MIN(statuses.started_on) AS started_on, MAX(statuses.ended_on) AS ended_on, order_to_status(MIN(statuses.st)) AS status,
+ build.canceled, MIN("group".name) AS group_name, MIN(copr.name) as copr_name, MIN("user".username) as owner_name
+FROM build
+LEFT OUTER JOIN package
+ ON build.package_id = package.id
+LEFT OUTER JOIN (SELECT build_chroot.build_id, started_on, ended_on, status_to_order(status) AS st FROM build_chroot) AS statuses
+ ON statuses.build_id=build.id
+LEFT OUTER JOIN copr
+ ON copr.id = build.copr_id
+LEFT OUTER JOIN "user"
+ ON copr.owner_id = "user".id
+LEFT OUTER JOIN "group"
+ ON copr.group_id = "group".id
+WHERE build.copr_id = {copr_id}
+GROUP BY
+ build.id;
+""".format(copr_id=copr.id)
+
+ if db.engine.url.drivername == "sqlite":
+ def sqlite_status_to_order(x):
+ if x == 0:
+ return 0
+ elif x == 3:
+ return 1
+ elif x == 6:
+ return 2
+ elif x == 7:
+ return 3
+ elif x == 4:
+ return 4
+ elif x == 1:
+ return 5
+ elif x == 5:
+ return 6
+ return 1000
+
+ def sqlite_order_to_status(x):
+ if x == 0:
+ return 0
+ elif x == 1:
+ return 3
+ elif x == 2:
+ return 6
+ elif x == 3:
+ return 7
+ elif x == 4:
+ return 4
+ elif x == 5:
+ return 1
+ elif x == 6:
+ return 5
+ return 1000
+
+ conn = db.engine.connect()
+ conn.connection.create_function("status_to_order", 1, sqlite_status_to_order)
+ conn.connection.create_function("order_to_status", 1, sqlite_order_to_status)
+ result = conn.execute(text(query_select))
+
+ else:
+ result = db.engine.execute(text(query_functions+query_select))
+
+ return result
+
+ @classmethod
def join_group(cls, query):
return query.join(models.Copr).outerjoin(models.Group)
diff --git a/frontend/coprs_frontend/coprs/templates/_helpers.html b/frontend/coprs_frontend/coprs/templates/_helpers.html
index faf4355..4da9697 100644
--- a/frontend/coprs_frontend/coprs/templates/_helpers.html
+++ b/frontend/coprs_frontend/coprs/templates/_helpers.html
@@ -261,6 +261,14 @@
{% endif %}
{% endmacro %}
+{% macro build_href_from_sql(build) %}
+{% if build.group_name %}
+ {{ url_for('coprs_ns.group_copr_build', group_name=build.group_name, coprname=build.copr_name, build_id=build.id) }}
+{% else %}
+ {{ url_for("coprs_ns.copr_build", username = build.owner_name, coprname = build.copr_name, build_id = build.id) }}
+{% endif %}
+{% endmacro %}
+
{% macro package_href(package) %}
{% if package.copr.is_a_group_project %}
{{ url_for('coprs_ns.group_copr_package', group_name=package.copr.group.name, coprname=package.copr.name, package_name=package.name) }}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
index 56ac4da..96ec313 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
@@ -1,5 +1,5 @@
{% from "coprs/detail/_builds_forms.html" import copr_build_cancel_form, copr_build_repeat_form, copr_build_delete_form %}
-{% from "_helpers.html" import build_href %}
+{% from "_helpers.html" import build_href_from_sql %}
{% macro builds_table(builds) %}
{% if builds %}
@@ -15,16 +15,17 @@
</tr>
</thead>
<tbody>
+ {# builds here is not a build object #}
{% for build in builds %}
- <tr class="build-row build-row-{{ build.state }}" >
+ <tr class="build-row" >
<td data-order="{{ build.id }}">
- <a href="{{ build_href(build) }}">
+ <a href="{{ build_href_from_sql(build) }}">
{{ build.id }}
</a>
</td>
<td>
- {% if build.package %}
- {{ build.package.name }}
+ {% if build.pkg_name %}
+ {{ build.pkg_name }}
{% else %}
-
{% endif %}
@@ -37,8 +38,12 @@
{% endif %}
</td>
<td data-order="{{build.submitted_on}}"> {{ build.submitted_on|time_ago() }} ago </td>
- <td data-order="{{build.min_started_on|timestamp_diff(build.max_ended_on)}}"> {{ build.min_started_on|time_ago(build.max_ended_on) }} </td>
- <td class="build-{{build.state}}" abbr="{{build.state|build_state_description}}">{{ build.state }}</td>
+ <td data-order="{{build.started_on|timestamp_diff(build.ended_on)}}"> {{ build.started_on|time_ago(build.ended_on) }} </td>
+ {% if build.canceled %}
+ <td class="build-canceled">canceled</td>
+ {% else %}
+ <td class="build-{{build.status | state_from_num }}" abbr="{{build.status | state_from_num | build_state_description}}">{{ build.status | state_from_num }}</td>
+ {% endif %}
</tr>
{% endfor %}
</tbody>
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index 54b0611..96187b2 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -83,7 +83,7 @@ def group_copr_builds(copr):
def render_copr_builds(copr):
- builds_query = builds_logic.BuildsLogic.get_multiple_by_copr(copr=copr)
+ builds_query = builds_logic.BuildsLogic.get_copr_builds_list(copr=copr)
return flask.render_template("coprs/detail/builds.html",
copr=copr,
builds=builds_query)
8 years, 6 months
[copr] master: [frontend][rhbz:#1273738] "dnf copr enable" fails with old projects because old projects are not redirect well (7311dd5)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 7311dd5f53979dfd446c1f96e6022a5291433ec0
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Thu Nov 12 18:13:12 2015 +0100
[frontend][rhbz:#1273738] "dnf copr enable" fails with old projects because old projects are not redirect well
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_general.py | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 75c0312..86dabcb 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -690,9 +690,9 @@ def group_generate_repo_file(copr, name_release, repofile):
def render_generate_repo_file(copr, name_release, repofile):
# we need to check if we really got name release or it's a full chroot (caused by old dnf plugin)
- if name_release in [c.name for c in copr.active_chroots]:
- chroot = [c for c in copr.active_chroots if c.name == name_release][0]
- kwargs = dict(coprname=copr.name, name_release=chroot.name)
+ if name_release in [c.name for c in copr.mock_chroots]:
+ chroot = [c for c in copr.mock_chroots if c.name == name_release][0]
+ kwargs = dict(coprname=copr.name, name_release=chroot.name_release)
if copr.is_a_group_project:
fixed_url = url_for("coprs_ns.group_generate_repo_file",
group_name=copr.group.name, **kwargs)
8 years, 6 months