[copr] master: [frontend] 1050904 - monitor shows not submitted chroots (7032bf5)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 7032bf5bb5246aa579c4a29d5e262ed3f7310ec8
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 13:01:45 2014 +0100
[frontend] 1050904 - monitor shows not submitted chroots
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_general.py | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 26e6a8f..3a9f933 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -378,12 +378,14 @@ def copr_build_monitor(username, coprname):
out = {}
build = None
- chroots = []
+ chroots = set([chroot.name for chroot in copr.active_chroots])
latest_build = None
if builds:
latest_build = builds[0]
- chroots = sorted([chroot.name for chroot in latest_build.build_chroots])
+ chroots.union([chroot.name for chroot in latest_build.build_chroots])
+
+ chroots = sorted(chroots)
for build in builds:
chroot_results = {chroot.name: chroot.state
@@ -394,7 +396,7 @@ def copr_build_monitor(username, coprname):
if chroot_name in chroot_results:
build_results.append(chroot_results[chroot_name])
else:
- build_results.append('')
+ build_results.append('not submitted yet')
for pkg_url in build.pkgs.split():
pkg = os.path.basename(pkg_url)
10 years, 5 months
[copr] master: [cli] fix initial_pkgs and repos not sent to backend (9e4bcec)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 9e4bcece18b1f340fc29375e4d41aa50c694c03d
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Thu Jan 23 12:37:59 2014 +0100
[cli] fix initial_pkgs and repos not sent to backend
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
copr_cli/subcommands.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/copr_cli/subcommands.py b/copr_cli/subcommands.py
index da52f48..2b980ff 100644
--- a/copr_cli/subcommands.py
+++ b/copr_cli/subcommands.py
@@ -131,12 +131,12 @@ def create(name, chroots=[], description=None, instructions=None,
copr_api_url = get_api_url()
URL = '{0}/coprs/{1}/new/'.format(copr_api_url, user['username'])
- repos = None
if type(repos) == list():
repos = ' '.join(repos)
- initial_pkgs = None
+
if type(initial_pkgs) == list():
initial_pkgs = ' '.join(initial_pkgs)
+
data = {'name': name,
'repos': repos,
'initial_pkgs': initial_pkgs,
10 years, 5 months
[copr] master: [frontend] fix BuildsLogic.new not assigning copr to build (1057a53)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 1057a53911cabfef4641ed005631549b9bec6066
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 14:25:36 2014 +0100
[frontend] fix BuildsLogic.new not assigning copr to build
Clap clap.
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 05ce536..682d7ce 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -78,6 +78,8 @@ class BuildsLogic(object):
build.submitted_on = int(time.time())
if not build.user:
build.user = user
+ if not build.copr:
+ build.copr = copr
db.session.add(build)
10 years, 5 months
[copr] master: [frontend] 1054474 - drop Copr.build_count nonsense (c8cd9b4)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit c8cd9b4b83429c5925e612f5eacb924b05134d15
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Mon Jan 20 17:19:25 2014 +0100
[frontend] 1054474 - drop Copr.build_count nonsense
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
.../versions/4837ad1d96ea_drop_copr_build_coun.py | 24 ++++++++++++++++++++
coprs_frontend/coprs/logic/builds_logic.py | 1 -
coprs_frontend/coprs/logic/coprs_logic.py | 5 ----
coprs_frontend/coprs/models.py | 8 +++++-
4 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/coprs_frontend/alembic/versions/4837ad1d96ea_drop_copr_build_coun.py b/coprs_frontend/alembic/versions/4837ad1d96ea_drop_copr_build_coun.py
new file mode 100644
index 0000000..80a402a
--- /dev/null
+++ b/coprs_frontend/alembic/versions/4837ad1d96ea_drop_copr_build_coun.py
@@ -0,0 +1,24 @@
+"""drop Copr.build_count
+
+Revision ID: 4837ad1d96ea
+Revises: 294405dfc7c0
+Create Date: 2014-01-20 17:05:20.917522
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '4837ad1d96ea'
+down_revision = '294405dfc7c0'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+ """ Drop 'build_count' colum from copr table. """
+ op.drop_column('copr', 'build_count')
+
+
+def downgrade():
+ """ Add 'build_count' colum to copr table. """
+ op.add_column('copr', sa.Column('build_count', sa.Integer(default=0)))
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 7721b30..9af4344 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -79,7 +79,6 @@ class BuildsLogic(object):
if not build.user:
build.user = user
- coprs_logic.CoprsLogic.increment_build_count(user, copr)
db.session.add(build)
# add BuildChroot object for each active chroot
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index ee511fb..49b18f2 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -162,11 +162,6 @@ class CoprsLogic(object):
return existing
@classmethod
- def increment_build_count(cls, user, copr): # TODO API of this method is different, maybe change?
- models.Copr.query.filter(models.Copr.id == copr.id).\
- update({models.Copr.build_count: models.Copr.build_count + 1})
-
- @classmethod
def unfinished_blocking_actions_for(cls, user, copr):
blocking_actions = [helpers.ActionTypeEnum('rename'),
helpers.ActionTypeEnum('delete')]
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 527461b..2cdb0ed 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -148,8 +148,6 @@ class Copr(db.Model, Serializer):
# description and instructions given by copr owner
description = db.Column(db.Text)
instructions = db.Column(db.Text)
- # duplicate information, but speeds up a lot and makes queries simpler
- build_count = db.Column(db.Integer, default = 0)
deleted = db.Column(db.Boolean, default=False)
# relations
@@ -183,6 +181,12 @@ class Copr(db.Model, Serializer):
"""Returns list of active mock_chroots of this copr"""
return filter(lambda x: x.is_active, self.mock_chroots)
+ @property
+ def build_count(self):
+ """ Return number of builds in this copr """
+
+ return len(self.builds)
+
def check_copr_chroot(self, chroot):
"""Return object of chroot, if is related to our copr or None"""
result = None
10 years, 5 months
[copr] master: [frontend] rename MockChroot.chroot_name to .name (45753f1)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 45753f17f170c9478b299892d9b1b0adcc540f83
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 12:51:00 2014 +0100
[frontend] rename MockChroot.chroot_name to .name
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
coprs_frontend/coprs/forms.py | 4 ++--
coprs_frontend/coprs/logic/builds_logic.py | 2 +-
coprs_frontend/coprs/logic/coprs_logic.py | 2 +-
coprs_frontend/coprs/models.py | 4 ++--
.../coprs/templates/coprs/detail/edit_chroot.html | 6 +++---
.../coprs/templates/coprs/detail/overview.html | 2 +-
.../coprs/views/backend_ns/backend_general.py | 2 +-
coprs_frontend/manage.py | 2 +-
.../tests/test_logic/test_builds_logic.py | 2 +-
.../test_views/test_coprs_ns/test_coprs_general.py | 12 ++++++------
10 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/coprs_frontend/coprs/forms.py b/coprs_frontend/coprs/forms.py
index d898654..c5dfa42 100644
--- a/coprs_frontend/coprs/forms.py
+++ b/coprs_frontend/coprs/forms.py
@@ -129,7 +129,7 @@ class CoprFormFactory(object):
have_any = True
return have_any
- F.chroots_list = map(lambda x: x.chroot_name,
+ F.chroots_list = map(lambda x: x.name,
models.MockChroot.query.filter(
models.MockChroot.is_active == True
).all())
@@ -138,7 +138,7 @@ class CoprFormFactory(object):
F.chroots_sets = {}
for ch in F.chroots_list:
checkbox_default = False
- if mock_chroots and ch in map(lambda x: x.chroot_name,
+ if mock_chroots and ch in map(lambda x: x.name,
mock_chroots):
checkbox_default = True
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 9af4344..dc4851c 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -95,7 +95,7 @@ class BuildsLogic(object):
if 'chroot' in upd_dict:
# update respective chroot status
for build_chroot in build.build_chroots:
- if build_chroot.mock_chroot.chroot_name == upd_dict['chroot']:
+ if build_chroot.name == upd_dict['chroot']:
if 'status' in upd_dict:
build_chroot.status = upd_dict['status']
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 49b18f2..0a07d66 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -238,7 +238,7 @@ class CoprChrootsLogic(object):
db_chroots = models.MockChroot.query.all()
mock_chroots = []
for ch in db_chroots:
- if ch.chroot_name in names:
+ if ch.name in names:
mock_chroots.append(ch)
return mock_chroots
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 2cdb0ed..5f733f3 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -298,7 +298,7 @@ class MockChroot(db.Model, Serializer):
is_active = db.Column(db.Boolean, default = True)
@property
- def chroot_name(self):
+ def name(self):
"""Textual representation of name of this chroot"""
if self.os_version:
format_string = '{rel}-{ver}-{arch}'
@@ -332,7 +332,7 @@ class BuildChroot(db.Model, Serializer):
@property
def name(self):
""" Textual representation of name of this chroot """
- return self.mock_chroot.chroot_name
+ return self.mock_chroot.name
@property
def state(self):
diff --git a/coprs_frontend/coprs/templates/coprs/detail/edit_chroot.html b/coprs_frontend/coprs/templates/coprs/detail/edit_chroot.html
index d0d748d..fac9a65 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/edit_chroot.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/edit_chroot.html
@@ -1,13 +1,13 @@
{% extends "coprs/detail/edit2.html" %}
{% from "_helpers.html" import render_field %}
-{% block title %}Editing {{ copr.owner.name }}/{{ copr.name }}/{{ chroot.chroot_name }}{% endblock %}
+{% block title %}Editing {{ copr.owner.name }}/{{ copr.name }}/{{ chroot.name }}{% endblock %}
{% block edit_selected %}selected{% endblock %}
{% block edit_chroot_selected %}selected{% endblock %}
{% block detail_body2 %}
- <h2>Edit chroot '{{ chroot.chroot_name }}'</h2>
- <form action="{{ url_for('coprs_ns.chroot_update', username = copr.owner.name, coprname = copr.name, chrootname = chroot.chroot_name) }}" method=post class=add-entry>
+ <h2>Edit chroot '{{ chroot.name }}'</h2>
+ <form action="{{ url_for('coprs_ns.chroot_update', username = copr.owner.name, coprname = copr.name, chrootname = chroot.name) }}" method=post class=add-entry>
<dl>
{{ form.csrf_token }}
{{ render_field(form.buildroot_pkgs, size=80, placeholder='Space separated list of packages. E.g.: scl-utils-build ruby193-build') }}
diff --git a/coprs_frontend/coprs/templates/coprs/detail/overview.html b/coprs_frontend/coprs/templates/coprs/detail/overview.html
index 456b541..7e2e0f8 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/overview.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/overview.html
@@ -49,7 +49,7 @@
'coprs_ns.generate_repo_file',
username=copr.owner.name,
coprname=copr.name,
- chroot=mock_chroot.chroot_name) }}">
+ chroot=mock_chroot.name) }}">
{{ copr.owner.name }}-{{ copr.name }}.repo</a></td>
{% else %}
<td></td>
diff --git a/coprs_frontend/coprs/views/backend_ns/backend_general.py b/coprs_frontend/coprs/views/backend_ns/backend_general.py
index 29bac58..9029fd6 100644
--- a/coprs_frontend/coprs/views/backend_ns/backend_general.py
+++ b/coprs_frontend/coprs/views/backend_ns/backend_general.py
@@ -38,7 +38,7 @@ def waiting():
# is assigned with
for chroot in build.chroots:
build_dict_copy = build_dict.copy()
- build_dict_copy['chroot'] = chroot.chroot_name
+ build_dict_copy['chroot'] = chroot.name
build_dict_copy['buildroot_pkgs'] = build.copr.buildroot_pkgs(chroot)
builds_list.append(build_dict_copy)
diff --git a/coprs_frontend/manage.py b/coprs_frontend/manage.py
index 0b9cac0..5367a31 100755
--- a/coprs_frontend/manage.py
+++ b/coprs_frontend/manage.py
@@ -129,7 +129,7 @@ class DisplayChrootsCommand(Command):
'Displays current mock chroots'
def run(self, active_only):
for ch in coprs_logic.MockChrootsLogic.get_multiple(None, active_only=active_only).all():
- print ch.chroot_name
+ print ch.name
option_list = (
Option('--active-only',
diff --git a/coprs_frontend/tests/test_logic/test_builds_logic.py b/coprs_frontend/tests/test_logic/test_builds_logic.py
index 2fe03a8..66be19b 100644
--- a/coprs_frontend/tests/test_logic/test_builds_logic.py
+++ b/coprs_frontend/tests/test_logic/test_builds_logic.py
@@ -11,7 +11,7 @@ class TestBuildsLogic(CoprsTestCase):
self.db.session.commit()
b = BuildsLogic.add(self.u2, 'blah blah', self.c2)
self.db.session.commit()
- assert b.chroots[0].chroot_name == self.mc3.chroot_name
+ assert b.chroots[0].name == self.mc3.name
def test_add_raises_if_copr_has_unfinished_actions(self, f_users, f_coprs, f_actions, f_db):
with pytest.raises(ActionInProgressException):
diff --git a/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py b/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
index c539d1e..2010777 100644
--- a/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
+++ b/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
@@ -211,7 +211,7 @@ class TestCoprUpdate(CoprsTestCase):
def test_update_multiple_chroots(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots, f_db):
self.db.session.add_all([self.u1, self.c1, self.mc1, self.mc2, self.mc3])
r = self.test_client.post('/coprs/{0}/{1}/update/'.format(self.u1.name, self.c1.name),
- data = {'name': self.c1.name, self.mc2.chroot_name: 'y', self.mc3.chroot_name: 'y', 'id': self.c1.id},
+ data = {'name': self.c1.name, self.mc2.name: 'y', self.mc3.name: 'y', 'id': self.c1.id},
follow_redirects = True)
assert 'Project was updated successfully' in r.data
self.c1 = self.db.session.merge(self.c1)
@@ -222,10 +222,10 @@ class TestCoprUpdate(CoprsTestCase):
mock_chroots = self.models.MockChroot.query.join(self.models.CoprChroot).\
filter(self.models.CoprChroot.copr_id==\
self.c1.id).all()
- mock_chroots_names = map(lambda x: x.chroot_name, mock_chroots)
- assert self.mc2.chroot_name in mock_chroots_names
- assert self.mc3.chroot_name in mock_chroots_names
- assert self.mc1.chroot_name not in mock_chroots_names
+ mock_chroots_names = map(lambda x: x.name, mock_chroots)
+ assert self.mc2.name in mock_chroots_names
+ assert self.mc3.name in mock_chroots_names
+ assert self.mc1.name not in mock_chroots_names
@TransactionDecorator('u2')
def test_update_deletes_multiple_chroots(self, f_users, f_coprs, f_copr_permissions, f_mock_chroots, f_db):
@@ -237,7 +237,7 @@ class TestCoprUpdate(CoprsTestCase):
self.c2.copr_chroots.append(cc)
r = self.test_client.post('/coprs/{0}/{1}/update/'.format(self.u2.name, self.c2.name),
- data = {'name': self.c2.name, self.mc1.chroot_name: 'y', 'id': self.c2.id},
+ data = {'name': self.c2.name, self.mc1.name: 'y', 'id': self.c2.id},
follow_redirects = True)
assert 'Project was updated successfully' in r.data
self.c2 = self.db.session.merge(self.c2)
10 years, 5 months
[copr] master: [tests] return exit code from manage.py test (96f1f78)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 96f1f78b838f05212c0ded922b7359f3d82d3ea0
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Mon Jan 20 16:33:19 2014 +0100
[tests] return exit code from manage.py test
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
coprs_frontend/manage.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/manage.py b/coprs_frontend/manage.py
index 01bcbf7..0b9cac0 100755
--- a/coprs_frontend/manage.py
+++ b/coprs_frontend/manage.py
@@ -19,7 +19,7 @@ class TestCommand(Command):
if not (('COPR_CONFIG' in os.environ) and os.environ['COPR_CONFIG']):
os.environ['COPR_CONFIG'] = '/etc/copr/copr_unit_test.conf'
os.environ['PYTHONPATH'] = '.'
- subprocess.call(['py.test'] + (test_args or []))
+ return subprocess.call(['py.test'] + (test_args or []))
option_list = (
Option('-a',
10 years, 5 months
[copr] master: [frontend] allow GET on repeat_build (4dd6734)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 4dd6734b80b530b28daf90c0d6989cf3e90f7ee0
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 13:45:08 2014 +0100
[frontend] allow GET on repeat_build
Drops TODO message, intersection of active chroots
is not what we want as we want to repeat build
with all active chroots currently assigned to this copr.
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_builds.py | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index d0e0763..c451f48 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -87,7 +87,7 @@ def copr_cancel_build(username, coprname, build_id):
return flask.redirect(flask.url_for('coprs_ns.copr_builds', username = username, coprname = coprname))
-(a)coprs_ns.route('/<username>/<coprname>/repeat_build/<int:build_id>/', methods = ['POST'])
+(a)coprs_ns.route('/<username>/<coprname>/repeat_build/<int:build_id>/', methods = ['GET', 'POST'])
@login_required
def copr_repeat_build(username, coprname, build_id):
build = builds_logic.BuildsLogic.get(build_id).first()
@@ -99,7 +99,6 @@ def copr_repeat_build(username, coprname, build_id):
if not copr:
return page_not_found('Copr {0}/{1} does not exist.'.format(username, coprname))
- # TODO: do intersection of chroots with currently active?
new_build = models.Build()
for a in ['pkgs', 'repos', 'memory_reqs', 'timeout']:
setattr(new_build, a, getattr(build, a))
10 years, 5 months
[copr] master: [api] fix validation error handling (9ac3824)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 9ac38248cdd9d7cc992f615d88ec51bf5d2de13a
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Thu Jan 23 12:59:29 2014 +0100
[api] fix validation error handling
Now it doesn't results in KeyError['name'] when
validation of initial_pkgs fails.
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
coprs_frontend/coprs/views/api_ns/api_general.py | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 0e931d0..114c58b 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -90,9 +90,11 @@ def api_new_copr(username):
db.session.rollback()
else:
- errormsg = ''
+ errormsg = 'Validation error\n'
if form.errors:
- errormsg = "\n".join(form.errors['name'])
+ for field, emsgs in form.errors.items():
+ errormsg += "- {0}: {1}\n".format(field, "\n".join(emsgs))
+
errormsg = errormsg.replace('"', "'")
output = {'output': 'notok', 'error': errormsg}
httpcode = 500
10 years, 5 months
[copr] master: [frontend] permission checking is done in BuildLogic.add (8337a8b)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 8337a8b07bcede75362296347f70cd5bd056a402
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Thu Jan 23 15:50:00 2014 +0100
[frontend] permission checking is done in BuildLogic.add
To achieve a bit of consistency.
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_builds.py | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index f3d7cf4..80bc904 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -50,15 +50,16 @@ def copr_new_build(username, coprname):
if not copr:
return page_not_found('Copr with name {0} does not exist.'.format(coprname))
- if form.validate_on_submit() and flask.g.user.can_build_in(copr):
+ if form.validate_on_submit():
try:
build = builds_logic.BuildsLogic.add(user=flask.g.user,
pkgs=form.pkgs.data.replace('\n', ' '),
- copr=copr) # we're checking authorization above for now
+ copr=copr)
if flask.g.user.proven:
build.memory_reqs = form.memory_reqs.data
build.timeout = form.timeout.data
- except ActionInProgressException as e:
+
+ except (ActionInProgressException, InsufficientRightsException) as e:
flask.flash(str(e))
db.session.rollback()
else:
10 years, 5 months
[copr] master: [frontend] remove BuildLogic.new, use BL.add only (6e82fc1)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 6e82fc194d5d72b898052fe814930cab129ed23f
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Thu Jan 23 15:29:09 2014 +0100
[frontend] remove BuildLogic.new, use BL.add only
- fixes permission checking when repeating builds
- fixes api calling nonexistent method
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 39 +++++++++++---------
coprs_frontend/coprs/views/api_ns/api_general.py | 15 +++++---
.../coprs/views/coprs_ns/coprs_builds.py | 31 ++++++++++------
3 files changed, 51 insertions(+), 34 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 682d7ce..7554845 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -58,28 +58,31 @@ class BuildsLogic(object):
return models.Build.query.filter(models.Build.id.in_(ids))
@classmethod
- def add(cls, user, pkgs, copr):
- coprs_logic.CoprsLogic.raise_if_unfinished_blocking_action(user, copr,
- 'Can\'t build while there is an operation in progress: {action}')
- users_logic.UsersLogic.raise_if_cant_build_in_copr(user, copr,
- 'You don\'t have permissions to build in this copr.')
+ def add(cls, user, pkgs, copr,
+ repos=None, memory_reqs=None, timeout=None):
+
+ coprs_logic.CoprsLogic.raise_if_unfinished_blocking_action(
+ user, copr,
+ 'Can\'t build while there is an operation in progress: {action}')
+ users_logic.UsersLogic.raise_if_cant_build_in_copr(
+ user, copr,
+ 'You don\'t have permissions to build in this copr.')
+
+ if not repos:
+ repos = copr.repos
+
build = models.Build(
+ user=user,
pkgs=pkgs,
copr=copr,
- repos=copr.repos,
- user=user,
+ repos=repos,
submitted_on=int(time.time()))
- cls.new(user, build, copr)
- return build
- @classmethod
- def new(cls, user, build, copr):
- if not build.submitted_on:
- build.submitted_on = int(time.time())
- if not build.user:
- build.user = user
- if not build.copr:
- build.copr = copr
+ if memory_reqs:
+ build.memory_reqs = memory_reqs
+
+ if timeout:
+ build.timeout = timeout
db.session.add(build)
@@ -92,6 +95,8 @@ class BuildsLogic(object):
db.session.add(buildchroot)
+ return build
+
@classmethod
def update_state_from_dict(cls, build, upd_dict):
if 'chroot' in upd_dict:
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 114c58b..666bf79 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -75,12 +75,13 @@ def api_new_copr(username):
infos.append('New project was successfully created.')
if form.initial_pkgs.data:
- builds_logic.BuildsLogic.add_build(
+ builds_logic.BuildsLogic.add(
+ user=flask.g.user,
pkgs=" ".join(form.initial_pkgs.data.split()),
- copr=copr,
- owner=flask.g.user)
+ copr=copr)
+
infos.append('Initial packages were successfully '
- 'submitted for building.')
+ 'submitted for building.')
output = {'output': 'ok', 'message': '\n'.join(infos)}
db.session.commit()
@@ -159,8 +160,10 @@ def copr_new_build(username, coprname):
else:
if form.validate_on_submit() and flask.g.user.can_build_in(copr):
# we're checking authorization above for now
- build = builds_logic.BuildsLogic.add(user=flask.g.user,
- pkgs=form.pkgs.data.replace('\n', ' '), copr=copr)
+ build = builds_logic.BuildsLogic.add(
+ user=flask.g.user,
+ pkgs=form.pkgs.data.replace('\n', ' '),
+ copr=copr)
if flask.g.user.proven:
build.memory_reqs = form.memory_reqs.data
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index c451f48..f3d7cf4 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -1,7 +1,6 @@
import flask
from coprs import db
-from coprs import exceptions
from coprs import forms
from coprs import helpers
from coprs import models
@@ -12,6 +11,8 @@ from coprs.logic import coprs_logic
from coprs.views.misc import login_required, page_not_found
from coprs.views.coprs_ns import coprs_ns
+from coprs.exceptions import ActionInProgressException, InsufficientRightsException
+
@coprs_ns.route('/<username>/<coprname>/builds/', defaults={'page': 1})
@coprs_ns.route('/<username>/<coprname>/builds/<int:page>/')
@@ -57,7 +58,7 @@ def copr_new_build(username, coprname):
if flask.g.user.proven:
build.memory_reqs = form.memory_reqs.data
build.timeout = form.timeout.data
- except exceptions.ActionInProgressException as e:
+ except ActionInProgressException as e:
flask.flash(str(e))
db.session.rollback()
else:
@@ -78,7 +79,7 @@ def copr_cancel_build(username, coprname, build_id):
return page_not_found('Build with id {0} does not exist.'.format(build_id))
try:
builds_logic.BuildsLogic.cancel_build(flask.g.user, build)
- except exceptions.InsufficientRightsException as e:
+ except InsufficientRightsException as e:
flask.flash(str(e))
else:
db.session.commit()
@@ -99,13 +100,21 @@ def copr_repeat_build(username, coprname, build_id):
if not copr:
return page_not_found('Copr {0}/{1} does not exist.'.format(username, coprname))
- new_build = models.Build()
- for a in ['pkgs', 'repos', 'memory_reqs', 'timeout']:
- setattr(new_build, a, getattr(build, a))
- builds_logic.BuildsLogic.new(flask.g.user, new_build, copr)
-
- db.session.commit()
- flask.flash('Build was resubmitted')
+ try:
+ builds_logic.BuildsLogic.add(
+ user=flask.g.user,
+ pkgs=build.pkgs,
+ copr=copr,
+ repos=build.repos,
+ memory_reqs=build.memory_reqs,
+ timeout=build.timeout)
+
+ except (ActionInProgressException, InsufficientRightsException) as e:
+ db.session.rollback()
+ flask.flash(str(e))
+ else:
+ db.session.commit()
+ flask.flash('Build was resubmitted')
return flask.redirect(flask.url_for('coprs_ns.copr_builds', username = username, coprname = coprname))
@@ -118,7 +127,7 @@ def copr_delete_build(username, coprname, build_id):
return page_not_found('Build with id {0} does not exist.'.format(build_id))
try:
builds_logic.BuildsLogic.delete_build(flask.g.user, build)
- except exceptions.InsufficientRightsException as e:
+ except InsufficientRightsException as e:
flask.flash(str(e))
else:
db.session.commit()
10 years, 5 months