[copr] bkabrda-workspace: The update_builds url is now returning information about builds that weren't found while updating (if any) (b2e5368)
by bkabrda@fedorahosted.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit b2e5368aa9a9036711948ce290fbf94d6ac43cdc
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 16:13:35 2012 +0100
The update_builds url is now returning information about builds that weren't found while updating (if any)
>---------------------------------------------------------------
.../coprs/views/backend_ns/backend_general.py | 4 +++-
.../test_views/test_backend_ns/test_general.py | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/views/backend_ns/backend_general.py b/coprs_frontend/coprs/views/backend_ns/backend_general.py
index ec56972..1755e79 100644
--- a/coprs_frontend/coprs/views/backend_ns/backend_general.py
+++ b/coprs_frontend/coprs/views/backend_ns/backend_general.py
@@ -32,9 +32,11 @@ def update_builds():
for build in builds_logic.BuildsLogic.get_by_ids(None, build_ids).all():
existing[build.id] = build
+ non_existing_ids = list(set(build_ids) - set(existing.keys()))
+
for build in flask.request.json['builds']: # actually update existing builds
builds_logic.BuildsLogic.update_state_from_dict(None, existing[build['id']], build)
db.session.commit()
- return flask.json.dumps({'updated_builds': len(existing)})
+ return flask.json.dumps({'updated_builds_ids': list(existing.keys()), 'non_existing_builds_ids': non_existing_ids})
diff --git a/coprs_frontend/tests/test_views/test_backend_ns/test_general.py b/coprs_frontend/tests/test_views/test_backend_ns/test_general.py
index 3a5d49e..5f3eaa3 100644
--- a/coprs_frontend/tests/test_views/test_backend_ns/test_general.py
+++ b/coprs_frontend/tests/test_views/test_backend_ns/test_general.py
@@ -36,4 +36,5 @@ class TestUpdateBuilds(CoprsTestCase):
content_type='application/json',
headers = self.auth_header,
data = data)
- assert r.data == '{"updated_builds": 1}'
+ assert json.loads(r.data)["updated_builds_ids"] == [1]
+ assert json.loads(r.data)["non_existing_builds_ids"] == []
11 years, 4 months
[copr] bkabrda-workspace: Update TODO, something was done, more requirements are comming (f31b8f8)
by bkabrda@fedorahosted.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit f31b8f8d54de887e0921102b27bef195596d9ccc
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 15:55:45 2012 +0100
Update TODO, something was done, more requirements are comming
>---------------------------------------------------------------
coprs_frontend/TODO | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/coprs_frontend/TODO b/coprs_frontend/TODO
index 1cf014d..0f9a3a2 100644
--- a/coprs_frontend/TODO
+++ b/coprs_frontend/TODO
@@ -1,8 +1,9 @@
-- Unit tests
- Query optimization
-- Build details
-- Figure out some sane production settings
- More form validations?
- It would be nice to be able to change allowed release arches dynamically by JS while creating/editing coprs
- Convert all remaining forms into wtforms (login, etc)
-- Backend API :)
+- Admin area (making users proven and admins)
+- Personal area (changing email)
+- Submitting first packages on copr creation
+- Sending emails with important info?
+- Logging
11 years, 4 months
[copr] bkabrda-workspace: Say explicitly that there are no permissions (0b25123)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit 0b251230a1bbc763abb9ffc4f27a619753789797
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 11:25:10 2012 +0100
Say explicitly that there are no permissions
>---------------------------------------------------------------
.../coprs/templates/coprs/_permissions_table.html | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/templates/coprs/_permissions_table.html b/coprs_frontend/coprs/templates/coprs/_permissions_table.html
index 78ff2ff..fc1ad64 100644
--- a/coprs_frontend/coprs/templates/coprs/_permissions_table.html
+++ b/coprs_frontend/coprs/templates/coprs/_permissions_table.html
@@ -23,5 +23,7 @@
<input type=submit value=Submit>
</form>
{% endif %}
+ {% else %}
+ No permissions for other users for this Copr.
{% endif %}
{% endmacro %}
11 years, 4 months
[copr] bkabrda-workspace: Show packages belonging to builds (cea72f9)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit cea72f92017daf5e2cfd49dfac3e7ac98f15e82a
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 11:20:15 2012 +0100
Show packages belonging to builds
>---------------------------------------------------------------
coprs_frontend/coprs/static/style.css | 5 +++++
.../coprs/templates/coprs/_builds_table.html | 10 ++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/static/style.css b/coprs_frontend/coprs/static/style.css
index 7e31251..9f21dbe 100644
--- a/coprs_frontend/coprs/static/style.css
+++ b/coprs_frontend/coprs/static/style.css
@@ -8,6 +8,11 @@ h1, h2, h3, h4, h5 {
color: #3B6EB4;
}
+h4 {
+ margin-top: 0.2em;
+ margin-bottom: 0.2em;
+}
+
a {
color: #3B6EB4;
}
diff --git a/coprs_frontend/coprs/templates/coprs/_builds_table.html b/coprs_frontend/coprs/templates/coprs/_builds_table.html
index 7d7c077..47beb41 100644
--- a/coprs_frontend/coprs/templates/coprs/_builds_table.html
+++ b/coprs_frontend/coprs/templates/coprs/_builds_table.html
@@ -22,6 +22,16 @@
<td>{{ build.results }}</td>
<td>{{ copr_build_cancel_form(build) }}</td>
</tr>
+ <tr>
+ <td colspan=7>
+ <h4>Package URLs:</h4>
+ <ul class=packages-list>
+ {% for pkg in build.pkgs.split() %}
+ <li>{{ pkg }}</li>
+ {% endfor %}
+ </ul>
+ </td>
+ </tr>
{% endfor %}
</table>
{% else %}
11 years, 4 months
[copr] bkabrda-workspace: Some initial backend api tests (0247a86)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit 0247a860f67655f45d85f378861bbf2a4d9086db
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 11:17:29 2012 +0100
Some initial backend api tests
>---------------------------------------------------------------
coprs_frontend/tests/coprs_test_case.py | 10 ++++-
.../test_views/test_backend_ns/test_general.py | 39 ++++++++++++++++++++
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/tests/coprs_test_case.py b/coprs_frontend/tests/coprs_test_case.py
index 732200e..9907051 100644
--- a/coprs_frontend/tests/coprs_test_case.py
+++ b/coprs_frontend/tests/coprs_test_case.py
@@ -1,3 +1,4 @@
+import base64
import os
os.environ['COPRS_ENVIRON_UNITTEST'] = '1'
@@ -16,6 +17,7 @@ class CoprsTestCase(object):
self.db = coprs.db
self.models = models
self.helpers = helpers
+ self.backend_passwd = coprs.app.config['BACKEND_PASSWORD']
# create datadir if it doesn't exist
datadir = os.path.commonprefix([self.app.config['DATABASE'], self.app.config['OPENID_STORE']])
if not os.path.exists(datadir):
@@ -28,6 +30,10 @@ class CoprsTestCase(object):
for tbl in reversed(self.db.metadata.sorted_tables):
self.db.engine.execute(tbl.delete())
+ @property
+ def auth_header(self):
+ return {'Authorization': 'Basic ' + base64.b64encode('doesntmatter:{0}'.format(self.backend_passwd))}
+
@pytest.fixture
def f_users(self):
self.u1 = models.User(openid_name = 'http://user1.id.fedoraproject.org/', proven = False, mail = 'user1(a)foo.bar')
@@ -48,8 +54,8 @@ class CoprsTestCase(object):
@pytest.fixture
def f_builds(self):
- self.b1 = models.Build(copr = self.c1, user = self.u1, chroots = self.c1.chroots, submitted_on = 50)
- self.b2 = models.Build(copr = self.c1, user = self.u2, chroots = 'fedora-17-x86_64', submitted_on = 10)
+ self.b1 = models.Build(copr = self.c1, user = self.u1, chroots = self.c1.chroots, submitted_on = 50, started_on = 100)
+ self.b2 = models.Build(copr = self.c1, user = self.u2, chroots = 'fedora-17-x86_64', submitted_on = 10, ended_on = 150)
self.b3 = models.Build(copr = self.c2, user = self.u2, chroots = self.c2.chroots, submitted_on = 10)
self.b4 = models.Build(copr = self.c2, user = self.u2, chroots = self.c2.chroots, submitted_on = 100)
diff --git a/coprs_frontend/tests/test_views/test_backend_ns/test_general.py b/coprs_frontend/tests/test_views/test_backend_ns/test_general.py
new file mode 100644
index 0000000..3a5d49e
--- /dev/null
+++ b/coprs_frontend/tests/test_views/test_backend_ns/test_general.py
@@ -0,0 +1,39 @@
+import json
+
+import flask
+
+from tests.coprs_test_case import CoprsTestCase
+
+class TestWaitingBuilds(CoprsTestCase):
+ def test_no_waiting_builds(self):
+ assert '"builds": []' in self.tc.get('/backend/waiting_builds/').data
+
+ def test_waiting_build_only_lists_not_started_or_ended(self, f_users, f_coprs, f_builds):
+ r = self.tc.get('/backend/waiting_builds/')
+ assert len(json.loads(r.data)['builds']) == 2
+
+class TestUpdateBuilds(CoprsTestCase):
+ def test_updating_requires_password(self, f_users, f_coprs, f_builds):
+ r = self.tc.post('/backend/update_builds/',
+ content_type = 'application/json',
+ data = '')
+ assert 'You have to provide the correct password' in r.data
+
+ def test_update_build_started(self, f_users, f_coprs, f_builds):
+ data = """
+{
+ "builds":[
+ {
+ "id": 1,
+ "copr_id": 2,
+ "results": "http://server/results/$ownername/$coprname/",
+ "started_on": 1234
+ }
+ ]
+}
+ """
+ r = self.tc.post('/backend/update_builds/',
+ content_type='application/json',
+ headers = self.auth_header,
+ data = data)
+ assert r.data == '{"updated_builds": 1}'
11 years, 4 months
[copr] bkabrda-workspace: Don't render these attributes for backend (acbfd3d)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit acbfd3d2314953334116d884fa43972460c2ccf4
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 11:16:20 2012 +0100
Don't render these attributes for backend
>---------------------------------------------------------------
.../coprs/views/backend_ns/backend_general.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/views/backend_ns/backend_general.py b/coprs_frontend/coprs/views/backend_ns/backend_general.py
index 8765f0d..ec56972 100644
--- a/coprs_frontend/coprs/views/backend_ns/backend_general.py
+++ b/coprs_frontend/coprs/views/backend_ns/backend_general.py
@@ -13,7 +13,7 @@ def waiting_builds():
query = builds_logic.BuildsLogic.get_waiting_builds(None)
builds = query[0:10]
- return flask.jsonify({'builds': [build.to_dict(options = {'copr': {'owner': {'__columns_except__': ['openid_name', 'proven'] },
+ return flask.jsonify({'builds': [build.to_dict(options = {'copr': {'owner': {'__columns_except__': ['openid_name', 'proven', 'admin', 'mail'] },
'__columns_except__': ['chroots', 'repos'],
'__included_ids__': False},
'__included_ids__': False}) for build in builds]})
11 years, 4 months
[copr] bkabrda-workspace: Build is waiting if it didn't start AND didn't end (7825ad2)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit 7825ad28315207d97d65c95cd92813a8c9d5fc8f
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Nov 28 11:15:35 2012 +0100
Build is waiting if it didn't start AND didn't end
>---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 4c87c0a..41575ee 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -35,12 +35,15 @@ class BuildsLogic(object):
@classmethod
def get_waiting_builds(cls, user):
+ # return builds that aren't both started and finished (if build start submission
+ # fails, we still want to mark the build as non-waiting, if it ended)
# this has very different goal then get_multiple, so implement it alone
query = models.Build.query.join(models.Build.copr).\
join(models.User).\
options(db.contains_eager(models.Build.copr)).\
options(db.contains_eager('copr.owner')).\
filter(models.Build.started_on == None).\
+ filter(models.Build.ended_on == None).\
filter(models.Build.canceled != True).\
order_by(models.Build.submitted_on.asc())
return query
11 years, 4 months
[copr] bkabrda-workspace: More pulling into logic, also removing permissions now moves them to 'No Action' instead of 'Requested' state (f4ce8a0)
by bkabrda@fedorahosted.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit f4ce8a0e8732bc7821d069fe5936fbbe18311b38
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Tue Nov 27 14:12:51 2012 +0100
More pulling into logic, also removing permissions now moves them to 'No Action' instead of 'Requested' state
>---------------------------------------------------------------
coprs_frontend/coprs/logic/coprs_logic.py | 22 +++++++++++++++++++-
.../coprs/views/coprs_ns/coprs_general.py | 22 +++----------------
.../tests/test_views/test_coprs_ns/test_general.py | 2 +-
3 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 2ec3184..08bf3e7 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -83,6 +83,27 @@ class CoprsPermissionLogic(object):
db.session.add(copr_permission)
@classmethod
+ def update_permissions(cls, user, copr, copr_permission, new_builder, new_admin):
+ copr_builder = copr_permission.copr_builder
+ copr_admin = copr_permission.copr_admin
+ # if the permission is granted, use Approved
+ # otherwise if it was Approved and it is ungranted, use No Action,
+ # else use original value
+ if new_builder:
+ copr_builder = helpers.PermissionEnum.num('Approved')
+ elif copr_builder == helpers.PermissionEnum.num('Approved'):
+ copr_builder = helpers.PermissionEnum.num('No Action')
+ if new_admin:
+ copr_admin = helpers.PermissionEnum.num('Approved')
+ elif copr_admin == helpers.PermissionEnum.num('Approved'):
+ copr_admin = helpers.PermissionEnum.num('No Action')
+
+ models.CoprPermission.query.filter(models.CoprPermission.copr_id == copr.id).\
+ filter(models.CoprPermission.user_id == copr_permission.user_id).\
+ update({'copr_builder': copr_builder,
+ 'copr_admin': copr_admin})
+
+ @classmethod
def update_permissions_by_applier(cls, user, copr, copr_permission, new_builder, new_admin):
approved_num = helpers.PermissionEnum.num('Approved')
if copr_permission:
@@ -102,7 +123,6 @@ class CoprsPermissionLogic(object):
perm = models.CoprPermission(user = user, copr = copr, copr_builder = new_builder, copr_admin = new_admin)
cls.new(user, perm)
-
@classmethod
def delete(cls, user, copr_permission):
db.session.delete(copr_permission)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 36c2b39..08dc164 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -179,24 +179,10 @@ def copr_update_permissions(username, coprname):
if permissions_form.validate_on_submit():
# we don't change owner (yet)
for perm in permissions:
- copr_builder = perm.copr_builder
- copr_admin = perm.copr_admin
- # if the permission is granted, use Approved
- # otherwise if it was Approved and it is ungranted, use Request,
- # else use original value
- if permissions_form['copr_builder_{0}'.format(perm.user_id)].data:
- copr_builder = helpers.PermissionEnum.num('Approved')
- elif copr_builder == helpers.PermissionEnum.num('Approved'):
- copr_builder = helpers.PermissionEnum.num('Request')
- if permissions_form['copr_admin_{0}'.format(perm.user_id)].data:
- copr_admin = helpers.PermissionEnum.num('Approved')
- elif copr_admin == helpers.PermissionEnum.num('Approved'):
- copr_admin = helpers.PermissionEnum.num('Request')
-
- models.CoprPermission.query.filter(models.CoprPermission.copr_id == copr.id).\
- filter(models.CoprPermission.user_id == perm.user_id).\
- update({'copr_builder': copr_builder,
- 'copr_admin': copr_admin})
+ new_builder = permissions_form['copr_builder_{0}'.format(perm.user_id)].data
+ new_admin = permissions_form['copr_admin_{0}'.format(perm.user_id)].data
+ coprs_logic.CoprsPermissionLogic.update_permissions(flask.g.user, copr, perm, new_builder, new_admin)
+
db.session.commit()
flask.flash('Copr permissions were updated successfully.')
return flask.redirect(flask.url_for('coprs_ns.copr_detail', username = copr.owner.name, coprname = copr.name))
diff --git a/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py b/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
index e2565b1..f57efe9 100644
--- a/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
+++ b/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
@@ -233,7 +233,7 @@ class TestCoprUpdatePermissions(CoprsTestCase):
filter(self.models.CoprPermission.user_id == self.u1.id).\
first()
assert u1_c3_perms.copr_builder == self.helpers.PermissionEnum.num('Approved')
- assert u1_c3_perms.copr_admin == self.helpers.PermissionEnum.num('Request')
+ assert u1_c3_perms.copr_admin == self.helpers.PermissionEnum.num('No Action')
u3_c3_perms = self.models.CoprPermission.query.filter(self.models.CoprPermission.copr_id == self.c3.id).\
filter(self.models.CoprPermission.user_id == self.u3.id).\
11 years, 4 months
[copr] bkabrda-workspace: Add test that makes sure that admin can update copr attributes (4820c7c)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit 4820c7c0007f26c4a7eb5bf561103a2543ce9625
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Tue Nov 27 14:03:31 2012 +0100
Add test that makes sure that admin can update copr attributes
>---------------------------------------------------------------
.../tests/test_views/test_coprs_ns/test_general.py | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py b/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
index a30731e..e2565b1 100644
--- a/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
+++ b/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
@@ -174,6 +174,18 @@ class TestCoprUpdate(CoprsTestCase):
follow_redirects = True)
assert 'Copr was updated successfully' in r.data
+ def test_copr_admin_can_update(self, f_users, f_coprs, f_copr_permissions):
+ with self.tc as c:
+ with c.session_transaction() as s:
+ s['openid'] = self.u1.openid_name
+
+ self.db.session.add_all([self.u2, self.c3])
+ r = c.post('/coprs/detail/{0}/{1}/update/'.format(self.u2.name, self.c3.name),
+ data = {'name': self.c3.name, 'release': self.c3.release, 'arches': self.c3.arches, 'id': self.c3.id},
+ follow_redirects = True)
+ assert 'Copr was updated successfully' in r.data
+
+
class TestCoprApplyForPermissions(CoprsTestCase):
def test_apply(self, f_users, f_coprs):
with self.tc as c:
11 years, 4 months
[copr] bkabrda-workspace: Change the messages to also contain copr admins (966c2fe)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
>---------------------------------------------------------------
commit 966c2fe900941262644e29fe795b838982558c46
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Tue Nov 27 14:00:50 2012 +0100
Change the messages to also contain copr admins
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_general.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index a32b4e5..36c2b39 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -122,7 +122,7 @@ def copr_update(username, coprname):
copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
# only owner can update a copr
if not flask.g.user.can_edit(copr):
- flask.flash('Only owners may update their Coprs.')
+ flask.flash('Only owners and admins may update their Coprs.')
return flask.redirect(flask.url_for('coprs_ns.copr_detail', username = copr.owner.name, coprname = form.name.data))
if form.validate_on_submit():
@@ -173,7 +173,7 @@ def copr_update_permissions(username, coprname):
# only owner can update copr permissions
if not flask.g.user.can_edit(copr):
- flask.flash('Only owners may update their Coprs permissions.')
+ flask.flash('Only owners and admins may update their Coprs permissions.')
return flask.redirect(flask.url_for('coprs_ns.copr_detail', username = copr.owner.name, coprname = copr.name))
if permissions_form.validate_on_submit():
11 years, 4 months