[copr] master: [python-copr] Build python3 package only for fedora (5730767)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 5730767442a44fe18202bb37f34b88c661f39db1
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Tue Aug 26 17:14:39 2014 +0200
[python-copr] Build python3 package only for fedora
>---------------------------------------------------------------
python/python-copr.spec | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/python/python-copr.spec b/python/python-copr.spec
index acaa9c7..672ae44 100644
--- a/python/python-copr.spec
+++ b/python/python-copr.spec
@@ -2,7 +2,12 @@
%global _pkgdocdir %{_docdir}/%{name}-%{version}
%global __python2 %{__python}
%endif
+
+%if 0%{?fedora}
%global with_python3 1
+%else
+%global with_python3 0
+%endif
Name: python-copr
Version: 1.46
9 years, 8 months
[copr] master: [frontend] user's recent builds on their home page (27fa609)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 27fa609d692ae3b01ca6426715675bc49f78819e
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Wed Aug 27 17:14:20 2014 +0200
[frontend] user's recent builds on their home page
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/static/copr.css | 38 ++++++++++++++++++-
.../coprs_frontend/coprs/templates/coprs/show.html | 26 +++++++++----
.../coprs/views/coprs_ns/coprs_general.py | 18 ++++++++-
3 files changed, 70 insertions(+), 12 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/static/copr.css b/frontend/coprs_frontend/coprs/static/copr.css
index 2e7dcd4..df9e141 100644
--- a/frontend/coprs_frontend/coprs/static/copr.css
+++ b/frontend/coprs_frontend/coprs/static/copr.css
@@ -41,6 +41,34 @@ h4 {
top: 8px;
}
+div.left-side-space {
+ font-size: 0.6em;
+ color: black;
+ font-weight: normal;
+}
+
+div.left-side-space div {
+ margin-top: 30px;
+}
+
+div.left-side-space div a{
+ font-size: 1.1em;
+ font-weight: bold;
+}
+
+div.left-side-space div div.recent{
+ margin-top: 10px;
+}
+
+div.left-side-space div div.recent a {
+ font-size: 1.3em;
+ font-weight: normal;
+}
+
+div.left-side-space div div.recent span.time {
+ color: #808080;
+}
+
div.menu {
font-size: 0.9em;
background-image: url("header_background.png");
@@ -104,13 +132,19 @@ div.user-info {
font-weight: bold;
}
-div.user-info .coprs-count {
+div.user-info p {
margin: 0px;
+}
+
+div.user-info p.username {
+ margin-bottom: 10px;
+}
+
+div.user-info .coprs-count {
font-size: 0.8em;
}
div.user-info .other-text {
- margin: 0px;
font-size: 0.6em;
}
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/show.html b/frontend/coprs_frontend/coprs/templates/coprs/show.html
index e87cdc4..517bbca 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/show.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/show.html
@@ -8,18 +8,28 @@
<a href="{{ url_for('coprs_ns.coprs_by_owner', username=g.user.name) }}" title="My Projects">
<img src="{{ g.user.gravatar_url }}" alt="User Image">
</a>
- <p>{{ g.user.name }}</p>
+ <p class="username">{{ g.user.name }}</p>
<p class="coprs-count">
<a href="{{ url_for('coprs_ns.coprs_by_owner', username=g.user.name) }}" title="My Projects">{{ g.user.coprs_count }}</a>
</p>
<p class="other-text">projects</p>
- <hr>
- <p class="coprs-count">
-
- <a href="{{url_for('status_ns.waiting')}}">Copr status</a>
- <br />
- <a href="{{url_for('recent_ns.recent')}}">Recent builds</a>
- </p>
+ <div class="left-side-space">
+ <div>
+ <a href="{{url_for('status_ns.waiting')}}">Copr status</a>
+ </div>
+ <div>
+ <a href="{{url_for('recent_ns.recent')}}">My finished builds</a>
+ {% if users_builds: %}
+ {% for build in users_builds: %}
+ <div class="recent">
+ <a href="{{url_for("coprs_ns.copr_build", username = build.copr.owner.name, coprname = build.copr.name, build_id = build.id)}}">{{build.id}}</a> <span class="build build-{{build.state}}">{{build.state}} </span><br>
+ {{build.pkgs | pkg_name}} <br>
+ <span class="time">{{build.ended_on|time_ago()}} ago</span>
+ </div>
+ {% endfor %}
+ {% endif %}
+ </div>
+ </div>
</div>
{% endif %}
{% if not g.user and not fulltext%}
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 b5eb818..bb8d11b 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -33,9 +33,16 @@ def coprs_show(page=1):
paginator = helpers.Paginator(query, query.count(), page)
coprs = paginator.sliced_query
+
+ if flask.g.user:
+ users_builds = builds_logic.BuildsLogic.get_recent_tasks(flask.g.user, 5)
+ else:
+ users_builds = []
+
return flask.render_template("coprs/show.html",
coprs=coprs,
- paginator=paginator)
+ paginator=paginator,
+ users_builds=users_builds)
@coprs_ns.route("/<username>/", defaults={"page": 1})
@@ -49,9 +56,16 @@ def coprs_by_owner(username=None, page=1):
paginator = helpers.Paginator(query, query.count(), page)
coprs = paginator.sliced_query
+
+ if flask.g.user:
+ users_builds = builds_logic.BuildsLogic.get_recent_tasks(flask.g.user, 5)
+ else:
+ users_builds = []
+
return flask.render_template("coprs/show.html",
coprs=coprs,
- paginator=paginator)
+ paginator=paginator,
+ users_builds=users_builds)
@coprs_ns.route("/<username>/allowed/", defaults={"page": 1})
9 years, 8 months
[copr] master: [frontend] recent builds sorting fix (2877552)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 2877552f5de3b06059ef8832cded7587725d8e79
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Wed Aug 27 17:42:00 2014 +0200
[frontend] recent builds sorting fix
>---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index ae54ac0..38d151f 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -31,7 +31,8 @@ class BuildsLogic(object):
limit = 100
query = models.Build.query \
- .filter(models.Build.ended_on != None)
+ .filter(models.Build.ended_on != None) \
+ .order_by(models.Build.ended_on.desc())
if user is not None:
query = query.filter(models.Build.user_id == user.id)
9 years, 8 months
[copr] master: Automatic commit of package [copr-frontend] release [1.44-1]. (0710e96)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 0710e96fde8f1a950c3640721dd190058ba7a2a2
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Aug 27 11:35:33 2014 +0200
Automatic commit of package [copr-frontend] release [1.44-1].
>---------------------------------------------------------------
frontend/copr-frontend.spec | 7 ++++++-
rel-eng/packages/copr-frontend | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/frontend/copr-frontend.spec b/frontend/copr-frontend.spec
index f558c27..e93ea23 100644
--- a/frontend/copr-frontend.spec
+++ b/frontend/copr-frontend.spec
@@ -5,7 +5,7 @@
%endif
Name: copr-frontend
-Version: 1.43
+Version: 1.44
Release: 1%{?dist}
Summary: Frontend for Copr
@@ -163,6 +163,11 @@ service httpd condrestart
%doc %{_pkgdocdir}/python-doc
%changelog
+* Wed Aug 27 2014 Miroslav Suchý <msuchy(a)redhat.com> 1.44-1
+- fix spec parsing on arm
+- 'manage.py update_indexes' and search fix
+- [RHBZ:1131286] RFE: API endpoint for a project's "monitor" status
+
* Mon Aug 25 2014 Adam Samalik <asamalik(a)redhat.com> 1.43-1
- [frontend] bugfix: context_processor shouldn't return None
- [frontend] task queue sorting fix
diff --git a/rel-eng/packages/copr-frontend b/rel-eng/packages/copr-frontend
index aeb4ecd..c4b8176 100644
--- a/rel-eng/packages/copr-frontend
+++ b/rel-eng/packages/copr-frontend
@@ -1 +1 @@
-1.43-1 frontend/
+1.44-1 frontend/
9 years, 8 months
[copr] master: fix spec parsing on arm (ec867d9)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit ec867d9297ea285cbc506da579a05168cbbced86
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Aug 27 11:34:44 2014 +0200
fix spec parsing on arm
addressing:
error: parse error in expression
error: /builddir/build/SPECS/copr-frontend.spec:124: bad %if condition
Building target platforms: arm
Building for target arm
>---------------------------------------------------------------
frontend/copr-frontend.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/frontend/copr-frontend.spec b/frontend/copr-frontend.spec
index 8e1b224..f558c27 100644
--- a/frontend/copr-frontend.spec
+++ b/frontend/copr-frontend.spec
@@ -121,7 +121,7 @@ touch %{buildroot}%{_sharedstatedir}/copr/data/copr.db
cp -a documentation/python-doc %{buildroot}%{_pkgdocdir}/
%check
-%if %{with_test} && %{_arch} == "x86_64"
+%if %{with_test} && "%{_arch}" == "x86_64"
pushd coprs_frontend
rm -rf /tmp/copr.db /tmp/whooshee || :
COPR_CONFIG="$(pwd)/config/copr_unit_test.conf" ./manage.py test
9 years, 8 months
[copr] master: start building for Fedora 21 (ebf75b3)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit ebf75b3bb752333265a7517a0edb1fa82a1acb05
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Aug 27 11:18:49 2014 +0200
start building for Fedora 21
>---------------------------------------------------------------
rel-eng/releasers.conf | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/rel-eng/releasers.conf b/rel-eng/releasers.conf
index 535f6d6..e14db9e 100644
--- a/rel-eng/releasers.conf
+++ b/rel-eng/releasers.conf
@@ -1,6 +1,6 @@
[fedora-git]
releaser = tito.release.FedoraGitReleaser
-branches = master f20 f19
+branches = master f21 f20 f19
[fedora-git-master]
releaser = tito.release.FedoraGitReleaser
@@ -8,7 +8,7 @@ branches = master
[fedora-git-all]
releaser = tito.release.FedoraGitReleaser
-branches = master f20 f19 el6 epel7
+branches = master f21 f20 f19 el6 epel7
[copr-msuchy]
releaser = tito.release.CoprReleaser
9 years, 8 months
[copr] master: [frontend] 'manage.py update_indexes' and search fix (98bca77)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 98bca7764cf2c98723b5528ee52475658fd11306
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Mon Aug 25 14:14:22 2014 +0200
[frontend] 'manage.py update_indexes' and search fix
to apply the search fix, following command needs to be run on the
server:
sudo su - copr-fe -c './manage.py update_indexes'
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/logic/coprs_logic.py | 13 +++++++++-
frontend/coprs_frontend/coprs/whoosheers.py | 6 ++++-
frontend/coprs_frontend/manage.py | 23 ++++++++++++++++++++
3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/coprs_logic.py b/frontend/coprs_frontend/coprs/logic/coprs_logic.py
index 54efefe..2607ca9 100644
--- a/frontend/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/coprs_logic.py
@@ -1,4 +1,5 @@
import time
+from sqlalchemy import and_
from coprs import db
from coprs import exceptions
@@ -114,8 +115,16 @@ class CoprsLogic(object):
@classmethod
def get_multiple_fulltext(cls, user, search_string):
query = (models.Copr.query.join(models.User)
- .filter(models.Copr.deleted == False)
- .whooshee_search(search_string))
+ .filter(models.Copr.deleted == False))
+ if "/" in search_string:
+ # searching for user/project
+ name = "%{}%".format(search_string.split("/")[0])
+ project = "%{}%".format(search_string.split("/")[1])
+ query = query.filter(and_(models.User.openid_name.ilike(name),
+ models.Copr.name.ilike(project)))
+ else:
+ # fulltext search
+ query = query.whooshee_search(search_string)
return query
@classmethod
diff --git a/frontend/coprs_frontend/coprs/whoosheers.py b/frontend/coprs_frontend/coprs/whoosheers.py
index e4143d9..5580a7d 100644
--- a/frontend/coprs_frontend/coprs/whoosheers.py
+++ b/frontend/coprs_frontend/coprs/whoosheers.py
@@ -12,7 +12,11 @@ class CoprUserWhoosheer(AbstractWhoosheer):
copr_id=whoosh.fields.NUMERIC(stored=True, unique=True),
user_id=whoosh.fields.NUMERIC(stored=True),
username=whoosh.fields.TEXT(),
- coprname=whoosh.fields.TEXT(),
+ # treat dash as a normal character - so searching for example
+ # "copr-dev" will really search for "copr-dev"
+ coprname=whoosh.fields.TEXT(
+ analyzer=whoosh.analysis.StandardAnalyzer(
+ expression=r"\w+(-\.?\w+)*")),
description=whoosh.fields.TEXT(),
instructions=whoosh.fields.TEXT())
diff --git a/frontend/coprs_frontend/manage.py b/frontend/coprs_frontend/manage.py
index 3822d24..b8826c7 100755
--- a/frontend/coprs_frontend/manage.py
+++ b/frontend/coprs_frontend/manage.py
@@ -12,6 +12,7 @@ from coprs import db
from coprs import exceptions
from coprs import models
from coprs.logic import coprs_logic
+from coprs.whoosheers import CoprUserWhoosheer
class TestCommand(Command):
@@ -217,6 +218,27 @@ class AlterUserCommand(Command):
)
)
+class UpdateIndexesCommand(Command):
+ """
+ recreates whoosh indexes for all projects
+ """
+
+ def run(self):
+ writer = CoprUserWhoosheer.index.writer()
+ for copr in coprs_logic.CoprsLogic.get_all():
+ CoprUserWhoosheer.delete_copr(writer, copr)
+ writer.commit(optimize=True)
+
+ writer = CoprUserWhoosheer.index.writer()
+ writer.schema = CoprUserWhoosheer.schema
+ writer.commit(optimize=True)
+
+ writer = CoprUserWhoosheer.index.writer()
+ for copr in coprs_logic.CoprsLogic.get_all():
+ CoprUserWhoosheer.insert_copr(writer, copr)
+ writer.commit(optimize=True)
+
+
manager = Manager(app)
manager.add_command("test", TestCommand())
manager.add_command("create_sqlite_file", CreateSqliteFileCommand())
@@ -227,6 +249,7 @@ manager.add_command("alter_chroot", AlterChrootCommand())
manager.add_command("display_chroots", DisplayChrootsCommand())
manager.add_command("drop_chroot", DropChrootCommand())
manager.add_command("alter_user", AlterUserCommand())
+manager.add_command("update_indexes", UpdateIndexesCommand())
if __name__ == "__main__":
manager.run()
9 years, 9 months
[copr] master: [python-copr] minor description fix in .spec (69f04c6)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 69f04c6e6e47ddb394b680ac3c18e3c3007617d4
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Mon Aug 25 16:48:43 2014 +0200
[python-copr] minor description fix in .spec
>---------------------------------------------------------------
python/python-copr.spec | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/python/python-copr.spec b/python/python-copr.spec
index dcaf58b..acaa9c7 100644
--- a/python/python-copr.spec
+++ b/python/python-copr.spec
@@ -40,8 +40,7 @@ COPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
-for developers.
-only
+for developers only.
%if 0%{?with_python3}
@@ -65,8 +64,8 @@ COPR is lightweight build system. It allows you to create new project in WebUI,
and submit new builds and COPR will create yum repository from latest builds.
This package contains python interface to access Copr service. Mostly useful
-for developers.
-only
+for developers only.
+
%endif # with_python3
@@ -81,6 +80,7 @@ and submit new builds and COPR will create yum repository from latest builds.
This package includes documentation for python-copr. Mostly useful for
developers only.
+
%endif
%prep
9 years, 9 months
[copr] master: [frontend][RHBZ:1131286] RFE: API endpoint for a project's "monitor" status (97c874b)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 97c874b00ce310ebf5db0151fa465fcb3ec14669
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Mon Aug 25 12:30:05 2014 +0200
[frontend][RHBZ:1131286] RFE: API endpoint for a project's "monitor" status
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/logic/api_logic.py | 60 +++++++++++++++++
.../coprs_frontend/coprs/logic/builds_logic.py | 71 ++++++++++++++++++++
frontend/coprs_frontend/coprs/templates/api.html | 60 +++++++++++++++++
.../coprs/views/api_ns/api_general.py | 16 +++++
.../coprs/views/coprs_ns/coprs_general.py | 66 +++----------------
5 files changed, 216 insertions(+), 57 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/api_logic.py b/frontend/coprs_frontend/coprs/logic/api_logic.py
new file mode 100644
index 0000000..19c98c2
--- /dev/null
+++ b/frontend/coprs_frontend/coprs/logic/api_logic.py
@@ -0,0 +1,60 @@
+"""
+ This module contains logic for Copr API.
+
+ xWrapper classes add helper methods
+ to [de]serialize model instances for API views.
+"""
+
+
+class BuildWrapper(object):
+ def __init__(self, build):
+ """
+ :arg build: copr.models.Build
+ """
+ self.build = build
+
+ def to_dict(self):
+ out = {}
+ for field in ["id", "pkg_version", "status", "state",
+ "canceled", "repos", "submitted_on", "started_on",
+ "ended_on", "results", "memory_reqs", "timeout"]:
+ out[field] = getattr(self.build, field, None)
+
+ out["src_pkg"] = self.build.pkgs
+ build_packages = self.build.built_packages
+ if build_packages:
+ out["built_packages"] = build_packages.split("\n")
+ else:
+ out["built_packages"] = []
+
+ return out
+
+
+class MonitorWrapper(object):
+ def __init__(self, monitor_data):
+ """
+ :arg monitor_data: dict with fields:
+ "builds": list of models.Build,
+ "chroots": list of chroot names
+ "packages": tuple (pkg_name, pkg_version, build_results),
+ "latest_build": models.Build,
+ """
+ self.monitor_data = monitor_data
+
+ def to_dict(self):
+ out = {}
+ chroots = self.monitor_data["chroots"]
+ out["chroots"] = chroots
+ out["builds"] = [
+ BuildWrapper(build).to_dict()
+ for build in self.monitor_data["builds"]
+ ]
+ out["packages"] = [
+ {
+ "pkg_name": pkg[0],
+ "pkg_version": pkg[1],
+ "results": dict(zip(chroots, pkg[2]))
+ }
+ for pkg in self.monitor_data["packages"]
+ ]
+ return out
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index d23ed10..ae54ac0 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -1,3 +1,5 @@
+from itertools import groupby
+import os
import time
from sqlalchemy import or_
from sqlalchemy import and_
@@ -242,3 +244,72 @@ class BuildsLogic(object):
return last_build.ended_on
else:
return None
+
+ @classmethod
+ def get_multiply_by_copr(cls, copr):
+ """ Get collection of builds in copr
+
+ :arg copr: object of copr
+ """
+ query = models.Build.query.filter(models.Build.copr == copr) \
+ .order_by(models.Build.id.desc())
+
+ return query
+
+
+class BuildsMonitorLogic(object):
+
+ @classmethod
+ def get_monitor_data(cls, copr):
+ builds = BuildsLogic.get_multiply_by_copr(copr).all()
+
+ # please don"t waste time trying to decipher this
+ # the only reason why this is necessary is non-existent
+ # database design
+ #
+ # loop goes through builds trying to approximate
+ # per-package results based on previous builds
+ # - it can"t determine build results if build contains
+ # more than one package as this data is not available
+
+ chroots = set(chroot.name for chroot in copr.active_chroots)
+ latest_build = None
+ if builds:
+ latest_build = builds[0]
+ chroots.union([chroot.name for chroot
+ in latest_build.build_chroots])
+
+ chroots = sorted(chroots)
+ out = []
+ packages = []
+ for build in builds:
+ chroot_results = {chroot.name: chroot.state
+ for chroot in build.build_chroots}
+
+ build_results = []
+ for chroot_name in chroots:
+ if chroot_name in chroot_results:
+ results = chroot_results[chroot_name]
+ else:
+ results = None
+
+ build_results.append((build.id, results))
+
+ for pkg_url in build.pkgs.split():
+ pkg = os.path.basename(pkg_url)
+ pkg_name = helpers.parse_package_name(pkg)
+
+ if pkg_name in out:
+ continue
+
+ packages.append((pkg_name, build.pkg_version, build_results))
+ out.append(pkg_name)
+ packages.sort()
+
+ print(packages)
+ return {
+ "builds": builds,
+ "chroots": chroots,
+ "packages": packages,
+ "latest_build": latest_build,
+ }
diff --git a/frontend/coprs_frontend/coprs/templates/api.html b/frontend/coprs_frontend/coprs/templates/api.html
index c9c27fa..16ae028 100644
--- a/frontend/coprs_frontend/coprs/templates/api.html
+++ b/frontend/coprs_frontend/coprs/templates/api.html
@@ -192,6 +192,66 @@ copr_url = https://copr.fedoraproject.org
<li><b>verify</b> – This needs to be "yes"</li>
</ul>
+
+ <h3>Builds success summary (project monitor)</h3>
+
+ <h4>URL:</h4>
+ <pre style="font-size:120%">/api/coprs/<username>/<coprname>/monitor/</pre>
+
+ <h4>URL parameters:</h4>
+ <ul>
+ <li><b>username</b> – Name of the user whose chroot you'd like to know details of</li>
+ <li><b>coprname</b> – Name of the copr whose chroot you'd like to know details of</li>
+ </ul>
+
+ <h4>Result</h4>
+ <ul>
+ <li><b>builds</b> –
+ All builds in project.
+ </li>
+ <li><b>chroots</b> –
+ Chroots used in the project
+ </li>
+ <li><b>packages</b> –
+ Aggregated information about built packages.
+ </li>
+ </ul>
+
+ <h4>Example result</h4>
+ <pre>
+{
+ "builds": [
+ {
+ "id": 9578,
+ "src_pkg": "https://fedorapeople.org/~vgologuz/python-copr-client-1.43-1.git.0.f84518...",
+ "pkg_version": "1.43",
+ "state": "failed",
+ "submitted_on": 1408462225,
+ "started_on": 1408462318,
+ "ended_on": 1408462701,
+ "results": "http://copr-be-dev.cloud.fedoraproject.org/results/vgologuz/copr/",
+ "built_packages": [
+ "python-copr-client 1.43",
+ "python-copr-client-doc 1.43"
+ ],
+ }
+ ],
+ "chroots": ["epel-5-x86_64", "epel-7-x86_64", "fedora-20-x86_64"],
+ "packages": [
+ {
+ "pkg_name": "python-copr-client",
+ "pkg_version": "1.43",
+ "results": {
+ "epel-5-x86_64": [9578, "failed"],
+ "epel-7-x86_64": [9578, "failed"],
+ "fedora-20-x86_64": [9578, "skipped"]
+ }
+ }
+ ]
+}
+
+ </pre>
+
<h3>Add new build</h3>
<p><span style="font-style:italic">Login required</span></p>
diff --git a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
index f002c6c..48f4d0b 100644
--- a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -8,6 +8,7 @@ from coprs import db
from coprs import exceptions
from coprs import forms
from coprs import helpers
+from coprs.logic.api_logic import BuildWrapper, MonitorWrapper
from coprs.views.misc import login_required, api_login_required
@@ -523,3 +524,18 @@ def playground_list():
jsonout = flask.jsonify(output)
jsonout.status_code = 200
return jsonout
+
+(a)api_ns.route("/coprs/<username>/<coprname>/monitor/", methods=["GET"])
+def monitor(username, coprname):
+ copr = coprs_logic.CoprsLogic.get(
+ flask.g.user, username, coprname).first()
+
+ monitor_data = builds_logic.BuildsMonitorLogic.get_monitor_data(copr)
+ output = MonitorWrapper(monitor_data).to_dict()
+
+ #output["href"] = flask.url_for(".monitor",
+ # username=username, coprname=coprname)
+
+ jsonout = flask.jsonify(output)
+ jsonout.status_code = 200
+ return jsonout
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 21bbdce..b5eb818 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -510,71 +510,23 @@ def generate_repo_file(username, coprname, chroot, repofile):
return response
-
@coprs_ns.route("/<username>/<coprname>/monitor/")
def copr_build_monitor(username, coprname):
- query = coprs_logic.CoprsLogic.get(
- flask.g.user, username, coprname, with_mock_chroots=True)
- form = forms.CoprLegalFlagForm()
try:
- copr = query.one()
+ copr = coprs_logic.CoprsLogic.get(
+ flask.g.user, username, coprname).first()
except sqlalchemy.orm.exc.NoResultFound:
return page_not_found(
"Copr with name {0} does not exist.".format(coprname))
- builds_query = builds_logic.BuildsLogic.get_multiple(
- flask.g.user, copr=copr)
- builds = builds_query.order_by("-id").all()
-
- # please don"t waste time trying to decipher this
- # the only reason why this is necessary is non-existent
- # database design
- #
- # loop goes through builds trying to approximate
- # per-package results based on previous builds
- # - it can"t determine build results if build contains
- # more than one package as this data is not available
-
- packages = []
- build = None
- chroots = set([chroot.name for chroot in copr.active_chroots])
+ form = forms.CoprLegalFlagForm()
oses = [chroot.os for chroot in copr.active_chroots]
oses_grouped = [(len(list(group)), key) for key, group in groupby(oses)]
archs = [chroot.arch for chroot in copr.active_chroots]
- latest_build = None
-
- if builds:
- latest_build = builds[0]
- chroots.union([chroot.name for chroot in latest_build.build_chroots])
-
- chroots = sorted(chroots)
+ kwargs = dict(copr=copr, oses=oses_grouped, archs=archs, form=form)
- out = []
- for build in builds:
- chroot_results = {chroot.name: chroot.state
- for chroot in build.build_chroots}
-
- build_results = []
- for chroot_name in chroots:
- if chroot_name in chroot_results:
- build_results.append((build.id, chroot_results[chroot_name]))
- else:
- build_results.append((build.id, None))
-
- for pkg_url in build.pkgs.split():
- pkg = os.path.basename(pkg_url)
- pkg_name = parse_package_name(pkg)
-
- if pkg_name in out:
- continue
-
- packages.append((pkg_name, build.pkg_version, build_results))
- out.append(pkg_name)
- packages.sort()
-
- return flask.render_template("coprs/detail/monitor.html",
- copr=copr,
- build=latest_build,
- chroots=chroots, oses=oses_grouped, archs=archs,
- packages=packages,
- form=form)
+ monitor = builds_logic.BuildsMonitorLogic.get_monitor_data(copr)
+ kwargs.update(monitor)
+ kwargs["build"] = kwargs["latest_build"]
+ del kwargs["latest_build"]
+ return flask.render_template("coprs/detail/monitor.html", **kwargs)
9 years, 9 months