[copr] master: Make sure copr_chroots are in DB during tests (d65b26c)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d65b26c7e3173dc29523a161a4d9e8f3909aa9a8
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Jan 23 16:16:20 2013 +0100
Make sure copr_chroots are in DB during tests
>---------------------------------------------------------------
coprs_frontend/tests/coprs_test_case.py | 1 +
.../tests/test_views/test_coprs_ns/test_general.py | 2 +-
2 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/tests/coprs_test_case.py b/coprs_frontend/tests/coprs_test_case.py
index c0d2838..6a9d675 100644
--- a/coprs_frontend/tests/coprs_test_case.py
+++ b/coprs_frontend/tests/coprs_test_case.py
@@ -75,6 +75,7 @@ class CoprsTestCase(object):
cc4 = models.CoprChroot()
cc4.mock_chroot = self.mc4
self.c3.copr_chroots.append(cc4)
+ self.db.session.add_all([cc1, cc2, cc3, cc4])
self.db.session.add_all([self.mc1, self.mc2, self.mc3, self.mc4])
self.db.session.commit()
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 16a39f2..2d96e84 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
@@ -241,7 +241,7 @@ class TestCoprUpdate(CoprsTestCase):
with c.session_transaction() as s:
s['openid'] = self.u1.openid_name
- self.db.session.add_all([self.u1, self.c1, self.mc2, self.mc3])
+ self.db.session.add_all([self.u1, self.c1, self.mc1, self.mc2, self.mc3])
r = c.post('/coprs/detail/{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},
follow_redirects = True)
11 years, 3 months
[copr] master: Fix objects not being deleted from collections of associated (0478e92)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 0478e924d5184e8b97f2b634f5563163464a52ad
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Jan 23 16:15:46 2013 +0100
Fix objects not being deleted from collections of associated
>---------------------------------------------------------------
coprs_frontend/coprs/logic/coprs_logic.py | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 0401a3b..c25bd72 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -159,3 +159,8 @@ class CoprsChrootLogic(object):
models.CoprChroot.query.filter(models.CoprChroot.copr_id==copr.id).\
filter(models.CoprChroot.mock_chroot_id==mock_chroot.id).\
delete()
+ # TODO: fails because of
+ # http://docs.sqlalchemy.org/en/rel_0_7/orm/session.html#deleting-from-coll...
+ # figure out how to overcome it nicely without having to commit the session
+ # (deleting the copr_chroot object from copr.copr_chroots doesn't seem to help)
+ db.session.commit()
11 years, 3 months
[copr] master: Fix retrieving coprs in a corner case where they don't have any chroots (eaa91d0)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit eaa91d0d1ebd62d9a0d7bd712eb04fa342711789
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Jan 23 15:34:57 2013 +0100
Fix retrieving coprs in a corner case where they don't have any chroots
>---------------------------------------------------------------
coprs_frontend/coprs/logic/coprs_logic.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 4f93d35..0401a3b 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -56,7 +56,7 @@ class CoprsLogic(object):
join(aliased_user, models.CoprPermission.user).\
filter(aliased_user.openid_name == models.User.openidize_name(username))
if with_mock_chroots:
- query = query.join(*models.Copr.mock_chroots.attr).\
+ query = query.outerjoin(*models.Copr.mock_chroots.attr).\
options(db.contains_eager(*models.Copr.mock_chroots.attr))
return query
11 years, 3 months
[copr] master: Refactor adding build and adding copr into template. Based on patch from Pingou - thanks. (80c7b9c)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 80c7b9c446a410636d1a9438b21a6f1f15b791a9
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Jan 23 15:33:09 2013 +0100
Refactor adding build and adding copr into template. Based on patch from Pingou - thanks.
>---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 15 +++++++++
coprs_frontend/coprs/logic/coprs_logic.py | 16 ++++++++++
.../coprs/views/coprs_ns/coprs_general.py | 31 +++++++++-----------
3 files changed, 45 insertions(+), 17 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 465db18..1fde575 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -55,6 +55,21 @@ class BuildsLogic(object):
return models.Build.query.filter(models.Build.id.in_(ids))
@classmethod
+ def add_build(cls, user, pkgs, copr):
+ build = models.Build(
+ pkgs=pkgs,
+ copr=copr,
+ repos=copr.repos,
+ chroots=' '.join(map(
+ lambda x: x.chroot_name, copr.mock_chroots)
+ ),
+ user=user,
+ submitted_on=int(time.time()))
+ # no need to check for authorization here
+ cls.new(user, build, copr, check_authorized=False)
+ return build
+
+ @classmethod
def new(cls, user, build, copr, check_authorized = True):
if check_authorized:
if not user.can_build_in(copr):
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 917bf6e..4f93d35 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -1,3 +1,5 @@
+import time
+
from coprs import db
from coprs import exceptions
from coprs import helpers
@@ -23,6 +25,20 @@ class CoprsLogic(object):
return query
@classmethod
+ def add_copr(cls, user, name, repos, selected_chroots, description, instructions):
+ copr = models.Copr(name=name,
+ repos=repos,
+ owner=user,
+ description=description,
+ instructions=instructions,
+ created_on=int(time.time()))
+ CoprsLogic.new(user, copr,
+ check_for_duplicates=False) # form validation checks for duplicates
+ CoprsChrootLogic.new_from_names(user, copr,
+ selected_chroots)
+ return copr
+
+ @classmethod
def get_multiple(cls, user, **kwargs):
user_relation = kwargs.get('user_relation', None)
username = kwargs.get('username', None)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 80a8be2..15ac156 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -59,30 +59,27 @@ def copr_add():
@coprs_ns.route('/new/', methods=['POST'])
@login_required
def copr_new():
+ """ Receive information from the user on how to create its new copr
+ and create it accordingly.
+ """
form = forms.CoprFormFactory.create_form_cls()()
if form.validate_on_submit():
- copr = models.Copr(name = form.name.data,
- description = form.description.data,
- instructions = form.instructions.data,
- repos = form.repos.data.replace('\n', ' '),
- owner = flask.g.user,
- created_on = int(time.time()))
- coprs_logic.CoprsLogic.new(flask.g.user, copr, check_for_duplicates = False) # form validation checks for duplicates
- coprs_logic.CoprsChrootLogic.new_from_names(flask.g.user, copr, form.selected_chroots)
+ copr = coprs_logic.CoprsLogic.add_copr(flask.g.user,
+ name=form.name.data,
+ repos=form.repos.data.replace('\n', ' '),
+ selected_chroots=form.selected_chroots,
+ description=form.description.data,
+ instructions=form.instructions.data)
db.session.commit()
flask.flash('New copr was successfully created.')
if form.initial_pkgs.data:
- build = models.Build(pkgs = form.initial_pkgs.data.replace('\n', ' '),
- copr = copr,
- repos = copr.repos,
- chroots = ' '.join(map(lambda x: x.chroot_name, copr.mock_chroots)),
- user = flask.g.user,
- submitted_on = int(time.time()))
- # no need to check for authorization here
- builds_logic.BuildsLogic.new(flask.g.user, build, copr, check_authorized = False)
+ builds_logic.BuildsLogic.add_build(flask.g.user,
+ pkgs=form.initial_pkgs.data.replace('\n', ' '),
+ copr=copr)
db.session.commit()
- flask.flash('Initial packages were successfully submitted for building.')
+ flask.flash('Initial packages were successfully submitted '
+ 'for building.')
return flask.redirect(flask.url_for('coprs_ns.copr_detail', username=flask.g.user.name, coprname=copr.name))
else:
11 years, 3 months
[copr] master: Add contribution guidelines that specify some basics about *Logic objects (1d90502)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 1d9050244a31e7afea4de872c1bf361153fcd519
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Jan 23 13:48:49 2013 +0100
Add contribution guidelines that specify some basics about *Logic objects
>---------------------------------------------------------------
coprs_frontend/CONTRIBUTION_GUIDELINES | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/coprs_frontend/CONTRIBUTION_GUIDELINES b/coprs_frontend/CONTRIBUTION_GUIDELINES
new file mode 100644
index 0000000..98f24e3
--- /dev/null
+++ b/coprs_frontend/CONTRIBUTION_GUIDELINES
@@ -0,0 +1,18 @@
+This file contains some "should" rules, that are good to follow.
+
+- coprs.logic
+-- The methods of *Logic objects should generally be @classmethod.
+-- The methods of *Logic objects should accept "user" as a second argument
+ (after the "cls" argument). This argument should contain object of user
+ who is performing the action.
+-- The methods of *Logic objects shouldn't call db.session.commit(). This
+ should be called in views that use the methods.
+-- The usual names of methods are (each of the methods can perform certain
+ checks, e.g. authorization, correct parameters, ...):
+--- "add" for creating objects and adding them to session
+--- "new" for just adding objects to session
+--- "get" for getting a query object for a single model object
+--- "get_multiple" for getting a query object for multiple model objects
+--- "edit" for editing objects and adding them to session
+--- "update" for just adding altered objects to session
+--- "delete" for deleting an object
11 years, 3 months
[PATCH 1/3] Start moving code from the controller to the logic
by Pierre-Yves Chibon
There are several advantages in doing that :
- we can reuse it in the API
- less coupling to the framework
- easier unit-testing for the logic
---
This is just moving some code around, following the design of Bohuslav (generic
code goes into the logic package).
coprs_frontend/coprs/logic/builds_logic.py | 16 +++++++++++
coprs_frontend/coprs/logic/coprs_logic.py | 15 ++++++++++
.../coprs/views/coprs_ns/coprs_general.py | 32 ++++++++++------------
3 files changed, 46 insertions(+), 17 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 41575ee..519e5bc 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -53,6 +53,22 @@ class BuildsLogic(object):
return models.Build.query.filter(models.Build.id.in_(ids))
@classmethod
+ def add_build(cls, pkgs, copr, owner):
+ build = models.Build(
+ pkgs = pkgs,
+ copr = copr,
+ repos = copr.repos,
+ chroots = ' '.join(map(
+ lambda x: x.chroot_name, copr.mock_chroots)
+ ),
+ user = owner,
+ submitted_on = int(time.time()))
+ # no need to check for authorization here
+ builds_logic.BuildsLogic.new(owner, build, copr,
+ check_authorized = False)
+ db.session.commit()
+
+ @classmethod
def new(cls, user, build, copr, check_authorized = True):
if check_authorized:
if not user.can_build_in(copr):
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 45ea492..c39d566 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -1,3 +1,5 @@
+import time
+
from coprs import db
from coprs import exceptions
from coprs import helpers
@@ -23,6 +25,19 @@ class CoprsLogic(object):
return query
@classmethod
+ def add_coprs(cls, name, repos, owner, selected_chroots):
+ copr = models.Copr(name = name,
+ repos = repos,
+ owner = owner,
+ created_on = int(time.time()))
+ CoprsLogic.new(owner, copr,
+ check_for_duplicates = False) # form validation checks for duplicates
+ CoprChrootLogic.new_from_names(owner, copr,
+ selected_chroots)
+ db.session.commit()
+ return copr
+
+ @classmethod
def get_multiple(cls, user, **kwargs):
user_relation = kwargs.get('user_relation', None)
username = kwargs.get('username', None)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 027845b..6fc53dc 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -59,33 +59,31 @@ def copr_add():
@coprs_ns.route('/new/', methods=['POST'])
@login_required
def copr_new():
+ """ Receive information from the user on how to create its new copr
+ and create it accordingly.
+ """
form = forms.CoprFormFactory.create_form_cls()()
if form.validate_on_submit():
- copr = models.Copr(name = form.name.data,
- repos = form.repos.data.replace('\n', ' '),
- owner = flask.g.user,
- created_on = int(time.time()))
- coprs_logic.CoprsLogic.new(flask.g.user, copr, check_for_duplicates = False) # form validation checks for duplicates
- coprs_logic.CoprChrootLogic.new_from_names(flask.g.user, copr, form.selected_chroots)
- db.session.commit()
+ copr = CoprsLogic.add_coprs(cls,
+ name=form.name.data,
+ repos=form.repos.data.replace('\n', ' '),
+ owner=flask.g.user,
+ selected_chroots=form.selected_chroots)
flask.flash('New copr was successfully created.')
if form.initial_pkgs.data:
- build = models.Build(pkgs = form.initial_pkgs.data.replace('\n', ' '),
- copr = copr,
- repos = copr.repos,
- chroots = ' '.join(map(lambda x: x.chroot_name, copr.mock_chroots)),
- user = flask.g.user,
- submitted_on = int(time.time()))
- # no need to check for authorization here
- builds_logic.BuildsLogic.new(flask.g.user, build, copr, check_authorized = False)
- db.session.commit()
- flask.flash('Initial packages were successfully submitted for building.')
+ BuildsLogic.add_build(
+ pkgs=form.initial_pkgs.data.replace('\n', ' '),
+ copr=copr,
+ owner=flask.g.user)
+ flask.flash('Initial packages were successfully submitted '
+ 'for building.')
return flask.redirect(flask.url_for('coprs_ns.coprs_show'))
else:
return flask.render_template('coprs/add.html', form = form)
+
@coprs_ns.route('/detail/<username>/<coprname>/')
def copr_detail(username, coprname):
query = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname)
--
1.8.1
11 years, 3 months
[copr] master: Update requirements (11d97ca)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 11d97caf72a73bb125978c94191d32a792adce1c
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Wed Jan 23 13:19:39 2013 +0100
Update requirements
>---------------------------------------------------------------
requirements.txt | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/requirements.txt b/requirements.txt
index 3b7b12b..d3fb7dd 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,3 +5,5 @@ flask-sqlalchemy
flask-openid
flask-wtf
alembic
+pytest
+flask-script
11 years, 3 months
broken adding builds
by Seth Vidal
I git pull'd the latest commits to the front-end instance. While the
output looks very nice it doesn't seem to let me submit new builds.
Just wanted to give folks a heads up that I broke it.
-sv
11 years, 3 months
Licensing
by Bohuslav Kabrda
Hi all,
as we have previously discussed with Seth, I included the GPLv2+ license in the copr repository and stated that the whole project is licensed under this license. It seems that we will be getting some contributors, so I just wanted to make this clear and inform the mailing list.
--
Regards,
Bohuslav "Slavek" Kabrda.
11 years, 3 months
[copr] master: Forgotten formatting string (67166e8)
by bkabrda@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 67166e859053b0721713d5f4194a8e2d62da6435
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Tue Jan 22 15:28:07 2013 +0100
Forgotten formatting string
>---------------------------------------------------------------
coprs_frontend/coprs/filters.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/filters.py b/coprs_frontend/coprs/filters.py
index b0d689c..98d97dc 100644
--- a/coprs_frontend/coprs/filters.py
+++ b/coprs_frontend/coprs/filters.py
@@ -19,5 +19,5 @@ def os_name_short(os_name, os_version):
if os_name == 'fedora':
return 'fc.{0}'.format(os_version)
elif os_name == 'epel':
- return 'el'.format(os_version)
+ return 'el{0}'.format(os_version)
return os_name
11 years, 3 months